相関と因果の違いとは?施策効果を正しく検証する方法(交絡・A/Bテスト・前後比較)

産業インサイト・課題解決//

アプリの利用者は、利用していない顧客より来店頻度が高い。分析結果にそう示されていると、「アプリを広げれば来店が増えるのではないか」と考えたくなります。会員施策、キャンペーン、広告の効果測定でも、似た場面は少なくありません。

この発想には価値があります。相関(2つの指標が一緒に増減する関係)は、どこに注目すべきかを教えてくれる出発点です。ただし、相関が見えたことと、施策によって結果が変わったことは別です。見落としやすいのは、利用者がもともと来店頻度の高い顧客だった可能性です。

最初に決めたいのは「どの分析手法を使うか」ではなく、「施策を実施しなかった場合と、何を比べるか」です。比較の相手が曖昧なまま数値を出すと、施策の影響とそれ以外の要因の影響が混ざります。

本記事では、相関と因果の違い、相関を因果と誤認する原因、疑似データによる確認、検証方法の使い分け、施策判断前のチェックポイントを整理します。事例はすべて架空の説明例です。

相関と因果の違いは何か

相関は、2つの指標が一緒に増えたり減ったりする関係です。「アプリ利用の有無」と「来店頻度」に相関があるとは、アプリを使う顧客ほど来店が多い傾向がある、という事実を述べているにすぎません。

因果(因果効果)は、同じ顧客に施策を実施した場合と実施しなかった場合で、結果がどれだけ異なるかを指します。つまり「アプリを導入させたら来店頻度が変わるのか」という問いです。相関が「一緒に動く」ことを示すのに対し、因果は「こちらを変えると結果が動く」ことを問います。

ここで難しいのは、同じ顧客について「施策を受けた場合」と「受けなかった場合」を同時には観察できない点です。施策を実施しなかった場合に起きたはずの結果は、反事実(counterfactual:実際には起きなかった別の状況)と呼ばれます。実務では、この反事実を比較群(施策を受けていない顧客のグループ)で代用することになります(Rubin, 1974)。したがって、効果検証の質は、比較群をどう選ぶかに大きく左右されます。

ただし、これは相関分析が不要という意味ではありません。相関は、仮説を立てる段階では有用です。問題になるのは、相関が出ただけで施策の根拠にしてしまうことです。

アプリ導入と来店頻度の相関から考えられる3つの解釈

説明のために、小売チェーンを想定した架空の例を使います。「来店頻度とアプリ利用に相関がある」という分析結果が出たとします。この結果には、少なくとも次の3つの解釈があります。

「アプリ利用」と「来店頻度」に相関があるときの、考えられる構造の比較です。

直接因果

アプリ利用が来店を増やした

成り立つ条件アプリ利用が先にあり、他の要因をそろえても差が残る

確認する視点導入前の状態をそろえても、導入後の差が残るか

逆因果・自己選択

来店の多い顧客がアプリを導入した

成り立つ条件導入前から来店頻度が高い顧客ほど、導入しやすい

確認する視点導入前の来店頻度は、利用者と非利用者でそろっているか

交絡

別の要因が両方に影響した

成り立つ条件ロイヤル度、店舗からの距離、年代などが両方に関係する

確認する視点両方に影響しうる要因を洗い出し、比較でそろえられるか

概念図です。3つの解釈は排他的ではなく、複数が同時に成り立つ場合があります。いずれが正しいかは、相関だけからは判断できません。

アプリに効果がないと言っているのではありません。効果が小さい場合も大きい場合もあり得ますが、相関だけでは、その大きさを切り分けられないということです。

相関を因果と誤認しやすい3つの原因

交絡要因:原因と結果の両方に影響する第三の要因

交絡要因(confounder:原因と結果の両方に影響し、見かけの関係を生む要因)は、相関を因果と誤認する代表的な原因です。たとえば、店舗への愛着が強い顧客は、来店も多く、アプリも入れやすい可能性があります。この場合、アプリと来店頻度の関係の一部は、愛着という共通の要因で説明されます。

各行は、左の要因が右の要因に影響を与える関係を表します。

影響を与える側もともとの来店頻度・ロイヤル度
影響を受ける側アプリ利用
影響を与える側もともとの来店頻度・ロイヤル度
影響を受ける側導入後の来店頻度
影響を与える側アプリ利用
影響を受ける側導入後の来店頻度

1と2の経路があると、3の関係が小さくても、アプリ利用と来店頻度には相関が現れます。概念図であり、影響の大きさを意味しません。

他にも、店舗からの距離や年代が、来店のしやすさとアプリの使いやすさの両方に関係する可能性があります。どの要因が両方に影響しうるかは、データだけでなく、業務や顧客についての知識から洗い出す必要があります。

逆因果:原因と結果の向きが逆

逆因果(reverse causality)は、「Aが原因でBが起きた」と見えて、実際にはBがAの原因だった状況です。アプリの例では、来店が多い顧客だからこそアプリを導入した、という解釈です。広告でも、売上が高い時期だから広告予算を増やした、という運用であれば、広告費と売上の相関は施策の効果を過大に見せる可能性があります。

選択バイアス:施策を受ける人が偏っている

選択バイアス(施策を受ける対象が偏ることで生じる歪み)は、顧客が自分で参加を選ぶ場合(自己選択)や、運用上、反応しそうな顧客にだけ案内した場合に生じます。この場合、施策を受けたグループと受けなかったグループは、施策の前から性質が異なります。

混同しやすい点ですが、交絡は「共通の要因がある」問題、逆因果は「向きが逆」の問題、選択バイアスは「比べる集団が偏っている」問題です。実際にはこれらが重なることも多く、重なっているかどうかを点検することが、検証設計の第一歩になります。

疑似データで確認する:単純比較と層別比較で差はどう変わるか

ここでは、導入前の来店頻度が高い顧客ほどアプリを導入しやすく、アプリ自体の効果は月あたり0.2回と小さく設定した疑似データを考えます。次のコードは、その状況を再現する簡単な例です。コードを読まない方は、後の集計表だけでも内容を追えます。

import numpy as np
import pandas as pd

# 以下は疑似データであり、実際の効果を示すものではありません。
rng = np.random.default_rng(42)
n = 3000
TRUE_EFFECT = 0.2  # アプリ自体の効果(月あたり来店回数)を小さく設定

pre = rng.gamma(shape=3.0, scale=1.2, size=n)  # 導入前3か月の月平均来店回数
# 導入前の来店頻度が高い顧客ほどアプリを導入しやすい設定
p_adopt = 1 / (1 + np.exp(-(pre - 4.0)))
app = rng.random(n) < p_adopt

post = pre + TRUE_EFFECT * app + rng.normal(0, 0.5, n)
post = np.clip(post, 0, None)

df = pd.DataFrame({
    "customer_id": np.arange(1, n + 1),
    "pre_visits": pre,
    "app_user": app,
    "post_visits": post,
    "age_group": rng.choice(["20代", "30代", "40代", "50代以上"], n),
    "distance_band": rng.choice(["近い", "中間", "遠い"], n),
})

# 処理1:利用者と非利用者の導入後来店頻度を単純比較
simple = df.groupby("app_user")["post_visits"].mean()
print("単純比較の差:", simple.loc[True] - simple.loc[False])

# 処理2:導入前の来店頻度で層別して比較
df["pre_band"] = pd.cut(df["pre_visits"], bins=[-np.inf, 2, 4, np.inf],
                        right=False, labels=["低", "中", "高"])
strat = df.pivot_table(index="pre_band", columns="app_user",
                       values="post_visits", aggfunc="mean", observed=True)
strat["差"] = strat[True] - strat[False]
print(strat)

# 処理2(別案):導入前後の変化量を比較
df["change"] = df["post_visits"] - df["pre_visits"]
chg = df.groupby("app_user")["change"].mean()
print("変化量の差:", chg.loc[True] - chg.loc[False])

# 処理3:相関係数(相関があっても効果とは限らない)
print("相関係数:", df["app_user"].astype(int).corr(df["post_visits"]))
Python

次の2つの表は、この設定を集計表の形で示した説明用のものです。乱数を使うため、コードの出力値は表と一致しませんが、同じ傾向になるように設定しています。

群人数導入前の月平均来店回数導入後の月平均来店回数
アプリ利用者6003.954.15
非利用者9002.282.28
差(利用者 − 非利用者)–1.671.87
導入前の来店頻度の層利用者数非利用者数導入後(利用者)導入後(非利用者)差
低1005001.41.20.2
中2003003.23.00.2
高3001005.75.50.2

表Aでは、導入後の来店回数に1.87回の差があり、アプリの効果が大きいように見えます。しかし、導入前の時点ですでに1.67回の差があります。利用者の多くが、もともと来店頻度の高い層に偏っているためです。

表Bのように導入前の来店頻度で層別すると、どの層でも差は0.2回です。導入前後の変化量で見ても、利用者は0.20回の増加、非利用者は変化なしとなり、差は0.20回です。単純比較の差の大半は、アプリ以外の要因で説明されることが分かります。相関係数も正の値になりますが、それは関係の強さを示すだけで、施策の効果の大きさを示すものではありません。

ただし、層別や変化量の比較で十分、という意味ではありません。層の内部にも差は残りますし、嗜好のようにデータに含まれていない要因は、そろえることができません。この例は、比較の仕方で結論が変わることを示すものであり、一般的な効果の大きさを示すものではありません。

前後比較だけでは分からないこと

「導入前と導入後を比べる」前後比較は、最も手軽な方法です。ただし、施策以外にも、期間中に変わったものがあります。

  • 季節性(繁忙期・閑散期、天候、連休の並び)
  • 同時期の他施策(キャンペーン、広告、価格改定、店舗改装)
  • 競合動向や市場全体の変化
  • 平均への回帰(たまたま低かった値が、自然に元の水準へ戻る現象)

とくに、来店が一時的に減った顧客だけを対象に施策を実施した場合、施策がなくても来店が元に戻ることがあります。前後比較は、変化が起きたかどうかの最初の確認としては有効です。一方で、その変化が施策によるものかどうかを判断するには、同じ期間に施策を受けなかった比較群が必要です。

施策効果を検証する方法と使い分け

検証方法に唯一の正解はなく、実施のしやすさと、交絡要因への強さのバランスで選びます。代表的な4つの方法を比較します。

方法交絡への強さ実施のしやすさ必要なデータ注意点
ランダム化実験(A/Bテスト)強い(事前の違いが偶然を除いて均等になる)設計・運用の調整が必要施策の割り当て記録、結果指標公平性、顧客体験、十分な対象数、期間の事前設定
単純な前後比較弱い(外部要因を除けない)容易施策前後の結果指標季節性、同時期の施策、平均への回帰
比較群付き前後比較中程度(共通の外部要因を差し引ける)比較群があれば可能両群の施策前後のデータ比較群の妥当性、施策前の推移が似ていること
条件をそろえた比較中程度(観測した要因のみ調整可能)既存データで実施しやすい施策前の属性・行動データ観測していない要因は残る、条件の選び方で結果が変わる

ランダム化実験:割り当てを偶然に任せる

ランダム化実験は、対象の顧客や店舗を無作為に施策群と比較群へ分ける方法です。割り当てが偶然で決まるため、事前の違い(ロイヤル度など、観測していないものを含む)が両群で均等になりやすくなります。アプリの例なら、一部の顧客にだけ特典を案内し、案内した群としなかった群を比べる形が考えられます。

ただし、顧客への公平性、店舗オペレーション、十分な対象数の確保といった制約があり、いつでも実施できるわけではありません。実施する場合は、評価指標と観察期間を事前に決めておくことが重要です。

比較群付き前後比較:同じ期間の変化を差し引く

比較群付き前後比較は、差の差分析(Difference-in-Differences)とも呼ばれる考え方です。施策群の前後の変化から、比較群の前後の変化を差し引き、共通して起きた外部要因の影響を取り除こうとします。

棒の長さは来店頻度の水準を表す概念的なもので、数値的な意味はありません。

施策群(施策を受けた顧客)

導入前

導入後

比較群(施策を受けていない顧客)

導入前

導入後

  • 導入前の水準
  • 両群に共通する変化(季節性など)
  • 施策による変化とみなす部分

読み方:施策群の変化から比較群の変化を差し引いた部分を、施策による変化と推定します。導入前の水準の違いは、変化量を比べることで調整されます。

施策がなければ両群は同じように推移したはず、という前提(平行トレンドの仮定)が成り立つ場合にのみ、この読み方が妥当になります。

この方法では、比較群の選び方が結果を左右します。施策の前から推移が大きく異なる群を比較群にすると、前提が崩れます。施策前の複数時点で、両群の推移が似ているかを確認しておくことが大切です。

条件をそろえた比較:似た顧客同士で比べる

先ほどの層別比較のように、施策前の条件が近い顧客同士を比べる方法です。似た顧客を組み合わせるマッチングや、施策の受けやすさを1つの値にまとめる傾向スコア(Rosenbaum and Rubin, 1983)といった手法もありますが、考え方の根本は同じです。注意点は、そろえられるのは観測している要因だけだということです。ロイヤル度のように測っていない要因が結果を左右している場合、差は残ります。

なお、これらの方法は排他的ではありません。たとえば、比較群付き前後比較に、条件をそろえた比較を組み合わせることもあります。どの方法を選んでも、「何と比べているか」と「何が残っているか」を説明できることが肝心です。

実験が難しいときの進め方

ランダム化が難しい場合でも、検証を諦める必要はありません。完璧な環境を整えてから始めるのではなく、小さい範囲で確認しながら段階的に進める方法があります。

  1. Step 1 意思決定と指標を決める:施策の継続・拡大・見直しのどれを判断したいのか、何の指標で判断するのかを先に決めます。
  2. Step 2 比較対象を決める:施策を受けていない顧客や店舗のうち、施策前の状態が近いものを比較群の候補とします。
  3. Step 3 同時期の出来事を一覧にする:キャンペーン、価格改定、店舗改装など、結果に影響しうるものを書き出します。
  4. Step 4 判断基準を事前に決めて小さく試す:一部の店舗から先行して導入し、時期をずらして展開する段階導入であれば、導入前の店舗を比較群として使える場合があります。

効果の判断がつかない場合は、「拡大しない」「期間を延ばして観察する」「条件付きで進める」といった選択肢もあります。二択で決める必要はありません。

施策判断前のチェックリスト

分析結果を施策や投資判断の根拠にする前に、次の5つの観点を確認します。

観点確認する問い確認できないときの対応
比較対象何と比べた結果か。比較群は施策群と近い条件か比較群の候補を探す。比較できない場合は結論を保留する
交絡要因施策と結果の両方に影響しうる要因は何か。そろえられたか要因を洗い出し、層別や条件をそろえた比較を試す
時間的前後関係施策が先で、結果が後か。結果が施策の対象選定に影響していないか導入前のデータで、利用者と非利用者の状態を確認する
外部要因同時期の施策、季節性、競合動向の影響を考慮したか比較群付きの比較や、前年同期との比較を併用する
効果の大きさ差は偶然の範囲を超えているか。費用に見合う大きさか幅(不確実性)を含めて報告し、拡大判断は段階的に行う

今日から試せる確認作業

新しい分析を始める前に、手元のデータでできる確認が2つあります。

  • 導入前の状態を並べる:利用者と非利用者について、導入前の来店頻度、年代、店舗からの距離の3項目だけを並べて平均を比べます。差が大きければ、導入後の単純比較には偏りが含まれている可能性があります。
  • 導入前の水準で層に分ける:導入前の来店頻度を3段階程度に分け、層ごとに導入後の差を見ます。全体の差と比べて小さくなるか確認します。

この確認は、効果がないことを証明するものではありません。単純比較の差をそのまま施策の効果と読んでよいかを点検するための、最初の一歩です。

社内への説明のしかたと、相関分析の位置づけ

経営層や他部門に効果検証の妥当性を説明する際は、次の4点を示すと、議論の焦点が揃いやすくなります。

  • 何と比べたか(比較対象)
  • 何をそろえたか(調整した要因)
  • 何が残っているか(測れていない要因、外部要因)
  • どの程度の確からしさで判断するか(拡大・継続・保留)

相関分析は意味がない、という主張をしたいわけではありません。相関は課題の発見や仮説づくりに役立ち、因果の検証はその次の段階です。また、ツールや機械学習を使えば、因果を自動で判定できるわけでもありません。比較が妥当かどうか、残っている要因は何かという判断には、業務や顧客についての知識が欠かせません。

まとめ

相関は「一緒に動く」ことを、因果は「施策を変えると結果が変わる」ことを示します。アプリ利用者の来店頻度が高いという結果は、直接因果、逆因果・自己選択、交絡のいずれによっても生じ得ます。疑似データの例では、導入前の来店頻度で層別するだけで、見かけの差が小さくなりました。

施策の効果を確認するには、ランダム化実験、比較群付き前後比較、条件をそろえた比較などを、状況に応じて選びます。どの方法でも、比較対象、交絡要因、時間的前後関係、外部要因、効果の大きさの5点を確認することが、判断を誤らないための基本です。次に確認することは、いま手元にある分析結果が「何と比べたものか」です。

分析結果を施策や投資判断の根拠にする前に、「本当に施策の効果か」を確認することが重要です。RASHINRAでは、意思決定に必要なデータの整理、効果検証の設計、分析結果の解釈についてのご相談を受け付けています。判断に迷ったときの相談先としてご活用ください。社内でデータの読み方や効果検証の考え方を共有したい場合は、研修・講師対応もご相談いただけます。

参考文献

  • Rubin. 1974. Estimating causal effects of treatments in randomized and nonrandomized studies. Journal of Educational Psychology. Vol. 66. Issue 5. pp. 688-701. https://doi.org/10.1037/h0037350
  • Rosenbaum and Rubin. 1983. The central role of the propensity score in observational studies for causal effects. Biometrika. Vol. 70. Issue 1. pp. 41-55. https://doi.org/10.1093/biomet/70.1.41
  • Hernán and Robins. 2020. Causal Inference: What If. Chapman & Hall/CRC. https://www.hsph.harvard.edu/miguel-hernan/causal-inference-book/