解读滴滴猜你去哪儿功能的算法实现
文章作者:Dustinsea Alibaba
编辑整理:Hoh
内容来源:作者授权
出品社区:DataFun
导读: 最近看了一篇比较有意思的文章,关于滴滴“猜你去哪儿”功能的算法实现,在这里记录下。
▌产品
图:滴滴“猜你去哪儿”产品形态
从产品的角度,滴滴“猜你去哪儿”是在用户打开滴滴,用户还未输入的情况下,猜测用户的想去的目的地(POI)并以 TIPS 的形式直接进行提示,该功能从产品上有两个好处:
① 能够减少用户的输入,如果猜测准确,用户直接点击目的地 POI 即可;
② 能够提升用户对滴滴的好感,提升用户体验和粘性,毕竟用户都是感性的,这样一个功能点如果足够准,就能让用户印象深刻。
▌技术
首先分析下该产品的业务场景:用户打开滴滴,绝大部分情况下,都是心中已经有要去的地点了,技术需要做的只是将该 POI 猜对并提示出来。所以该场景所使用的技术,就和传统的视频,音乐,甚至电商推荐有很大区别:该过程不需要协同,而在乎准确,用户不会因为你打开滴滴的时候推荐的 POI 和他的兴趣比较相关就会去,在打开滴滴前,用户就已经做了决定。
换句话说,用户要去的地方是极度个性化的,几乎没有泛化,所以在技术上有以下两点设计:
① 召回的目的地候选 POI 就是用户的常去地;
② 去什么地方仅取决于用户及他所处的上下文,此处上下文包括位置,时间等。而所有的上下文中,从滴滴的论文中可以看到,最重要的就是3个因素:出发时间,出发地点,是否为工作日。
图:最有效的场景上下文
▌算法
滴滴使用了一个比较简单的算法来解决该问题:针对每个用户的数据,对每一个去过的候选目的地,使用高斯分布来构建基于上下文的条件概率分布。之所以使用,之所以使用高斯分布,是从数据上来看,出发上下文和去的目的地之间,分布的确是一个钟形。
图:特定目的地出发时间分布
如上图,如仅考虑时间一个维度,用户出发去特定目的地的分布,符合高斯分布。
故使用的模型形式如下:
图:贝叶斯模型
其中 X 为当前用户所处上下文, Y=yi 表示目的地为 yi。其模型形式为给定上下文后,计算用户去目的地 yi 的概率,转化为使用贝叶斯方式计算,此时只要计算用户去各个目的地的先验,以及用户去各目的地的上下文概率即可。
先验计算比较直接,直接统计用户去各目的地的频次即可。
图:特定目的地概率统计
P(X|Y=yi)则将其表示为高斯分布。简单出发,此处 X 如果仅包含时间维度的话,作如下表示:
图:建模为条件概率分布
高斯分布仅需要给出 μ 和 variance 即可。而两个值通过观测样本即可给出。但此处有个细节,就是时间是以24小时的周期函数,不能直接使用数值方式计算均值 μ,故文中提出了计算时间维度 μ 的方法。
图:求解 μ
其思路比较直接,其中有两个关键点:
① 时间以24小时作为周期,那么两个时间的差,不能大于12小时;
② μ 和所有时间点的差值的平方和最小,求解 μ 即可。
![](https://img.6
- 原文作者:知识铺
- 原文链接:https://geek.zshipu.com/post/%E4%BA%92%E8%81%94%E7%BD%91/%E8%A7%A3%E8%AF%BB%E6%BB%B4%E6%BB%B4%E7%8C%9C%E4%BD%A0%E5%8E%BB%E5%93%AA%E5%84%BF%E5%8A%9F%E8%83%BD%E7%9A%84%E7%AE%97%E6%B3%95%E5%AE%9E%E7%8E%B0/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。
- 免责声明:本页面内容均来源于站内编辑发布,部分信息来源互联网,并不意味着本站赞同其观点或者证实其内容的真实性,如涉及版权等问题,请立即联系客服进行更改或删除,保证您的合法权益。转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。也可以邮件至 sblig@126.com