CausalMLのLRSRegressorを使用して介入(治療)効果を推定し、因果効果を測定する。
CausalML
- 概要 CausalMLは、最近の研究に基づく機械学習アルゴリズムを使用したアップリフトモデリングと因果推論のメソッドを提供するライブラリです。Uberによって開発され、CATEやITEの推定に焦点を当てています。
- 特徴
- 機械学習アルゴリズムを使用したアップリフトモデリングと因果推論のメソッドのスイートを提供。
- 実験的または観察データから条件付き平均治療効果(CATE)または個別治療効果(ITE)を推定。
- モデル形式に強い仮定を必要とせずに介入の因果影響を推定。
- 典型的な使用例:
- キャンペーンターゲティングの最適化
- パーソナライズドエンゲージメント
- 適用例: 広告キャンペーンのROI向上や個別化された介入効果の分析に適しています。詳細はCausalMLのドキュメントで確認できます。
例
import numpy as np
import pandas as pd
import matplotlib.pyplot as
plt
import networkx as nx
from causalml.inference.meta
import LRSRegressor
# 生成データの作成
np.random.seed(42)
n_samples = 500
X1 =
np.random.normal(size=n_samples)
X2 = 2 * X1 +
np.random.normal(size=n_samples)
X3 = -3 * X2 + np.random.normal(size=n_samples)
# Create a binary treatment
variable (treatment vs control)
treatment = np.where(X1 >
0, 1, 0) # Positive values are treatment (1), others are control (0)
data = pd.DataFrame({'X1':
X1, 'X2': X2, 'X3': X3, 'Treatment': treatment})
# CausalMLを使った因果推論
X = data[['X2']] # 共変量
y = data['X3'] # 結果変数
model = LRSRegressor()
model.fit(X=X,
treatment=data['Treatment'], y=y) # Updated to use binary treatment
# 推定結果を表示
treatment_effect =
model.predict(X=X)
print(f"Estimated
treatment effect: {treatment_effect.mean()}")
# DAGの仮定に基づく手動構築
dag = nx.DiGraph()
dag.add_edges_from([('Treatment',
'X2'), ('X2', 'X3')]) # Updated for new structure
# DAGの可視化
plt.figure(figsize=(6, 6))
pos = nx.spring_layout(dag)
# レイアウト設定
nx.draw(dag, pos, with_labels=True,
node_color="lightblue", node_size=3000, font_size=10)
plt.title("Hypothetical
Causal DAG")
plt.show()
出力結果
Estimated treatment effect:
-0.2249192773735675
このコードの概要と目的
このコードの目的は以下の通りです。
1.
因果推論:
o CausalMLのLRSRegressorを使用して介入(治療)効果を推定。
o 二値の治療変数(treatment
vs. control)を用い、因果効果を測定する。
2.
DAG(有向非巡回グラフ)の可視化:
o 仮定した因果関係に基づき、NetworkXを使用してDAGを構築し、可視化。
以下、コードの詳細を段階的に解説します。
コードの詳細解説
1. データ生成
python
np.random.seed(42)
n_samples = 500
X1 =
np.random.normal(size=n_samples)
X2 = 2 * X1 + np.random.normal(size=n_samples)
X3 = -3 * X2 +
np.random.normal(size=n_samples)
- 背景:
- 因果関係のあるデータをシミュレーションするため、X1を基にX2、さらにX3を生成。
- X2はX1の線形関数にノイズを加えたもの。
- X3はX2の線形関数にノイズを加えたもの。
- 目的:
- 因果構造を持つデータセットを作ること。
2. 二値治療変数の作成
python
treatment = np.where(X1 >
0, 1, 0)
- 処理:
- X1の値が正なら治療群(1)、負なら対照群(0)として分類。
- 目的:
- 因果推論に必要な治療変数(Treatment)を生成。
3. CausalMLによる因果推論
python
X = data[['X2']]
y = data['X3']
model = LRSRegressor()
model.fit(X=X,
treatment=data['Treatment'], y=y)
- LRSRegressor:
- 線形回帰モデルを用いて因果効果を推定。
- 処理:
- Treatment(治療)を基に、X2(共変量)がX3(結果変数)に与える効果を推定。
- 推定結果:
- treatment_effect.mean()で平均的な治療効果を表示。
4. DAGの手動構築
python
dag = nx.DiGraph()
dag.add_edges_from([('Treatment',
'X2'), ('X2', 'X3')])
- 背景
- 因果関係を仮定し、有向非巡回グラフを手動で設定。
- Treatment → X2 → X3の因果構造を表現。
- 可視化
- networkx.drawを使用し、グラフを描画。
背景と目的
このコードは、因果推論の方法論を説明し、仮定に基づく因果構造を視覚的に確認するための例です。
- 背景
- 介入効果の測定は、治療や政策の評価に役立つ。
- DAGは因果構造を直感的に示すための強力なツール。
- 目的
- シンプルなデータから因果推論を行うフローを学ぶ。
- 結果を視覚化して、因果関係を理解しやすくする。