最近一段時間由於業務需要,對因果推斷進行研究,針對精准營銷、用戶增長、廣告、模型可解釋性等領域都有比較廣泛的應用。本文主要從原理+實踐角度去講解一下相關的因果推斷的工具或方法。以下是主要內容:
一、雙重差分法
二、Uplift Model
三、Causal ML
四、EconML
五、Dowhy
六、模型可解釋性
1、ShapleyValue
2、Lime
----------------------------------------------------------------------------------------------------------------------------------------
一、雙重差分法(DID):DID(difference-in-differences model)也叫雙重差分模型。
1、主要原理:
(1)通過將樣本數據分成實驗組和對照組,實驗組是施加干預的一組,對照組是未施加干預的一組。
(2)通過對上述兩組樣本進行觀察指標(也稱目標指標)分析其變化,一般是轉化率等KPI指標
(3)分別計算干預前后實驗組和對照組對應的目標指標的差分結果
(4)計算兩組最終的差分結果。
如下圖所示:
雙重差分的結果:ATE=(A2-A1)-(B2-B1)
2、工業實踐:
根據公示的推導,雙差分模型方程式可以寫成下面表達式:
如果按照時間差分,則得到如下結果
再次按照干預前后進行差分,得到結果如下:
由此可見,交叉項的系數就是我們需要求解的因果效應ATE的值。
工業中一般實現的方式如下:

import statsmodels.formula.api as smf import pandas as pd v1 =[0.367730,0.377147,0.352539,0.341864,0.29276,0.393443,0.374697,0.346989,0.385783,0.307801] t1 = [0,0,0,0,1,0,0,0,0,1] g1 =[1,1,1,1,1,0,0,0,0,0] tg1 = [0,0,0,0,1,0,0,0,0,0] aa = pd.DataFrame({'t1':t1,'g1':g1,'tg1':tg1,'v1':v1}) X = aa[['t1', 'g1','tg1']] y = aa['v1'] est = smf.ols(formula='v1 ~ t1 + g1 + tg1', data=aa).fit() y_pred = est.predict(X) aa['v1_pred'] = y_pred print(est.summary()) print(est.params)
輸出結果如下所示:
交叉項的系數就是DID結果,處理效應。P>| t |為其P值,小於0.05表示差異顯著。
二、Uplift Model (增益模型)
1、基本原理:Uplift models預測增量值,也就是Lift的部分:
在營銷領域中,我們經常會將人群划分成四個象限,橫坐標表示無干預下用戶購買情況,縱坐標是用戶在有干預下的購買狀況。如下圖所示:
(1)第1類人群的購買狀況在干預后發生了正向變化,如果我們不對這類人群進行干預,那他有可能是不購買的,但是干預之后的購買概率有極大提升,所以這類人群是我們真正想要觸達的用戶,即營銷敏感人群。
(2)第 2 類和第 3 類,在干預前后的購買狀況沒有變化,所以預算花費可能是浪費。
(3)第4類比較特殊的人群,雖然其在干預前后的狀態有跳變,但這種跳變不是我們希望看到的,因為確實有一些人群對營銷是反感的,所以對這類人群我們應該極力避免觸達。
Uplift Model 正是為了識別我們想要的營銷敏感人群。其主要方法有:
(1)Two-Model Approach:分別通過模型對實驗組和對照組的目標指標進行擬合,最后兩個模型的差值則為Lift。
(2)One-Model Approach:模型直接以實驗組與對照組的差值作為目標進行擬合
(3)樹模型
問題1:Uplift Model 與 Response Model之間的區別:
(1)Response Model 的目標是估計用戶看過廣告之后轉化的概率,這本身是一個相關性,但這個相關性會導致我們沒有辦法區分出自然轉化人群;
(2)Uplift Model 是估計用戶因為廣告而購買的概率,這是一個因果推斷的問題,幫助我們鎖定對營銷敏感的人群。所以 Uplift Model 是整個智能營銷中非常關鍵的技術,預知每個用戶的營銷敏感程度,從而幫助我們制定營銷策略,促成整個營銷的效用最大化。
(4)模型的評價指標:AUUC
AUUC實際上跟AUC有點類似,也是對應曲線下面的面積,如下圖所示:
其中,虛線表示隨機試驗的結果,曲線則是按照模型的方式打分分成10等分,計算對應的增益的值(uplift gain)。兩條曲線中間的面積就是AUUC,該指標越大表明模型表現越好。
2、代碼實踐
import numpy as np, matplotlib as mpl, matplotlib.pyplot as plt, pandas as pd from pylift import TransformedOutcome from pylift.generate_data import dgp # Generate some data. df = dgp(N=10000, discrete_outcome=True) up = TransformedOutcome(df, col_treatment='Treatment', col_outcome='Outcome', stratify=df['Treatment']) from pylift import TransformedOutcome up.randomized_search(n_iter=100,n_jobs=10,random_state=100) # 對所有參數grid search,十分耗時,使用時注意限制參數searching的數量 up.fit(**up.rand_search_.best_params_) up.plot(plot_type='aqini', show_theoretical_max=True) # 繪制aqini曲線 print(up.test_results_.Q_aqini) #AUUC
三、Causal ML
其實casual ml是一個實現uplift model的python開源工具包,項目地址:https://github.com/uber/causalml;相關的資料可以詳細參考對應的文檔說明即可。
四、EconML
econml同樣是一個實現uplift model的開源工具包,文檔地址:https://econml.azurewebsites.net/;項目地址:https://github.com/Microsoft/EconML;
五、Dowhy
Dowhy是集成causal graph 和potential outcome 兩個框架。項目地址:https://github.com/microsoft/dowhy;主要包含四步:
- I. Model a causal problem
- II. Identify a target estimand under the model
- III. Estimate causal effect based on the identified estimand
- IV. Refute the obtained estimate
六、模型可解釋性
1、ShapleyValue:項目地址:https://github.com/slundberg/shap;
shapleyvalue主要是計算每個特征對應的邊際貢獻度的方法來對模型進行解釋。
2、Lime
Lime主要是通過假設局部是線性的方法來局部擬合原模型。