天天看點

DTC補貨實戰:從算法到落地

作者:閃念基因

“ 我希望衡量我們ai團隊價值的,不是創造了多麼精深的算法,而是跨越算法到落地間距離的能力。”

近年來随着電商行業從增量市場逐漸成長到了存量市場,不少店家的規模已經達到一定水準,營收的增長也開始放緩,這時候對電商管道的供應鍊管理就開始被大家所關注到。

供應鍊就像古代戰争的糧草供應,一兩場閃電戰或許看不到糧草供應的重要性,但隻要涉及持久、大型戰役,那必是三軍未動,糧草先行。

現在的商場也是一樣,在企業規模較小,處于高速增長、占領市場的階段,供應鍊不一定被關注到;但隻要規模達到一定程度,供應鍊将會像企業的心髒一樣,用更少的資金流,為企業的業務運轉提供更穩定的商流,成為企業“先為不可勝”的條件之一。

有幸的是,在我們與某個大KA客戶合作的過程中,專門就DTC場景的補貨做了深入的探索,從經典的安全庫存理論出發,到針對性地設計調整,再走向價值預測算,最終到落地,得到了業務名額優化。本文将我們的思考、實踐分享出來,與各位看官交流,希望能有更多的收獲 :)

01

算法設計

供應鍊的話題在國内已經發展有20年之久了,在方法論層面,我們非常推崇劉寶紅老師《供應鍊的三道防線》所沉澱的理論,從預測到補貨到采購、從算法到流程到組織架構,都有非常鞭辟入裡的見解,我們也得以站在巨人的肩膀上創造價值。

而在補貨領域,比較經典且在工業界廣泛應用的,還是安全庫存理論,較少涉及複雜的運籌學或者強化學習。當我們假定Lead Time恒定時,一般的安全庫存計算方式可以表示如下:

DTC補貨實戰:從算法到落地

其對應的數理邏輯可以由下圖解釋,假如未來實際發生的銷量服從正态分布,那麼我們ai模型預測結果往往是對未來的期望,如果我們直接拿預測值來補貨,将有50%的機率會造成缺貨。

這時候我們就期望在指定的 Service Level 情況下,庫存能保證不缺貨,實際上就是求其對應置信區間上的值。這是對一天的預測補貨來看的,考慮到當天下的補貨訂單可能要隔幾天才能入庫,在假設銷量是正态分布的情況下,多天安全庫存就是上述的公式。

DTC補貨實戰:從算法到落地

圖1:預測值、安全庫存、Service Level在統計上的關系

更進一步,工業界在一個決策周期内(如三天補一次貨、一周排一次産等),銷量一般不會服從正态分布,但隻要我們的預測模型選擇恰當,往往誤差還是可以接近正态分布的,這時候我們也可以用同樣的方式計算安全庫存。比如某些場景下,周一到周日銷量呈現周期性變化,那麼我們在模型中加入日期的因素即可。

道理雖然簡單,但結合到實際業務會發現,這裡的正态分布假設存在很大問題。未來每一天的預測誤差服從同一個正态分布,在DTC的場景下很難達成此條件。

1.1 DTC的特殊性

電商業發展到現在,大家幾乎都能感受到,每一天似乎都在做活動,每一天好像都可以領優惠券,我們從資料上來看不難發現以下特點:

  1. 促銷活動頻繁。像我們本次合作的客戶,光自家的促銷平均一個月就促銷4次,每次持續3~4天,還不算平台合作類的聚劃算、百億補貼;
  2. 促銷刺激顯著。不論促銷多頻繁,促銷力度如何,相比于非促銷日,銷量都有一定增長;特殊日期的促銷相比平常促銷又有顯著增長,如38、88、99大促、七夕、年貨節等等;而待促銷結束後,銷量基本就立刻回到了日銷水準;
  3. 促銷存在相似性。不論是周期性的頻繁促銷,還是特殊節日的促銷,從總量、促銷期間每日銷量占比、不同商品的銷量占比等方面都存在相似性,同一個模型的準确率、誤差分布表現,也存在一定相似性;
  4. 個别促銷存在計劃性。像雙十一、618,或某些頭部主播的直播活動,都有強烈的計劃導向。品牌方都會與合作方提前有明确的銷售計劃,這時整個供應鍊往往以約定的計劃值為導向,而非通過曆史銷量預測的方式;

因為上述的特性,我們本次合作暫不将618和雙十一的大促考慮在内。而對于剩下的時段,很自然不會有大一統的預測模型,能使得每天的預測誤差服從同一個分布,供安全庫存理論來補貨。那我們要怎麼辦呢?

1.2 基于聯合誤差分布的安全庫存計算

基于DTC的特性,我們至少可以對促銷和非促銷分開模組化,當我們的模型選擇恰當時,可以保證在單個模型預測的誤差中服從正态分布。那麼這時候每一天的預測可以通過不同模型拼接起來,每個模型回測曆史時也可以得到預測誤差,那按照上文安全庫存理論的基本思想,隻要得到在Lead Time期間各模型誤差的聯合分布,找到對應Service Level下的安全庫存,問題就可以迎刃而解!

需要注意的是,當Lead Time覆寫的促銷和非促銷天數不同,對應的聯合誤差分布也不同,例如兩天促銷一天非促銷和一天促銷和兩天非促銷,在相同的Service Level下的安全庫存是不一樣的。

DTC補貨實戰:從算法到落地

圖2:DTC促銷頻繁,每日銷量變化巨大

基于這樣的思路,我們開發了相應的補貨體系。這裡為了與下文呼應,我們定義3個子產品:

  1. 預測模型,即促銷和非促銷的融合模型。
  2. 決策模型,目前是基于聯合誤差分布的安全庫存模型。任何能給出補貨方案的方式均可視為不同決策模型,包括不限于運籌優化、強化學習等模型。
  3. 仿真模型,以一定業務邏輯構成,輸入預測、決策模型及曆史資料或未來預測資料,對曆史或未來業務表現進行模拟。

關于這三個子產品的深入探讨,有機會我們可以再寫一篇文章來讨論,這裡重點介紹DTC如何用此方式來落地的。

我們通過仿真回測以及基于仿真優化的超參數搜尋方式,驗證了模型的有效性。我們根據曆史銷量、庫存,加上一定的業務運轉邏輯進行仿真,在相同業務流轉情況下,假如用我們的方式來補貨,業務名額會發生怎樣的變化,如下圖3,就是某段時間用我們的補貨方式下的庫存天數和缺貨率仿真結果。與人工運轉下來名額相比,有超過20%的改善。

DTC補貨實戰:從算法到落地

圖3:仿真庫存天數與人工庫存天數

而從細節上看,如圖4,ai補貨的節奏比較平穩,補貨值會随未來的預測銷量波動而相應變化。而庫存也有像安全庫存示例圖一樣穩定地高低起伏,看起來很優雅:)

DTC補貨實戰:從算法到落地

圖4:仿真下的補貨值與庫存表現

需要注意的是,目前的仿真測算的僅僅是理論值,因為生産中有各種異常因素的影響,理論值往往隻是能達到的上限。盡管如此,我們至少驗證了目前算法存在一定落地價值,剩下的就是落地過程中如何保障理論值和落地值之間的損失盡量小了!

02

落地前的準備

算法在落地過程中,也會對業務的管理帶來很多幹擾。為了確定高品質的落地效果,我們采用了MLOps和仿真相結合的理念,來管理落地過程。在落地之前,我們的客戶提出了兩點顧慮:

  1. 模型在仿真回測曆史的表現不錯,但如何保障模型對未來的表現持續穩定?
  2. DTC經營商品較多,能否有科學的方式分批上線,并確定每批上線的都表現良好?

我們對此一一做了解答。

2.1 模型性能穩定性

MLOps的基本認知裡,我們認為開發是相對便宜的,持續性運維線上模型是昂貴的。在曆史回測效果良好的模型隻是開始的第一步,更多的挑戰是上線後的持續運維,以及不可避免的模型性能下降。我們的補貨模型,或是ML模型,我們需要持續監控過程,當模型性能顯著下降時及時幹預,有可能是重新訓練模型,也有可能是調整輸入資料。

DTC補貨實戰:從算法到落地

圖5:MLOps的模型性能監控理念

尤其是在商業環境變化多樣的工業界,任何戰略的調整、市場的變化都可能導緻模型性能下降。像DTC前幾年直播、淘寶客還是熱門的話題,近幾年熱度就下降了,他們對銷量的刺激也在減少。

DTC補貨實戰:從算法到落地

圖6:與data centric理念相結合的模型性能保障體系

基于此,我們以業務同學最關心的庫存天數和缺貨率作為核心監控名額。除此之外,我們也可以通過仿真做一定的事前預警。

曆史不同時段的穩定性分析,如上文所述,我們通過仿真優化的方式得到的模型在某段期間内表現良好,我們也可以用同樣的超參數來仿真曆史不同的時間段,來觀察同樣的決策方式穩定性如何。

如下圖7,我們用同樣的超參數仿真了另一段期間的曆史資料,可以看到ai的庫存天數和缺貨率在均值上與之前期間接近,并且也是穩定比人工表現好。由此證明同一套決策超參數确定的模型,在不同時間段是相對穩定的。

DTC補貨實戰:從算法到落地

圖7:同套決策超參數下不同時段的仿真庫存天數

周期性特殊活動的穩定性預警,同樣是圖7期間的仿真回測,細心的同學可能發現ai缺貨率有3個高峰點。結合DTC的促銷計劃我們不難發現,這三次分别對應七夕、88、99大促,這是每年都會做的大促銷。而當我們的預測、決策模型沒有調整時,每年的仿真回測都會發生同樣缺貨率增高的現象。

反過來說,對于還沒到的大活動,我們都可以用過去活動期間做仿真回測,以觀察目前模型是否有信心度過今年的同樣活動,這将給我們應對未來的變化留下了機會點。

這裡以88大促為例,我們可以用前幾年的88曆史資料做仿真超參搜尋,搜得的結果可用于後續88期間的特定超參,如圖8所示,相比上文在長時間内穩定的超參結果,88特定超參可在88期間将缺貨率優化4%,而如圖9所示,相應的庫存天數沒有造成太大影響。

DTC補貨實戰:從算法到落地

圖8:特殊活動下超參調整缺貨率對比

DTC補貨實戰:從算法到落地

圖9:特殊活動下超參調整庫存天數對比

理論上,我們可以每天都對未來一段時間做穩定性預警,吸取曆史的教訓,及時對預測或決策模型做适當調整。在DTC場景下,周期性大活動尤其有必要,比如38婦女節、88大促、99大促、年貨節等等。

2.2 基于仿真的上線準入機制

當穩定性有保障後,随之而來的是如何分批次落地的問題。雖然我們能在仿真測算時,整體的業務名額良好,但實際落地不可能直接全量落地,而是分批次的。

這時候孰先孰後也是有講究的,我們更希望“最有把握”,落地後優化名額更多的先落地,這不僅能提振團隊士氣,也能在成果出來後得到更大的授權。

落地後名額變化不大的暫緩落地,它們可能有特殊的影響因素,需要針對性調整模型;落地後名額變差的,有可能它們就是很難用ai自動化補貨,需要人工幹預的。

我們如何将這些批次區分開呢?在一開始我們認為首批落地的商品需要符合下列條件:

  1. 銷量持續穩定
  2. ai預測精度持續良好
  3. 預測誤差持續穩定

而實際實踐下來後發現這些商品雖然模型落地後能表現良好,但與人工相比優化空間并不大。反思之後發現我們進入了一個誤區,這些篩選條件指向的都是銷量穩定、讓預測模型表現良好的商品,這些商品雖然補貨模型能很好地應對,但人工也同樣能很好地應對。

反而對于銷量不太穩定,人工不太容易做預測的商品,預測模型通過類似場景的學習,決策模型經過精密的測算,其實能比人工更少犯錯,進而得到更好的優化潛力。ai不就是在不确定中找到确定性,進而幫助人更好地決策麼?

既如此,何不用仿真拿曆史的資料來判斷到底選哪些呢?是以,我們提出了基于仿真的上線準入機制。

以仿真回測的業務名額與人工名額之間的差距作為是否達标的判斷依據,分析未達标的案例弱于人工的原因,相應地調整模型,再用仿真測算,直至達标,符合上線标準。對于已達标的,我們也可以根據仿真回測業務名額相較于人工的優化潛力做排序,讓潛力大的先落地。

DTC補貨實戰:從算法到落地

圖10:基于仿真的上線準入機制

拓展開來,仿真->歸因->模型調整的閉環,不光适用于sku的上線準入,同樣也适用于新模型的上線準入。小到模型的超參數調整,大到模型結構變換,如lgb換成transformer,都适用這樣的體系。

03

落地過程的挑戰

兜兜轉轉,我們的模型終于到了要真正接受考驗的時刻,在此過程中也受到了充分的挑戰。

3.1 采納率不高怎麼辦

在落地的試運作期間,通過監控發現業務同學在未加幹預的情況下對補貨推薦值采納率很低。對典型案例做了分析總結後發現,其主要根源出現在以下兩方面,對銷量的高估,以及對AI補貨不夠信任産生的不安全感。

以某個商品為例,從圖11中可以看到人工有兩次補貨,而當時的實際庫存都高于ai推薦的最大庫存,從實際庫存每日消耗來看,其銷量也是持續低迷的。由此我們可以判斷這兩次是不合理的補貨行為。

DTC補貨實戰:從算法到落地

圖11:根據實際案例加密轉換後的補貨場景回溯示意圖1

在和業務同學的訪談中我們得知,這兩次補貨分别對應了兩場重要的促銷,倉管同學受到前端銷售同學的壓力,并且缺乏此商品曆史銷量趨勢的感覺,補了較多的貨。

這也從側面證明了ai預測的優勢,一方面ai可以站在更全局的角度做預測,使得銷售和成本在最優的水準,既不會為了營收多備貨,也不會為了減少庫存成本而損失銷售機會;另一方面,ai在最細的粒度可以做到更精準的預測,對于重要的促銷,不僅可以知道知道銷量的增長,還可以知道哪些商品漲的多哪些漲的少。

為了減少類似情況的發生,我們給業務同學開發了相應的看闆,可以讓業務同學感覺到各個商品曆史銷量趨勢,增強對ai預測的信任感,而非隻提供一個冷冰冰的推薦補貨值。

因不安全感,做的額外補貨。以此商品為例,可以看到業務同學也補了兩次貨,但此商品銷量較穩定,沒有對庫存造成太大負面影響,真實庫存水位也在ai推薦最大庫存量之下。而從ai推薦訂貨點和實際庫存量的對比來看,業務同學的補貨時機已經非常接近ai推薦補貨的時機了。根據庫存和銷量推算,如果業務同學在第一個補貨點沒有補貨,那麼在第二個補貨點時,ai已經會推薦其補貨了。

DTC補貨實戰:從算法到落地

圖12:根據實際案例加密轉換後的補貨場景回溯示意圖2

同樣在和業務同學的訪談中得知,當時他密切關注着這個商品,但ai遲遲不推薦他補貨,業務同學擔心ai是不是把此商品漏了,于是分别補了2次,但考慮到與我們的合作,又不敢多補,非常糾結。而因為業務同學在這兩天補貨了,導緻ai拉取最新庫存時發現目前庫存充足,也就不補貨了,又加深了業務同學對于ai是否漏了此商品的疑慮。

類似的行為雖然不會對我們主要考核的庫存水位和缺貨率,但如果每次都是這樣小批量地補貨,一定程度會對物流、揀貨造成額外的成本,同時也增大了我們補貨推薦的使用成本。

相應地,我們在與使用者互動的補貨推薦表中額外增加了ai推薦訂貨點和最大庫存量字段。前者可以減輕業務同學的不安全感,讓他知道雖然今天ai沒推薦補貨,但下次肯定就推薦了;後者可以在業務同學堅持要補貨的情況下,讓業務同學可以參考當天應該補多少量。

由此我們确認了與業務同學的互動形式,如圖13所示,業務同學不僅可以看到推薦補貨值,如果在特殊情況下如需提前補貨,業務也可以根據推薦訂貨點和最大庫存作為參考做更好的決策。

DTC補貨實戰:從算法到落地

圖13:最終與業務同學互動的補貨表

我們在落地過程中,也發現了一個有趣的現象,供大家參考:對于業務流程較為成熟的企業,直接用ai做強制實行,會對現有業務流程帶來極大挑戰,是以AI實施過程中,在現有流程内,幫助業務同學做更科學的決策,會幫助更好的産生業務價值。

當我們正式上線運作後,采納率提高了60%以上,業務名額也在3天後有了顯著提升。

3.2 歸因分析

在持續的落地期間,我們在監控業務名額的同時,也需要對業務同學沒有采納補貨推薦值的情況進行分析,以便深入了解是模型本身問題,還是流程問題。在初期階段這是個極繁瑣、工作量巨大的工作。

這個過程需要準确而全面的采集業務同學的回報是最關鍵的。對每一條未采納推薦值的回報,需要用資料回溯當時的場景,确認其回報并歸結到有限的标簽,同時會遇到大量的文字解析工作,比如,同樣的問題,業務同學可能用不同的回報文字描述;相似的回報文字,背後對應的原因可能不一樣,觸發的多補或少補的行為也不一緻。

幸運的是,觀遠擁有強大的BI産品,以及服務數百家客戶後沉澱下的分析方法論,順利完成了歸因分析。下圖是我們某個階段低采納的歸因結果。

DTC補貨實戰:從算法到落地

圖14:未采納的歸因分析

通過歸因分析,我們一次次找到了目前模型的不足,加深了對業務的了解。比如:

  • For99大促提前備貨。在模組化之初我們和業務方明确了Lead Time是3天,如果9月9日有活動,我們在9月6日把活動期間的貨量補足即可。

但是對于大促,業務同學往往會提前備貨,大促的貨量不是一次性能補足的,也沒有那麼多現成的貨運車輛來運輸,是以都是提前分批補的。這就要求我們的補貨模型針對大促補貨做額外調整。

  • 滿足日銷需求。其本質上是我們模型對部分商品的非促銷時段預測不準确。而經過我們深入分析,所謂的“非促銷”時段其實是未被感覺到的促銷,比如部分百億補貼、聚劃算等未被整合到輸入資料的活動,或者原計劃的活動臨時調整了促銷商品卻未被模型采集到。

我們和客戶的IT團隊溝通後也得知,理論上所有的促銷活動都能采集到,但都需要成本,是以有部分體量不大、低頻發生的活動都不建議采集。相應地,這也要求我們的預測模型需要有感覺計劃外活動開始和結束的能力,及時調整預測值以做到更好的補貨。

除了模型本身的問題,AI落地與流程的執行配套也非常重要,比如:

  1. site需求,site可視為前端銷售同學,他們希望倉庫多備貨,對銷量有一定的高估,會給予補貨同學一定的壓力,導緻補貨過量,這對AI補貨是一個幹擾。劉寶紅老師在《供應鍊的三道防線》中也提到,如何讓整個公司用一個預測值,一直以來是個巨大的挑戰。
  2. B倉無貨防斷貨,DTC的網絡結構是典型的多層級倉儲結構,當我們的某些熱銷商品在全網缺貨時,業務同學會緊盯工廠的生産,一旦生産出來就囤貨在附近的DTC倉庫,即便是以可能犧牲該倉庫的庫存水準和跨倉,也要防止出現全國性斷貨的現象。

這兩種場景,對于業務影響稍有不同,前者會造成了過大的庫存成本;而後者會減少缺貨,一定程度上對市場是有利的。

04

不足及可優化點

經過我們的努力,我們實驗組的庫存天數比對照組降低了14.8%,缺貨率降低了6.9%,得到了客戶的肯定,當然其中也有一定的不足值得我們未來持續努力。

4.1 面向财報值的優化

在上文對于業務名額的優化過程中,我們提到了落地前的理論值測算,上線後努力保障落地後業務名額的改善,我們看到了業務名額從理論值走向落地值的過程。站在商業的角度,我們并不希望止步于業務名額,而是希望獲得财報值。希望後續有機會邀請财務同學全面地核算我們優化結果收益。

落地值和财報值比較:

  1. 落地值僅考慮核心考核kpi,未體系化地考慮綜合成本。比如項目未考慮揀貨、物流費用,如果高頻少量補貨就可以作為“投機取巧”的手段;
  2. 落地值未核算到金額。比如我們将整體庫存水準優化了10%,并不代表我們的倉儲成本就能下降10%;
  3. 模型需接受持久性考驗。

财報值也可以反哺模型,更全面地考慮問題,完善優化目标。期望未來有越來越多的項目,能收獲清晰的财報值,讓我們可以看到AI對企業的更加核心的價值。

4.2 內建預測、決策和仿真的補貨産品

ai模型帶來了巨大的價值的背後,不容忽視的是,其強大的産品、完善的流程使得ai模型能快速驗證、疊代,進而産生價值。補貨場景下,我們也需要預測、決策和仿真相結合的閉環,讓補貨系統更加友好,人性化,更接近管理的需要。

對于算法同學來講,他們可以:

  1. 開發新的預測模型,從lgb到transformer或是MQ-RNN;他們也可以調整決策邏輯,從安全庫存邏輯改成運籌優化問題或者強化學習求解;他們也可以在目前模型上超參搜尋,得到更好的表現。但無論哪一步,當他們送出代碼後,系統都會做仿真回測,驗證新方法的潛力。
  2. 對于确定要落地的模型,當和業務同學溝通好後,産品也能基于仿真上線準入的思想,分批次推薦落地商品,并告知哪些商品需要再做調整。
  3. 落地過程中,産品能對大部分的未采納情況做自動化歸因分析,以高效提升采納率。

對于算法同學,任何新研究成果都可以通過這套流程快速得到驗證,加快商業價值的轉化。

對于業務同學來講,每天補貨時,我們的産品可以告訴業務應該如何補貨,背後的決策鍊路是多種預測和決策模型經過曆史仿真所得到的最優組合。業務同學可以按自己的了解修改與其相關的參數,比如:

  1. 預期服務水準從95%調整到97%,産品會調整今天補貨方案的同時也告訴他,2%的服務水準提升,經過曆史的仿真回測,預計會帶來x%的庫存費用提升,最終綜合财務值變化了y%;
  2. 業務同學也可以根據自己得到的資訊适當修改未來的預測值,比如下周五有場臨時直播,預計要2w箱的貨,産品也會告訴他這幾天如何有節奏地補足。
  3. 對于有自己補貨節奏的業務同學,可以輸入自己了解的補貨節奏,而仿真也會告訴他兩種補貨方案之間的費用差別。

我們認為好的補貨系統,不是去強制補貨指令,而是幫助業務做更好的決策。補貨過程是可視可解釋的,也能落實到看得見、摸得着的費用上。

作者:凡飛,從快遞到快消,一個平凡的供應鍊算法深耕者。

來源-微信公衆号:觀遠資料技術團隊

出處:https://mp.weixin.qq.com/s/wC8cdNn-pBCna4jxYGPStQ