【问题标题】:How to build recommendation model for calling prospects如何建立呼叫潜在客户的推荐模型
【发布时间】:2019-10-22 18:32:45
【问题描述】:

我的目标是根据一天中的时间和之前的历史,以更高的通话成功率更好地定位潜在客户。

我创建了一个“Prodprobability”列,用于显示 PropertyID 在该时间接听电话的概率以获取通话历史记录。我想将它们重新定位到第 13 小时或第 16 小时,而不是仅仅从任何呼叫中省略属性 ID 233303.13(示例数据未显示,但在这些时间接听的概率分别为 100% 和 25%)。

因此,继续前进,根据一天中的某个小时以及该潜在客户在该小时是否接听电话的历史记录,我想在他们最有可能接听电话的时间重新定位每个潜在客户.

sample data

编辑:我想我需要一个公式来执行此操作:如果“S425=0”,我想搜索“A425”在 S 列中概率最高的位置,并返回该“PropertyID”的小时和概率”。希望这是有道理的。

编辑::sample date returns this

【问题讨论】:

  • 那么您的预期输出应该是什么?能否提供 R 语言的示例代码/数据?
  • 我已经编写了尽可能多的代码,以便能够获得最不可能调用的顺序,但我希望将列表末尾的概率为 0 的调用重新定位到更有可能出现的几个小时内被接走。

标签: r recommendation-engine


【解决方案1】:

这里的问题是,您是死心塌地创建“模型”还是自动化适合您?

我建议按照每小时接听电话的概率对数据帧进行排序(这样您就可以先给出更有可能的线索),然后再按当天的电话数量对它们进行进一步排序。

类似的东西:


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)

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

【讨论】:

  • 是的,我已经做到了。我还想获取 0 概率记录,并为它们提供一个新的“小时”值,用于我应该定位它们的位置。基本上,我一半的记录是 0 概率的,如果我可以将它们重新定位到具有更好概率的小时内,我的平均值就会上升。
  • 所以预期的输出是可以调用特定propertyID 的所有可能时间?
  • 可行,但我在想一个输出(仅用于 0 概率记录),它是工作表中其他地方概率的最大值,以及该最大概率的相应小时
  • @KellyJackson,检查更新的代码。让我知道这是否是您想要的。
  • 有趣,是的,这看起来不错。有没有办法用它的最高概率和相应的时间用 0 概率替换每个 propertyID?所以我的结束 df 是相同数量的记录?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-07
相关资源
最近更新 更多