如何建立呼叫潜在客户的推荐模型
How to build recommendation model for calling prospects
我的目标是根据一天中的时间和之前的历史记录,以更高的呼叫成功率更好地定位潜在客户。
我创建了一个 "Prodprobability" 列,显示 属性ID 在那个时间接听 phone 的概率,以获取呼叫历史记录。我不想仅仅从任何呼叫中省略 属性 ID 233303.13,而是想将它们重新定位到第 13 小时或第 16 小时(示例数据未显示,但在这些时间接听的概率分别为 100% 和 25%) .
因此,根据一天中的小时数以及该潜在客户在该小时内是否选择 phone 的历史记录,我想在他们的时间内重新定位每个潜在客户最有可能接听。
sample data
编辑:我想我需要一个公式来执行此操作:如果 "S425=0",我想搜索 "A425" 在 S 列中概率最高的位置,以及 return "PropertyID" 的时间和概率。希望这是有道理的。
编辑::sample date returns this
这里的问题是,您是否对创建 'model' 或适合您的自动化工作死心塌地?
我建议按每小时接听电话的概率对数据框进行排序(这样您就可以先给出更可能的潜在客户),然后根据当天的电话数量进一步对它们进行排序。
大致如下:
require(dplyr)
todaysCall = df %>%
dplyr::group_by(propertyID) %>%
dplyr::summarise(noOfCalls = n())
hourlyCalls = df %>%
dplyr::filter(hour == format(Sys.time(),"%H")) %>%
dplyr::left_join(todaysCall) %>%
dplyr::arrange(desc(Prodprobability),noOfCalls)
从本质上讲,获取拾取概率是模型的全部内容,您似乎已经掌握了该信息。
备选方案
获取每个 propertyID 的前 5 个调用次数
top5Times = df %>%
dplyr::filter(Prodprobability != 0) %>%
dplyr::group_by(propertyID) %>%
dplyr::arrange(desc(Prodprobability)) %>%
dplyr::slice(1:5L) %>%
dplyr::ungroup()
为概率为零的案例获取备用呼叫时间:
zeroProb = df %>%
dplyr::filter(Prodprobability == 0)
alternateTimes = df %>%
dplyr::filter(propertyID %in% zeroProb$propertyID) %>%
dplyr::filter(Prodprobability != 0) %>%
dplyr::arrange(propertyID,desc(Prodprobability))
给定时间零概率案例的最佳通话时间:
#Identifies the zero prob cases; can be by hour or at a particular instant
zeroProb = df %>%
dplyr::filter(Prodprobability == 0)
#Gets the highest calling probability and corresponding closest hour if probability is same for more than one timeslot
bestTimeForZero = df %>%
dplyr::filter(propertyID %in% zeroProb$propertyID) %>%
dplyr::filter(Prodprobability != 0) %>%
dplyr::group_by(propertyID) %>%
dplyr::arrange(desc(Prodprobability),hour) %>%
dplyr::slice(1L) %>%
dplyr::ungroup()
根据原始 df 返回记录数:
zeroProb = df %>%
dplyr::filter(Prodprobability == 0) %>%
dplyr::group_by(propertyID) %>%
dplyr::summarise(total = n())
bestTimesList = lapply(1:nrow(zeroProb),function(i){
limit = zeroProb$total[i]
bestTime = df %>%
dplyr::filter(propertyID == zeroProb$propertyID[i]) %>%
dplyr::arrange(desc(Prodprobability)) %>%
dplyr::slice(1:limit)
return(bestTime)
})
bestTimeDf = bind_rows(bestTimesList)
注意:可以组合过滤语句;我将它们分开编写以突出显示每个步骤的作用。
我的目标是根据一天中的时间和之前的历史记录,以更高的呼叫成功率更好地定位潜在客户。
我创建了一个 "Prodprobability" 列,显示 属性ID 在那个时间接听 phone 的概率,以获取呼叫历史记录。我不想仅仅从任何呼叫中省略 属性 ID 233303.13,而是想将它们重新定位到第 13 小时或第 16 小时(示例数据未显示,但在这些时间接听的概率分别为 100% 和 25%) .
因此,根据一天中的小时数以及该潜在客户在该小时内是否选择 phone 的历史记录,我想在他们的时间内重新定位每个潜在客户最有可能接听。
sample data
编辑:我想我需要一个公式来执行此操作:如果 "S425=0",我想搜索 "A425" 在 S 列中概率最高的位置,以及 return "PropertyID" 的时间和概率。希望这是有道理的。
编辑::sample date returns this
这里的问题是,您是否对创建 'model' 或适合您的自动化工作死心塌地?
我建议按每小时接听电话的概率对数据框进行排序(这样您就可以先给出更可能的潜在客户),然后根据当天的电话数量进一步对它们进行排序。
大致如下:
require(dplyr)
todaysCall = df %>%
dplyr::group_by(propertyID) %>%
dplyr::summarise(noOfCalls = n())
hourlyCalls = df %>%
dplyr::filter(hour == format(Sys.time(),"%H")) %>%
dplyr::left_join(todaysCall) %>%
dplyr::arrange(desc(Prodprobability),noOfCalls)
从本质上讲,获取拾取概率是模型的全部内容,您似乎已经掌握了该信息。
备选方案
获取每个 propertyID 的前 5 个调用次数
top5Times = df %>%
dplyr::filter(Prodprobability != 0) %>%
dplyr::group_by(propertyID) %>%
dplyr::arrange(desc(Prodprobability)) %>%
dplyr::slice(1:5L) %>%
dplyr::ungroup()
为概率为零的案例获取备用呼叫时间:
zeroProb = df %>%
dplyr::filter(Prodprobability == 0)
alternateTimes = df %>%
dplyr::filter(propertyID %in% zeroProb$propertyID) %>%
dplyr::filter(Prodprobability != 0) %>%
dplyr::arrange(propertyID,desc(Prodprobability))
给定时间零概率案例的最佳通话时间:
#Identifies the zero prob cases; can be by hour or at a particular instant
zeroProb = df %>%
dplyr::filter(Prodprobability == 0)
#Gets the highest calling probability and corresponding closest hour if probability is same for more than one timeslot
bestTimeForZero = df %>%
dplyr::filter(propertyID %in% zeroProb$propertyID) %>%
dplyr::filter(Prodprobability != 0) %>%
dplyr::group_by(propertyID) %>%
dplyr::arrange(desc(Prodprobability),hour) %>%
dplyr::slice(1L) %>%
dplyr::ungroup()
根据原始 df 返回记录数:
zeroProb = df %>%
dplyr::filter(Prodprobability == 0) %>%
dplyr::group_by(propertyID) %>%
dplyr::summarise(total = n())
bestTimesList = lapply(1:nrow(zeroProb),function(i){
limit = zeroProb$total[i]
bestTime = df %>%
dplyr::filter(propertyID == zeroProb$propertyID[i]) %>%
dplyr::arrange(desc(Prodprobability)) %>%
dplyr::slice(1:limit)
return(bestTime)
})
bestTimeDf = bind_rows(bestTimesList)
注意:可以组合过滤语句;我将它们分开编写以突出显示每个步骤的作用。