CausalMLのLRSRegressorを使用して介入(治療)効果を推定し、因果効果を測定する。

 CausalML

  • 概要 CausalMLは、最近の研究に基づく機械学習アルゴリズムを使用したアップリフトモデリングと因果推論のメソッドを提供するライブラリです。Uberによって開発され、CATEITEの推定に焦点を当てています。
  • 特徴
    • 機械学習アルゴリズムを使用したアップリフトモデリングと因果推論のメソッドのスイートを提供。
    • 実験的または観察データから条件付き平均治療効果(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    CausalMLLRSRegressorを使用して介入(治療)効果を推定。

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を生成。
    • X2X1の線形関数にノイズを加えたもの。
    • X3X2の線形関数にノイズを加えたもの。
  • 目的:
    • 因果構造を持つデータセットを作ること。

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は因果構造を直感的に示すための強力なツール。
  • 目的
    • シンプルなデータから因果推論を行うフローを学ぶ。
    • 結果を視覚化して、因果関係を理解しやすくする。

このブログの人気の投稿

小論文 統計的因果推論の現場適用による排泄ケアの展望

排泄ケア相談支援員の育成に向けて

解説 排泄ケアの相談支援計画書作成のためのチェックリスト