自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

基于因果森林算法的決策定位應(yīng)用

譯文 精選
人工智能 機(jī)器學(xué)習(xí)
本文將通過一個(gè)實(shí)戰(zhàn)案例來(lái)深入探討如何使用機(jī)器學(xué)習(xí)隨機(jī)森林算法來(lái)輔助實(shí)現(xiàn)管理決策的戰(zhàn)略定位。

譯者 | 朱先忠?

審校 | 孫淑娟?

在我之前的??博客??中,我們已經(jīng)了了如何使用因果樹來(lái)評(píng)估政策的異質(zhì)處理效應(yīng)。如果你還沒有讀過,我建議你在閱讀本文前先讀一遍,因?yàn)槲覀?/span>在本文中認(rèn)為你已經(jīng)了解了此文中部分與本文相關(guān)的內(nèi)容。

為什么是異質(zhì)處理效應(yīng)(HTE:heterogenous treatment effects)?首先,對(duì)異質(zhì)處理效應(yīng)的估計(jì)允許我們根據(jù)們的預(yù)期結(jié)果(疾病、公司收入、客戶滿意度等)選擇提供處理(藥物、廣告、產(chǎn)品等)的用戶(患者、用戶、客戶等)。換句話說(shuō),估計(jì)HTE有助于我們進(jìn)行目標(biāo)定位。事實(shí)上,正如我們將在文章后面看到的那樣,一種處理方法在給一部分用戶帶來(lái)積極益處的同時(shí),平均來(lái)說(shuō)可能無(wú)效甚至適得其反。相反的情況也可能是這樣的:一種藥物平均來(lái)說(shuō)是有效的,但如果我們明確它對(duì)其有副作用的使用者信息的話,此藥物的有效性就會(huì)進(jìn)一步提高。?

在本文中,我們將探討因果樹的一個(gè)擴(kuò)展——因果林。正如隨機(jī)森林通過將多個(gè)自助樹平均在一起來(lái)擴(kuò)展回歸樹一樣,因果森林也擴(kuò)展了因果樹。主要的區(qū)別來(lái)自于推理的角度,它不那么直接。我們還將了解如何比較不同HTE估計(jì)算法的輸出,以及如何將其用于政策目標(biāo)。?

在線折扣案例?

在本文的其余部分,我們繼續(xù)使用我上一篇有關(guān)因果樹文章中使用的玩具示例:我們假設(shè)我們是一家在線商店,我們有興趣了解向新客戶提供折扣是否會(huì)增加他們?cè)谏痰曛械闹С觥?

為了了解折扣是否劃算,我們進(jìn)行了以下隨機(jī)實(shí)驗(yàn)或A/B測(cè)試:每次新客戶瀏覽我們的在線商店時(shí),我們都會(huì)將其隨機(jī)分配給一個(gè)處理條件。我們?yōu)槭?/span>處理的用戶提供折扣;而為控制用戶,我們不提供折扣。我從文件src.dgp導(dǎo)入數(shù)據(jù)生成過程dgp_online_discounts()。我還從src.utils庫(kù)導(dǎo)入一些繪圖函數(shù)和庫(kù)。為了不僅包括代碼,還包括數(shù)據(jù)和表等內(nèi)容,我使用了Deepnote框架,這是一個(gè)類似Jupyter的基于Web的協(xié)作筆記本環(huán)境。?

我們有100000名在線cstore訪問者的數(shù)據(jù),我們觀察他們?cè)L問網(wǎng)站的時(shí)間、使用的設(shè)備、瀏覽器和地理區(qū)域。我們還會(huì)觀察到他們是否得到了折扣,我們的處理方式,他們的花費(fèi)是多少,以及其他一些感興趣的結(jié)果。?

由于實(shí)驗(yàn)是隨機(jī)分配的,我們可以使用簡(jiǎn)單的均值差估計(jì)來(lái)估計(jì)實(shí)驗(yàn)效果。我們期望實(shí)驗(yàn)組和對(duì)照組相似,但折扣除外,因此我們可以將支出的任何差異歸因于折扣。?

折扣看起來(lái)似乎是有效的:實(shí)驗(yàn)組的平均花費(fèi)增加了1.95美元。但是所有的顧客都受到同樣的影響嗎??

為了回答這個(gè)問題,我們想估計(jì)異質(zhì)處理效應(yīng),可能是在個(gè)體層面。?

因果森林?

計(jì)算異質(zhì)處理效應(yīng)有許多不同的選擇。最簡(jiǎn)單的方法是以異質(zhì)性的維度與感興趣的結(jié)果進(jìn)行交互。這種方法的問題在于選擇哪個(gè)變量。有時(shí),我們有可能指導(dǎo)我們行動(dòng)事先信息;例如,我們可能知道移動(dòng)用戶的平均花費(fèi)比桌面用戶多。其他時(shí)候,出于商業(yè)原因,我們可能對(duì)某個(gè)維度感興趣;例如,我們可能希望在某個(gè)地區(qū)投資更多。然而,當(dāng)我們沒有額外的信息時(shí),我們希望這個(gè)過程是數(shù)據(jù)驅(qū)動(dòng)的。?

在上一篇文章中,我們探索了一種數(shù)據(jù)驅(qū)動(dòng)的方法來(lái)估計(jì)異質(zhì)處理效應(yīng)——因果樹。我們現(xiàn)在將把它們擴(kuò)展到因果森林。然而,在我們開始之前,我們必須介紹一下它的非因果表親——隨機(jī)森林。?

隨機(jī)森林,顧名思義,是回歸樹的延伸,在其上增加了兩個(gè)獨(dú)立的隨機(jī)性來(lái)源。特別是,隨機(jī)森林算法能夠對(duì)許多不同的回歸樹進(jìn)行預(yù)測(cè),每個(gè)樹都在數(shù)據(jù)的自助樣本上進(jìn)行訓(xùn)練,并將它們平均在一起。該過程通常稱為引導(dǎo)聚集算法,又稱裝袋算法,可以應(yīng)用于任何預(yù)測(cè)算法,而不是隨機(jī)森林特有的。隨機(jī)性的額外來(lái)源來(lái)自特征選擇,因?yàn)樵诿看畏指顣r(shí),只有所有特征X的隨機(jī)子集被考慮用于最優(yōu)分割。?

這兩個(gè)額外的隨機(jī)性來(lái)源非常重要,有助于提高隨機(jī)森林的性能。首先,裝袋算法允許隨機(jī)森林通過對(duì)多個(gè)離散預(yù)測(cè)進(jìn)行平均來(lái)產(chǎn)生比回歸樹更平滑的預(yù)測(cè)。相反,隨機(jī)特征選擇允許隨機(jī)森林更深入地探索特征空間,允許它們發(fā)現(xiàn)比簡(jiǎn)單回歸樹更多的交互。事實(shí)上,變量之間可能存在相互作用,這些相互作用本身不具有很強(qiáng)的預(yù)測(cè)性(因此不會(huì)產(chǎn)生分裂),但共同作用非常強(qiáng)大。?

因果森林相當(dāng)于隨機(jī)森林,但用于估計(jì)異質(zhì)處理效應(yīng),與因果樹和回歸樹完全相同。正如因果樹一樣,我們有一個(gè)基本問題:我們有興趣預(yù)測(cè)一個(gè)我們沒有觀察到的對(duì)象:個(gè)體處理效果τ?。解決方案是創(chuàng)建一個(gè)輔助結(jié)果變量Y*,其每一次觀察的預(yù)期值正好是處理效果。?

輔助結(jié)果變量?

如果你想更多了解為什么這個(gè)變量對(duì)個(gè)體處理效果沒有添加偏置的話,請(qǐng)看一下??我之前的文章??,我在這篇文章中進(jìn)行了詳細(xì)介紹。簡(jiǎn)而言之,您可以認(rèn)為Y?*作為單個(gè)觀測(cè)的均值差估計(jì)量。

一旦我們有了一個(gè)結(jié)果變量,為了使用隨機(jī)森林來(lái)估計(jì)異質(zhì)處理效應(yīng),我們還需要做一些事情。首先,我們需要建造在每片葉子上具有相同數(shù)量的處理單元和控制單元的樹。其次,我們需要使用不同的樣本來(lái)構(gòu)建樹并對(duì)其進(jìn)行評(píng)估,即計(jì)算每片葉子的平均結(jié)果。這個(gè)過程通常被稱為誠(chéng)實(shí)樹(honest trees),因?yàn)槲覀兛梢詫⒚總€(gè)葉子的樣本視為獨(dú)立于樹結(jié)構(gòu),所以它對(duì)推斷非常有用。?

在進(jìn)行評(píng)估之前,讓我們先為分類變量device、browserregion生成虛擬變量。?

df_dummies = pd.get_dummies(df[dgp.X[1:]], drop_first=True)?
df = pd.concat([df, df_dummies], axis=1)?
X = ['time'] + list(df_dummies.columns)?

現(xiàn)在,我們可以使用隨機(jī)森林算法來(lái)估計(jì)異質(zhì)處理效應(yīng)。幸運(yùn)的是,我們不必手動(dòng)完成所有這些,因?yàn)?/span>微軟公司的EconML包中已經(jīng)提供了一個(gè)很好的因果樹和森林實(shí)現(xiàn)。我們將使用其中的CausalForestML函數(shù)。?

from econml.dml import CausalForestDML?

np.random.seed(0)?
forest_model = CausalForestDML(max_depth=3)?
forest_model = forest_model.fit(Y=df[dgp.Y], X=df[X], T=df[dgp.D])?

與因果樹不同,因果森林更難解釋,因?yàn)槲覀儫o(wú)法可視化每一棵樹。我們可以使用SingleTreeateInterpreter函數(shù)來(lái)繪制因果森林算法的等效表示。?

from econml.cate_interpreter import SingleTreeCateInterpreter?

intrp = SingleTreeCateInterpreter(max_depth=2).interpret(forest_model, df[X])?
intrp.plot(feature_names=X, fnotallow=12)?

因果森林模型表示?

我們可以像因果樹模型一樣解釋樹形圖。在頂部,我們可以看到數(shù)據(jù)中的平均$Y^*$的值為1.917$。從那里開始,根據(jù)每個(gè)節(jié)點(diǎn)頂部突出顯示的規(guī)則,數(shù)據(jù)被拆分為不同的分支。例如,根據(jù)時(shí)間是否晚于11.295,第一節(jié)點(diǎn)將數(shù)據(jù)分成大小為46878$和53122$的兩組。在底部,我們得到了帶有預(yù)測(cè)值的最終分區(qū)。例如,最左邊的葉子包含40191$的觀察值(時(shí)間早于11.295,非Safari瀏覽器環(huán)境下),我們預(yù)測(cè)其花費(fèi)為0.264$。較深的節(jié)點(diǎn)顏色表示預(yù)測(cè)值較高。?

這種表示的問題在于,與因果樹的情況不同,它只是對(duì)模型的解釋。由于因果森林是由許多自樹組成的,因此無(wú)法直接檢查每個(gè)決策樹。了解在確定樹分割時(shí)哪個(gè)特征最重要的一種方法是所謂的特征重要性。?

顯然,時(shí)間是異質(zhì)性的第一個(gè)維度,其次是設(shè)備(特別是移動(dòng)設(shè)備)和瀏覽器(特別是Safari)。其他維度無(wú)關(guān)緊要。?

現(xiàn)在,讓我們檢查一下模型性能如何?

性能?

通常,我們無(wú)法直接評(píng)估模型性能,因?yàn)榕c標(biāo)準(zhǔn)的機(jī)器學(xué)習(xí)設(shè)置不同,我們沒有觀察到實(shí)際情況。因此,我們不能使用測(cè)試集來(lái)計(jì)算模型精度的度量。然而,在我們的案例中,我們控制了數(shù)據(jù)生成過程,因此我們可以獲得基本的真相。讓我們從分析模型如何沿著數(shù)據(jù)、設(shè)備、瀏覽器和區(qū)域的分類維度估計(jì)異質(zhì)處理效應(yīng)開始。?

def compute_discrete_effects(df, hte_model):?
temp_df = df.copy()?
temp_df.time = 0?
temp_df = dgp.add_treatment_effect(temp_df)?
temp_df = temp_df.rename(columns={'effect_on_spend': 'True'})?
temp_df['Predicted'] = hte_model.effect(temp_df[X])?
df_effects = pd.DataFrame()?
for var in X[1:]:?
for effect in ['True', 'Predicted']:?
v = temp_df.loc[temp_df[var]==1, effect].mean() - temp_df[effect][temp_df[var]==0].mean()?
effect_var = {'Variable': [var], 'Effect': [effect], 'Value': [v]}?
df_effects = pd.concat([df_effects, pd.DataFrame(effect_var)]).reset_index(drop=True)?
return df_effects, temp_df['Predicted'].mean()?

df_effects, avg_effect_notime = compute_discrete_effects(df, forest_model)?

對(duì)于每個(gè)分類變量,我們繪制了實(shí)際和估計(jì)的平均處理效果。?

fig, ax = plt.subplots()?
sns.barplot(data=df_effects, x="Variable", y="Value", hue="Effect", ax=ax).set(?
xlabel='', ylabel='', title='Heterogeneous Treatment Effects')?
ax.set_xticklabels(ax.get_xticklabels(), rotatinotallow=45, ha="right");?

作者提供的每個(gè)分類值的真實(shí)和估計(jì)處理效果?

因果森林算法非常善于預(yù)測(cè)與分類變量相關(guān)的處理效果。至于因果樹,這是預(yù)期的,因?yàn)樗惴ň哂蟹浅kx散的性質(zhì)。然而,與因果樹不同的是,預(yù)測(cè)更加微妙。?

我們現(xiàn)在可以做一個(gè)更相關(guān)的測(cè)試:算法在時(shí)間等連續(xù)變量下的表現(xiàn)如何?首先,讓我們?cè)俅胃綦x預(yù)測(cè)的處理效果,并忽略其他協(xié)變量。?

def compute_time_effect(df, hte_model, avg_effect_notime):?

df_time = df.copy()?
df_time[[X[1:]] + ['device', 'browser', 'region']] = 0?
df_time = dgp.add_treatment_effect(df_time)?
df_time['predicted'] = hte_model.effect(df_time[X]) + avg_effect_notime?
return df_time?

df_time = compute_time_effect(df, forest_model, avg_effect_notime)?

我們現(xiàn)在可以復(fù)制之前的數(shù)字,但時(shí)間維度除外。我們繪制了一天中每個(gè)時(shí)間的平均真實(shí)和估計(jì)處理效果。?

sns.scatterplot(x='time', y='effect_on_spend', data=df_time, label='True')?
sns.scatterplot(x='time', y='predicted', data=df_time, label='Predicted').set(?
ylabel='', title='Heterogeneous Treatment Effects')?
plt.legend(title='Effect');?

沿時(shí)間維度繪制的真實(shí)和估計(jì)的處理效果?

我們現(xiàn)在可以充分理解因果樹和森林之間的區(qū)別:雖然在因果樹的情況下,估計(jì)基本上是一個(gè)非常粗略的階躍函數(shù),但我們現(xiàn)在可以看到因果樹如何產(chǎn)生更平滑的估計(jì)。?

我們現(xiàn)在已經(jīng)探索了該模型,是時(shí)候使用它了!?

策略定位?

假設(shè)我們正在考慮向訪問我們?cè)诰€商店的新客戶提供4美元的折扣。?

cost = 4?

折扣對(duì)哪些客戶有效?我們估計(jì)平均處理效果為1.9492美元。這意味著,平均而言折扣并不真正有利可圖。然而,現(xiàn)在可以針對(duì)單個(gè)客戶,我們只能向一部分新客戶提供折扣。我們現(xiàn)在將探討如何進(jìn)行政策目標(biāo)定位,為了更好地了解目標(biāo)定位的質(zhì)量,我們將使用因果樹模型作為參考點(diǎn)。?

我們使用相同的CauselForestML函數(shù)構(gòu)建因果樹,但將估計(jì)數(shù)和森林大小限制為1。?

from econml.dml import CausalForestDML?

np.random.seed(0)?
tree_model = CausalForestDML(n_estimators=1, subforest_size=1, inference=False, max_depth=3)?
tree_model = tree_model.fit(Y=df[dgp.Y], X=df[X], T=df[dgp.D])?

接下來(lái),我們將數(shù)據(jù)集分成一個(gè)訓(xùn)練集和一個(gè)測(cè)試集。這一想法與交叉驗(yàn)證非常相似:我們使用訓(xùn)練集來(lái)訓(xùn)練模型——在我們的案例中是異質(zhì)處理效應(yīng)的估計(jì)器——并使用測(cè)試集來(lái)評(píng)估其質(zhì)量。主要區(qū)別在于,我們沒有觀察到測(cè)試數(shù)據(jù)集中的真實(shí)結(jié)果。但是我們?nèi)匀豢梢允褂糜?xùn)練測(cè)試分割來(lái)比較樣本內(nèi)預(yù)測(cè)和樣本外預(yù)測(cè)。?

我們將所有觀察結(jié)果的80%放在訓(xùn)練集中,20%放在測(cè)試集中。?

df_train, df_test = df.iloc[:80_000, :], df.iloc[20_000:,]?

首先,讓我們僅在訓(xùn)練樣本上重新訓(xùn)練模型。?

np.random.seed(0)?
tree_model = tree_model.fit(Y=df_train[dgp.Y], X=df_train[X], T=df_train[dgp.D])?
forest_model = forest_model.fit(Y=df_train[dgp.Y], X=df_train[X], T=df_train[dgp.D])?

現(xiàn)在,我們可以確定目標(biāo)策略,即決定我們向哪些客戶提供折扣。答案似乎很簡(jiǎn)單:我們向所有預(yù)期處理效果大于成本(4美元)的客戶提供折扣。?

借助于一個(gè)可視化工具,它可以讓我們了解處理對(duì)誰(shuí)有效以及如何有效,這就是所謂的處理操作特征(TOC)曲線。這個(gè)名字可以看作基于另一個(gè)更著名的接收器操作特性(ROC)曲線的修正,該曲線描繪了二元分類器的不同閾值的真陽(yáng)性率與假陽(yáng)性率。這兩種曲線的想法類似:我們繪制不同比例受處理人群的平均處理效果。在一個(gè)極端情況下,當(dāng)所有客戶都被處理時(shí),曲線的值等于平均處理效果而在另一個(gè)極端情況下,當(dāng)只有一個(gè)客戶被處理時(shí)曲線的值則等于最大處理效果。?

現(xiàn)在讓我們計(jì)算曲線。?

def compute_toc(df, hte_model, cost, truth=False):?
df_toc = pd.DataFrame()?
for q in np.linspace(0, 1, 101):?
if truth:?
df = dgp.add_treatment_effect(df_test)?
effect = df['effect_on_spend']?
else:?
effect = hte_model.effect(df[X])?
ate = np.mean(effect[effect >= np.quantile(effect, 1-q)])?
temp = pd.DataFrame({'q': [q], 'ate': [ate]})?
df_toc = pd.concat([df_toc, temp]).reset_index(drop=True)?
return df_toc?

df_toc_tree = compute_toc(df_train, tree_model, cost)?
df_toc_forest = compute_toc(df_train, forest_model, cost)?

現(xiàn)在,我們可以繪制兩個(gè)CATE估算器的處理操作特征TOC)曲線。?

def plot_toc(df_toc, cost, ax, color, title):?
ax.axhline(y=cost, lw=2, c='k')?
ax.fill_between(x=df_toc.q, y1=cost, y2=df_toc.ate, where=(df_toc.ate > cost), color=color, alpha=0.3)?
if any(df_toc.ate > cost):?
q = df_toc_tree.loc[df_toc.ate > cost, 'q'].values[-1]?
else: ?
q = 0?
ax.axvline(x=q, ymin=0, ymax=0.36, lw=2, c='k', ls='--')?
sns.lineplot(data=df_toc, x='q', y='ate', ax=ax, color=color).set(?
title=title, ylabel='ATT', xlabel='Share of treated', ylim=[1.5, 8.5]) ?
ax.text(0.7, cost+0.1, f'Discount cost: {cost:.0f}$', fnotallow=12)?

fix, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 6))?
plot_toc(df_toc_tree, cost, ax1, 'C0', 'TOC - Causal Tree')?
plot_toc(df_toc_forest, cost, ax2, 'C1', 'TOC - Causal Forest')?

處理操作特性曲線?

正如預(yù)期的那樣,兩種估算器的TOC曲線都在下降,因?yàn)槠骄?yīng)隨著我們處理客戶份額的增加而降低。換言之,我們?cè)诎l(fā)布折扣時(shí)越有選擇,每個(gè)客戶的優(yōu)惠券效果就越高。我還畫了一條帶有折扣成本的水平線,以便我們可以將TOC曲線下方和成本線上方的陰影區(qū)域解釋為預(yù)期利潤(rùn)。?

這兩種算法預(yù)測(cè)的處理份額相似,約為20%,因果森林算法針對(duì)的客戶略多一些。然而,他們預(yù)測(cè)的利潤(rùn)結(jié)果卻大相徑庭。因果樹算法預(yù)測(cè)的邊際較小且恒定,而因果林算法預(yù)測(cè)的是更大且更陡的邊際。那么,種算法更準(zhǔn)確?

為了比較它們,我們可以在測(cè)試集中對(duì)它們進(jìn)行評(píng)估。我們采用訓(xùn)練集上訓(xùn)練的模型,預(yù)測(cè)處理效果,并將其與測(cè)試集上訓(xùn)練模型的預(yù)測(cè)進(jìn)行比較。注意,與機(jī)器學(xué)習(xí)標(biāo)準(zhǔn)測(cè)試程序不同,有一個(gè)實(shí)質(zhì)性的區(qū)別:在我們的案例中,我們無(wú)法根據(jù)實(shí)際情況評(píng)估我們的預(yù)測(cè),因?yàn)闆]有觀察到處理效果。我們只能將兩個(gè)預(yù)測(cè)相互比較。?

def compute_effect_test(df_test, hte_model, cost, ax, title, truth=False):?
df_test['Treated'] = hte_model.effect(df_test[X]) > cost?
if truth:?
df_test = dgp.add_treatment_effect(df_test)?
df_test['Effect'] = df_test['effect_on_spend']?
else:?
np.random.seed(0)?
hte_model_test = copy.deepcopy(hte_model).fit(Y=df_test[dgp.Y], X=df_test[X], T=df_test[dgp.D])?
df_test['Effect'] = hte_model_test.effect(df_test[X])?
df_test['Cost Effective'] = df_test['Effect'] > cost?
tot_effect = ((df_test['Effect'] - cost) * df_test['Treated']).sum()?
sns.barplot(data=df_test, x='Cost Effective', y='Treated', errorbar=None, width=0.5, ax=ax, palette=['C3', 'C2']).set(?
title=title + '\n', ylim=[0,1])?
ax.text(0.5, 1.08, f'Total effect: {tot_effect:.2f}', fnotallow=14, ha='center')?
return ?


fix, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 5))?
compute_effect_test(df_test, tree_model, cost, ax1, 'Causal Tree')?
compute_effect_test(df_test, forest_model, cost, ax2, 'Causal Forest')?

因果樹模型似乎比因果森林模型表現(xiàn)得更好一些,總凈效應(yīng)為8386美元——相對(duì)于4948美元。從圖中,我們也可以了解差異的來(lái)源。因果森林算法往往限制性更強(qiáng),處理的客戶更少,沒有誤報(bào)的陽(yáng)性,但也有很多誤報(bào)的陰性。另一方面,因果樹算法看起來(lái)更加“慷慨”,并將折扣分配給更多的新客戶。這既轉(zhuǎn)化為更多的真陽(yáng)性,也轉(zhuǎn)化為假陽(yáng)性。總之,凈效應(yīng)似乎有利于因果樹算法。?

通常,我們討論到這里就可以停止,因?yàn)槲覀兛梢宰龅氖虑椴欢嗔?。然而,在我們?/span>案例情形中,我們可以訪問真正的數(shù)據(jù)生成過程。因此,接下來(lái)我們不妨檢查一下這兩種算法的真實(shí)精度。?

首先,讓我們根據(jù)處理效果的預(yù)測(cè)誤差來(lái)比較它們。對(duì)于每個(gè)算法,我們計(jì)算處理效果的均方誤差。?

from sklearn.metrics import mean_squared_error as mse?

def compute_mse_test(df_test, hte_model):?
df_test = dgp.add_treatment_effect(df_test)?
print(f"MSE = {mse(df_test['effect_on_spend'], hte_model.effect(df_test[X])):.4f}")?


compute_mse_test(df_test, tree_model)?
compute_mse_test(df_test, forest_model)?

結(jié)果是,隨機(jī)森林模型更好地預(yù)測(cè)了平均處理效果,均方誤差為0.5555美元,而不是0.9035美元。?

那么,這是否意味著更好的目標(biāo)定位呢?我們現(xiàn)在可以復(fù)制上面所做的相同的柱狀圖,以了解這兩種算法在策略目標(biāo)方面的表現(xiàn)。?

fix, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 5))?
compute_effect_test(df_test, tree_model, cost, ax1, 'Causal Tree', True)?
compute_effect_test(df_test, forest_model, cost, ax2, 'Causal Forest', True)?

幅圖非常相似,但結(jié)果卻大相徑庭。事實(shí)上,因果森林算法現(xiàn)在優(yōu)于因果樹算法,總效果為10395美元,而8828美元。為什么會(huì)出現(xiàn)這種突然的差異?

為了更好地理解差異的來(lái)源,讓我們根據(jù)實(shí)際情況繪制TOC。?

df_toc = compute_toc(df_test, tree_model, cost, True)?

fix, ax = plt.subplots(1, 1, figsize=(7, 5))?
plot_toc(df_toc, cost, ax, 'C2', 'TOC - Ground Truth')?

處理操作特性曲線。?

正如我們所看到的,TOC是傾斜度非常大的,存在一些平均處理效果非常高的客戶。隨機(jī)森林算法能夠更好地識(shí)別它們,因此總體上更有效,盡管目標(biāo)客戶較少。?

結(jié)論?

在這篇文章中,我們學(xué)習(xí)了一個(gè)功能非常強(qiáng)大的估計(jì)異質(zhì)處理效應(yīng)算法——因果森林。因果森林建立在與因果樹相同的原則上,但受益于對(duì)參數(shù)空間和裝袋算法的更深入探索。?

此外,我們還了解了如何使用異質(zhì)處理效應(yīng)的估計(jì)來(lái)執(zhí)行政策定位。通過識(shí)別具有最高處理效果的用戶,我們能夠確保一項(xiàng)政策有利可圖。我們還看到了政策目標(biāo)與異質(zhì)處理效應(yīng)評(píng)估目標(biāo)的不同,因?yàn)榉植嫉奈膊靠赡鼙绕骄?/span>具有更強(qiáng)的相關(guān)。?

參考文獻(xiàn)?

  • S. Athey, G. Imbens, Recursive partitioning for heterogeneous causal effects (2016), PNAS.?
  • S. Wager, S. Athey, Estimation and Inference of Heterogeneous Treatment Effects using Random Forests (2018), Journal of the American Statistical Association.?
  • S. Athey, J. Tibshirani, S. Wager, Generalized Random Forests (2019). The Annals of Statistics.?
  • M. Oprescu, V. Syrgkanis, Z. Wu, Orthogonal Random Forest for Causal Inference (2019). Proceedings of the 36th International Conference on Machine Learning.?

譯者介紹

朱先忠,51CTO社區(qū)編輯,51CTO專家博客、講師,濰坊一所高校計(jì)算機(jī)教師,自由編程界老兵一枚。?

原文標(biāo)題:??From Causal Trees to Forests??,作者:Matteo Courthoud



責(zé)任編輯:華軒 來(lái)源: 51CTO
相關(guān)推薦

2014-07-07 10:05:57

機(jī)械學(xué)習(xí)

2017-05-19 12:49:18

大數(shù)據(jù)時(shí)空算法商業(yè)決策

2017-08-04 14:28:40

決策樹隨機(jī)森林CART模型

2016-12-05 16:33:30

2021-05-28 17:18:44

TensorFlow數(shù)據(jù)機(jī)器學(xué)習(xí)

2014-12-15 10:59:08

RFIDWiFi定位

2024-01-30 00:55:23

2024-04-12 07:40:37

因果推斷推薦模型推薦系統(tǒng)

2017-10-18 14:11:20

機(jī)器學(xué)習(xí)決策樹隨機(jī)森林

2022-11-11 08:00:00

決策樹機(jī)器學(xué)習(xí)監(jiān)督學(xué)習(xí)

2023-09-22 10:34:19

學(xué)習(xí)算法隨機(jī)森林Java

2022-10-27 14:25:46

無(wú)服務(wù)器Serverless云原生

2022-10-14 16:48:40

因果推斷數(shù)據(jù)預(yù)處理特征設(shè)計(jì)

2017-09-25 16:16:49

決策樹隨機(jī)森林機(jī)器學(xué)習(xí)

2022-09-25 23:19:01

機(jī)器學(xué)習(xí)決策樹Python

2023-05-04 08:28:30

因果推斷方法算法

2023-03-22 10:12:30

機(jī)器學(xué)習(xí)KPI自動(dòng)化

2023-02-23 08:00:00

Python機(jī)器學(xué)習(xí)編程代碼

2021-03-24 15:19:15

數(shù)據(jù)應(yīng)用企業(yè)管理

2023-02-17 08:10:58

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)