如何建立呼叫潜在客户的推荐模型

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)

注意:可以组合过滤语句;我将它们分开编写以突出显示每个步骤的作用。