|
編輯整理:Hoh 出品平臺:DataFunTalk 導讀:如果科技讓出行更美好,可以推動出行的進化,那么AI算法模型的應用,就是其中一個最大的推動力。本次分享的主題為算法在哈啰順風車中的實踐應用,將首先介紹算法同學依托于什么樣的算法平臺來解決哪些具體的業(yè)務場景;其次,介紹匹配推薦引擎,包括引擎的架構,召回和精排模塊的演進;再次,介紹交易生態(tài)治理算法,包括治理算法的架構和模型的演進;最后,介紹智能營銷算法的架構和模型的演進。 01業(yè)務介紹首先介紹下哈啰的算法平臺基礎建設,給算法同學在業(yè)務中落地算法提供了有力的保障。 1. 平臺基建
其實最開始的時候,我們的特征和模型是跟業(yè)務強耦合的,導致每次模型迭代,服務端都要搞發(fā)布,迭代效率很低。所以后面我們就把特征和模型全部剝離出來,放到機器學習平臺去。 有了機器學習平臺的一站式解決方案,算法同學可以方便快速的進行順風車業(yè)務算法的落地。下面介紹一下,順風車業(yè)務算法的構成。 2. 順風車業(yè)務所以整個交易鏈路,涉及3塊算法,第一塊是匹配推薦引擎,第二塊是交易生態(tài)治理算法,第三塊是智能營銷算法。 首先介紹一下我們的匹配推薦引擎。 02匹配推薦引擎此模塊主要分3個部分來講,從架構到召回模塊演進到精排模塊演進。 1. 架構我們首先介紹一下推薦引擎的架構。從數(shù)據層來講,數(shù)據來自于3個方面,一個是客戶端傳下來的實時上下文數(shù)據,比如乘客訂單的價格、起點距離等上下文特征。一個是flink任務計算的準實時數(shù)據,比如同一筆乘客訂單被多少司機看到,所有這些看到的司機中跟這個乘客訂單的平均順路度,起點距離等。一個是離線計算的寬表特征,比如對于車主接單行為的畫像特征。 從數(shù)據層到模型匹配層,模型層主要分為召回層、粗排、精排、重排4個階段。 從模型層到業(yè)務層,針對每個子場景都定制一套自己的模型,我們的順風車從2個大場景來說,分為車主側和乘客側;而車主側又分為臨時行程、常用路線、附近找單、跨城找單等接單渠道。 接下來主要講一下召回模塊和精排模塊的演進。 2. 召回模塊召回模塊面臨4個挑戰(zhàn): 第1個挑戰(zhàn)是需要實時計算的邏輯太多,非常耗時。我們是基于位置的服務,當車主發(fā)單后,需要外擴經緯度形成矩形框后,在矩形框內進行路徑規(guī)劃、順路度等計算邏輯,這些都是需要實時計算的。特別是當跨城訂單里程很長的時候,軌跡點特別多,耗時更加嚴重。 針對這個問題,我們的一個解法是添加了軌跡壓縮算法,軌跡壓縮率達到80%,一定程度上降低了計算的壓力。 第2個挑戰(zhàn)是訂單有且只出現(xiàn)一次,離線無法直接建模,生產embeding。 電商的召回模型統(tǒng)統(tǒng)失效了,因為訂單是曇花一現(xiàn)的,沒法在車主完單序列中反復出現(xiàn)。所以必須想一種辦法,來對問題進行轉化。 我們的解法是通過一定編碼轉化后通過圖召回來解決,具體細節(jié)后面會講。 第3個挑戰(zhàn)是用戶決策單一,車主總是希望離它近,價格高,更順路,出發(fā)時間匹配的訂單進行決策。我們的解法是在召回側就將這些核心要素抽取出來作為召回鏈路的補充 第4個挑戰(zhàn)是順風車低頻用戶比較多。對于個人來說,低頻,但是對于一個網格里面的車主來說,就會變得不低頻。所以我們解法是挖掘歷史目的地進行網格召回。 我們召回模塊的V1版本從大方向是區(qū)分同跨城訂單+核心策略召回;V2版本是不分同跨城+分里程+核心要素召回,召回到了更多訂單,改變了供需關系,發(fā)單到完單提升5%;V3版本補充了網格召回 + 圖召回。 下面著重講一下,我們是怎么轉化數(shù)據來做圖召回的。 圖召回:首先是對重要特征離散化之后,對每一筆訂單進行編碼。比如核心要素價格按照5塊錢分桶,順路度按照0.01分桶,起點距離和終點距離按照1km分桶等。最終分桶后每筆訂單編碼為14位的映射碼。這樣在車主完單序列中相似的訂單就可以反復出現(xiàn)了。這種編碼的好處是近似訂單基本等價于一個編碼,就類似于電商中的一個商品了。那此時就可以使用電商里面的embeding算法了。 編碼完成后對車主歷史完單序列映射到具體編碼。 然后通過node2vec來生成同質性的圖結構,轉移概率的公式直接用的論文的,只不過這里有個比較巧的方式是,為了生成同質性的圖結構,此時遠離參數(shù)q要設置一個比較小的值來使得游走的網絡結構具有同質性。 生成好的編碼序列,可以使用skip-gram的方式來訓練,同時通過負采樣來加速模型的訓練速度。 3. 精排模塊下面講一下精排模型的迭代思路: 最開始業(yè)務冷啟動上線時,直接按照順路度排序。算法1.0是采用邏輯回歸上線,AB實驗接單量提升6%,效果不錯。算法2.0部分場景使用pointwise 框架用lightgbm + LR算法,接單量相比1.0進一步提升5%;部分場景使用listwise框架通過將文檔排序的思想遷移過來,比如點擊得1分,接單得2分,完單得3分,采用lambdaRank模型排序,接單量相比1.0提升10%。此后我們開始探索深度模型,嘗試了電商的精排模型,比如deepfm,xdeepfm,DIN,DIEN等,離線驗證auc并沒有2.0版本效果好。 我們開始分析為何電商模型在出行行業(yè)并沒有好的表現(xiàn):電商場景億級別的離散稀疏特征,順風車場景則連續(xù)特征居多。所以,關鍵點在于電商的離散特征很多,embedding技術能發(fā)現(xiàn)更多特征的隱式交叉。而在順風車場景,連續(xù)特征非常多,如果我們能找到一種方式把連續(xù)特征轉化為離散特征,那特征交叉會更有效。 所以我們的算法3.0是這樣一個模型:
其實這里面的深度模型結構可以替換成已經成熟的各種深度模型,核心邏輯是如何處理連續(xù)特征,有利于深度模型進行更有效的特征交叉。因為如果一個連續(xù)特征只占一個bit位,在神經網絡的特征交叉中不能充分被表達。 03交易生態(tài)治理算法交易生態(tài)模塊,目標是保證車主在行程前、行程中、行程后的履約體驗和行程安全。此模塊包含4個部分,交易鏈路、架構,模型演進和場景舉例。 1. 鏈路在行程前我們會預測一筆交易發(fā)生取消、投訴、或者惡性事件的概率來做匹配干預,差司機和挑剔乘客避免碰到一起引起不舒服的體驗。同時在行程前我們會根據歷史數(shù)據預測車主或者乘客可能會有哪種不好的行為比如線下交易,繞路接人等,在接單前對疑似用戶進行教育與引導。 在行程中,我們會通過算法進行軌跡偏航實時檢測、異常停留的實時檢測等不同手段的監(jiān)測算法,保護司乘的安全。 在行程后,我們通過判責算法來保證司乘的合法權益。 2. 架構
在交易生態(tài)治理算法的特征一部分來自于基礎特征,包括時空特征(比如訂單坐標,時間等)、訂單特征(是否拼單,乘客數(shù)目,是否同跨城等)、以及離線的司乘行為特征。另外一部分來自于實時特征,比如實時的軌跡流、IM聊天信息、通話等。 而樣本是我們比較頭痛的一部分,樣本需要人工打標,耗費人力。我們這邊是通過大眾評審和后臺投訴樣本來獲取一些用戶標記給我們的正樣本。 有了特征和樣本后,我們可以離線訓練模型。這個模型也是在行程前、行程中、行程后根據不同的場景進行定制化開發(fā)。然后將模型通過機器學習平臺部署和發(fā)布到線上去,來讓算法服務于每個環(huán)節(jié)的履約體驗。 交易生態(tài)的治理算法中,因為正樣本非常珍貴,所以我們這邊的模型演進也面臨著一些挑戰(zhàn): 3. 模型演進![]() 第二個挑戰(zhàn)是,沒有標記樣本。這邊通過3種方式來解決,第一是客服工單人工處理的樣本作為標記樣本;第二是大眾評審,就是app界面發(fā)送問題,讓用戶來打標回答,目前應答率在30%左右。第三個是通過小樣本學習的方式來擴充前兩個手段的樣本量。比如對于使用模型預測概率比較高的樣本可直接填充為正樣本,來增加正樣本數(shù)量。 第三個挑戰(zhàn)是:特征的來源比較多,有軌跡流,有IM聊天信息,語音等。這里我們通過多模態(tài)特征融合來解決這個問題。 對于同一任務,能夠應用多種模態(tài)的數(shù)據,可以做出更魯棒的預測并且模態(tài)之間可能會存在互補的信息。我們當前的融合還處于比較早期的方法,是在提取了各模態(tài)的特征后,進行融合,利用了每個模態(tài)低水平特征之間的相關性和相互作用,使用單一模型進行訓練,上線復雜性和性能都可控。 第四個挑戰(zhàn)是:算法需要較強的可解釋性,增加說服力。因為我們這邊很多后臺的計算邏輯需要透傳給用戶,引導用戶朝著好的方向去走。所以算法的輸出需要很強的可解釋性,不然沒法引導用戶的具體行為。我們通過模型來提煉出一些規(guī)則,我們這邊是規(guī)則打底,同時結合可解釋框架SHAP來分析每個特征對結果的貢獻。 下面我們看一個軌跡偏航算法的迭代過程,來了解交易生態(tài)的模型迭代: 4. 具體場景軌跡偏航![]()
v1版本我們通過計算路線規(guī)劃內,乘客與車主上報的軌跡批次中,當前批次與上一個批次,方向夾角,距離等的變化,計算一個偏航得分,通過這種方式上線后,在app端內開一定的小流量當處于偏航預警時,push用戶給一個反饋。這樣我們就有了一定的樣本積累,方便后續(xù)的模型迭代。 v2版本我們通過將v1版本的用戶打標樣本和客服工單處理的偏航樣本作為正樣本,通過lightgbm進行小樣本學習。 v3版本在前兩個版本的積累下,可以開更多的流量通過大眾評審用戶打標有更多的樣本后,進入深度模型的訓練。 在模型迭代上,我們下一步的思路是將多目標訓練融合進來,比如將是否偏航和是否產生工單一起訓練,提升模型的準確率與召回率。 下面講最后一個模塊,智能營銷: 04智能營銷這一部分主要包含4個部分,營銷的架構,用戶運營的生命周期,模型的演進,uplift模型。 1. 架構![]() 從數(shù)據層來說,營銷用到的數(shù)據主要是用戶的基礎畫像數(shù)據,用戶的行為特征,以及最近在我們平臺的瀏覽點擊行為特征。通過這些特征,我們離線訓練機器學習或者深度模型后進而在線部署模型。然后通過CRM平臺給不同的用戶發(fā)放不同的權益。 2. 用戶運營周期
對于平臺的用戶來說,一般都會經歷拉新,促活,防流失,召回挽留等階段。對于每個階段來說,我們希望有對應的營銷算法和觸達手段來激發(fā)用戶在平臺的活躍度與忠誠度,同時也能提升公司的錢效,用好每一筆錢。 這里面涉及3個問題,第1個問題是:給什么樣的人發(fā)券,即圈人階段;第2個問題是:圈的人給什么樣的權益,比如是5塊錢還是10塊錢;第3個問題是:通過什么樣的文案來觸達用戶,這里面就涉及智能文案的問題。 接下來主要講一下前兩個問題的解法。因為智能文案是專門有一個團隊做成平臺化來提供給整個公司的業(yè)務線來使用。 3. uplift模型![]() 其實對于用戶來說,主要分為4大類,第一類是營銷敏感的人群,這類人是下單猶豫不決,需要券來刺激一把。第二類是自然轉化的用戶,不管發(fā)沒發(fā)券,這個人第二天都是有出行需要的。第三類是無動于衷,發(fā)不發(fā)券都沒反應,第4類是發(fā)券可能會起反作用,比如券可能是站內push的方式來發(fā)送,用戶可能覺得太煩了,直接app關閉推送功能。這4類人中我們要抓住的就是第一類人,營銷活動的重點人群。 所以v2版本,我們通過v1版本發(fā)券積累的數(shù)據,來嘗試了uplift增益模型,對發(fā)券和不發(fā)券對用戶帶來的增量進行建模,然后根據這個增量來實施發(fā)券策略。 這里面有個缺點是,發(fā)券的金額仍然沒有做到用模型cover住,錢效仍然不是很高。 所以v3版本,我們通過預測不同券的核銷概率,與使用不同券的增益值,來通過運籌優(yōu)化的問題解決券金額發(fā)放千人千面的問題。 比如xij 代表第i個用戶是否發(fā)放第j種券,那約束條件是:每個用戶至多發(fā)一種劵,以及所有用戶的發(fā)券總和不能超過實際預算,優(yōu)化目標可以是所有用戶的增益值最大,也可以是gmv最大或者roi最大等 運籌優(yōu)化的求解主要是整數(shù)規(guī)劃,整數(shù)規(guī)劃目前采用谷歌的ortools來求解。但是優(yōu)化器當求解參數(shù)上千萬時,性能就出問題了,要算十個小時左右,這是不能接受的。目前的解決方案是分而治之,通過分城市來求解優(yōu)化器,因為每個城市間的用戶相對來說是相互獨立的,互不干擾。 接下來我們主要講一下uplift模型的3種范式。
首先S-Learner就是single-learner,把對照組和實驗組放在一起建模,只是把干預相關的特征作為特征加到模型中去訓練,本質還是對response進行擬合,所以對于因果效應并沒有很好地學到。
而T-Learner就是two-learner,是用對照組和實驗組分別建模得到兩個模型,對每個樣本計算兩個模型的預測值之差作為HTE(異質因果效應)。兩個模型誤差累計比較大,因為對照組的模型無法學到實驗組的pattern,實驗組的模型也無法用到對照組的數(shù)據。兩個模型完全隔離,也就導致兩個模型可能各自有各自的偏差,從而導致預測產生較大的誤差。 ![]() 而x-learner就是交叉的意思,是融合了S-Learner,T-Learner。 首先分別對對照組和實驗組進行建模得到兩個模型,然后把對照組放進實驗組模型預測,實驗組放進對照組模型預測,預測值和實際值的差作為異質因果效應的近似。這一塊跟T-Learner是一樣的。 然后把獲取到的異質因果效應D1,D0作為訓練目標,再訓練兩個模型, 最后把這兩個模型加權求和就是uplift值。 ![]() 其實uplift模型除了meta-learning的模式外,還有tree-based,nn-based。 與 meta-learner 不同的是,uplift model 下的樹模型通過對增量直接建模,對特征點進行分裂, 將 X 劃分到一個又一個 subspace 中,那劃分準則與傳統(tǒng)的決策樹信息熵或者基尼系數(shù)不一樣,這邊主要是采用分布散度或者CTS分裂準則。 nn-based我們還沒有嘗試,他是將propensity score估計即傾向性得分和uplift score估計合并到一個網絡實現(xiàn)。 從圖中我們可以看到x-leaner的離線效果更好,auuc和gini 值都表現(xiàn)更好。同時從車主促活場景來看,確實比較更優(yōu)異。所以在我們的營銷場景,uplift增益模型使用的是x-leaner。 我們當前這一套uplift + 運籌優(yōu)化的框架,相比之前的的response + 規(guī)則的框架來說,在ROI上提升了10%,所以說因果推斷在營銷場景是非常有效的,很值得全面擁抱因果推斷。 今天的分享就到這里,謝謝大家。 |
|
|