因果推論:Synthetic Controlの実装
今回はSynthetic Controlの実装を行いたいと思います。
所要時間は20分ほどとなっています。
それでは、さっそく始めていきましょう!
データの紹介
今回用いるサンプルデータのcausal_mobility_panel(2)はこちらからダウンロードできます。
1行は、分析単位 (unit_id) における、ある時点(date)の観測値(visitors:来訪者数)を表しています。
Pythonで実装
結果の解釈
Synthetic Controlは、渋谷の施策前系列を次のように再現しています。
Y shibuya,t SC = 0.551Y ikebukuro,t +0.246Y ueno,t +0.151Y kawasaki,t +0.052Y omiya,t +0.000Y kichijoji,t
これは、観測された渋谷の来訪者数 Y shibuya,t を、施策前期間においてドナー駅の加重平均で近似しているという意味です。
重要なのは、これは施策効果そのものの推定ではなく、「施策がなかった場合の渋谷」を表しているという点です。
pre_rmspeの意味合い:
これは、処置前期間における二乗平均平方根誤差 (Root Mean Squared Prediction Error, RMSPE) を計算しています。minimize 関数が objective 関数(このgapの二乗平均を最小化するようなもの)を最小化するように重みを探索したため、この pre_rmspe の値は可能な限り小さくなっていることが期待されます。これは、合成コントロールが処置前の期間でどれだけ実際の処置対象ユニットをよく再現できているかの指標です。
post_rmspeの意味合い:
これは、処置後期間における二乗平均平方根誤差 (RMSPE) を計算しています。処置後期間では、処置対象ユニットに介入の影響が現れる可能性があるため、この post_rmspe は pre_rmspe よりも大きくなることが予想されます。この値は、処置後に合成コントロールがどれだけ実際の処置対象ユニットの来訪者数から乖離しているかを示します。
rmspe_ratioの意味合い:
これは、処置後RMSPEを処置前RMSPEで割った比率を計算しています。この比率は、合成コントロール法の評価において非常に重要な指標となります。
もし介入に効果がなかった場合、処置後も処置対象ユニットと合成コントロールの間の乖離は処置前と大差ないはずなので、rmspe_ratio は1に近い値になることが期待されます。
もし介入に正の効果があった場合(例:来訪者数が増加した場合)、処置対象ユニットは合成コントロールから大きく乖離するため、post_rmspe が大きくなり、結果として rmspe_ratio は1よりもかなり大きな値になることが予想されます。
この比率が高いほど、処置後のギャップが処置前のギャップと比較して顕著に拡大しており、介入効果が存在する可能性が高いことを示唆します。
これらの計算により、合成コントロールがどの程度適切に構築され、介入がどの程度の効果をもたらしたか(あるいはもたらさなかったか)を定量的に評価することができます。
今回は処置後期間のRMSPE(予測誤差)が、処置前期間のRMSPEと比較して約291倍に増加した」ことを意味します。
施策後に渋谷駅周辺の実際の来訪者数が、もし施策が実施されなかったと仮定した場合(合成渋谷駅周辺の来訪者数)から、著しく大きく乖離したことを明確に示唆しています。
結論として、rmspe_ratio が 291.37 という値は、渋谷駅周辺で実施された介入(施策)が、その来訪者数に対して非常に大きなプラスの因果効果をもたらした可能性が極めて高いことを強く示唆しています。



