導讀 今天給大家分享題目為阿里健康醫藥電商供應鏈智慧補貨調撥演算法。
主要分為以下三個部分:
1. 阿里健康供應鏈演算法簡介
2. 阿里健康智慧補貨模型
3. 阿里健康智慧調撥模型
分享嘉賓|龍廣斌 阿里健康 高階演算法專家
編輯整理|熊丹妮 恆瑞醫藥
出品社群|DataFun
01
首先簡單介紹一下醫藥健康供應鏈演算法的整體架構。阿里健康有很多不同的業務板塊,包括醫藥電商、網際網路醫療、智慧醫療等。其中阿里健康供應鏈業務的目標價值是:為醫藥電商貨品的供給、銷售提供支撐,以降低成本,提高時效、收益,最終提升使用者體驗。基於目標價值,整體的演算法模組分為:智慧預測、品倉鋪貨、智慧補貨、智慧調撥、倉網路由、快遞分配、智慧審價。(1)基礎資料:首先有一系列的基礎資料,包括商品屬性、GMV 等核心資料,以及新品、季節品、長尾品等貨品標籤資料。(2)預測能力:在完善的基礎資料之上建立了預測能力,在不同的場景,如大促、渠道等,透過預測能力來預測銷量和單量等。(3)庫存決策:在建立了預測能力之後,就能進行上層庫存決策。在預測了未來銷量後,會需要對當前庫存進行判斷(貨品數量是否夠用),如果貨品數量不夠,則需要進貨,這部分就是由“智慧補貨”模組決定。在貨品不夠的情況下,除了從供應商處進貨,還能從其他倉庫劃撥,這種倉與倉之間的庫存劃撥則由“智慧調撥”模組進行決策。“倉網規劃”模組主要包含訂倉和訂配:訂倉主要解決哪些貨品該放入哪些倉的問題;訂配主要解決倉該對哪些區域進行配送,以及配送時該用哪個快遞等問題。最後的模組是“智慧採購”,進貨時透過分析供應商相關的詢報價、審價、送貨時長、滯銷等一系列因素,來決定從哪些供應商進行採購。(4)應用決策:在所有的庫存決策機制之上為應用決策部分。該模組能應用庫存決策模組中所有的演算法能力,從而提供補貨、調撥建議,大促盤貨,倉庫配送等供應鏈管理能力。此外還能建立庫存健康系統,進行清滯降價、庫存計劃、缺貨歸因等應用。本次分享的內容主要集中在智慧補貨和智慧調撥兩部分,這兩個模組決定了貨品供給,但側重點不同:(1)智慧補貨:主要解決“持貨-缺貨”平衡問題,即“採-銷”不確定性問題,指標主要是週轉和缺貨。(2)智慧調撥:主要解決倉間庫存平衡問題,以及拆單、跨區配送問題,指標主要是次日達和缺貨。左圖的橫軸是時間,縱軸是庫存。初始時,某倉某品就是有一定庫存的,稱之為“初始庫存”,銷售過程中庫存數量會不斷下降,在達到某個時間點時,會判斷貨品不夠,需要從供應商處進行補貨。實際情況下,供應商接單後貨品一般不能馬上到貨,需要一定的時間,這部分的送貨就會顯示為“採購在途”,在某個時間點會送達成為“現貨庫存”。隨著時間推移,還會進行訂單下放。整個完整的時間線就形成了這個時序圖。(1)在某些時間段內庫存為負:出現這種情況有可能是負賣,更可能是缺貨,目前只討論缺貨。(2)庫存時高時低,如何衡量一個時間段內的平均庫存:透過平均庫存可以衡量成本,如庫存高時會有較高的持貨成本(如倉儲管理費、資金佔用成本等);庫存較低會產生缺貨成本(如銷量損失)。整個補貨的業務主要是在平衡持貨成本和補貨成本,具體指標為週轉和缺貨。週轉指標為庫存除以銷售,簡單來講就是在貨庫存能賣多少天;缺貨指標為一段時間內缺貨多少天除以總時間,即可得缺貨率。演算法核心就是根據持貨-補貨平衡進行建模。在理解了業務背景和核心問題後,後續所有補貨演算法都是圍繞核心問題進行求解的。(1)傳統模型 ss:最左邊展示了業內通用的傳統 ss 模型,該模型主要基於安全庫存。模型優點是整體框架成熟、穩定、易解釋,容易直接取得結果;缺點是受限於框架,考慮因素不足。(2)運籌最佳化 OR 模型:運籌模型的優點是靈活性較高,針對性較強,即求解某個最最佳化問題即可;缺點是整體的建模和求解難度需要得到保證,如果要求最優解,時效性需要保證,如果追求時效而去求次優解,這樣求解的穩定性也會受到影響。(3)深度學習/強化學習:深度學習和強化學習在補貨演算法場景中的嘗試。該類方法的優點是能夠考慮更多的因子,網路結構和深度都可調,也能學習到更多的表徵;缺點則是深度學習方法相關的缺點,即模型調參、訓練時長、效果穩定性等,此外在 RL 學習中 Reward 的設計也比較有挑戰性。接下來將介紹整個補貨演算法的 Baseline 框架及深度學習/強化學習的應用場景。(1)確定性模型:最初的補貨模型在經濟學中有一個確定性模型--“經濟訂貨量”(EOQ)模型,該模型的主要假設是持貨成本、啟動費用及市場需求率都是固定值,在這個條件下就能求出最優解。(2)不確定性模型:然而在實際應用場景中很多都是不確定的,所以有了不確定性模型--“安全庫存(Safety Stock)”模型。首先比較直觀的是需求的不確定性,即未來銷售需求量;其次是提前期的不確定性,即供應商送貨時長會存在一定的波動。對應的最佳化解法是加入銷量預測、加權 VLT 統計預測等。右上角圖片比較直觀的展示了補貨考慮的緩衝庫存(buffer stock):橫軸展示了送貨時長,可能需要 3 天或者 10 天,這是 VLT 的波動性;縱軸則展示了需求的波動性,有可能賣 100 件,也有可能賣 150 件。安全庫存即是基於這兩點進行了考慮。(3)ss 模型:該模型是基於安全庫存、銷量預測、供應商送貨時長、服務水平構建的補貨模型框架。右下角圖中展示了模型相應的公式,其中需求以 d 表示,提前期以 L 表示,ss 的基礎構建方式如圖。在 ss 假設的前提下,即可計算補貨點。其中補貨點加上提前送貨期、銷量預測,即可得到補貨點的基礎值。補貨點的意義在於滿足整體的需求需要有一個預警,當庫存低於這個點時,未來銷售有可能擊穿庫存而造成缺貨。在確定了補貨點以後,可以根據相關假設或先驗資訊計算最優的訂貨量。 在 ss 框架下還有很多可以最佳化的點,如 OR 求解等,下面將簡單介紹其中兩個情況下的最佳化:(1)動態庫存 DTIA 模型:針對日銷情況,結合健康相關特性,如供應商送貨時長,這是一個必須要考慮的因素,因為不僅要考慮到什麼時候下單,還要考慮供應商什麼時候能接單。由此需要考慮 VLT 的 ON/OFF 狀態,以及可能的波動區間,這樣構建的 VLT 能使整體 buffer 值得到較好的保證。此外,還需要確定貨品週轉和缺貨庫存狀態。高庫存/高缺貨/正常/問題品等不同庫存狀態也處於一個動態區間,在不同狀態時整體的引數值也需要動態調整。結合以上兩點可以得到整體的建模思路,動態 DTIA 模型就能根據相應狀態進行調整得到 buffer 值。(2)大促因子模型:針對大促情況,會有相關的大促補貨模型。這裡重點考慮以下問題:大促之後可能會出現大庫存、高缺貨的狀態,故在大促之前就需要透過歷史資訊學習到這兩個因子,這樣在大促前就能進行相關調整,以防止在大促之後出現大庫存、高缺貨的狀態。整體公式如圖,不再贅述。透過在不同點進行最佳化,就得到了整體魯棒性比較高的 ss 模型。下面將介紹 RL(強化學習)模型的相關探索和應用。強化學習主要有狀態、動作、回報三個基本要素。在供應鏈場景下,因為業務本身就是這樣的序列過程,故可以較好的進行遷移,如狀態可以用商品庫存、在途、價格等進行相關表示;動作就是依據當前商品狀態做的補貨決策;回報就是一個決策週期內的整體最佳化目標指標的綜合評判。下面將介紹整體網路的相關最佳化:模型整體使用了 Actor-Critic 網路結構,訓練和 DDPG 差不多,透過 Train-Target 網路進行迭代更新,進而學習到庫存針對環境的補貨點和補貨量判定。在建模的過程中還有很多 trick,其中需要注意以下兩點:(1)貝爾曼方程:在考慮貝爾曼方程(Bellman Equation)時,對未來的不確定性應該放低。因為整體 Reward 是在模擬環境中進行的,與實際線上情況是有一定出入的,需要更加關注即時獎勵。(2)Reward 函式的修正:Reward 是決策對指標的評估函式,這裡進行了一些相關的嘗試:嘗試了一些離散函式後發現效果不是很好,並不能很好的學習到結果,故設定為連續非線性函式。針對指標也進行了相關的最佳化,如希望對缺貨的反應更加靈敏、更關注缺貨,同時希望週轉不應該特別低、應該保持在健康水位。週轉並不是越低越好,週轉過低可能會造成一定的缺貨。綜合以上這些調整我們可以調整得到最終的 Reward 函式。右圖展示了 actor 網路的構造,主要介紹兩個最佳化點:(1)雙塔網路結構:使用了雙塔輔助模型,需要注意的是,輸出本身存在著相輔和依賴的決策關係,如果不建立依賴關係可能會輸出一些離譜的結果。(2)embedding 層:需要考慮更多的因素,如商品屬性、歷史資訊、採購相關等。在整個模型構建完成後,進行了一些模擬和線上驗證測試。在模擬系統中,週轉結果會高 1 天左右,缺貨能降低 1 pt,整體來說能達到目標;線上上驗證中,最終週轉持平,缺貨能降低 2 pt,是一個比較好的效果。首先簡單概述一下庫存模擬邏輯。不論是預測還是補貨調撥都需要一個有效的評判,庫存模擬就是對整體供應鏈系統進行模擬評判的一個比較重要的過程。簡單的邏輯抽取如下:整個模擬過程實際就是基於歷史資料使用不同策略進行迭代回溯的過程,這個過程中需要考慮很多不確定性,包括銷量、供應商送貨等的不確定性,如銷量可能會有一定波動,供應商發貨可能延遲,下單後供應商是否能接貨送貨等。在確定這些隨機項後,會對不同的策略進行歷史回溯,來對比相關策略。右邊左圖中顯示了不同策略模型在同一系統中的表現,三個策略對不同指標的表現可能不一樣,會根據實際場景的需要對策略進行評估選擇;右圖則展示了同一策略在不同引數下的評估,哪個引數最終對模型的影響較大,也能達到較好的驗證。最終會對模擬系統的可用性和一致性進行評價,就能得到整個模擬系統對於補貨實際應用的保證。補貨和模擬系統的建設,由問題出發、建模、模擬評估的一系列過程形成了一個很好的閉環。首先介紹一下調撥問題的背景:倉庫分佈在不同的省份,每個倉會負責不同區域的發貨,如果倉發貨給本區域的顧客,那麼送貨時效是能得到保證的,不論是當日達還是次日達都能得到保證。但如果庫存經營不善,有倉庫發生缺貨,該倉覆蓋區域的顧客下單時,就不能從此倉庫進行發貨,由此會產生跨區配送,雖然跨區配送會使用較近倉,但距離實際還是較遠的,整體來說當日達、次日達就無法得到保證,使用者的整體體驗就會下降,整體的次日達指標也無法完成。故在檢測到倉庫快缺貨,採購也無法及時到達時,需要進行相關的調撥,能在它將缺貨時到達,這樣整體的次日達就能得到保證。(1)可以解決倉間平衡問題。如有些倉庫存較高,有些倉庫存較低,這時就可以透過調撥進行倉間平衡;(2)可以提升次日達率、降低拆單率(某品在某倉沒有,在另外倉有,就會產生拆單跨區配送);在瞭解調撥問題後,透過整體目標來抽出關鍵指標進行建模。在調撥計劃的實際場景中,主要關注以下指標:由此可見,調撥問題是一個帶約束的多目標規劃問題。為了更好求解,需要對指標進行量化:(3)預計缺貨:可以透過日銷、庫存、調撥週期,構建預估函式進行表達。(1)調撥量不應該超出可調撥上限。調出倉本身貨量不夠,就無法完成調撥。(2)應該滿足收貨倉的需求量,但不應顯著高於該需求量。如實際需要 100 件,不應該調撥 200 件,滿足即可。(3)每個倉應該滿足最小起訂量。如求解後得到 A 倉往 B 倉僅調撥了 2 件,運輸成本較高,達不到整體最小的起訂約束。(4)應該滿足箱規約束,不配送散件。即一般調貨按照整箱調撥,如一箱一般為 10 件,如果需要調撥 12 件,就需要規到 10 件的約束中。(1)需要決策每個品倉應該如何進行調撥,即調撥量矩陣;(3)有了問題、約束、求解變數後,就能對問題進行公式化。上圖展示了多目標的次日達、成本、缺貨的線性以及非線性規劃,還有限制條件的相關公式化結果。在預估過程中需要考慮以下幾個量化問題:簡單的建模可以直接建立一個多目標線性規劃問題,但實際需要進行很多更深層次的考慮,如會考慮到整體指標的效用函式,這些效用函式總結出來其實都是非線性問題,這樣就需要轉化為非線性規劃的求解。但不管是哪種問題的求解都是多目標求解,針對於多目標求解主要使用了以下兩個方案:(1)組合目標最佳化:雖然有不同的目標,但可以透過歸一化量化指標,對預設的更關注的指標進行加權等操作,將多目標轉化為單目標。如果問題是求解整數問題,求解時會有很多整數規劃的 solver;如果是非線性不太好求解時,也有一些基礎的元啟發式及相關最佳化演算法,如 EA 遺傳演算法、ALNS 領域搜尋演算法等。這樣就能求解出單目標最最佳化結果。(2)多目標最佳化:可以直接求解多目標的帕累託前沿。整體思路為:多目標最佳化有不同的目標,在求解過程中勢必會有一些解,如 A 解相對於 B 解來說所有的目標都是比較差的,則 A 解就不會被選入集合中。所以需要找到帕累託前沿中在某個目標上是最優可取的,在拿到所有滿足某個目標的求解結果後,在根據實際應用場景中更關注、更優先選擇的指標,直接或者加權選擇相對應的最優解。透過以上兩種方法,再結合線上情況,求解的整體效果也比較顯著:最終在某些相關品上,整體的缺貨率能下降 5 pt,次日達上升 10 pt,單次調撥能降低 1.5 pt 左右的缺貨率。整體來講,除了補貨以外,整個調撥的結構也是按照上述的流程進行設計的。這兩部分構成了整個庫存決策的核心 OR 相關演算法。問答環節
Q1:週轉和缺貨指標間有衝突時,如何綜合評價最終的效果?A1:這個問題需要分兩個角度來說明。第一個角度是企業本身對週轉和缺貨的業務目標有相關的規劃,第二就是演算法也有一些相關的評估,會根據歷史在不做最佳化的情況下週轉和缺貨狀況,在做最佳化平衡後就會分析相關最佳化會使哪些空間得到保證提升。主要會結合歷史統計和業務需求來綜合評價。Q2:週轉和缺貨等業務指標和補貨如何進行模擬?通常最終的指標不單是補貨的影響,還會受到調撥、主配等業務的影響。A2:總結一下這個問題應該是想知道模擬如何更好的對調撥和補貨進行切分。針對這個問題,在整個模擬體系中會模擬很多環境因素,包括整體供應商接單、是否能按時發貨等,這些對補貨和調撥都會有共同的影響。由於模擬系統是一個追溯歷史的系統,會每天回溯序列鏈路,基本上序列邏輯是補貨完以後調撥,每次串聯補貨/調撥的最終庫存進行輸出都會對相關指標有影響,最終模擬結束後會得到歷史時間段內的庫存變化圖,進而計算週轉、缺貨指標。所以在整個模擬過程中,可以固定某個條件來調整另外的條件,也可以同時進行,最終透過綜合指標對策略進行評估。Q3:如何構建模型的每一塊策略與最終業務指標的聯絡和評估體系?如評估預測還是庫存策略影響了最終的週轉和缺貨指標。A3:針對這個問題,我們有一套比較完善的歸因系統。對業務來說核心指標是週轉、缺貨、次日達等,我們會針對發生了缺貨、高週轉等問題進行追溯和詳細歸因。之前有簡單介紹過歸因的思路,首先找到實際問題發生點,然後往前進行一步一步地追溯。如發生缺貨,就需要從缺貨發生點往前推,到底是由於供應商送貨時間太長無法達到要求,還是下單後採控/業務未接單,又或者是下單後供應商供貨無法完成以及取消等,排除這些情況後,再看補貨的量是否能滿足這段時間的售賣,如果都排除,再往上追溯預測的準確性。整體來說就是建立了比較完善的歸因系統後,就可以定位每個環節可能出現的相關問題,進而進行最佳化。Q4:智慧補貨是純自動化的方式?還是輸出建議補貨量,然後進行人工稽核?A4:現在的主體流程還是演算法輸出採納建議的方式。目前的採納率也比較高,但最終的目標是想做到 100% 的自動化率。A5:關於補貨和調撥平衡有一些比較重要的指標:供貨滿足率和 VLT 送貨時長。在供貨滿足率較高時傾向於補貨,這樣供應商比較容易送貨;在供貨滿足率不是很高的情況下,依舊會進行補貨,但同時調撥也會進行檢測,如果超過預警範圍就會及時觸發調撥,以保證庫存,防止擊穿庫存形成缺貨,兩者相輔相成。Q6:上線前演算法的效果可以由模擬驗證,但如何衡量模擬本身的效果?具體模擬時有什麼最佳的實踐嗎?A6:針對模擬系統的建設,整體的實驗效果還是比較好的,模擬系統在構建過程中會把所有的不確定性都考慮進去。在做模擬準確度評估時,會拉取歷史一段時間內的資料,找到排除任何可能的影響因素如大促、疫情、不採納等,完全根據策略和預測走的實際線上的指標;再回溯這段時間內依據相同的引數策略進行模擬,得出模擬的指標;對線上和模擬指標進行相關評估,就能得到模擬系統對於線上實際發生情況的偏差。目前已經構建了一個完整的模擬平臺,也進行了相關實驗,能對模擬系統進行有效的驗證。Q7:可以詳細的介紹一下雙塔模型是如何輔助學習的嗎?A7:這塊內容也是一個探索性的嘗試,針對 RL 模型我們嘗試了單塔和雙塔模型,以及雙塔輔助的學習。上面分享過程中也提到,之所以要使用雙塔輔助是因為在輸出時如果不加入 loss 限制就會出現很多詭異的值,如補貨點特別高、補貨量特別少等,雖然在理論上是合理的,可以理解為多次少補的策略,但實際情況需要考慮到供應商有可能不接單的情況,按照實際經驗來講可能會偏離實際應用,所以在最佳化時會加入這個限制,並且在調優時也會根據主業務的傾向性進行相關調整,最終得到了當前模型。A8:這個問題在之前的分享內容中提到過,供應商可能有很多的不確定性,如供貨滿足率、供應商可能不接單、或者接單後無法保證送貨時長等,針對這個問題,我們在做 VLT 統計時會加入供應商狀態的區分,會進行區間統計,對更近的 VLT 會進行較大加權,更遠的送貨時長來進行較小降權,最終調整得到加權的 VLT。為了得到較好的驗證效果,在下次接單時可以評測當前預估結果的準確度,得到最終的 VLT 調整模型。Q9:按渠道預測的銷量如何合理的分配到各個倉?建模也是以運籌模型為主嗎?A9:在做渠道預測時,是分不同渠道進行相關預測的。在渠道到倉的彙總時,也有一個整體的分配邏輯。這個部分在整個預測和補貨聯動的過程中是同步調整的,即整個渠道發哪些倉、由哪些渠道進貨的情況下,是有拆分比例的。根據細粒度的預測,並且進行了有效的準確度評估後,再按照整個比例進行彙總,整體總量的偏差不會特別高,是能夠得到保證的。這是一個由分到總的彙總分配過程,不是以運籌為主。Q10:有的計劃人員是預測多少補多少的思路去理解的?如何更好的向計劃人員解釋補貨和業務的差異?A10:計劃輸出時主要考量的是採納率和自動化率。在業務使用過程中會有白盒化的過程,即不是讓業務只拿到最終的結果,而是每一步的調優都會有一個可解釋性的輸出,這樣有利於業務接納補貨輸出建議,並能夠有效的解釋補貨業務。Q11:對於銷售稀疏的長尾品,安全庫存該如何設定?A11:針對長尾稀疏品會構建專門的長尾補貨模型。從預測端來講,是一個分步預測的過程。長尾品不僅要考慮它的準確度,更重要的是需要度量銷售時長分佈的偏差,在補貨量的基礎之上還會進行相關 Buffer 的調整,也會統計判斷是否是歷史易缺貨品,得到其缺貨機率。在安全庫存設定上,結合分佈預測和機率調整,就能得到每次長尾以及易缺貨的 Buffer 調整程度。Q13:一般多久能求解出來?多目標最終如何選擇使用哪個帕累托最優解?A13:在求解時,首先會對子問題進行求解,然後再進行最終綜合求解,這樣就轉化為分步式求解的問題,總體時間就能比較短。關於最終選擇哪個解的問題,是有目標權重的預設。如當前拿到的所有解,每個解都是在某個條件下是最優的,但此刻的補貨最希望解決的是次日達的問題,就可以將次日達的權重調高,其他的權重放低,在滿足這個條件的所有解中,再計算綜合分數取 Max 值,這樣就能得到在帕累託邊界上最符合需求的值,此外也可以按照優先順序進行選擇。這個部分的挑選主要取決於具體的應用場景,目前是按照加權的方式進行選擇的。Q14:調撥是主要解決倉庫庫存平衡問題嗎?如果倉庫庫存存在補貨的時候,已經合理分配,此時調撥是否可以避免?A14:調撥能解決倉庫庫存問題,但在現有場景中,調撥主要解決的是缺貨和次日達的問題。在倉庫庫存水平較低時,如果不進行調撥,僅依靠補貨顯然是無法到達的,這時必須要透過調撥來解決。從理論上考慮,如果倉庫在補貨時已經合理分配了,所有都很完美,補貨就能解決一切問題。但實際場景中會存在各種不確定性,如供應商有不確定性,接單送貨也有不確定性,綜合所有不確定性的影響,勢必會產生相應偏差,這時調撥就是這些偏差的兜底邏輯,能夠去彌補產生這些偏差之後的最差情況。Q15:是否有量化預測偏大或者偏小的損失?然後考慮最小的損失去補貨?
A15:這個問題應該是想知道是否用了魯棒最佳化。魯棒最佳化是要考慮到最差的情況下的最優解,在調撥的場景中沒有特別做這方面的用途,但是在其他場景如倉網規劃中,會對這個問題進行較好的研究。如在訂配演算法中,我們不希望有任何的問題會影響使用者的次日達體驗,尤其是在倉庫快遞分配部分。這時會結合先前的預測偏差等進行魯棒性的最佳化,會考慮預測最差值時候的魯棒最佳化結果。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70024420/viewspace-2938584/,如需轉載,請註明出處,否則將追究法律責任。