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.
    Synthetic Controlによる
    因果推論
    2023.05.30
    AI技術開発部 分析グループ / 秋月 達樹
    GO株式会社

    View Slide

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

    View Slide

  3. Index
    © GO Inc.
    Synthetic Control による因果推論
    1 – 因果推論のモチベーション
    2 – パネルデータに対する因果推論
    3 – Synthetic Control による因果推論
    4 – Synthetic Control 実践
    5 – まとめ

    View Slide

  4. © GO Inc.
    因果推論のモチベーション
    01

    View Slide

  5. © GO Inc.
    ● ビジネス上の意思決定において、特定の変数(𝑊)が及ぼすアウトカム(𝑌)への影響を定量的に把握したい
    場面は多く存在する
    ○ 例えば、売上(𝑌) に対して広告出稿(𝑊)を行う事がどれだけ影響(τ)を与えているのか、仮に広告出稿をしなかっ
    た場合、売上はどれだけ毀損するのかしないのか
    ● 無作為実験(ABテスト)下においては単純比較をするだけで影響を計測することは出来るが現実的に実施
    自体が不可能な場合が存在する
    因果推論が必要な場面
    Y : 売上
    𝑊 [0,1] : 広告出稿
    𝑌
    𝑊
    無作為実験下においては 𝑌!
    0 , 𝑌!
    1 ⫫𝑊!
    が成立するため
    単純比較をする事で効果を推定する事ができる
    介入効果
    全ての施策において無作為実験(ABテスト)を実施することは
    現実的に不可能な場合が存在する
    τ = Ε 𝑌!
    𝑊!
    = 1 − Ε 𝑌!
    𝑊!
    = 0

    View Slide

  6. © GO Inc.
    ● 無作為実験が行えない場合、介入の有無や増減に関しては何かしらの交絡が発生する
    ● 交絡が発生している状況下において単純比較を実施すると、推定される効果にバイアスが生じてしまい、
    正しい推定が出来なくなってしまう
    単純比較によるバイアス
    𝑌
    𝑊
    𝑋
    交絡が発生している
    𝑌
    𝑋
    𝑊 0
    𝑊(1)
    𝑋の値により𝑊が決まっている場合
    𝑋と𝑊のどちらの影響か切り分けができず
    単純比較によりバイアスが生じる
    𝐸[𝑌"
    |𝑊 = 1]
    𝐸[𝑌"
    |𝑊 = 0]

    View Slide

  7. © GO Inc.
    ● 交絡が発生している場合、共変量をすべて調整することが出来れば真値を推定できる
    ● しかし、すべてを調整する事は現実的に不可能なため、観測できる範囲内で調整を行い交絡によるバイ
    アスの影響を少なくする必要がある
    共変量の調整によりバイアスの影響を小さくする
    発生している交絡を𝑋で調整(条件付け)
    することでバイアスを少なくすることが出来る
    𝑃 𝑌 𝑇 = 1, 𝑋 = 𝑃(𝑌|𝑋)
    𝑌
    𝑋
    𝑊 0
    𝑊(1)
    𝑌
    𝑊
    𝑋

    View Slide

  8. © GO Inc.
    ● 因果効果を機械学習の変数重要度で代用した場合、得られる結果は説明変数間の関係を考慮していない
    ● 交絡が発生している状況下において、説明変数間の関係を考慮しない場合、間違った推定をしてしまう
    場合が多く注意が必要
    機械学習による代用は難しい
    T
    X1
    X2
    X3
    Y
    機械学習のイメージ
    説明変数間の関係を考慮しない
    T
    X1
    X2
    X3
    Y
    因果推論のイメージ
    説明変数間の関係を考慮する

    View Slide

  9. © GO Inc.
    パネルデータに対する因果
    推論
    02

    View Slide

  10. © GO Inc.
    ● 前章で紹介した介入効果の定量把握を行いたい場面は、パネルデータに関しても同様に存在する
    ○ 例えば、テレビCM(𝑊)が与える新規登録ユーザー数(𝑌)への影響(τ)
    ● パネルデータに対する因果推論は、トレンドによる影響なのか介入による影響なのか切り分けが難しい
    パネルデータに対する因果推論
    𝑌
    新規登録
    ユーザー数
    𝑇
    時刻
    介入点
    介入後に𝑌は上昇しているように見えるが上昇の要因が
    トレンドなのか、介入なのか影響の切り分けが難しい
    𝐸[𝑌"
    |𝑊 = 1]
    𝐸[𝑌"
    |𝑊 = 0]

    View Slide

  11. © GO Inc.
    ● 単純に前後比較を行なった場合、介入効果を正しく推定する事ができず間違った推定をしてしまう事が
    多い
    ● トレンドによる影響を考慮せずに推定するため、過小に(または過大に)評価してしまう為である
    前後比較によるバイアスの例
    𝑌
    新規登録
    ユーザー数
    𝑇
    時刻
    介入点
    𝑌#
    (𝑤 = 0)
    𝑌#
    𝑤 = 0
    介入なし
    介入あり
    𝑌#
    (𝑤 = 1)
    τ = 𝑌#
    𝑤 = 1 − 𝑌#
    (𝑤 = 0)
    単純比較により、過大に介入効果を見積もってしまう
    𝑌"
    𝑤 = 1 − 𝑌"
    𝑤 = 0 < 𝑌"
    𝑤 = 1 − 𝑌"
    𝑤 = 1
    τ = 𝑌#
    𝑤 = 1 − 𝑌#
    (𝑤 = 1)
    本来推定したい
    前後比較

    View Slide

  12. © 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
    介入グループの介入前後の比較
    非介入グループの介入前後の比較
    非介入グループのトレンドを介入グループのトレンドと見なし
    比較を行うことで介入効果を推定することが出来る

    View Slide

  13. © GO Inc.
    ● DIDを利用する場合、介入グループと非介入グループのトレンドは大きく変わらないという非常に強い仮
    定を置く必要がある(並行トレンド仮定)
    ● 介入グループと非介入グループでトレンドが大きく変わっている場合、得られた推定結果を支持するこ
    とは難しい
    DIDを利用する上での仮定
    𝑌
    新規登録
    ユーザー数
    𝑇
    時刻
    介入点
    𝑊 0
    𝑊(1)
    𝑌#
    (𝑤 = 0)
    𝑌$
    (𝑤 = 0)
    𝑌$
    (𝑤 = 1)
    𝑌#
    (𝑤 = 1)
    τ454
    並行トレンド仮定が支持できない場合
    介入グループのトレンドとして代用できないため
    得られた推定量はバイアスが発生している

    View Slide

  14. © GO Inc.
    Synthetic Controlによる
    因果推論
    03

    View Slide

  15. © GO Inc.
    ● 介入グループに対して、非介入グループに重みづけを行い比較を行う手法である
    ● 非介入グループに重みづけを行うことで「もし介入を受けていなかったら、介入群に何が起こっていた
    か」を表現する
    Synthetic Controlとは
    𝑇
    時刻
    介入点
    𝑊 0
    𝑊(1)
    𝑌
    新規登録
    ユーザー数
    Unit(1)
    Unit(2)
    Unit(3)
    Unit(4)
    𝑇
    時刻
    介入点
    𝑌
    新規登録
    ユーザー数
    Synthetic
    Control

    View Slide

  16. © GO Inc.
    ● 介入グループに一致するように重み付けを行うため、並行トレンドを仮定できない場合でもバイアスの
    影響を受けづらい
    ● また、時間と共に変化する交絡因子の影響を説明する事ができる
    Synthetic Controlを利用する事の利点
    𝑇
    時刻
    介入点
    𝑌
    新規登録
    ユーザー数
    unit
    𝑇
    時刻
    𝑊
    =
    Synthetic
    Control
    並行トレンドを仮定できない場合でもバイアスを受けづらい
    時間と共に変化する交絡因子の影響を説明できる
    𝑊 0
    𝑊(1)

    View Slide

  17. © GO Inc.
    ● Synthetic Controlの介入効果の推定量は固定効果モデルの最適化問題を解くことで推定できる
    ○ ユニットの重み𝑊!
    #$と時間固定効果β%
    を考慮した推定モデルである事がわかる
    ● 重みに加重平均を利用することで、ロバストな推定結果を得る事が出来る
    ○ 重みに制約を付けなかった場合、存在し得ない数値が観察されてしまう恐れがある
    Synthetic Controlの内部をもう少し理解する
    ユニット毎に設定する重み
    時間固定効果
    +
    τ89 = 𝑎𝑟𝑔𝑚𝑖𝑛:,;
    {Σ<=6
    > Σ?=6
    @ (𝑌
    − β?
    − τ𝐷
    )A 7
    𝑊<
    89}
    unit1
    unit2 unit3
    介入グループ
    重みを外挿してしまうと
    ロバストな結果が得られない
    unit1
    unit2 unit3
    介入グループ
    Unit内部で補完するよう
    制限を付ける必要がある
    Synthetic Control の 固定効果モデル

    View Slide

  18. © GO Inc.
    ● 非介入グループとSynthetic Controlの間に距離がゼロになる重みが存在する事が大前提となる
    ● また、観測不可能な変数同士の距離もゼロになっている事が必要
    ○ 要するに介入グループと似たような傾向を持つ非介入ユニットが存在しないとダメ
    Synthetic Controlを利用する上での注意点
    𝑇
    時刻
    介入点
    𝑊 0
    𝑊(1)
    𝑌
    新規登録
    ユーザー数
    トレンドの傾向が一致する必要はないが
    非介入グループの内部で加重平均を利用しているため
    ある程度似たような集団を採用する必要がある
    ※…比較対象とできるユニット数が少ない時

    View Slide

  19. © GO Inc.
    Synthetic Control実践
    04

    View Slide

  20. © 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

    View Slide

  21. © 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)
    介入前の期間で
    重み付けする

    View Slide

  22. © 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()

    View Slide

  23. © GO Inc.
    まとめ
    05

    View Slide

  24. © GO Inc.
    ● 介入効果を推定する際に単純比較するとバイアスが含まれるケースについて紹介しました
    ● パネルデータに対して介入効果を推定する際の注意点とDIDについての概要を紹介しました
    ● Synthetic Controlの概要と利点及び注意点について紹介しました。
    ● Synthetic Controlの利用例をpythonのコードとともに紹介しました。
    まとめ

    View Slide

  25. 文章・画像等の内容の無断転載及び複製等の行為はご遠慮ください。
    © GO Inc.

    View Slide