從邀請朋友幫砍一刀,到雙十一中的打折優惠,很多營銷活動都在借助網絡效應來提高營銷效果。當用戶之間存在互相影響時,營銷活動的效果經常難以評估和優化。比如打折后當一個用戶來買東西,很難區分他是本來就有需求,還是從朋友口中聽說了最近在打折才來購買。這使得當網絡效應存在時,營銷活動的效果難以被評估和優化。
來自螞蟻智能引擎技術團隊的同學提出了一種全新的評估活動的方案,針對大規模的應用和活動優化做了針對性的改進。該內容已登上數據挖掘頂級會議 DASFAA。歡迎大家學習交流。
為了評估優化營銷活動的效果,常用的做法是按城市、或是按好友關系聚類后,將用戶分為 A/B 組,在對 A/B 組嘗試不同的營銷策略后,通過對比兩組間用戶活躍度,來評估不同策略的效果差異。實踐中,在數十億用戶規模的關系網絡上做這樣的網絡 A/B 實驗困難重重。為此,螞蟻智能引擎技術團隊將這個方案和一個新方法結合了起來:本質上,通過預測哪些用戶可能會互相影響,并將這些用戶聚類到一起來提高對活動效果預估的精準度。
營銷中的網絡效應
在很多營銷活動中,給一個用戶提供優惠可能會影響多個用戶的轉化。這種轉化,可能是像“幫砍一刀”中邀請好友來一同使用 app,也可能是用戶買東西享受到折扣后,回家叫了親朋好友一起來,店里的用戶突然多了起來。
在支付寶,我們的一個活動會給用戶發優惠券(左圖中的紅色),用戶可以邀請朋友加入這個活動。所有加入的人,都會收到一張現金優惠券(右圖中的紅色)。當評估這樣的活動效果時,如果不仔細設計 A/B 實驗方案,經常會得到錯誤、甚至誤導性很強的結論。
如果我們隨機將用戶分進 A/B 組(左圖黃色、青色),在上述的活動中,就會發現 A/B 組轉化的用戶個數一樣多。難道是我們的激勵對用戶沒有吸引力?不!是活動的效果順著用戶之間的“關系”從實驗桶“溢出”進了對照桶,使得對照桶的用戶也被轉化了。在這種情況下,用戶維度的 A/B 實驗錯誤地得出結論:活動沒有任何效果。為了解決這個問題,常見的做法是使用網絡 A/B 實驗:將可能會互相影響的用戶聚類后,以簇(一群用戶)為單位進行 A/B 實驗分組(右圖黃色、青色)。當用戶間的影響都發生在簇內時,網絡 A/B 實驗可以很好的評估活動效果。
網絡A/B實驗
最傳統的做法是直接城市進行 A/B 實驗,這樣糙快猛的方案背后,因為樣本量太小(全國僅幾百城市),不容易得到統計學上置信的結論。業界也有按好友關系進行聚類的。但兩個用戶是否是好友,和他們在活動中是否會互相影響經常不相關。比如各類大 V 經常會有數百萬的好友關系,但活動中很難真的影響這么多人,這使得聚類的效果經常很差。
雖然我們不知道沒來的用戶之間會怎樣互相影響,但我們可以做一個模型來從已經參與過活動的用戶身上學到哪些用戶容易互相影響?;谶@樣的想法,我們提出了先使用 GNN 進行關系的預測,先預測出哪些用戶會在當前活動上相互影響,再在這個預測得到的圖上進行聚類的做法。在支付寶的活動中,這個做法顯著提高了網絡 A/B 實驗的效果。
1)關系預測
為了預測用戶間的影響關系,也就是當參加活動時,哪些用戶之間會互相邀請,我們嘗試了多種做法。深度神經網絡(DNN)是最好想到的,但 DNN 很難消費用戶間的歷史關系特征。為此,我們進一步嘗試了圖神經網絡 Graph Neural Network(GNN)來做關系的預測。
對比 DNN,GNN 主要就是加入了一步聚合操作。在第 k 次迭代時,對每個節點 v,使用一個聚合函數 AGG 來聚合所有鄰居節點 u 和鄰接邊傳來的信息,最后通過一個非線性的激活函數 σ。
在次基礎上,我們可以使用 GNN 進行兩個用戶之間是否會產生關系的預測,網絡結構如下:
GNN 輸入包含節點A特征 、節點B特征、AB 之間歷史關系的邊特征三部分。在利用 GNN 學習到 A、B 節點的表示之后,加入邊的特征,一起輸給一個全連接 MLP 預測在本次活動中,兩個用戶之間是否會互相邀請。
為了更好的編碼節點之間的位置信息,我們使用了 [1] 中的 node label 來有效利用子圖各個節點距目標邊距離的結構特征。這是一種節點上的結構特征:目標邊附近子圖中,每個節點均計算一個距目標邊的距離,再將這個距離附加到節點的原始特征上。這個距離能區分出每個節點的結構角色,非常適合關系預測。比如:為了預測 x 和 y 是否會產生聯系,“與x、y均有直接聯系”和“只與x有聯系”的兩種節點顯然起到了不同的作用。顯式地將不同的結構角色區別出來,對邊預測效果提升顯著。
對需要預測的邊,node label 對周圍的節點進行了編碼。如上圖所示,在預測 xy 之間是否有邊時,先計算周圍每個節點到 x 和到 y 分別的距離,然后就可以套用公式得到一個唯一的編碼,編碼結果如上圖左所示。
在我們的實驗中,同樣是進行邊的預測,對比 DNN 和初版 GNN (NG-LP),加入了 Node Labeling 后 (NL-LP),邊預測子任務的 AUC 顯著提升。
2)關系聚類
我們在關系預測的結果上,過濾掉分數太低的邊,然后對帶權重的邊,使用 GRAPE 引擎的分布式的 Louvain 算法進行關系邊的聚類。Louvain 是一個對 Modularity Maximization 的近似算法,大概的思路就是通過迭代,在最大化每個 cluster 內邊權重的同時,減少連接不同 cluster 邊的權重。因為是一個迭代的算法,Louvain 可以高效的大規模圖。比如我們在 GRAPE 集群的測試中,10 億條邊圖的聚類大概需要 20 分鐘,100 億邊時大概需要 4 小時。
通過使用不同的模型進行預測,不同的閾值過濾關系預測結果的邊,以及調整 Louvain 參數,可以得到各種粒度的聚類結果。再將不同方案聚類后的簇隨機分進 A/B 組,就得到了不同的網絡 A/B 實驗方案。
網絡A/B實驗方案評估
不同營銷方案之間,營銷活動效果的變化可以使用 average treatment effect(ATE)進行量化。在實際的網絡 A/B 實驗中,用戶不可能同時進入 A 桶和 B 桶,也就是沒辦法獲得真實的 ATE,只能使用實驗組和對照組效果的差值,進行預估:
其中,q^ij是實驗組 Q 的第 j 個簇中的第 i 個用戶,c^ij 是對照組C的第 j 個簇中的第 i 個用戶。M 和 N 分別表示 Q 和 C 中的用戶數。
好的網絡 A/B 實驗方案,需要在控制方差(variance)小的同時,盡可能無偏差(bias)的預估營銷活動效果。為了評估不同網絡A/B實驗方案的好壞,我們設計了 網絡干擾程度(I 越小越好)指標來評估預估是否無偏。并使用了 18 年KDD一篇論文當中提到的方法來 預估方差(Var(Y) 越小越好)。方差越小時,實驗的統計能力越強,估計的越有把握。
我們對比了如下方法:–Geo:按城市對用戶進行聚類的經典方法。–Louvain:直接使用分布式 Louvain 進行聚類。因為大 V(熱點)的存在,24小時后依然無法完成聚類。–HRLouvain:直接移除熱點(度數大于θ的節點)后,使用 Louvain 進行聚類。–LinkLabel:邊預測后,使用分布式 label propagation 進行聚類。–LinkLouvain:邊預測后,過濾關系弱(邀請概率小于γ)的邊后,用邀請概率為邊權重,分布式 Louvain 聚類。–LinkLouvain UW:同 LinkLouvain,過濾邊后,權重都設置為 1,然后用分布式 Louvain 聚類。
在我們百億量級邊,十億量級節點的圖上,LinkLouvain 很好的平衡了網絡干擾程度和預估方差,并且能在 6 小時內完成聚類。產出的用戶簇可以很好的用來進行網絡 A/B 實驗。
我們在支付寶的營銷活動中,使用了基于 LinkLouvain(γ=0.5)的方案進行網絡 A/B 實驗,在實際的活動中,AA 組轉化率差異在 0.2% 以內,檢驗功效符合預期,方便我們快速決策不同策略之間的差異。同時,在這個聚類的基礎上,在每個簇內可以進行對應的算法優化,這幫助算法在活動期間,累積提升了 58% 的活動轉化率。
展望
在過去幾年中,營銷活動變得越來越多,規模越來越大。如何設計合適的激勵方式,讓用戶享受優惠,愿意嘗試新功能,愛上新功能,是螞蟻智能營銷團隊一直在做的事情。團隊由一群技術愛好者,如 MIT TR35,ACM-ICPC 金牌,大數據競賽全國冠軍,阿里星們等組成,并且不斷的在機器學習、數據挖掘的頂會們有論文的發表。有著很強的技術背景,我們為支付寶所有的大型營銷活動(雙十一、雙十二、新春五福等)提供大規模的個性化推薦服務,影響著十億級用戶的支付、生活習慣。
歡迎加入我們的暑期實習項目(詳情見海報),一起為世界帶來微小而美好的改變!