因果推斷在微視激勵和供需場景的應用
一、因果推斷與激勵算法
1、業務背景與業務建模
首先簡單地介紹一下騰訊微視的紅包激勵業務背景。與其他的產品和場景類似,在給定的預算之下,我們向騰訊微視的用戶發放一些現金激勵,希望通過現金激勵最大化用戶的次日留存和當天使用時長。現金激勵的形式主要是以不定的時間間隔為用戶發放不定數量和不定金額的現金紅包。以上提到的 3 個“不定”最終由算法來確定。這三個“不定”也稱紅包激勵策略的三要素。
接下來講一下不同的現金激勵策略的抽象形式。第一種以紅包序列的形式來表示策略,比如對紅包序列進行編號,然后用 one-hot 的形式為每個 treatment 獨立編號。它的優點是能夠刻畫更多細節,例如每一個紅包之間的金額等細致的策略,以及相對應的效果。但是這必然會需要更多的變量來表示策略,策略的探索空間非常大,另外在進行策略的探索和擇優時,也會需要更多的計算量。而第二種形式,也就是使用三要素的向量來表示策略,其形式更靈活,探索的效率也會更高,但是它確實會忽略了一些細節。第三種方式更數學一點,即紅包序列直接變成一個關于時間 t 的函數,函數里的參數可以構成向量,從而表示策略。因果問題的建模和策略的表示,極大程度地決定了因果效應估計的準確性和效率。
假設我們有了一個良好的策略抽象和向量表示之后,接下來要做的就是選擇算法框架。在這里有三種框架。第一種框架在業界比較成熟,即使用因果推斷結合多目標約束優化的方式來做策略的分配和優化。這種框架中,因果推斷主要負責的是估計不同策略對應的用戶核心指標,也就是我們所說的用戶次日留存和時長的收益提升。估計之后,我們利用多目標的約束優化來做離線的預算策略分配以滿足預算約束。第二種就是離線強化學習結合多目標約束優化方法。這個方法我個人認為是比較有前景的,主要原因有兩個。第一個原因是在實際應用場景當中,策略非常多,強化學習本身是可以高效地進行策略空間探索的,同時,由于我們的策略是有依賴的,而強化學習可以建模策略間的依賴;第二個原因是因為離線強化學本質實際上是一個反事實估計(contrafactual estimation)的問題,其本身具有很強的因果屬性。然而遺憾的是,在我們的場景當中曾經嘗試離線強化學習的方法,但它在線上效果沒有達到理想的效果。究其原因,一方面是我們的方法問題,另外一方面主要受限于數據。要想訓練一個好的離線強化學習模型,需要數據中的策略分布足夠廣,或者叫策略分布的足夠均勻。也就是說,我們使用的隨機數據也好,或者是觀測數據也好,希望能夠盡可能地探索到更多的這種策略,并且分布的相對來說會均勻一些,這樣才能夠減少做反事實估計的方差。最后一種算法框架在廣告場景當中比較成熟,我們通過在線強化學習方式做流量控制和預算控制。這種方法的優勢是可以及時地、快速地響應線上的突發事件,同時對于預算的控制相對更加準確。在引入因果之后,我們做流量選擇或控制的指標就不再是 ECPM 指標了,可能就是我們現在估計的次留和時長的一個提升量。經過我們一系列的實踐嘗試,最終選擇了第一種算法框架,也就是因果推斷結合多目標約束優化,原因是它更穩定且更可控,同時它對線上工程的依賴也更少。
第一種算法框架的 Pipeline 如下圖所示。首先離線計算用戶特征,然后用因果模型去預估用戶在不同策略下核心指標的提升量,也就是所謂的 uplift。基于預估的提升量,我們利用多目標優化來求解,從而分配最優策略。為了加速整個過程的計算,我們在結構化時,會提前對人群進行聚類,也就是說我們認為這一簇里邊的人具有相同的因果,相應的,我們給同一簇人分配同樣的策略。
2、策略假設與因果圖
基于上述討論,接下來重點討論一下怎么做策略的抽象。首先來看我們如何抽象因果圖。在紅包激勵場景中需要建模的因果,體現在多天與多個紅包之間。因為前一個紅包肯定會影響下一個紅包是否要領取,因此它本質上就是一個 Time-Varying Treatment Effect 問題,抽象成時序因果圖由如右圖所示。
以一天內多個紅包為例,T 所有下標都代表的是紅包的一個序號。此時的 T 代表的是當前紅包的金額,以及距離上一個紅包發放的時間間隔所組成的向量。Y 是用戶的紅包下發之后的當次使用時長,和次日留存的提升量。X 是截止到當前時刻觀察到的混淆變量,例如用戶的觀看行為或人口屬性等。當然還會有很多未觀測的混淆變量,用 U 來表示,例如用戶偶發的停留,或是偶發的停止領。一個重要的未觀測混淆變量是用戶的心智,主要包括用戶對紅包激勵的金額的價值評估。而這些所謂的心智,是很難通過系統內的一些統計量或統計特征來表示的。
如果以時間序列的形式去做建模紅包策略會非常復雜,因此我們做了一些合理的簡化。比如假設 U 只影響當前時刻的 T,X 和 Y,并且它只影響下一時刻的 U,即用戶心智。也就是說它只會通過影響下一刻的價值評估或者心智來影響未來的 Y。但是即使做了一系列簡化,我們也會發現整個時序因果圖依然很稠密,從而很難做合理的估計。并且當使用 G-methods 的方法解決 time Varying Trend Effect 時,需要大量數據去訓練,然而現實中我們得到的數據非常稀疏,所以很難在線上取得一個很好的效果。因此最終我們做了大量簡化,得到右下圖這樣的叉狀結構(Fork)。我們把所有當天的紅包的策略做了一個聚合,它是由策略三要素(紅包激勵總金額、總時間、總個數)所構成的向量,用 T 來表示。X 是 T-1 時刻的一個混淆變量,也就截止到當天之前用戶的歷史行為和人口屬性。Y 代表的是當天用戶的使用時長,就是用戶的次日留存或當次使用時長指標。雖然這種方法看起來忽略了很多細節,例如紅包之間的相互影響。但從宏觀的角度來說,這個策略更穩定也能更好衡量其效果。
3、策略表示與因果模型
基于上面討論,接下來就是核心問題,也就是如何表示策略(treatment)。之前我們嘗試了使用 One-Hot 對三要素向量獨立編號,以及將三要素分開,用時間函數構造 multi-variable treatment。前面這兩種策略表示方法比較好理解,接下來介紹最后一種方法。大家看上面這張圖。我們分別構造了三要素關于 t 的正弦函數,也就是給定一個時刻 T,我們能分別得到金額、時間間隔和個數。我們用這些函數對應的參數作為新向量的元素,類似于策略三要素的表示。我們用函數的方式來表示策略的目的是期望保留更多的細節,因為前兩種方法只能通過策略組合知道紅包金額、發放間隔的平均值,而用函數可能表示得更細致。但是這種方式有可能引入更多的變量,使計算更加復雜。
有了策略表示之后,就可以針對性地去選擇因果模型來去估計因果效應。在用 One-Hot 表示 T 的三要素的形式下,我們采用 x-Learner 的模型對每個策略建模,并將總金額最小的策略作為基準策略,從而計算和評估所有策略的 treatment effect。在這種情況下,大家可能感覺到它的效率是非常低的,而且模型缺乏泛化性。因此我們進一步采用剛才提到的第三種策略表示,即用正弦函數要素的向量去構成一個 treatment。接下來用單個 DML 模型來估計所有策略相對于基準策略的效果。此外,我們還做了一個優化 DML,假設 y 是混淆變量和因果效應的線性加權,也就是 y 等于 treatment effect 加上混淆變量。這樣就人工構造了向量要素之間的交叉項和高階項。相當于構造了 polynomial kernel function 來引入非線性函數。在這個基礎上 DML 相對于基準策略有了很大的提升。由右下圖的分析可以發現,DML 模型花了更少的錢并且提高了 ROI,這意味著我們能夠更高效地去利用資源。
前面我們主要討論了一些方法上的抽象和模型的選擇,在實踐過程當中,還會發現一些比較偏業務方面的問題,比如做 One-Hot 時 treatment 怎么辦?這時候,我們做了一個逐批擴量的策略。首先通過策略三要素做種子策略,然后人工篩選和保留優質的種子之后,對它進行一個擴展。在擴展之后,我們會基于一段時間,比如先在上線的前兩周分批地上線新的策略,并且保證每個策略的隨機流量大小是一致的,或是可比的。在這個過程當中,確實會忽略時間因素的影響,并且不斷替換效果較差的策略,從而把策略的集合豐富起來。另外,由于時間因素一定會影響隨機流量的策略是否可比。因此我們構建了類似于時間片輪轉的方法,保證其覆蓋的時間片是一致的,從而消除時間因素對策略的影響,這樣得到的隨機流量就可以用來訓練模型了。
還有就是新的策略大概如何生成?一種簡單的方法是用 grade search,或者做遺傳算法,這些是比較常見的搜索的通用算法。另外我們可以結合了人工剪枝,比如剪去一些不可取的紅包序列類型。還有一種方法是使用 BanditNet,也就是一種離線強化學習的方法去計算沒見過的策略,即估計反事實(counterfactual)的效果的估計,然后用估計的值來做策略的選擇。當然我們最終也需要用線上隨機流量去驗證的,原因是這種離線強化學習的方法,其方差大概率會非常的大。
4、策略問題與迭代
除了以上提到的問題,我們也還會遇到一些偏業務的問題。第一個問題是用戶策略的更新周期是怎樣的?是不是所有的用戶策略都是頻繁地更新會更好?對此,我們實踐的經驗是因人而異。例如高頻用戶的策略變化應該更緩慢一些。一方面是因為高頻用戶已經很熟悉我們的形態了,包括激勵金額,如果紅包金額劇烈的變化,一定會影響相應的指標。所以我們對高頻用戶其實是保持一個周更新的策略,一周更新一次;但是對于新用戶來講,更新周期是更短的。原因是我們對新用戶了解很少,我們希望能夠更快速地去探索合適的策略,并且根據用戶交互情況快速響應做出策略變化。由于新用戶的行為也很稀疏,所以在這種情況下,我們就會用天級別對新用戶或者一些低頻用戶去做更新。另外,我們也需要對策略的穩定性做監控,從而避免特征噪聲造成的影響,我們搭建的 Pipeline 如右圖所示。這里我們會監控 treatment effect 是否穩定,同時也會對用戶最終分配的策略進行天級別的監控,比如今天的策略和昨天策略差異有多大,包括金額和個數。我們也會對線上的策略定期的做快照,主要是為了去做 debug,同時也能夠快速回放,從而保證策略的穩定。另外我們還會對小流量做實驗,監控其穩定性,只有達到穩定性要求的小流量實驗,才會被用于替換現成的策略。
第二個問題是針對新用戶以及一些特殊用戶的策略是否為獨立的?答案是確定的,比如新用戶,我們會先對他進行一個較強的激勵,而后激勵強度隨時間衰減。當用戶進入正常的生命周期之后,我們才會對他進行常規的激勵策略。同時,對于特殊的敏感人群,他們金額上會有限制策略,對此我們也會訓練獨立的模型去適應這類人群。
第三個問題大家可能會問到,也就是因果推斷在整個算法框架當中到底有多重要?從理論角度,我們認為因果推斷是核心,因為它在激勵算法中是帶來很大的收益。相對于回歸與分類模型來說,因果推斷與業務目標一致,它天生就是面向 ROI 的,所以它會帶來關于提升量的優化目標。但是要提醒大家的是,我們在做預算分配的時候,不能夠為每一個用戶都選擇最優的策略,而且因果效應相對于個人來說是相對較小的。當我們做預算分配的時候,很有可能會把一些用戶因果效應的差異消除了。在這種時候,我們約束優化會極大地影響策略效果。因此,在做聚類的時候,我們也嘗試了更多的聚類方法,例如深度聚類 SCCL 方法獲得了更好的聚類結果。我們也進行了一些深度因果模型的迭代,比如像 BNN 或 Dragonnet 等等。
我們發現在實踐的過程中,深度因果模型的離線指標確實有不錯的提升,但是其在線上的效果還不夠穩定,主要的原因是有缺失值的出現。同時我們也發現,特征的規劃方法很影響深度學習線上模型的穩定性,所以最終我們還是會傾向于穩定的去使用 DML 方法。
在激勵場景的分享就這么多,接下來也請我們團隊的另外兩位同學和大家分享一下在供需調優場景的一些實踐和理論的探索。
二、因果推斷與供需調節
1、業務背景與業務建模
接下來介紹一下騰訊微視在供需方面的一個業務背景。作為一個短視頻平臺,微視有許多個不同品類的視頻。對于有時候不同觀看興趣的用戶群體,我們需要根據不同的用戶特征去合適地分配各個品類的曝光占比或者是庫存占比,目標則是為了提升用戶的體驗和用戶的觀看時長,其中用戶的體驗可以根據 3 秒快劃率指標來進行衡量,觀看時長主要根據總的播放時長來去衡量。如何去調節視頻品類的曝光占比或者庫存占比?我們主要考慮的方式按比例去對一些品類進行增加或者減少。增減的比例是一個預設的數值。
接下來我們需要通過算法解決如何決定哪些品類增,哪些品類減,去使得用戶體驗和觀看時長可以最大化,同時還需要滿足比如總曝光有限制的一些約束條件。這個地方總結了三個主要的建模思路。第一個是比較直接的想法,就是我們直接把增和減作為一個 0 和 1 的 treatment 變量,我們去估計它的因果效應,隨后再進行一個多目標的約束優化,去得到一個最終的策略。第二種思路就對 treatment 建模得更精細一些。我們把 treatment 當作一個連續的變量,比如品類的曝光占比,就是一個 0 到 1 之間連續變化的變量。然后去擬合一個相應的因果效應的曲線或者因果效應函數,接下來再進行多目標的約束優化,最后得到最終的策略。可以注意到,剛剛提到的兩種方法都是兩階段的方法。第三種思路,我們將約束條件帶入到因果效應的估計當中,從而得到一個滿足約束條件的最優策略。這也是稍后希望和大家分享的研究內容。
首先還是先關注前兩種建模的思路,有幾個建模的要點需要注意一下。第一個點是,為了保證因果效應估計的準確性,我們需要劃分人群,在每個人群上做二值 Treatment 或是連續 Treatment 的因果效應估計。剛剛鄭老師也有提過分人群的方法,比如用 Kmeans 聚類,或者是一些深度聚類。第二點則是如何在非隨機實驗數據上評估模型效果。比如我們需要在不做 AB test 的情況下,離線評估一下模型的效果。關于這個問題,可以參考 PPT 上面索引的這篇論文中提到的一些指標,用來做離線的評估。第三點需要注意的是,我們應該盡可能考慮品類之間的關聯和相互影響,比如相似品類之間的一些擠占的問題等等。如果能把這些因素納入到因果效應的估計當中,應該可以取得更好的效果。
2、單人群 × 品類曝光占比調節策略
接下來我們就具體展開這幾種建模思路。首先第一種建模方式就是定義一個 0 和 1 的 treatment,用來代表增加或者減少這兩種干預的手段,可以參考左側的簡要因果圖,這里 x 代表用戶的一些特征,比如歷史操作行為相關的統計特征,以及其他的用戶屬性等等。y 就是我們所關心的目標,也就是 3 秒快化率或者播放總時長。除此之外,還需要注意的是一些未觀測的混淆變量,比如用戶的偶發、快滑和退出,以及同一個用戶可能實際上會有多個人在使用,這也是用戶多重身份的一個問題。另外就是推薦策略的不斷迭代和更新也會對觀測數據構成影響,還有另外用戶興趣的遷移也是觀測之外的。這些未觀測的混淆變量,可能會對因果效應的估計造成一定程度上的影響。
對于這樣的建模方式,常見的因果效應估計方法都可以解決。比如可以考慮 T-Learner 或者是 X-Learner,或者是 DML,這些都可以進行因果效應估計。當然,這種簡單的建模方式也存在一些問題,比如我們用二值 treatment 進行建模會太過于簡化。另外,在這種方式之下,每一個品類是單獨進行考慮的,沒有考慮品類之間的相關性。最后一個問題就是我們整個問題里邊沒有考慮到曝光的順序,以及內容的質量這些具體的因素。
接下來再介紹一下第二種建模的思路。我們把所有品類放在一起考慮,比如我們有 k 個視頻品類,令 treatment 是一個 k 維的原因向量。向量的每一個位置就代表一個品類,比如影視綜藝或者 MOBA 賽事等,0 和 1 仍然是代表增加或者減少。這時候多維向量的 treatment 的因果效應估計可以通過 DML 算法來解決。我們通常是把全為 0 的 treatment 向量作為 control。這種方式雖然解決了各品類沒有被單獨考慮的問題,但是它依然存在一些潛在的問題。首先是品類過多時所帶來的維度爆炸的問題,并且隨著維度的增加,由于每個位置上都有 0 和 1 兩種情況,所以潛在的排列組合數量會指數級增加,這些都會對因果效應估計的準確性造成干擾。另外,前面所提到的曝光順序和內容等等這些因素也沒有考慮到。
分享完二值變量 treatment 的建模思路之后,接下來可以對 treatment 進行更精細,也更符合其本身特點的建模。我們注意到,曝光占比本身是一個連續的變量,因此我們用連續的 treatment 去進行建模會更加的合理。在這種建模思路之下,我們首先還是需要劃分人群。對每個人群,我們對每個品類進行單獨地建模,得到一個單人群*單品類的因果效應曲線。就像左圖顯示的這樣,因果效應曲線代表的是不同品類占比對我們所關心的目標產生的影響。為了估計這樣的因果效應曲線,我主要分享兩種可行的算法,一個是 DR-Net,一個是 VC-Net,這兩種算法都屬于深度學習的范疇。模型的結構就像右圖展示的這樣。
首先介紹一下 DR-Net。模型的輸入 x 首先會經過幾個全連接層,從而得到一個隱含的表示,叫做 z。DR-Net 采取了一種離散化的策略,它將連續的 treatment 離散成多個 block,然后每個 block 分別訓練一個子網絡來進行目標變量的預測。由于 DR-Net 采用了離散化的策略,所以它最終得到的因果效應曲線并不是嚴格連續的,但隨著離散化的分段越細,最終的估計會越接近于連續的曲線。當然,隨著理想化的分段越細,由此帶來的就是更多的參數量以及更高的過擬合的風險。
接下來再分享一下 VC-Net。VC-Net 一定程度上改進了 DR-Net 的缺點。首先 VC-Net 模型的輸入還是 X,也是用戶的特征。它首先也是經過幾個全連接層之后得到一個隱含的表示 Z。但是在 Z 這個地方,首先會接一個預測 Propensity Score 的一個模塊。在連續的 Treatment 條件下, Propensity 就是給定 X 條件下 Treatment t 的一個概率密度,也是圖上所表示的 π。接下來我們看一下 Z 之后的網絡結構,不同于 DR-Net 進行離散化的操作,VC-Net 采用的是一個變系數的網絡結構,也就是 Z 之后的每一個模型參數,都是一個關于 t 的函數。我們這里提到的文獻作者采用了基函數的手段,把每個函數表示成一個基函數的線性組合,也就這寫的 θ(t)。這樣一來,函數的估計也就變為了對基函數線性組合的參數估計。所以這樣一來,模型的參數優化就不成問題了,同時VC-Net 所得到的因果效應曲線也是一條連續的曲線。關于 VC-Net 要求解的目標函數由幾部分組成。一方面,它是由最后對目標的預測的平方損失構成,也就是圖中的 μ。另一方面,它也由 propensity 的概率密度的對數損失來構成。除了這兩部分之外,作者在目標函數里邊還加入了一個叫做 targeted regularization 的懲罰項,由此可以得到雙重穩健的估計性質。具體細節,感興趣的朋友可以參見一下上面索引的 2 篇原論文,去獲得更多的細節。
最后,再為即將與大家分享的一篇我們的研究做個鋪墊。我們注意到,各個視頻品類的曝光占比是一個多維連續的向量。它之所以多維,是在于我們有多個視頻品類,每個維度就代表一個視頻品類。它之所以是連續的,主要就在于每個視頻品類的曝光占比都是連續的,其取值都在 0 和 1 之間。同時還有一個很自然的約束條件,就是我們所有的視頻品類的曝光占比加起來一定是等于 1。所以我們可以考慮這樣一個多維連續的向量去作為 treatment。
右圖展示的向量就是這樣的例子。我們的目標是找到最優的曝光占比,使得我們總播放時長最大化。在傳統的因果框架上,算法很難解決這樣一個多維連續并且待約束的問題。接下來分享一下我們對這樣的問題做的研究。
三、帶約束的連續多變量因果模型分享
MDPP Forest 這項工作是團隊在研究供需問題的時候做的一個方法探索和問題的創新解決。我們團隊當時發現,在面對如何解決為每個用戶去分配最佳的視頻類目曝光比的問題上,其他現有的常用方法都沒有辦法得到一個比較符合預期的結果。因此經過一段時間的嘗試與改進,我們團隊設計的方法能在離線上取得了不錯的效果,然后與推薦進行合作,最后也取得了一定的策略收益。隨后我們把這項工作整理成了論文,也有幸發表在了 KDD 2022 上。
1、背景與挑戰
首先介紹問題背景。在供需問題中,我們將短視頻根據內容劃分為不同類目,比如科普、影視、戶外美食等。視頻類目曝光比即指這些不同類目的視頻各自所占一位用戶觀看的所有視頻的比例。用戶對不同類目的偏好有很大的差別,平臺也往往需要因人而異地去確定每個類目的最優曝光比例。在重排序階段,對各類視頻的推薦加以控制。公司面臨的一大挑戰是如何分配最佳的視頻曝光比,從而最大限度地延長每個用戶在平臺上的使用時長。
這樣一個問題的主要難點在于以下的三點。第一個就是短視頻的推薦系統中,每個用戶看到的視頻和他自身的特征會有非常強的相關關系,這就是一個存在的選擇性偏差。因此我們需要用因果推斷相關的算法來消除偏差。第二個是視頻類目曝光比是一種連續、多維并且帶約束的 treatment。這樣的復雜問題在因果推斷和策略優化領域目前是沒有非常成熟的方法的。第三是在離線數據上,我們并不能先驗地知道每個人的真實最優曝光比,因此很難去評估這個方法。在真實環境下,它只是推薦中的一個子環節。最終實驗結果也不能判斷這個方法對它本身的計算目標的準確度。因此,這個場景的問題我們很難去準確地評估它。我們會在后續介紹我們是如何進行效果評估的。
2、問題定義
我們先把數據抽象成一個統計學中的因果圖。其中 X 是用戶特征,包含了許多同時影響當前視頻曝光以及用戶時長的混淆變量;T 是視頻類目曝光比,它也是 treatment,在這個問題中具有比較高的維度,例如它是一個 20 維的向量。Y 是用戶的觀看時長,也就是任務目標的響應。我們建模的目標就是在特定的用戶特征 X 下,給一個高維的最優視頻類目曝光比,從而使用戶的觀看時長期望達到最大。這個問題看似可以簡單地用一個因果三元圖來表示它,但有一個很大的問題,也就是前面提到的,我們的 treatment 是多個類目的曝光比,它是由品類曝光占比構建的多維連續取值且向量和為 1 的向量。這樣的問題就比較復雜了。
3、方法簡介 —— Maximum Difference Point of Preference (MDP2) Forest
對此,我們的方法也是基于因果決策森林(causal forest)的。一般的因果決策樹只能解決具有一維離散值的 treatment 問題。而我們通過改進中間分裂準則函數的計算,在分裂的時候增加一些高維連續的信息,使它可以解決高維連續值并且帶約束 treatment 的問題。
① 方法簡介——連續問題
首先,我們解決的是連續 treatment 問題。如圖中所示,T 對 Y 的影響是一條連續的曲線。我們先假設這是一條單調遞增的曲線。對于數據中所有的 Treatment 取值,我們去遍歷它,計算左右樣本的 Y 均值,從而找到左邊 Y 均值和右邊 Y 均值差異最大的點,也就是平均因果效益最大的點。我們把這個點稱為 Maximum Difference Point,也就是連續 Treatment 空間上效率最高的點,代表了 Treatment 能夠顯著地讓 Y 發生改變。Maximum Difference Point 就是我們在單維度上想去得到的點。
然而,我們剛才提到的方法只適用于單調遞增的曲線。但事實上,大部分問題都沒有那么美好,特別是曝光比的問題。在這個問題上,效應曲線一般來說是山形的,即先增后減。因為多推薦用戶喜愛的視頻,可以使得用戶增加觀看時長,但是這個類型推得過多了,整個視頻的推薦就會變得非常單調乏味,并且還會擠占其他用戶喜歡的視頻類型的曝光空間。所以曲線一般來說是山形的,也有可能是其他形狀的。為了適應任意形狀的T 曲線,我們需要進行積分的操作,也就是找值域區間進行累加。在累加后的曲線上,我們同樣計算左右兩邊均值,以及兩邊均值之差最大的點,比如圖里的五角星。這個點就可以稱我們稱為 maximum difference point of preference,也就是我們的 MDPP。
② 方法簡介——高維問題
上面我們介紹了如何解決連續問題,而剛才所說的曲線只是一維的,對應單一的視頻類目。接下來我們采用啟發式維度遍歷的思想去解決多維的問題。在計算分類得分的時候,我們采用啟發式的思想,將 K 個維度隨機排序,在每個維度上去計算一個 D 指標的聚合,也就是進行求和的操作。得到 D* 作為一個高維信息熵,再來考慮約束,約束是所有的 MDPP 之和為1。這里我們要考慮下面兩種情況,一種是如果 K 維度遍歷完以后,它 MDPP 之和也沒有達到 1。針對這個情況,我們會把所有的 MDPP 之和加起來對它們去做歸一化,拉到 1。第二個情況是,如果我們只遍歷了 K’ 維小于 K 維,但MDPP 之和就已經達到 1。對此,我們將停止遍歷,并且把 MDPP 設置為剩余的“資源量”,即 1 減之前已經算出來 MDPP 值之和,這樣就可以去考慮到約束。
另外,我們也會在上述的樹結構上引入 forest,因為它主要有兩大意義。第一個是我們傳統的 bagging 集成思想,它可以用多個學習器增強模型的魯棒性。第二個是在維度遍歷中,每次節點分裂只會計算到 K’ 個維度,有些維度沒有被算進去。為了使每個維度都能以平等的機會參與到分裂中,我們需要建立多棵樹。
③ 方法簡介——算法加速
另外還有一個問題,由于算法包含了三層的遍歷,所有樹模型都需要特征值的遍歷,還有額外引入的維度遍歷以及搜尋 MDPP 的遍歷。這樣的三層遍歷使得效率非常低下。因此我們對特征值的遍歷和 MDPP 遍歷用了加權分位數圖的方法,只在分位數點去計算相應的結果,這樣就可以大大地降低算法復雜度。同時,我們也找到了這些分位點作為“累加值域”的邊界點,這樣可以大大減小計算量和儲存量。假設有 q 個分位點,我們只需要計算 q 次得出每段分位區間內的樣本數量和 y 的均值,這樣每次計算兩邊均值之差 d 的時候,只需要把 q 值分為左邊和右邊兩部分,分別把每一個區間里的均值做一個加權求和就可以了。我們不需要再重新計算分位點左右兩邊所有樣本的均值。我們下面進入實驗部分。
4、實驗設計
① 實驗設計-Metric
我們實驗評估本質上就是一個策略評估問題,因此我們引入了策略評估相關的指標。第一個是 Main Regret,它用于衡量整體策略的收益和理論最優收益之間的差距。另一個是 Main Treatment Square Error,用于衡量多維 Treatment 下每一個 Treatment 維度的預估值和最優值之間的差距。這兩個指標都是越小越好的。然而,定下這兩個評估指標帶來的最大問題就是我們怎么去確定最優值。
② 實驗設計-對比方法
介紹一下我們的對比方法。首先是因果推斷中的兩種常用方法,一個是具有完備統計學理論的 DML,還有另外是網絡模型 DR-Net 和 VC-Net。這些方法只能處理一維的問題,但在本文的問題上,我們進行了一些調整去應對多維問題,也就是先計算每一維的絕對值,再去做歸一化。還有下面兩篇論文中策略優化的方法,我們稱之為 OPE 和OCMD。這兩篇文章中有陳述其方法適用于多維問題,但是同時也指出,當維度過多時,這些方法就很難生效了。
③ 實驗設計-模擬數據集
為了簡單直接地去比較模型效果,我們模擬了真實世界的問題,生成了一個簡化版的模擬數據集。特征空間 x 表示 6 個維度的用戶特征和 2 個行為特征。還有對于不同特征的樣本,我們先假定它的最優策略。如圖所示,比如一個年齡小于 45 歲,教育程度大于 2,有一個行為特征大于 0.5 的用戶,他在 6 個視頻類目上最優。借助左邊公式,先隨機生成一個對用戶的曝光策略,接下來算出曝光策略和真實最優策略之間的一個差距,以及模擬用戶時長是多少。如果策略越貼近用戶的最優策略,用戶的時長 y 就會越長。這樣我們就生成了這么一個數據集。這個模擬數據集的好處就是我們直接假設了最優值,非常方便評估,另外一個是數據比較簡單,可以方便我們分析算法的結果。
來看看模擬數據集上的實驗結果,對于剛才我們提到的那類人群,提供了各種方法計算出對應的 treatment 的均值。第一行是理論最優,第二行是我們 MDPP forest,第三行基于 MDPP forest 在分裂準則里面又加了一些懲罰項的方法。可以看到我們方法和理論最優的差距都會非常小。另外的其他幾種方法就不是特別極端,而是比較均勻。另外,從右圖 MR 和 MTSE 來看,我們的兩種方法也具有非常明顯的優勢。
④ 實驗設計-半合成數據集
除了模擬數據集之外,我們也根據真實的業務數據構造了一個半合成數據。數據來自騰訊微視平臺。Xi 表示用戶的 20 維特征,treatment ti 表示多維的視頻類目曝光比構成了10 維向量, yi(ti)表示第 i 個用戶的使用時長。實際場景的一個特點是,我們并不能知道用戶真實的最優視頻曝光比。所以我們根據聚類中心規則去構造函數,生成虛擬的 y 來代替真實的 y,從而使得樣本的 y 具有更好的規律性。這里具體公式我就不再贅述了,有興趣的同學可以看一下原文。為什么可以這樣做呢?因為我們算法的關鍵是它要能夠解決 x 和 t 之間的一些混雜的影響,也就是線上用戶受到有偏策略的影響。為了去評估策略的效果,我們只保留了 x 和 t 而改變了 y,從而更好地對問題進行評估。
在半合成數據上,我們的算法效果也明顯更好,并且比模擬數據集上的優勢會更加的大。由此說明了在數據復雜的情況下,我們 MDPP forests 算法是更加的穩定的。另外,我們在合成數據上看一下超參數,也就是森林的規模。在右下圖我們可以看到,隨著森林規模的增加,兩種分裂準則處理下指標收斂的都比較好,帶懲罰項的一個始終會更好一些,它在 100 棵樹的時候達到比較好的效果,250 棵樹的時候達到最優效果,再之后會有一些過擬合。
四、問答環節
Q:為什么遍歷曝光度超過 1 的時候,歸一化是可以 work 的?
A:我的理解是這樣,因為我們做的是一個曝光占比約束的優化,在這個過程當中,我們是一個相對值。我們在遍歷的過程當中,是尋找最優的一個分裂點,找到應該優先給哪個品類曝光更多的比例。在這個過程當中,我們只要能夠保證它是等比縮放的,就是可以的。
我也是同樣觀點,是等比縮放就可以。因為 1 是一個強的約束限制,我們一開始算出來的肯定不完全為 1,會低一些或者高一些。如果多了很多,沒有辦法去讓它達到強約束唯一的條件,也是比較自然地用到一個歸一化的思考。因為我們考慮到各個類目之間相對大小關系。我覺得相對大小關系是比較重要的,而不是一個絕對值的問題。