
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 對預測分析的投入是其持續引領網約車領域的原因之一。

評論留言