03.02 「案例」機器學習算法在餓了麼供需平衡系統中的應用

一、前言

即時配送物流系統是外賣領域核心價值所在。區別於其他物流,這個行業的“物流”是希望30分鐘內能夠送到,這就對我們的算法模型具有很大的挑戰。智能調度系統更是即時配送物流系統中的核心。

在本文中,我將介紹餓了麼的智能調度系統,著重介紹其中的壓力平衡子系統,並通過兩個實例,分享機器學習算法在構建壓力平衡系統中起到的關鍵作用以及取得的成果。希望通過本文,幫助-線的機器學習算法工程師和愛好者們瞭解餓了麼即時配送系統中壓力平衡系統的構建,以及如何利用常見機器學習算法有效地解決020場景下的實際問題。


「案例」機器學習算法在餓了麼供需平衡系統中的應用

二、餓了麼智能調度系統

餓了麼智能調度系統是外賣即時配送領域中最核心的環節,該系統替代了調度員大部分的工作,減少了人力介入的程度,實現了自動化、智能化的派單。

智能調度系統主要可以劃分為四個子系統,如圖1所示:


「案例」機器學習算法在餓了麼供需平衡系統中的應用

●智能派單:包括騎手與訂單的匹配策略,騎手的路徑規劃等;

●時間預估:包括騎手行程時間預估,騎手樓內停留時間預估,出餐時間預估與下單送達時間預估等;

●供需平衡: 包括實時的壓力平衡,中長期訂單預測、運力規劃和短期的騎手排班等;

●位置服務:包括配送範圍劃定,商圈/樓宇/配送點的建設,位置校準等。

以上各個子系統相輔相成,組成了整個餓了麼智能調度系統。本文中我將重點介紹機器學習算法在供需平衡中的實時壓力平衡系統中起到的作用。

三、壓力平衡系統

1、系統目標

壓力平衡系統要解決的問題是:當配送供給(騎手)與用戶需求(訂單)出現日內的異常不匹配時,為了保證用戶體驗不受到過大損傷,及時有效地使用調控手段來平衡需求與供給。


「案例」機器學習算法在餓了麼供需平衡系統中的應用

造成用戶需求和配送供給日內異常不匹配的原因有很多:比如遇到惡劣的天氣、商家搞一些臨時性的大活動,騎手運力本身不充足等。

當出現異常不匹配時(壓力高於某個閾值),壓力平衡系統會採取一定的措施。比如上調配送費、縮小配送範圍、下滿減活動、關店等。

2、算法框架

下圖展示了壓力平衡算法的總體架構:


「案例」機器學習算法在餓了麼供需平衡系統中的應用

圖3

首先,圖3的最上方(M1)展示的是團隊(餓了麼組織運力的最小單元,一個團隊由若干騎手組成)壓力系數及其輔助指標的實時監控和預測模塊。這個模塊主要的作用是估算自動調控開始的最佳時機和調控的量化控目標:即當壓力系數大於一定的閾值時,開始自動採取一系列的措施,使得壓力系數降低到可接受的範圍。

其次,圖3的中部(M2) 展示的主要是兩個模塊: 1)餐廳理解; 2)調控策略池。其中,餐廳理解:利用餐廳重要性排序模型,單店爆單模型,餐廳配送難度等信息來細化調控的基本單元,它使我們知道哪些餐廳是應該首先被調控的。調控策略池包含了調控可用的調控手段,例如:增加配送費,下大額滿減活動, 縮小餐廳的配送範圍等。

最後,圖3的底部(M3) 展示的是自動調控策略生成主模型:我們會根據量化的調控目標,來優化單個或多個指標的組合。通過數據、算法來決定調控哪些餐廳,每個餐廳使用什麼樣的調控策略。

圖中每個模塊都通過數據驅動,應用了機器學習算法來實現相應的目標。圖中綠色標記是我們已經完成的,標記黃色部分是我們正在或者規劃中的工作。

3、數據監控

我們還構建了一套策略實時監控系統,方便相關人員查看。例如,圖4顯示的是某個團隊的實時壓力系數。團隊壓力系數,我們做到了歸一化(所有團隊值域一致,含義一致),並且能根據天氣、溫度等情況自適應地變化。當前,這個指標我們做到了每隔5分鐘更新一次。在第四章中,我將會更加詳細地介紹團隊壓力系數的計算方式。


「案例」機器學習算法在餓了麼供需平衡系統中的應用

四、機器學習算法在壓力平衡中的應用

在這個章節中,我將通過兩個案例來介紹機器學習算法在構建餓了麼壓力平衡系統中起到的關鍵作用。

1、騎手最大背單能力模型

騎手的最大背單能力反應了一個騎手的水平,是騎手畫像的非常重要的組成部分。第一版,由於我們只是為了得到團隊的最大背單能力,所以我們只使用了簡單的規則,計算了團隊的平均最大背單能力,用這個平均最大背單能力作為這個團隊騎手的最大背單能力。顯然,這是非常不合理的。

在第二版中,我們通過一些負責的規則,將騎手分成了若干等級,每個等級的騎手具有一個相同的最大背單能力。這個版本的騎手最大背單能力具有了一些個性化,但是任然無法細緻、有效地區分不同騎手的水平。

在第三版中,我們採用了機器學習的方法,把這個問題抽象成一個二分類的問題,從而得到了每個騎手在不同背單量情況下超時的概率。圖5顯示了以上介紹的迭代內容,下 面介紹V3.0版本我們的思路。


「案例」機器學習算法在餓了麼供需平衡系統中的應用

解決這個問題的關鍵思路在於,我們將騎手最大背單能力的估算轉化為一個二分類問題。具體步驟如下:

第一步:我們隊每張騎手的運單構建一條 訓練數據;

第二步:統計這張運單運送過程中騎手的最大背單量作為其中一個特徵;

第三步:統計其他特徵,包括騎手畫像相關特徵,天氣特徵等; .

第四步:構建二分類的Label,一張運單超時記為1,不超時記為0;

第五步:使用大量的訓練數據,訓練得到一個線性的二分類模型;

第六步:給定一個騎手,固定其他特徵,並滑動最大背單量特徵,得到該騎手在不同最大背單量下超時的概率。

下面,我詳細介紹一下特徵工程部分,主要包括以下幾塊內容:

1)騎手歷史最大非超時背單量。包含前28天、21天、14天、7天、5天、3天的騎手平均最大非超時背單量;

2)天氣和溫度信息;

3)騎手的個性化信息:包括騎手的等級,騎手的工作天數,騎手所在團隊的信息等; .

4)時間信息:主要包括該日是一週的哪一天,是否是工作日兩個特徵; .

5)運單信息:運單運送過程中騎手的身上最大背單量。

接下來我介紹一下模型的選擇和訓練集和預測集的構造。根據簡單有效原理(即:奧卡姆剃刀定律),我們採用了常用的線性模型,即Logistic Regression(LR)模型,我們的考慮如下:

●線性模型,模型非常簡單,有效,計算速度快;

●模型可解釋性很強,便於業務人員理解;

●問題需要輸出[0,1]之間的概率值,LR使用sigmoid函數能夠將預測值轉化為概率值。

訓練集的構造我們採用了最近14天的運單數據,即數據日期範圍是[T-13,T],時間範圍限定在了午高峰(10:30~12:30)。由於超時單相比非超時單佔比非常小,所以我們對正負樣本的比例進行了調整,對非超時樣本按照10%左右進行了降採樣。

在構造測試集時,我們對運單運送過程中騎手的最大背單量特徵進行滑動,從0 ~ 30按照0.5的間隔進行構造。然後通過訓練的模型進行預測,從而得到騎手在不同背單量下的超時概率。如下圖所示,是taker_id =342853的騎手在不同max_order_ num_on_taker 情況下超時的probability。


「案例」機器學習算法在餓了麼供需平衡系統中的應用

下面我來介紹一個騎手最大背單模型的重要應用場景,即計算團隊的壓力系數:我們定義團隊壓力系數=load/(q1 +q2+ .... qn)

1) load= 團隊負載

2) qn=該團隊第n位騎手的個性化最大背單量(使用騎手最大背單模型計算的數值)

團隊壓力系數的定義簡潔有效,直接支持了餓了麼即時配送相關10多個相關業務系統:包括智能派單,壓力平衡,運單分流,T模型,客服系統等。

2、團隊壓力系數預測模型

正如前章節所介紹,團隊壓力系數是即時配送中一項非常重要的基礎指標,因此,如果我們能提前預測這一指標將會對多個業務系統產生巨大的價值。基於此,我們構建了一個實時的團隊壓力系數預測模型,它能夠每隔5分鐘對團隊未來1個半小時(每15分鐘一個時間片,共6個時間片)的壓力系數進行預測。圖4中的虛線即展示了其中一次預測的值。我們將這個模型應用在以下2個場景中:

1)定量描述壓力平衡自動調控的目標,輔助確定自動調控的時間點,進行提前調控;

2)應用在智能派單策略上,通過壓力系數的預知,規劃不同的派單策略。

如下圖所示:截止目前,我們完成了團隊壓力系數預測模型的三輪迭代。通過持續迭代,我們大幅提高了模型預測的準確率和預測的頻率。


「案例」機器學習算法在餓了麼供需平衡系統中的應用

五、總結展望

通過本文,我們希望讀者能夠對餓了麼即時配送體系中的壓力平衡系統以及如何利用常見的機器學習算法有效解決O20場景下的實際問題有所瞭解。展望未來,壓力平衡系統中仍然有很多問題可以抽象成機器學習問題(例如:排序學習,時間序列等),希望在不久的未來,有機會和大家分享我們更多的成果。


分享到:


相關文章: