差の差分析(DID)

英語名 Difference-in-Differences
読み方 ディファレンス イン ディファレンシズ
難易度
所要時間 1〜2時間
目次

ひとことで言うと
#

A/Bテストができない状況で、施策を受けた群(処置群)と受けなかった群(対照群)の前後の変化量の差を比較して因果効果を推定する手法。ランダム割り当てなしでも、一定の条件下で因果関係に迫れる。

押さえておきたい用語
#

押さえておきたい用語
処置群(Treatment Group)
施策やキャンペーンなどの介入を受けたグループのこと。DIDでは処置群の前後変化から対照群の前後変化を引くことで因果効果を推定する。
対照群(Control Group)
介入を受けなかった比較対象のグループを指す。処置群と似た特性を持つグループを選ぶことが分析の精度を左右する。
平行トレンド仮定(Parallel Trends Assumption)
「もし施策がなければ、処置群と対照群は同じトレンドで推移していたはずだ」という仮定。DIDの妥当性を支える最も重要な前提である。
ATT(Average Treatment Effect on the Treated)
処置群における平均処置効果。DIDで推定されるのはこの値で、「施策を受けた人に対して施策がどれだけ効いたか」を表す。

差の差分析の全体像
#

DID:処置群と対照群の前後変化の差から因果効果を推定する
アウトカム施策前施策後施策実施対照群処置群反事実DID効果DID効果 = (処置群の変化) − (対照群の変化)
差の差分析の進め方フロー
1
群の設定
処置群と対照群を定義する
2
平行トレンド確認
施策前の推移が並行かを検証する
3
DID推定
前後×群の差分から効果を算出する
因果効果の解釈
効果の大きさと信頼区間を報告する

こんな悩みに効く
#

  • 施策を全ユーザーに一斉展開したため、A/Bテストができなかった
  • 地域限定キャンペーンの効果を厳密に測りたい
  • 「施策前後で数字が上がった」だけでは因果関係と言えないと指摘される

基本の使い方
#

処置群と対照群を定義する

施策を受けた群と受けなかった群を明確に分ける。

  • 地域別: キャンペーンを実施した店舗 vs 未実施の店舗
  • 時期別: 機能をリリースした後のユーザー vs リリース前に離脱したユーザー(注意が必要)
  • 対照群は処置群と特性が近いものを選ぶ。売上規模、地域特性、ユーザー属性が大きく異なると推定が歪む
平行トレンド仮定を確認する

施策実施前の期間で、処置群と対照群が同じトレンドで推移しているかを確認する。

  • 施策前6ヶ月〜1年の時系列データを両群で重ねてプロットする
  • トレンドが並行していれば仮定は支持される
  • 並行でない場合、DIDの推定結果は信頼できない。マッチングなどの補正を検討する
DIDを推定して効果を報告する

回帰モデルで推定するのが標準的な方法。

  • モデル式: Y = β0 + β1×処置群ダミー + β2×施策後ダミー + β3×(処置群×施策後) + ε
  • β3がDID推定量(因果効果の推定値)
  • 標準誤差はクラスタロバスト(店舗単位など)で計算し、信頼区間を添えて報告する

具体例
#

例1:飲食チェーンがモバイルオーダー導入の効果を測る

全国120店舗のハンバーガーチェーン。モバイルオーダー機能を60店舗に先行導入し、残り60店舗は未導入のまま1ヶ月間運用した。

導入前(月間売上平均)導入後(月間売上平均)変化
処置群(導入店60店)850万円940万円+90万円
対照群(未導入店60店)830万円860万円+30万円

DID効果 = 90万円 − 30万円 = +60万円/店

施策前12ヶ月の売上トレンドが両群でほぼ平行だったため、平行トレンド仮定は支持された。95%信頼区間は +38万円 〜 +82万円 で、モバイルオーダー導入による売上増加の因果効果と判断。全店展開を決定した。

例2:SaaS企業がオンボーディング改善の因果効果を推定する

業務管理SaaS(契約企業1,500社)がオンボーディングフローを刷新。4月にリニューアルしたが、A/Bテストの実装が間に合わず全ユーザーに一斉適用してしまった。

処置群を「4月以降の新規契約企業(新フロー体験)」、対照群を「1〜3月の新規契約企業(旧フロー体験)」とし、各群の「契約後30日以内の初期設定完了率」をDIDで分析。対照群のトレンドとして前年同月の新規契約企業を使い、季節性を補正した。

DID推定の結果、初期設定完了率の因果効果は +12pt(旧フロー52% → 新フロー64%相当)。95%信頼区間は +7pt 〜 +17pt で有意。ただし「4月は年度初めで意欲が高い企業が多い」という交絡の可能性を併記し、7〜9月のデータで追加検証を計画した。

例3:自治体が子育て支援金の効果を近隣市町村と比較する

人口8万人の市が、第二子以降の出産に一時金30万円を支給する制度を2025年4月に開始。効果を検証するため、制度未導入の近隣3市を対照群に設定した。

制度前(年間出生数)制度後(年間出生数)変化
処置市620人680人+60人
対照群(3市平均)710人720人+10人

DID効果 = 60人 − 10人 = +50人

施策前5年間の出生数トレンドを確認すると、処置市と対照群はどちらも年率 -2% の減少傾向で平行トレンドが成立していた。一時金制度が年間約50人(+8%)の出生増に寄与した可能性を示唆。ただしDIDでは「他市から転入して出産した世帯」と「制度がなくても出産したが前倒しした世帯」を分離できない点を留意事項として報告した。

やりがちな失敗パターン
#

  1. 平行トレンド仮定を確認しない — 施策前のトレンドが異なる群を比較すると、DID推定値が因果効果とは言えなくなる。必ず施策前データで検証する
  2. 処置群と対照群の選び方が恣意的 — 「都合の良い結果が出る」対照群を選んでしまうと分析が無意味になる。選定基準を事前に決めて文書化する
  3. 施策以外のイベントを無視する — 施策と同時期に他のイベント(セール、法改正など)があると効果が混ざる。時期をずらすか、イベントの影響をコントロールする
  4. サンプルサイズが小さすぎる — 店舗数5 vs 5のようなケースでは信頼区間が広すぎて実用的な結論が出ない。クラスタ数が少ない場合はワイルドブートストラップなどの補正を使う

まとめ
#

差の差分析は、A/Bテストが使えない現実の多くの場面で因果効果を推定できる手法。核心は「処置群と対照群の変化量の差」をとること。平行トレンド仮定の確認が分析の信頼性を決めるので、施策前データの可視化は絶対に省略しない。完璧な手法ではないが、「施策前後で数字が上がりました」と言うだけよりも格段に説得力のある因果推論ができる。