Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Synthetic Controlを利用した因果推論

akki-
May 30, 2023

Synthetic Controlを利用した因果推論

社内の勉強会で紹介したSynthetic Controlを利用した因果推論についての資料

akki-

May 30, 2023
Tweet

Other Decks in Education

Transcript

  1. © GO Inc. 2 自己紹介 プロフィール写真 GO株式会社 AI技術開発部 分析グループ /

    秋月 達樹 工場勤務から海外駐在を経験したのち、データ分析の受託企業や広告事業に おいてデータ分析や機械学習エンジニアリングを担当。 2021年4月にGO(旧:Mobility Technologies)に中途入社し、タクシーアプ リ『GO』のユーザー、乗務員に関する分析や施策効果の検証、経営上の意 思決定に関与する分析業務を担当。 ------------------------------------------------ 週に1回サッカーしています。 ELLEGARDENが新アルバム出したのが嬉しくて泣いています。 この時期は末端冷え症なのでキーボードが上手く打てなくて困っています。 (解消法をご存知方は教えてください。) @Akidukin
  2. Index © GO Inc. Synthetic Control による因果推論 1 – 因果推論のモチベーション

    2 – パネルデータに対する因果推論 3 – Synthetic Control による因果推論 4 – Synthetic Control 実践 5 – まとめ
  3. © GO Inc. • ビジネス上の意思決定において、特定の変数(𝑊)が及ぼすアウトカム(𝑌)への影響を定量的に把握したい 場面は多く存在する ◦ 例えば、売上(𝑌) に対して広告出稿(𝑊)を行う事がどれだけ影響(τ)を与えているのか、仮に広告出稿をしなかっ た場合、売上はどれだけ毀損するのかしないのか

    • 無作為実験(ABテスト)下においては単純比較をするだけで影響を計測することは出来るが現実的に実施 自体が不可能な場合が存在する 因果推論が必要な場面 Y : 売上 𝑊 [0,1] : 広告出稿 𝑌 𝑊 無作為実験下においては 𝑌! 0 , 𝑌! 1 ⫫𝑊! が成立するため 単純比較をする事で効果を推定する事ができる 介入効果 全ての施策において無作為実験(ABテスト)を実施することは 現実的に不可能な場合が存在する τ = Ε 𝑌! 𝑊! = 1 − Ε 𝑌! 𝑊! = 0
  4. © GO Inc. • 無作為実験が行えない場合、介入の有無や増減に関しては何かしらの交絡が発生する • 交絡が発生している状況下において単純比較を実施すると、推定される効果にバイアスが生じてしまい、 正しい推定が出来なくなってしまう 単純比較によるバイアス 𝑌

    𝑊 𝑋 交絡が発生している 𝑌 𝑋 𝑊 0 𝑊(1) 𝑋の値により𝑊が決まっている場合 𝑋と𝑊のどちらの影響か切り分けができず 単純比較によりバイアスが生じる 𝐸[𝑌" |𝑊 = 1] 𝐸[𝑌" |𝑊 = 0]
  5. © GO Inc. • 単純に前後比較を行なった場合、介入効果を正しく推定する事ができず間違った推定をしてしまう事が 多い • トレンドによる影響を考慮せずに推定するため、過小に(または過大に)評価してしまう為である 前後比較によるバイアスの例 𝑌

    新規登録 ユーザー数 𝑇 時刻 介入点 𝑌# (𝑤 = 0) 𝑌# 𝑤 = 0 介入なし 介入あり 𝑌# (𝑤 = 1) τ = 𝑌# 𝑤 = 1 − 𝑌# (𝑤 = 0) 単純比較により、過大に介入効果を見積もってしまう 𝑌" 𝑤 = 1 − 𝑌" 𝑤 = 0 < 𝑌" 𝑤 = 1 − 𝑌" 𝑤 = 1 τ = 𝑌# 𝑤 = 1 − 𝑌# (𝑤 = 1) 本来推定したい 前後比較
  6. © GO Inc. • こうした場合に広く一般的に利用される手法としてDifference-In-Differences(DID)という手法が存在 する • DIDは介入グループと非介入グループの前後の比較を行うことでトレンドによる影響を少なくする事がで きる Difference-In-Differencesによる因果効果の推定

    𝑌 新規登録 ユーザー数 𝑇 時刻 介入点 𝑊 0 𝑊(1) τ454 𝑌# (𝑤 = 0) 𝑌$ (𝑤 = 0) 𝑌$ (𝑤 = 1) 𝑌# (𝑤 = 1) τ454 = 𝐸 𝑌6 1 𝐷 = 1 − 𝐸 𝑌6 0 𝐷 = 1 − 𝐸 𝑌7 1 𝐷 = 0 − 𝐸 𝑌6 0 𝐷 = 0 介入グループの介入前後の比較 非介入グループの介入前後の比較 非介入グループのトレンドを介入グループのトレンドと見なし 比較を行うことで介入効果を推定することが出来る
  7. © GO Inc. • DIDを利用する場合、介入グループと非介入グループのトレンドは大きく変わらないという非常に強い仮 定を置く必要がある(並行トレンド仮定) • 介入グループと非介入グループでトレンドが大きく変わっている場合、得られた推定結果を支持するこ とは難しい DIDを利用する上での仮定

    𝑌 新規登録 ユーザー数 𝑇 時刻 介入点 𝑊 0 𝑊(1) 𝑌# (𝑤 = 0) 𝑌$ (𝑤 = 0) 𝑌$ (𝑤 = 1) 𝑌# (𝑤 = 1) τ454 並行トレンド仮定が支持できない場合 介入グループのトレンドとして代用できないため 得られた推定量はバイアスが発生している
  8. © GO Inc. • 介入グループに一致するように重み付けを行うため、並行トレンドを仮定できない場合でもバイアスの 影響を受けづらい • また、時間と共に変化する交絡因子の影響を説明する事ができる Synthetic Controlを利用する事の利点

    𝑇 時刻 介入点 𝑌 新規登録 ユーザー数 unit 𝑇 時刻 𝑊 = Synthetic Control 並行トレンドを仮定できない場合でもバイアスを受けづらい 時間と共に変化する交絡因子の影響を説明できる 𝑊 0 𝑊(1)
  9. © GO Inc. • Synthetic Controlの介入効果の推定量は固定効果モデルの最適化問題を解くことで推定できる ◦ ユニットの重み𝑊! #$と時間固定効果β% を考慮した推定モデルである事がわかる

    • 重みに加重平均を利用することで、ロバストな推定結果を得る事が出来る ◦ 重みに制約を付けなかった場合、存在し得ない数値が観察されてしまう恐れがある Synthetic Controlの内部をもう少し理解する ユニット毎に設定する重み 時間固定効果 + τ89 = 𝑎𝑟𝑔𝑚𝑖𝑛:,; {Σ<=6 > Σ?=6 @ (𝑌<? − β? − τ𝐷<? )A 7 𝑊< 89} unit1 unit2 unit3 介入グループ 重みを外挿してしまうと ロバストな結果が得られない unit1 unit2 unit3 介入グループ Unit内部で補完するよう 制限を付ける必要がある Synthetic Control の 固定効果モデル
  10. © GO Inc. • 非介入グループとSynthetic Controlの間に距離がゼロになる重みが存在する事が大前提となる • また、観測不可能な変数同士の距離もゼロになっている事が必要 ◦ 要するに介入グループと似たような傾向を持つ非介入ユニットが存在しないとダメ

    Synthetic Controlを利用する上での注意点 𝑇 時刻 介入点 𝑊 0 𝑊(1) 𝑌 新規登録 ユーザー数 トレンドの傾向が一致する必要はないが 非介入グループの内部で加重平均を利用しているため ある程度似たような集団を採用する必要がある ※…比較対象とできるユニット数が少ない時
  11. © GO Inc. • Synthetic Controlを実践するために1988年11月に実施された「カリフォルニア州へのタバコ税及び健 康保護法」が導入された後のタバコの販売数についてのデータを用意 • たばこ税が1箱あたり25セント引き上げられ、他のタバコ製品にも同額が課税された ◦

    この政策は一般的にProposition 99として知られている 検証用にダミーデータを生成 1970 1971 1972 1973 1974 89.8 95.4 101.1 102.9 108.2 100.3 104.1 103.9 108.0 109.7 123.0 121.0 123.5 124.4 126.7 124.8 125.5 134.3 137.9 132.8 Year Alabama Arkansas California Colorado … … … … … … … … … … … データセット 参考 - https://github.com/jehangiramjad/tslib/blob/master/tests/testdata/prop99.csv
  12. © GO Inc. • 非介入グループのデータを利用し、介入グループに近似する重みを学習する • 学習した重みを利用し、介入グループに近似するデータ(合成コントロール)を生成する Synthetic Controlによる因果効果の推定 from

    scipy.optimize import fmin_slsqp import numpy as np from toolz import reduce, partial ## 損失関数の定義 def loss_w(W, X, y) -> float: return np.sqrt(np.mean((y - X.dot(W))**2)) ## weightの推定 def get_w(X, y): w_start = [1/X.shape[1]]*X.shape[1] weights = fmin_slsqp(partial(loss_w, X=X, y=y), np.array(w_start), f_eqcons=lambda x: np.sum(x) - 1, bounds=[(0.0, 1.0)]*len(w_start), disp=False) return weights ## 学習や合成コントロールの作成 tar_ind = df_sc.variable.astype('int') < 1988 y = df_sc.loc[tar_ind,'California'].values X = df_sc.loc[tar_ind,tar_cols].values calif_weights = get_w(X, y).reshape(-1,1) synthetic_calif = df_sc[tar_cols].values.dot(calif_weights) 介入前の期間で 重み付けする
  13. © GO Inc. • 生成したデータとの差分を介入効果として推定する事ができる • Proposition99 によりタバコの売上が25パック減少した事が分かり、税の導入により個人のタバコの消 費が抑えられる事が分かった 推定結果と解釈

    τ!" = 𝑌 #" $ − 𝑌 #" % plt.figure(figsize=(12,8)) plt.plot(df_sc.variable , df_sc['California'].values - synthetic_calif.ravel() , color = 'blue’ , label = 'Treatment Effect') plt.vlines(x=18 ,ymin=-30 ,ymax=5 ,color='gray’ ,label='treated') plt.hlines(y=0, xmin=1, xmax=31, lw=2) plt.legend() plt.title('prop 99 cigaretto sales') plt.grid('--',color = 'gray', alpha = 0.5) plt.xticks(rotation=90) plt.show()