STEP 8:相関分析と因果関係の見極め

📊 STEP 8: 相関分析と因果関係の見極め

「相関」と「因果」の違いを理解し、正しい結論を導こう

📋 このステップで学ぶこと

  • 相関係数の意味と計算方法(ピアソン、スピアマン)
  • 「相関がある」≠「原因と結果の関係」の重要性
  • 因果関係を示唆する方法とその限界
  • ExcelとPythonでの相関分析の実践
  • ビジネスでよくある間違いと対策

🔍 1. 相関とは何か

相関の基本概念

相関(そうかん)とは、2つの変数が一緒に動く傾向のことです。

例えば、「気温が上がると、アイスクリームの売上も上がる」というような関係です。

📌 相関の3つのパターン

1. 正の相関(正相関)

一方が増えると、もう一方も増える関係
例:身長が高い人ほど、体重も重い傾向がある

2. 負の相関(負相関)

一方が増えると、もう一方は減る関係
例:気温が下がると、暖房器具の売上が増える

3. 相関なし

2つの変数に関係が見られない
例:靴のサイズと数学の成績

相関係数とは

相関係数(そうかんけいすう)は、相関の強さを-1から+1の数値で表したものです。

【相関係数の読み方】 +1.0 に近い → 強い正の相関 (一方が増えると、もう一方も確実に増える) 0 に近い → 相関なし (2つの変数は関係ない) -1.0 に近い → 強い負の相関 (一方が増えると、もう一方は確実に減る) 【目安】 0.7 〜 1.0 : 強い相関 0.4 〜 0.7 : 中程度の相関 0.2 〜 0.4 : 弱い相関 0.0 〜 0.2 : ほぼ相関なし

ピアソンの相関係数とスピアマンの相関係数

種類 説明
ピアソンの相関係数 直線的な関係を測定
例:身長と体重(比例関係)
使用条件:両方のデータが数値で、直線的な関係がある場合
最も一般的に使われる
スピアマンの相関係数 順位の関係を測定
例:テストの順位と成績(必ずしも直線的ではない)
使用条件:データが順序尺度(順位)の場合や、非線形の関係がある場合
外れ値の影響を受けにくい
💡 どちらを使うか迷ったら

基本的にはピアソンの相関係数を使います。

ただし、以下の場合はスピアマンを検討:
・データに極端な値(外れ値)が含まれる
・データが順位データ(1位、2位、3位…)
・関係が曲線的(直線ではない)

⚠️ 2. 「相関」≠「因果」の重要性

最も重要な原則

🚨 データ分析で最も重要なルール

「相関がある」≠「原因と結果の関係がある」

2つの変数に相関があっても、それは一方が原因で、もう一方が結果という意味ではありません。

間違った因果関係の例

🔴 例1:アイスクリームと溺死者数

データ:アイスクリームの売上が増えると、溺死者数も増える(強い正の相関)

間違った結論:「アイスクリームを食べると溺死する!」

正しい解釈:
両方とも「夏」という第三の要因によって増えている。
・夏 → 暑い → アイスクリームが売れる
・夏 → 海やプールに行く人が増える → 溺死者が増える
→ アイスクリームと溺死に直接の因果関係はない

🔴 例2:靴のサイズと読解力

データ:靴のサイズが大きい子どもほど、読解力が高い(正の相関)

間違った結論:「大きい靴を履かせると頭が良くなる!」

正しい解釈:
「年齢」という第三の要因が影響している。
・年齢が上がる → 靴のサイズが大きくなる
・年齢が上がる → 読解力が向上する
→ 靴のサイズと読解力に直接の因果関係はない

🔴 例3:ビジネスでよくある間違い

データ:広告費が多い月ほど、売上が高い(正の相関)

間違った結論:「広告費を増やせば売上が上がる!」

慎重な解釈:
可能性1:広告が効果を出している(因果関係がある)
可能性2:売上が良い月に、広告予算を増やしている(逆の因果)
可能性3:「季節」が影響(12月はボーナス時期で売上も広告費も増える)
→ さらに詳しい分析が必要

なぜ「相関」と「因果」を混同してしまうのか

📌 人間の脳の特性
  • 人間の脳はパターンを見つけるのが得意
  • 2つのことが同時に起きると、「関係がある」と思い込みやすい
  • 特に、自分の信じたい結論に合うデータは、すぐに信じてしまう(確証バイアス)

因果関係を疑うべきケース

⚠️ 以下の場合は特に注意
  • 第三の要因が隠れている可能性(例:季節、景気、年齢)
  • 逆の因果かもしれない(A→BではなくB→A)
  • 偶然の一致(たまたま同時に起きただけ)
  • サンプルサイズが小さい(たまたまそうなっただけ)
  • 自分に都合の良い結論が出た時(確証バイアス)

🔬 3. 因果関係を示唆する方法

因果関係を確認するための基準

因果関係を完全に証明することは難しいですが、以下の条件が揃うと因果関係の可能性が高まります

✅ 因果関係の判断基準(ヒルの基準)

1. 時間的順序

原因が結果より先に起きている
例:広告を出す → その後、売上が増える

2. 関連の強さ

相関係数が高い(0.7以上など)
強い相関ほど、因果関係の可能性が高い

3. 一貫性

何度調べても同じ結果が出る
異なる状況でも同じ関係が見られる

4. 用量反応関係

原因が増えると、結果も比例して増える
例:広告費を2倍にすると、売上も増える

5. 理論的妥当性

「なぜそうなるか」の理屈が説明できる
例:広告を見る人が増える → 認知度が上がる → 購入者が増える

6. 実験的証拠

最も強い証拠:ランダム化比較試験(RCT)やA/Bテスト
広告を「出すグループ」と「出さないグループ」を比較

因果関係を示唆する実践的アプローチ

📊 実務で使える3つの方法

方法1:時系列データでの確認

原因と結果の時間的な前後関係を確認
例:広告を出した日と、売上が増えた日を比較
→ 広告の後に売上が増えていれば、因果の可能性が高まる

方法2:A/Bテスト(ランダム化比較試験)

最も信頼性が高い方法
グループA:広告を出す
グループB:広告を出さない
→ 2つを比較して、売上に差があれば因果関係の証拠

方法3:第三の要因をコントロール(多変量解析)

他の要因(季節、景気など)の影響を統計的に取り除く
例:重回帰分析で、季節要因を考慮した上で広告の効果を測定
→ STEP 11で詳しく学びます

💡 実務での現実的な対応

ビジネスでは、完璧な因果関係の証明は難しいことが多いです。

そのため、実務では:

  1. 相関があることを確認
  2. 因果関係の可能性が高いと判断できる証拠を集める
  3. 「因果関係がある」ではなく「因果関係が示唆される」と表現
  4. 結論には「ただし〜の可能性もある」と限界を明記

慎重に、正直に結論を伝えることが大切です。

💻 4. Excelでの相関分析

散布図での可視化

まず、散布図(さんぷず)でデータの関係を視覚的に確認します。

【Excelでの散布図作成手順】 1. データを選択 例: A列:広告費、B列:売上 2. 「挿入」タブ → 「グラフ」 → 「散布図」を選択 3. グラフが表示される ・点が右上がり → 正の相関 ・点が右下がり → 負の相関 ・点がバラバラ → 相関なし

相関係数の計算(CORREL関数)

【CORREL関数の使い方】 =CORREL(範囲1, 範囲2) 例:A列(広告費)とB列(売上)の相関係数を計算 セルC2に入力: =CORREL(A2:A13, B2:B13) 結果:0.85(強い正の相関)

実践例:広告費と売上の相関分析

📊 サンプルデータ
広告費(万円) 売上(万円)
1月50300
2月60350
3月70400
4月55320
5月80450
6月90500

分析手順:

  1. 散布図を作成 → 右上がりの傾向が見える
  2. CORREL関数で計算 → 0.85(強い正の相関)
  3. 解釈:広告費と売上には強い正の相関がある
  4. 注意:これだけでは因果関係は証明できない

分析ツールを使った詳細分析

【Excelの「分析ツール」を使う方法】 1. 「データ」タブ → 「データ分析」をクリック ※表示されない場合は、アドインで「分析ツール」を有効化 2. 「相関」を選択 → OK 3. 入力範囲:広告費と売上のデータ範囲を選択 4. OK → 相関係数の表が出力される 結果例: 広告費 売上 広告費 1.00 売上 0.85 1.00 解釈:広告費と売上の相関係数は0.85

🐍 5. Pythonでの相関分析

必要なライブラリのインポート

# ============================================ # ライブラリのインポート # ============================================ # pandas: データを表形式(データフレーム)で扱うためのライブラリ # → Excelのような表をPythonで操作できる import pandas as pd # numpy: 数値計算を効率的に行うためのライブラリ # → 平均、合計などの計算や配列操作に使用 import numpy as np # matplotlib.pyplot: グラフを描画するためのライブラリ # → 散布図、棒グラフ、折れ線グラフなどを作成 import matplotlib.pyplot as plt # seaborn: matplotlibを拡張した美しいグラフ作成ライブラリ # → ヒートマップなど高度な可視化が簡単にできる import seaborn as sns # scipy.stats: 統計分析のためのライブラリ # → 相関係数の計算、p値の算出、各種統計検定 from scipy import stats # ============================================ # 日本語フォント設定 # ============================================ # なぜ必要か? # → Pythonのグラフはデフォルトで日本語が文字化けする # → この設定で日本語を正しく表示できるようになる # # font.sans-serif: 使用するフォントを指定 # axes.unicode_minus: マイナス記号を正しく表示 plt.rcParams[‘font.sans-serif’] = [‘Arial Unicode MS’, ‘Yu Gothic’] plt.rcParams[‘axes.unicode_minus’] = False print(“ライブラリの読み込み完了!”)

サンプルデータの作成

# ============================================ # サンプルデータの作成 # ============================================ # ビジネスシナリオ: # 「広告費と売上の関係を分析したい」 # → 12ヶ月分のデータを用意 # 辞書型でデータを定義 # キー: 列名、値: データのリスト data = { ‘月’: [‘1月’, ‘2月’, ‘3月’, ‘4月’, ‘5月’, ‘6月’, ‘7月’, ‘8月’, ‘9月’, ’10月’, ’11月’, ’12月’], ‘広告費’: [50, 60, 70, 55, 80, 90, 85, 75, 65, 70, 95, 100], # 単位:万円 ‘売上’: [300, 350, 400, 320, 450, 500, 480, 420, 380, 410, 520, 550] # 単位:万円 } # ============================================ # pd.DataFrame(): 辞書をデータフレーム(表形式)に変換 # ============================================ # なぜDataFrameを使うか? # → Excelのような表形式でデータを扱える # → 列の選択、計算、グラフ作成が簡単にできる df = pd.DataFrame(data) # データの確認 print(“【作成したデータ】”) print(df) print(f”\nデータ件数: {len(df)}件”)
# 出力例 【作成したデータ】 月 広告費 売上 0 1月 50 300 1 2月 60 350 2 3月 70 400 3 4月 55 320 … 11 12月 100 550 データ件数: 12件

散布図の作成

# ============================================ # 散布図(Scatter Plot)の作成 # ============================================ # なぜ散布図を作るか? # → 2つの変数の関係を視覚的に確認できる # → 相関関係があるかどうかを直感的に判断できる # → 外れ値(異常なデータ)も発見しやすい # plt.figure(): 新しいグラフの作成 # figsize=(10, 6): グラフのサイズ(横10インチ、縦6インチ) plt.figure(figsize=(10, 6)) # plt.scatter(): 散布図を描画 # 第1引数: X軸のデータ(広告費) # 第2引数: Y軸のデータ(売上) # s=100: 点のサイズ(大きいほど見やすい) # alpha=0.6: 透明度(0=透明、1=不透明)重なりが見やすくなる # color=’blue’: 点の色 plt.scatter(df[‘広告費’], df[‘売上’], s=100, alpha=0.6, color=’blue’) # 軸ラベルとタイトルの設定 # → グラフが何を表しているか明確にする plt.xlabel(‘広告費(万円)’, fontsize=12) # X軸のラベル plt.ylabel(‘売上(万円)’, fontsize=12) # Y軸のラベル plt.title(‘広告費と売上の関係’, fontsize=14) # グラフタイトル # plt.grid(): グリッド線を表示 # alpha=0.3: 薄い線にして邪魔にならないようにする plt.grid(True, alpha=0.3) # グラフを表示 plt.show() # ============================================ # 散布図の読み方 # ============================================ # → 右上がりの傾向 = 正の相関(一方が増えると他方も増える) # → 右下がりの傾向 = 負の相関(一方が増えると他方は減る) # → バラバラ = 相関なし

ピアソンの相関係数の計算

# ============================================ # 方法1: pandasで相関係数を計算(シンプル) # ============================================ # .corr(): 2つの列の相関係数を計算するメソッド # → 戻り値: -1〜+1の数値 # # なぜ相関係数を計算するか? # → 散布図だけでは「どれくらい強い関係か」が曖昧 # → 数値で表すことで客観的に判断できる correlation = df[‘広告費’].corr(df[‘売上’]) print(f”相関係数: {correlation:.3f}”) # .3f: 小数点以下3桁まで表示 # ============================================ # 方法2: scipyで相関係数とp値を計算(詳細分析) # ============================================ # stats.pearsonr(): ピアソンの相関係数とp値を同時に計算 # → 相関係数だけでなく「統計的に意味があるか」も判定 # # 戻り値: # corr_coef: 相関係数(-1〜+1) # p_value: p値(この相関が偶然である確率) corr_coef, p_value = stats.pearsonr(df[‘広告費’], df[‘売上’]) print(f”\n【詳細分析結果】”) print(f”相関係数: {corr_coef:.3f}”) print(f”p値: {p_value:.4f}”) # ============================================ # p値の解釈 # ============================================ # p値 < 0.05: 統計的に有意(偶然ではない可能性が高い) # p値 >= 0.05: 統計的に有意でない(偶然かもしれない) # # なぜ0.05か? # → 一般的に使われる基準(有意水準) # → 「偶然でこうなる確率が5%未満なら、偶然ではない」と判断 if p_value < 0.05: print("→ 統計的に有意な相関がある(p < 0.05)") print(" この相関は偶然ではなく、本当の関係である可能性が高い") else: print("→ 統計的に有意な相関は見られない") print(" この相関は偶然かもしれない")
# 出力例 相関係数: 0.954 【詳細分析結果】 相関係数: 0.954 p値: 0.0000 → 統計的に有意な相関がある(p < 0.05) この相関は偶然ではなく、本当の関係である可能性が高い

スピアマンの相関係数

# ============================================ # スピアマンの順位相関係数 # ============================================ # stats.spearmanr(): スピアマンの相関係数を計算 # # ピアソンとスピアマンの違い: # ピアソン: 「直線的な」関係の強さを測る # スピアマン: 「順位の」関係の強さを測る # # スピアマンを使う場面: # → データに外れ値(極端な値)がある場合 # → 直線ではないが、一方が増えると他方も増える関係 # → 順序データ(1位、2位、3位…)の場合 # # 例: 広告費が増えると売上も増える「傾向」があれば高くなる # (必ずしも直線でなくてもOK) spearman_corr, spearman_p = stats.spearmanr(df[‘広告費’], df[‘売上’]) print(“【スピアマンの順位相関】”) print(f”相関係数: {spearman_corr:.3f}”) print(f”p値: {spearman_p:.4f}”) # ============================================ # ピアソンとスピアマンの比較 # ============================================ print(f”\n【比較】”) print(f”ピアソン相関係数: {corr_coef:.3f}”) print(f”スピアマン相関係数: {spearman_corr:.3f}”) print(“\n両方とも高い → 直線的な強い関係がある”) print(“スピアマンだけ高い → 直線ではないが単調な関係がある”)

相関行列とヒートマップ

# ============================================ # 相関行列の作成 # ============================================ # .corr(): データフレームの全ての列間の相関係数を計算 # # なぜ相関行列を使うか? # → 変数が3つ以上ある場合、全ての組み合わせを一度に確認できる # → どの変数同士が強く関係しているか一目で分かる corr_matrix = df[[‘広告費’, ‘売上’]].corr() print(“【相関行列】”) print(corr_matrix) print(“\n読み方: 行と列の交差点が、その2変数の相関係数”) # ============================================ # ヒートマップで可視化 # ============================================ # sns.heatmap(): 相関行列を色で表現したグラフ # # なぜヒートマップを使うか? # → 数値だけより、色で見た方が直感的に理解できる # → 変数が多い時に特に有効 plt.figure(figsize=(8, 6)) # sns.heatmap()のパラメータ: # corr_matrix: 表示するデータ(相関行列) # annot=True: セル内に数値を表示 # cmap=’coolwarm’: 色のパターン(青=負、赤=正) # vmin=-1, vmax=1: 色の範囲(相関係数は-1〜+1) # center=0: 0を中間色にする # square=True: セルを正方形にする # linewidths=1: セル間の線の太さ sns.heatmap(corr_matrix, annot=True, cmap=’coolwarm’, vmin=-1, vmax=1, center=0, square=True, linewidths=1) plt.title(‘相関行列ヒートマップ’, fontsize=14) plt.show() # ============================================ # ヒートマップの読み方 # ============================================ # 赤色: 正の相関(一緒に増える) # 青色: 負の相関(一方が増えると他方が減る) # 白色: 相関なし(関係がない)

近似直線の追加

# ============================================ # 散布図に近似直線(回帰直線)を追加 # ============================================ # なぜ近似直線を追加するか? # → データの傾向をより明確に示せる # → 「広告費を増やすと売上がどれくらい増えそうか」が分かる plt.figure(figsize=(10, 6)) # 散布図(データ点)を描画 plt.scatter(df[‘広告費’], df[‘売上’], s=100, alpha=0.6, color=’blue’, label=’実際のデータ’) # ============================================ # 近似直線の計算 # ============================================ # np.polyfit(): 多項式フィッティング(データに最も合う直線を計算) # 第1引数: X軸のデータ # 第2引数: Y軸のデータ # 第3引数: 次数(1=直線、2=2次曲線…) # # 戻り値: 直線の係数 [傾き, 切片] # 例: z = [5.0, 50.0] → y = 5.0x + 50.0 z = np.polyfit(df[‘広告費’], df[‘売上’], 1) # np.poly1d(): 係数から関数を作成 # → p(80) のように使うと、x=80の時のy値が計算できる p = np.poly1d(z) # 近似直線を描画 # “r–“: 赤色の破線 # linewidth=2: 線の太さ plt.plot(df[‘広告費’], p(df[‘広告費’]), “r–“, linewidth=2, label=’近似直線’) # グラフの設定 plt.xlabel(‘広告費(万円)’, fontsize=12) plt.ylabel(‘売上(万円)’, fontsize=12) plt.title(f’広告費と売上の関係(相関係数: {correlation:.3f})’, fontsize=14) plt.legend() # 凡例を表示 plt.grid(True, alpha=0.3) plt.show() # ============================================ # 近似直線の式を表示 # ============================================ print(f”\n【近似直線の式】”) print(f”売上 = {z[0]:.2f} × 広告費 + {z[1]:.2f}”) print(f”\n解釈: 広告費が1万円増えると、売上は約{z[0]:.1f}万円増える傾向”) print(“※ただし、これは相関であり因果関係の証明ではありません”)
# 出力例(近似直線の式) 【近似直線の式】 売上 = 5.03 × 広告費 + 48.52 解釈: 広告費が1万円増えると、売上は約5.0万円増える傾向 ※ただし、これは相関であり因果関係の証明ではありません
📌 このセクションで使ったライブラリまとめ
  • pandas:データを表形式で管理(df.corr()で相関係数)
  • numpy:数値計算(np.polyfitで近似直線)
  • matplotlib:グラフ描画(散布図、直線)
  • seaborn:美しい可視化(ヒートマップ)
  • scipy.stats:統計検定(p値の計算)
📌 実務での使い分け

まず散布図を見る → 関係の傾向を視覚的に確認
次に相関係数を計算 → 関係の強さを数値化
p値を確認 → 統計的に意味があるか判定
ヒートマップ → 複数変数の関係を俯瞰

⚠️ 重要:相関があっても因果関係とは限りません!

⚠️ 6. よくある間違いと対策

間違い1:相関があれば因果関係があると決めつける

❌ ダメな例

「広告費と売上の相関係数は0.85だ。だから広告費を増やせば売上が上がる!」

✅ 正しい表現
「広告費と売上には強い正の相関が見られる(r=0.85)。
ただし、これは因果関係を証明するものではなく、他の要因(季節要因など)が影響している可能性もある。
因果関係を確認するには、A/Bテストなどの追加分析が必要。」

間違い2:相関がないから関係ないと判断する

⚠️ 注意

相関係数が低くても、非線形の関係がある場合があります。

例:気温と暖房費の関係
・気温が低い → 暖房費が高い
・気温が高い → 暖房費が低い
→ 直線的ではなくU字型の関係なので、ピアソン相関係数は低く出る

対策:必ず散布図で視覚的に確認する

間違い3:サンプルサイズが小さいのに結論を急ぐ

⚠️ 注意

データが5件しかないのに「相関がある!」と判断するのは危険。

サンプルサイズが小さいと、たまたまの可能性が高い

目安:
・最低でも30件以上のデータが望ましい
・可能なら100件以上あると信頼性が高まる

間違い4:外れ値を無視する

⚠️ 注意

1つの極端な値(外れ値)が、相関係数を大きく変えてしまうことがあります。

対策:
・散布図で外れ値がないか確認
・外れ値がある場合、その理由を調査
・外れ値を除いた場合の相関も計算して比較

正しい分析フロー

✅ 推奨される分析手順
  1. 散布図を作成 → 視覚的に関係を確認
  2. 外れ値をチェック → 極端な値がないか確認
  3. 相関係数を計算 → 関係の強さを数値化
  4. p値を確認 → 統計的に有意か確認(STEP 17で詳しく学習)
  5. 因果関係を慎重に判断 → 第三の要因、時系列、理論的妥当性を検討
  6. 結論に限界を明記 → 「〜が示唆される」「ただし〜の可能性もある」

📝 STEP 8 のまとめ

✅ このステップで学んだこと

1. 相関係数

  • 2つの変数の関係の強さを-1〜+1で表す
  • 0.7以上で強い相関、0.4〜0.7で中程度の相関

2. ピアソンとスピアマン

  • ピアソン:直線的な関係を測定(最も一般的)
  • スピアマン:順位の関係を測定(外れ値に強い)

3. 最重要原則

  • 相関がある ≠ 因果関係がある
  • 第三の要因に注意

4. 因果関係の判断基準

  • 時間的順序、一貫性、理論的妥当性など
  • A/Bテストが最も確実な方法

5. ExcelとPython

  • Excel:CORREL関数、散布図
  • Python:pandas, scipy, seaborn でヒートマップ
💡 最も大切なポイント

データ分析で最も犯しやすい間違いが「相関と因果を混同すること」です。

ビジネスでは「因果関係がありそう」という判断で進めることもありますが、必ず限界を明記しましょう。

「データを見て飛びつくな。じっくり考えろ。」
これがデータアナリストの基本姿勢です。

🎯 次のステップの予告

次のSTEP 9では、「データ収集の基本」を学びます。どんなデータがビジネスに存在するか、どうやって集めるか、データの質をどう確保するかを習得しましょう!

📝 理解度チェック

学んだ内容を確認しましょう。解答を見る前に、まず自分で考えてみてください。

問題 1 基礎

以下の相関係数のうち、最も強い相関を示しているのはどれですか?
A) 0.3  B) -0.8  C) 0.6  D) -0.2

【解答】B) -0.8

解説:

相関係数の強さは、絶対値(|数値|)の大きさで判断します。

  • A) |0.3| = 0.3
  • B) |-0.8| = 0.8 ← 最も大きい
  • C) |0.6| = 0.6
  • D) |-0.2| = 0.2

-0.8は負の相関(一方が増えると他方が減る)ですが、相関の強さは0.8と強いです。

問題 2 基礎

ピアソンの相関係数とスピアマンの相関係数の違いを説明してください。

【解答】

ピアソンの相関係数:

  • 直線的な関係を測定する
  • 両方のデータが数値で、直線的な関係がある場合に使用
  • 最も一般的に使われる

スピアマンの相関係数:

  • 順位の関係を測定する
  • データが順序尺度(順位)の場合や、非線形の関係がある場合に使用
  • 外れ値の影響を受けにくい

使い分け:基本はピアソン、外れ値がある場合や順位データの場合はスピアマン

問題 3 応用

「靴のサイズと年収に正の相関がある」というデータが出ました。
「大きい靴を履けば年収が上がる」と結論づけるのは正しいですか?理由も含めて説明してください。

【解答】いいえ、正しくありません。

理由:

これは「相関と因果の混同」の典型例です。靴のサイズと年収に相関があっても、靴のサイズが年収の原因ではありません。

考えられる第三の要因:

  • 性別:男性の方が靴のサイズが大きく、一般的に年収も高い傾向がある
  • 靴のサイズと年収の両方が「性別」という第三の要因によって説明できる

正しい結論:
「靴のサイズと年収には相関が見られるが、これは性別などの第三の要因によるものと考えられる。靴のサイズが年収の原因であるという因果関係は証明されていない。」

問題 4 応用

因果関係の判断基準(ヒルの基準)を3つ以上挙げてください。

【解答例】
  1. 時間的順序:原因が結果より先に起きている
  2. 関連の強さ:相関係数が高い(0.7以上など)
  3. 一貫性:何度調べても同じ結果が出る
  4. 用量反応関係:原因が増えると、結果も比例して増える
  5. 理論的妥当性:「なぜそうなるか」の理屈が説明できる
  6. 実験的証拠:A/BテストやRCTで確認できている

※上記6つのうち、3つ以上挙げられればOKです。

問題 5 発展

あなたの会社で、SNS広告費と売上のデータを分析したところ、相関係数が0.75でした。
上司に「SNS広告を増やせば売上が上がる」と報告する前に、どのような追加分析や確認をすべきですか?少なくとも3つ挙げてください。

【解答例】

1. 時間的順序の確認

SNS広告を出した後に売上が増えているか、時系列データで確認する。逆に、売上が良い月に広告費を増やしている可能性もある(逆の因果)。

2. 第三の要因(季節性など)の検討

12月などの繁忙期は、広告費も売上も両方増える可能性がある。季節要因をコントロールした上で、広告の効果を分析する必要がある。

3. A/Bテストの実施

最も確実な方法は、ランダムに選んだ顧客グループに対して:
・グループA:SNS広告を見せる
・グループB:SNS広告を見せない
→ 2つのグループで売上を比較し、因果関係を検証する

その他の確認事項:

  • 外れ値がないか散布図で確認
  • サンプルサイズは十分か(最低30件以上)
  • 他のマーケティング施策と同時に実施していないか
  • 競合の動向(競合が広告を減らした影響で売上が増えた可能性)

❓ よくある質問

Q1: 相関係数が0に近い場合、本当に関係がないと言えますか?

必ずしもそうとは限りません。

ピアソンの相関係数は「直線的な関係」しか捉えられません。例えば、U字型やS字型の関係がある場合、相関係数は低く出ますが、実際には関係があります。

対策:必ず散布図を作成して、視覚的に関係を確認しましょう。非線形の関係が疑われる場合は、スピアマンの相関係数や、曲線による回帰分析を検討します。

Q2: p値が0.05未満なら、因果関係があると言えますか?

いいえ、p値が小さくても因果関係は証明できません。

p値(ピーち)は、「その相関がたまたまではない」ことを示すだけで、因果関係の証拠ではありません

例:アイスクリームの売上と溺死者数の相関は、p < 0.05で統計的に有意かもしれませんが、だからといって「アイスクリームが溺死の原因」とは言えません。

p値については、STEP 17で詳しく学びます。

Q3: 「弱い相関」でも意味はありますか?

はい、意味がある場合もあります。

相関係数が0.3(弱い相関)でも、実務的には重要な場合があります。

例:広告と売上の相関が0.3だとしても、
・広告費1億円 → 売上3000万円増加なら、十分にROIが高い
→ 「弱い相関」でもビジネス的には意味がある

逆に、相関が0.9でも、実務的な影響が小さければ意味がないこともあります。

統計的な強さビジネス的な重要性は別物です。

Q4: 相関分析で「因果関係がある」と絶対に証明できないのですか?

相関分析だけでは証明できません。

因果関係を示す最も確実な方法は:

  1. ランダム化比較試験(RCT)やA/Bテスト:実験的に原因を操作して、結果を観察
  2. 時系列分析:原因が結果より先に起きていることを確認
  3. 多変量解析(重回帰分析など):他の要因をコントロールした上で関係を分析

ただし、これらでも「因果関係が強く示唆される」までで、完全な証明は難しいことが多いです。

実務では、「因果関係の可能性が高い」と判断できれば、その情報をもとに意思決定を進めます。

Q5: 実務で相関分析を使う時、最も注意すべきことは何ですか?

「相関がある」→「因果関係がある」と決めつけないこと

特にビジネスでは、上司や経営層に報告する際、「相関があるから〜すべき」と断言してしまいがちです。

推奨される報告の仕方:

❌「広告費と売上に相関があるので、広告を増やすべきです」

✅「広告費と売上には強い正の相関が見られます(r=0.85)。ただし、これだけでは因果関係は証明できないため、A/Bテストで検証することを提案します。」

慎重に、正直に結論を伝えることが、データアナリストとしての信頼につながります。

Q6: 複数の変数間の相関を一度に確認する方法はありますか?

はい、「相関行列」と「ヒートマップ」を使います。

複数の変数がある場合、すべての組み合わせの相関係数を計算し、行列形式で表示します。

Excel:「データ分析」→「相関」で複数変数の相関行列を作成

Python:pandas の df.corr() と seaborn の heatmap() を組み合わせて可視化

ヒートマップで色分けすると、どの変数間の相関が強いか一目でわかります。色が濃い(赤or青)ほど相関が強いことを示します。

📝

学習メモ

ビジネスデータ分析・意思決定 - Step 8

📋 過去のメモ一覧
#artnasekai #学習メモ
LINE