
Uber 能否提供快速可靠的乘车服务取决于其预测需求的能力。这意味着预测人们何时何地需要乘车(通常是前往某个城市街区),以及他们预计何时可以到达。这种平衡依赖于复杂的机器学习 (ML) 系统,这些系统实时采集海量数据并调整市场以保持平衡。让我们深入了解 Uber 如何应用机器学习进行需求预测,以及机器学习对其业务至关重要的原因。
需求预测为何如此重要?

以下是需求预测如此重要的一些原因:
- 市场均衡:需求预测有助于 Uber 在司机和乘客之间建立平衡,从而最大限度地减少等待时间并最大限度地提高司机收入。
- 动态定价市场:准确预测需求使 Uber 能够了解动态定价所需的司机数量,同时确保在需求增加时有足够的可用司机。
- 资源最大化:需求预测可用于指导从在线营销支出到激励司机再到硬件配置等各个方面。
数据来源和外部信号
Uber 利用基于大量历史数据和实时信号构建的需求预测模型。历史记录包括行程日志(时间、地点、人数等)、供应指标(有多少司机可用?)以及来自乘客和司机应用程序的功能。该公司认为上门事件与实时信号同等重要。外部因素至关重要,包括节假日/重大事件日历、天气预报、全球和本地新闻、公共交通中断、本地体育赛事以及即将抵达的航班,这些因素都可能影响需求。
正如 Uber 所说,
像 New Year’s Eve 这样的事件十年只发生几次;因此,预测这些需求依赖于外生变量、天气、人口增长或营销/激励措施变化,这些因素可能会显著影响需求。
关键数据功能

数据的主要特征包括:
- 时间特征:一天中的时间、一周中的某天、季节(例如,工作日与周末、节假日)。Uber 会观察每日/每周的模式(例如,周末晚上更繁忙)以及节假日高峰。
- 位置特定:特定街区或网格单元的历史乘车次数,特定区域的历史驾驶员次数。Uber 主要按地理区域(使用区域或六边形网格)预测需求,以评估当地需求激增的情况。
- 外部信号:天气、航班时刻表、活动(音乐会/体育赛事)、新闻或城市范围内的罢工。例如,为了预测机场需求,Uber 使用航班到达和天气作为预测变量。
- 应用参与度:Uber 的实时系统监控应用参与度(即有多少用户正在搜索或打开应用),将其作为需求的领先指标。
- 唯一数据点:活跃应用用户、新用户注册量是平台整体使用情况的指标。
总而言之,Uber 的模型能够学习复杂的模式。一篇关于极端事件的 Uber 工程博客介绍了如何利用神经网络,并使用城市级特征(例如,当前正在进行的行程、注册用户数量)以及外部信号(例如,天气如何、节假日如何)对其进行训练,以便预测大幅峰值。
这会产生一个丰富的特征空间,能够捕捉常规的季节性,同时考虑不规则的冲击。
机器学习技术实践
Uber 结合使用经典统计学、机器学习和深度学习来预测需求。现在,让我们对 Uber 数据集进行时间序列分析和回归分析。您可以从此处获取所使用的数据集。
步骤 1:时间序列分析
Uber 利用时间序列模型来了解乘车请求的趋势和季节性,分析历史数据以将需求映射到特定时期。这使公司能够为预期的高峰做好准备,例如工作日高峰。小时或特殊事件。
import matplotlib.pyplot as plt
# Count rides per day
daily_rides = df.groupby('date')['trip_status'].count()
plt.figure(figsize=(16,6))
daily_rides.plot()
plt.title('Daily Uber Rides')
plt.ylabel('Number of rides')
plt.xlabel('Date')
plt.grid(True)
plt.show()
此代码按日期对 Uber 行程数据进行分组,统计每天的行程次数,然后将这些每日计数绘制成折线图,以显示行程量随时间的变化趋势。
输出:

步骤 2:回归算法
回归分析是另一种实用的分析技术,它使 Uber 能够评估各种输入因素(包括天气、交通状况和当地活动)如何影响乘车需求和定价。借助这些模型,Uber 可以做出决策。
plt.figure(figsize=(10, 6))
plt.plot(y_test.values, label='Actual Price')
plt.plot(y_pred, label='Predicted Price')
plt.title('Actual vs. Predicted Uber Fare (USD)')
plt.xlabel('Test Sample Index')
plt.ylabel('Price (USD)')
plt.legend()
plt.grid(True)
plt.show()
此代码会将测试数据中的实际 Uber 票价与模型预测的票价绘制成图表,以便您直观地比较模型的执行效果。
输出:

步骤 3:深度学习(神经网络)
Uber 已经实现了 DeepETA,其核心是一个人工神经网络,该神经网络基于一个大型数据集进行训练,输入因素包括 GPS 坐标、之前的行程记录以及实时交通信息。得益于其能够从多种数据中捕捉模式的算法,Uber 可以预测即将到来的出租车行程时间以及潜在的客流高峰。

Source: Uber
步骤 4:循环神经网络 (RNN)
RNN 尤其适用于时间序列数据,它们会收集过去的趋势和实时数据,并结合这些信息来预测未来的需求。需求预测通常是一个持续的过程,需要实时、有效的参与。

Source: MIDI
步骤 5:实时数据处理
Uber 始终会捕获、组合并将与司机位置、乘客请求和交通信息相关的实时数据集成到其机器学习模型中。借助实时处理,Uber 可以持续向其模型提供反馈,而无需采用一次性数据处理方法。这些模型可以即时响应不断变化的情况和实时信息。

步骤 6:聚类算法
这些技术用于建立特定地点和时间的需求模式,帮助 Uber 基础设施将总体需求与供应进行匹配,并预测过去的需求峰值。
步骤 7:持续模型改进
Uber 可以根据实际发生的反馈不断改进其模型。Uber 可以开发一种基于证据的方法,将预测需求与实际需求进行比较,同时考虑任何潜在的混杂因素和持续的运营变化。
您可以从这个 Colab notebook 中访问完整代码。
该流程如何运作?

整个流程如下:
- 数据收集与特征工程:汇总并清理历史数据和实时数据。设计诸如时间、天气和事件标记等特征。
- 模型训练与选择:探索多种算法(统计、机器学习、深度学习),为每个城市或地区找到最佳算法。
- 实时预测与投入:持续构建模型,使用新数据更新预测结果。由于我们面临不确定性,因此生成点预测和置信区间至关重要。
- 部署与反馈:使用分布式计算框架大规模部署模型。使用实际结果和新数据改进模型。
挑战
需求预测模型面临的一些挑战:
- 时空复杂性:需求随时间和地点变化很大,需要非常精细且可扩展的模型。
- 极端事件的数据稀疏性:罕见事件的数据有限,难以准确建模。
- 外部不可预测性:意外事件,例如天气突变,甚至可能扰乱最佳程序。
现实影响
以下是需求预测算法产生的一些影响:
- 司机分配:Uber 可以将司机引导至道路上的高需求区域(称为公允价值区域),在高峰时段之前将他们派往那里,减少司机的空闲时间,同时改善为乘客提供的服务。
- 高峰定价:需求预测与需求脱水相结合,自动触发动态定价,以缓解供需平衡,同时确保乘客始终获得可靠的服务。
- 事件预测:可以根据大型事件或恶劣天气触发专门的预测,这有助于资源分配和市场营销。
- 学习传统:Uber 的机器学习系统从每次行程中学习,并不断调整预测以获得更准确的推荐。
小结
Uber 的需求预测是现代机器学习应用的典范——通过融合历史趋势、实时数据和复杂算法,Uber 不仅保持了市场平稳运行,还为乘客和司机提供了无缝衔接的体验。Uber 对预测分析的投入是其持续引领网约车领域的原因之一。


评论留言