シンプソンのパラドックスと統計の錯覚
個別グループでは新薬Aが勝っているのに、合算すると従来薬Bが勝つ!?因果推論の罠
- 1
- グループを分割して集計した場合の優劣関係が、データを統合すると完全に逆転してしまう現象。
- 2
- 原因は「隠れた交絡因子(重症度、ユーザー属性、訪問頻度など)」の分布がグループ間で著しく不均等であること。
- 3
- 相関関係(Correlation)と因果関係(Causation)を取り違える最大の原因であり、全体平均の数字だけを見て施策を決定すると大失敗する。
なぜこれを学ぶのか? — 現実社会とテクノロジーでの価値
なぜ生まれたのか?
1951年にエドワード・H・シンプソンによって記述された有名な統計パラドックス。「データをグループ分けして比較するとどのグループでもAが良いのに、データを合算して全体で見るとBの方が良くなってしまう」という衝撃的な逆転現象です。WebサービスのA/Bテスト判定や医療データの治験評価、大学入試の合格率分析で頻発し、多くのデータサイエンティストが直面する罠です。
身につく武器・思考力
単純な平均値や割合の集計に騙されず、潜伏変数(交絡因子:Confounder)を見抜いて真の因果関係を特定する因果推論(Causal Inference)のリテラシーが身につきます。
実社会・ITでの活躍現場
- •Webマーケティング・プロダクト開発におけるA/Bテストの効果検証・セグメント分析
- •新薬の臨床治験における重症度バイアス・年齢層バイアスの除去
- •社会科学・人事評価における性別・部署間の公平性監査
Layer 1 — 直感・シミュレーター
軽症患者グループと重症患者グループの治癒率バーを比較してください。どちらの病状でも新薬Aが勝っている(または同等)にもかかわらず、一番下の【合算全体集計】では従来薬Bが勝者として表示されるパラドックスの構造を視覚的に体験できます。
軽症でも新薬Aが勝ち、重症でも新薬Aが勝っているのに、合算すると従来薬Bが勝つ!?
潜伏変数(交絡因子:交絡変数)が存在するとき、グループ別と全体集計で真逆の結論が導かれる現象です。医療治験やA/Bテストで最も警戒される統計の錯覚です。
軽症患者に対しては、両薬とも高い治癒率(90%)を示しています。
重症患者に対しては、新薬Aが 70% vs 60% で明確に上回っています。
【合算結果】患者全体を集計すると… 従来薬Bの方が勝ってしまう!
シンプソンのパラドックスが発生する根本的な数学的・統計的要因はどれでしょうか?
Layer 2 — 定義・受験・証明
定義
2つの事象 について、第三の交絡変数 の各層において が成立しているにもかかわらず、周辺化確率において となる現象を**シンプソンのパラドックス(Simpson's Paradox)**と呼びます。
公式・数理モデル
証明・導出
全確率の公式より、 です。たとえ各層の治癒率 が より高くても、重みとなる条件付き確率 (どの病状にどれだけ投与されたかの割合)が大きく異なると、加重平均値の順序が逆転します。ベクトル和において、傾き(治癒率)が急な2つのベクトルを足し合わせたベクトルの傾きが、別の緩やかなベクトルの和の傾きより小さくなり得る幾何学的性質と同値です。
押さえておきたいポイント
- 加重平均における重み(サブグループの構成比)の著しい偏りが原因
- UCバークレー大学院の入試ジェンダーバイアス訴訟(学科別に見ると女子の合格率が高いのに、全体では男子が高かった)が代表例
- 防ぐためには、交絡因子で層別化した「層別解析(Stratification)」や傾向スコア(Propensity Score)による補正が不可欠
本トピックの内容・数理モデルは、文部科学省学習指導要領(算数・数学・情報)および国際標準カリキュラムに準拠し、エンジニアリング現場の実装事例と照らし合わせてMath World Lab編集部により検証・作成されています。
Layer 3 — 工学応用・現場実装
A/Bテストにおけるシンプソンのパラドックス検知とマンテル・ヘンツェル検定
セグメント(新規 vs リピーターなど)ごとのコンバージョン率と全体合算の数値を比較し、シンプソンの逆転現象が発生していないかを自動監査するTypeScriptスクリプトです。
1export interface GroupResult {2 segment: string;3 variantA: { conversions: number; impressions: number };4 variantB: { conversions: number; impressions: number };5}67export function checkSimpsonsParadox(results: GroupResult[]): {8 isParadoxDetected: boolean;9 overallRateA: number;10 overallRateB: number;11} {12 let totalConvA = 0, totalImpA = 0;13 let totalConvB = 0, totalImpB = 0;14 let winCountA = 0, winCountB = 0;1516 for (const r of results) {17 const rateA = r.variantA.conversions / r.variantA.impressions;18 const rateB = r.variantB.conversions / r.variantB.impressions;1920 if (rateA > rateB) winCountA++;21 else if (rateB > rateA) winCountB++;2223 totalConvA += r.variantA.conversions;24 totalImpA += r.variantA.impressions;25 totalConvB += r.variantB.conversions;26 totalImpB += r.variantB.impressions;27 }2829 const overallRateA = totalConvA / totalImpA;30 const overallRateB = totalConvB / totalImpB;3132 // 全セグメントでAが勝っているのに全体でBが勝っている(またはその逆)33 const isParadoxDetected =34 (winCountA === results.length && overallRateB > overallRateA) ||35 (winCountB === results.length && overallRateA > overallRateB);3637 return { isParadoxDetected, overallRateA, overallRateB };38}
次に学ぶならコレ!おすすめトピック
この単元と深い繋がりを持つ、あわせて学ぶと理解が深まるおすすめ単元