在众多打车软件中,相较外来的Uber,嘀嘀、快的可能更加被国人所熟知。究竟Uber在国内的打车体验如何?到底挖掘机技术哪家强?更多相关问题,请移步最下方“阅读原文”。我们这里不写软文,只做资讯的传递者~
以下翻译自Uber官方博客,独家放送喔~ 原文链接见http://blog.uber.com/passenger-destinations
翻译:袁晶/校对:夏雅薇(转载请保留)
在最近这一期的#UberData部分,我们将向您展示数据科学细节,用来解释我们是如何运用经典的贝叶斯统计来解决一个独特的Uber问题的。
#UberData团队在今天春夏时所从事的项目之一便是确定Uber的乘客喜欢光顾哪些商家。哪种饭店?哪些机场?旅馆?乍一看,这似乎足够简单:将送客下车时的坐标逆向编码,或者利用一个公开可得,含有大量与附近商业相匹配的城市地址的数据库。
但是我们很快便意识到“临近商铺”部分恰恰为问题所在。在三藩市的某些地区,还有其他像是纽约市的一些密集城区,商铺鳞次栉比,随意挥动下你的手提包便可能触到一家饭店。而且仅仅因为你在一家店铺门前下车并不意味着你就是要到那里去。交通高峰期或是处于繁忙的交叉路口,如果能够避开交通堵塞或是多余的红灯,我们常常更乐于步行几个街区到达我们的最终目的地。
由于我们引入了UberPool(Uber应用程序的拼车选项),这里司机可以设置多个接送点,这些事件的发生仅会伴随着不断增长的频率,这意味着每个Uber乘客目的地的人气分析都会易受噪声影响而变得不够精准。
我们所需要的正是人们最终想要去哪里的信息,而不是他们想要达到那里而指定的放客下车地点。给定一段行程其下客点的经纬度坐标,我们建立一个概率模型来预测乘客最终目的地的地址。
在这篇博文中,我们将向您展示Uber是如何运用贝叶斯统计及您下车的地点,来预测您十有八九会去向何处。
我们Uber的数据
我们选取了2014年早些时候三藩市3000多名单独乘客的乘坐模式(将数据匿名化以求保护隐私)。每段行程均已被所属乘客所“标记”:当向Uber发出用车请求时,乘客已经填写了目的地。我们假设这代表了该名乘客想要前往的真正目的地,这一地址产生一个黄金标准,使得我们可以拿来比较我们模型的预测。
概率预测
每个地址都是一个离散的带有索引的单元 i=1,…,N。我们模型的目标是,给定行程中先前的一个点(下客点)、行程的时间以及乘客的其他特征和景观,精确地预测出行程结束的地址i。因为模型是概率性的,这涉及计算每个地址i作为最终目的地的概率P(D=i|X=x),这里D为代表最终目的地的随机变量,X为代表该行程中所观测到特性的随机变量。将这一概率拆分成一个似然部分和一个先验部分,运用贝叶斯定理可得:
这里P(D=i)指最终目的地为i的先验概率,计算时被作为假设的一个加权和,我们将在下个部分对此作以展示。P(D=i|X=x)指已知观测到的特性X的情况下,最终目的地为i的似然(可能性)。这一概率由下客点与最终目的地之间距离的分布和行程时间的影响计算得到。
建立先验
乘客先验
乘客先验将有关乘客个人目的地的有用信息并入模型当中。直觉认为,个别乘客很可能去某些其他人不太可能去的地方(诸如他们的寓所,工作地点等等)。
于是实际上是指P(D=i|C=c),这里C为表示该名乘客身份识别的随机变量。这一分布能够被可视化为一个直方图:每个条状对应了乘客c到达地址i的归一化次数。c到达地址i的归一化次数。
注意乘客先验假设了一个封闭的全局模型:仅有乘客之前曾经到过的地址被赋予了概率(所有其他地址则被赋予了零概率)。
这个被广泛应用于定位相关算法的假设极大地简化了问题,但是明显太过天真。在现实生活中,人们有时会去之前从来未曾到过的地方。更令人担忧的是,当乘客为一个新用户时,乘客先验便会失效。位置必须是不仅曾经被到访过的;并且它们也必须曾经被观测到。(所以在这一朴素的假设下,一个新乘客无论去哪里都是零概率事件!)
为了解决这一难题,我们为先验添加了两个额外的组成:Uber先验和热门地点先验。
Uber先验
Uber先验采取了更宽的视角,同时探寻Uber乘客同时可能前往某处的真相。
为数据库中Uber乘客曾经到访地址i的归一化次数。
图1:Uber先验和乘客先验的一个样例被绘制在地图上。圆圈半径越大,意味着训练数据中有更多的行程被带入那个位置。
热门地点先验
除了乘客先验和Uber先验,我们假设在数据集中只有三藩市的地址才是被乘客常去的。这很显然不够准确。热门地点先验是我们的“无所不包”先验,由涵盖1000家商铺的数据构成,能够很好的适用于下面所列出的三藩市内每个垂直行业:
- 餐饮
- 夜生活
- 旅店
- 购物
- 博物馆
- 医疗卫生
为网络上为一个商业机构留言评论的归一化数量。
联合先验
将3个先验联合使用能够有良好的覆盖。乘客先验大概涵盖你经常到访的地点。Uber先验涵盖你朋友们常去的地点(并且反之是你可能去的地方,例如你朋友的寓所)。热门地点先验涵盖其它需要注意的地点。某些地点将在多于一个先验中被追踪,并且当然,也有些地点会落于所有三种描述之外。(希望这些情况少之又少。)
我们暂时取,,我们希望能大致了解每个先验对精确度的影响。
建立似然部分
乘客往往不愿意距离他们最终目的地太远被放载(见下方图2)。直觉上说,距卸客点越远的地址,可能性越小。
图2:卸客点与最终目的地间距离的分布。红色竖线表示80%分位数。
我们用似然将这一直觉正式化:P(Y=y|D=i).Y为卸客点与最终目的地间半正矢(Haversine)距离的观测量(实质上,这一距离使用直线距离)。
现在这一似然看起来像什么?我们利用一个高斯分布对其进行建模,将和取其极大使然估计和。一个高斯分布参数的极大似然估计MLE恰好为数据的样本均值和方差,于是
同时还需要考虑卸客点落入临域的情况。在状况并不复杂的街区,乘客或许连50米都不愿意走,而在交通拥挤的市中心,下车地点便很有可能是乘客最终试图到达地点附近的一个街角。
为了捕捉这一变化,我们为每个邮编都对独立的变量进行拟合,即
于是,具有观测到的卸客点-目的地距离差异为y的行程,在邮政编码为z处,将具有似然
这一似然的第二部分可能是暂时的。根据一天中不同的时间和一周内的不同日子,某些地点相较其它可能更容易出现。通勤模式意味着人们在早上会前往位于旧金山金融区的办公大楼,而在晚上离开;夜总会之行不大可能发生在周一早晨,但是去往餐馆可能发生在晚上5点至8点。
为了对这些趋势建模,我们采用T表示描述行程时间的随机变量。
P(T=t|D=i)表示给定卸客时间为t,最终目的地为i的概率。我们指定P(T=t|D=i)为一个分类分布,它的事件概率由在时刻t到达地点i行程的归一化系数计算得到(我们使用的时间增量是一个小时)。
推导后验
在之前的章节中,我们介绍了先验和似然部分。将这些部分相乘,我们可以得到一个正比于后验概率P(D=i|X=x)的数值。特别注意,我们假设似然的两个组成部分之间相互独立:P(X=x|D=i)=P(Y=y,T=t|D=i)=P(Y=y|D=i)P(T=t|D=i)
这个假设是简化的,因为确实很有可能Y和t 之间存在某种交互作用。基本上,时间可能影响人们愿意Uber出租车到目的地走多远(但是目前我们假设这种效应是很小的)。
图3:正确预测测试实例的一个后验分布示例:三藩市萨克拉门托街1348号
结论
我们采用经典的机器学习技术评估我们的模型,将数据分拆为测试集和训练集,以确保我们的模型不是被恰好设定为我们数据集中一组特定的片段。
我们通过每一个检验行程进行迭代,首先输出距卸客点方圆100米内的一个候选地址列表。然后,计算每个候选的后验概率。我们选用最大后验估计(maximum a posteriori,缩写为MAP):也就是说,我们选择具有最大后验概率的地址。我们检查这个地址是否与真实地址相吻合。
我们发现,我们的模型有74%的概率能够准确地预测出正确的地址。
考虑一个典型的城市街道上可能存在的商业的绝对数量。4次中大约能有3次,我们可以准确地识别出哪些地方拥有乘客前往的诸多可能性——所有都不依赖于附加信息和背景。
将我们的模型结果与2个基准进行比较:朴素基准和智能基准。朴素基线中做了一个随机选择的候选人的位置,取得了40%的准确率。智能基准选取最近的候选位置,取得了44%的准确率。因此,我们对于如何选出最终的目的地有一些替代选择,在这一背景下,总的来说,我们的模型在确定我们要帮助人们到达何处的问题上,算是一个良好的开端,但是还不足以好到让我们停止思考这类问题。
我们下一步将往哪儿走?
我们的乘客目的地模型是# UberData团队正致力于改进Uber乘客用户体验的一种方法。这个项目的扩展涉及建立更复杂的先验和似然。比如,一个直觉是,人们可能会去那些与他们频繁造访的地点接近的地方。(例如,他们家附近的餐馆,或他们的工作场所附近的地铁站。)我们可以用一个被指定为二维高斯分布的附加先验来描绘。
原文发布时间为:2014-10-10