r - 如何建立呼叫潜在客户的推荐模型
问题描述
我的目标是根据一天中的时间和之前的历史,以更高的通话成功率更好地定位潜在客户。
我创建了一个“Prodprobability”列,显示了 PropertyID 在该时间接听电话的概率以获取通话历史记录。我不想仅仅从任何呼叫中省略属性 ID 233303.13,而是想将它们重新定位到第 13 小时或第 16 小时(示例数据未显示,但在这些时间接听的概率分别为 100% 和 25%)。
因此,根据一天中的某个小时以及该潜在客户在该小时是否接听电话的历史,我想在他们最有可能接听电话的时间重新定位每个潜在客户。
编辑:我想我需要一个公式来执行此操作:如果“S425=0”,我想搜索“A425”在 S 列中的概率最高的位置,并返回该“PropertyID”的小时和概率。希望这是有道理的。
编辑::示例日期返回此
解决方案
这里的问题是,您是死心塌地创建“模型”还是自动化适合您?
我建议通过每小时接听电话的概率来排序数据框(这样你就可以先给出更可能的线索),然后再按当天的电话数量对它们进行排序。
类似于以下内容:
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)
注意:可以组合过滤语句;我将它们分开编写以突出每个步骤的作用。