🔗 ステップ16: 相関関係を理解しよう
2つのデータの関係性を見つけよう!
ステップ15では、パーセンテージと比率について学びました。今回は、2つのデータの関係性を分析する「相関」について学びます。「気温が上がるとアイスが売れる」のような関係を、数値で表す方法を身につけましょう。
📖 このステップで学ぶこと
・相関とは何か
・正の相関と負の相関の違い
・相関係数の計算と解釈
・相関と因果関係の違い(重要!)
学習時間の目安: 2.5〜3時間
🎯 1. 相関とは?
まず、「相関」の基本的な意味を理解しましょう。
🔰 2つのデータの関係性
相関(そうかん)とは、2つのデータがどのように関連しているかを示すものです。
💡 日常生活での相関の例
・気温と冷房の売上:気温が上がると、冷房の売上も増える
・勉強時間とテストの点数:勉強時間が増えると、点数も上がる
・運動量と体重:運動量が増えると、体重は減る
このように、一方が変化すると他方も変化する関係を「相関がある」と言います。
📘 簡単な例で理解しよう
気温と冷房の売上の関係を見てみましょう。
コード:気温と売上の関係
# 気温と冷房の売上(架空のデータ)
temperature = [15, 20, 25, 30, 35] # 気温(℃)
sales = [50, 80, 120, 180, 250] # 売上(万円)
print("気温(℃) 売上(万円)")
print("-" * 25)
# zip()で2つのリストを同時にループ
for temp, sale in zip(temperature, sales):
print(f"{temp:5} {sale:5}")
print()
print("💡 気温が上がると、売上も上がっている!")
※ 画面が小さい場合は、コードブロックを横にスクロールできます
実行結果
気温(℃) 売上(万円) ------------------------- 15 50 20 80 25 120 30 180 35 250 💡 気温が上がると、売上も上がっている!
💡 コードの解説
zip(temperature, sales)
・2つのリストを「ペア」にして取り出せる便利な関数です
・1回目のループ:temp=15, sale=50
・2回目のループ:temp=20, sale=80 …と続きます
{temp:5}
・5文字分の幅で表示(右寄せ)
・表の見た目を揃えるために使います
📊 2. 相関の種類
相関には3つのパターンがあります。それぞれの特徴を理解しましょう。
🔰 正の相関
正の相関とは、一方が増えると、もう一方も増える関係です。
📌 正の相関のイメージ
グラフにすると、右上がり(↗)の形になります。
・勉強時間が増える → テストの点数が上がる
・広告費を増やす → 売上が増える
・身長が高い → 体重も重い(傾向として)
コード:正の相関の例
# 勉強時間とテストの点数
study_hours = [1, 2, 3, 4, 5, 6, 7, 8]
test_scores = [40, 50, 55, 65, 70, 80, 85, 90]
print("【正の相関の例】")
print("勉強時間 点数")
print("-" * 20)
for hours, score in zip(study_hours, test_scores):
print(f"{hours:4}時間 {score:3}点")
print()
print("✅ 勉強時間が増えると、点数も上がる(正の相関)")
※ 画面が小さい場合は、コードブロックを横にスクロールできます
実行結果
【正の相関の例】 勉強時間 点数 -------------------- 1時間 40点 2時間 50点 3時間 55点 4時間 65点 5時間 70点 6時間 80点 7時間 85点 8時間 90点 ✅ 勉強時間が増えると、点数も上がる(正の相関)
🔰 負の相関
負の相関とは、一方が増えると、もう一方は減る関係です。
📌 負の相関のイメージ
グラフにすると、右下がり(↘)の形になります。
・運動量が増える → 体重が減る
・価格が上がる → 販売数が減る
・気温が下がる → 暖房の使用量が増える
コード:負の相関の例
# 運動時間と体重
exercise_hours = [0, 1, 2, 3, 4, 5, 6, 7]
weight = [75, 73, 71, 68, 66, 64, 62, 60]
print("【負の相関の例】")
print("運動時間 体重")
print("-" * 20)
for hours, w in zip(exercise_hours, weight):
print(f"{hours:4}時間 {w:3}kg")
print()
print("✅ 運動時間が増えると、体重は減る(負の相関)")
※ 画面が小さい場合は、コードブロックを横にスクロールできます
実行結果
【負の相関の例】 運動時間 体重 -------------------- 0時間 75kg 1時間 73kg 2時間 71kg 3時間 68kg 4時間 66kg 5時間 64kg 6時間 62kg 7時間 60kg ✅ 運動時間が増えると、体重は減る(負の相関)
🔰 無相関(相関がない)
無相関とは、2つのデータに関係性がない状態です。
📌 無相関のイメージ
グラフにすると、バラバラで傾向が見えません。
・身長と数学の点数 → 関係なし
・血液型と性格 → 科学的には関係なし
・誕生日と年収 → 関係なし
コード:無相関の例
# 身長と数学の点数(関係なし)
height = [150, 160, 165, 170, 175, 180]
math_score = [70, 85, 60, 75, 90, 65]
print("【無相関の例】")
print("身長 点数")
print("-" * 20)
for h, score in zip(height, math_score):
print(f"{h:3}cm {score:3}点")
print()
print("➡️ 身長と数学の点数には関係がない(無相関)")
※ 画面が小さい場合は、コードブロックを横にスクロールできます
実行結果
【無相関の例】 身長 点数 -------------------- 150cm 70点 160cm 85点 165cm 60点 170cm 75点 175cm 90点 180cm 65点 ➡️ 身長と数学の点数には関係がない(無相関)
📘 3種類の相関まとめ
📌 相関の種類まとめ
| 種類 | 関係 | グラフの形 | 例 |
| 正の相関 | 一方↑ → 他方↑ | 右上がり(↗) | 勉強時間と点数 |
| 負の相関 | 一方↑ → 他方↓ | 右下がり(↘) | 運動量と体重 |
| 無相関 | 関係なし | バラバラ | 身長と数学の点数 |
📐 3. 相関係数とは?
相関の「強さ」を数値で表す方法を学びましょう。
🔰 相関係数の意味
相関係数とは、相関の強さを-1から1の数値で表したものです。
📝 書き方:相関係数の範囲
-1 ≦ 相関係数 ≦ 1
+1に近い:強い正の相関(一方が増えると他方も必ず増える)
0に近い:相関がない(関係性がない)
-1に近い:強い負の相関(一方が増えると他方は必ず減る)
📌 相関係数の目安
| 相関係数 | 相関の強さ |
| 0.7 〜 1.0 | 強い正の相関 |
| 0.4 〜 0.7 | 中程度の正の相関 |
| 0.2 〜 0.4 | 弱い正の相関 |
| -0.2 〜 0.2 | ほぼ相関なし |
| -0.4 〜 -0.2 | 弱い負の相関 |
| -0.7 〜 -0.4 | 中程度の負の相関 |
| -1.0 〜 -0.7 | 強い負の相関 |
📘 相関係数の計算方法
相関係数の計算は少し複雑ですが、段階的に理解していきましょう。
💡 相関係数の計算の考え方
ステップ1:各データの「平均からの差(偏差)」を計算
ステップ2:2つのデータの偏差を掛け合わせる
ステップ3:それを標準化(調整)する
両方が平均より大きい(または小さい)ときに積が正になり、正の相関を示します。
まず、相関係数を計算する関数を作りましょう。
コード:相関係数を計算する関数
def calculate_correlation(x, y):
"""
相関係数を計算する関数
引数:
x: 1つ目のデータリスト
y: 2つ目のデータリスト
戻り値:
相関係数(-1から1の値)
"""
# データ数のチェック
if len(x) != len(y):
print("エラー: データの数が一致しません")
return None
n = len(x)
# ステップ1: 平均を計算
mean_x = sum(x) / n
mean_y = sum(y) / n
# ステップ2: 偏差の積の合計を計算
# (x - 平均x) × (y - 平均y) を全て足す
numerator = 0
for xi, yi in zip(x, y):
numerator += (xi - mean_x) * (yi - mean_y)
# ステップ3: 各データの偏差の2乗の合計
sum_x_sq = sum((xi - mean_x) ** 2 for xi in x)
sum_y_sq = sum((yi - mean_y) ** 2 for yi in y)
# ステップ4: 分母を計算(平方根)
denominator = (sum_x_sq * sum_y_sq) ** 0.5
# 0で割ることを防ぐ
if denominator == 0:
return 0
# 相関係数 = 分子 / 分母
correlation = numerator / denominator
return correlation
※ 画面が小さい場合は、コードブロックを横にスクロールできます
💡 関数の解説
numerator += (xi – mean_x) * (yi – mean_y)
・各データの「平均からの差」を掛け合わせます
・両方が平均より大きい → 正の値
・両方が平均より小さい → 正の値(負×負=正)
・片方だけ大きい → 負の値
(sum_x_sq * sum_y_sq) ** 0.5
・** 0.5 は平方根(ルート)を計算します
・math.sqrt()を使わない書き方です
📘 相関係数を計算してみよう
コード:いろいろな相関係数を計算
# 完全な正の相関(相関係数 = 1)
x1 = [1, 2, 3, 4, 5]
y1 = [2, 4, 6, 8, 10] # xの2倍
print("【完全な正の相関】")
print(f"X: {x1}")
print(f"Y: {y1}")
corr1 = calculate_correlation(x1, y1)
print(f"相関係数: {corr1:.2f}")
print()
# 完全な負の相関(相関係数 = -1)
x2 = [1, 2, 3, 4, 5]
y2 = [10, 8, 6, 4, 2] # xが増えるとyが減る
print("【完全な負の相関】")
print(f"X: {x2}")
print(f"Y: {y2}")
corr2 = calculate_correlation(x2, y2)
print(f"相関係数: {corr2:.2f}")
print()
# 相関がない(相関係数 ≈ 0)
x3 = [1, 2, 3, 4, 5]
y3 = [3, 1, 4, 2, 5] # バラバラ
print("【相関がない】")
print(f"X: {x3}")
print(f"Y: {y3}")
corr3 = calculate_correlation(x3, y3)
print(f"相関係数: {corr3:.2f}")
※ 画面が小さい場合は、コードブロックを横にスクロールできます
実行結果
【完全な正の相関】 X: [1, 2, 3, 4, 5] Y: [2, 4, 6, 8, 10] 相関係数: 1.00 【完全な負の相関】 X: [1, 2, 3, 4, 5] Y: [10, 8, 6, 4, 2] 相関係数: -1.00 【相関がない】 X: [1, 2, 3, 4, 5] Y: [3, 1, 4, 2, 5] 相関係数: 0.30
📘 相関係数を解釈する関数
計算した相関係数を自動で解釈する関数を作りましょう。
コード:相関係数を解釈する関数
def interpret_correlation(r):
"""
相関係数を解釈する関数
引数:
r: 相関係数(-1から1の値)
"""
# 絶対値を取る(マイナスを無視して強さだけ見る)
abs_r = abs(r)
# 強さの判定
if abs_r >= 0.7:
strength = "強い"
elif abs_r >= 0.4:
strength = "中程度の"
elif abs_r >= 0.2:
strength = "弱い"
else:
strength = "ほとんどない"
# 方向の判定
if r > 0.2:
direction = "正の"
elif r < -0.2:
direction = "負の"
else:
direction = ""
# 結果を表示
print(f"相関係数: {r:.2f}")
if abs_r < 0.2:
print(f"解釈: 相関はほとんどありません")
else:
print(f"解釈: {strength}{direction}相関があります")
# テスト
print("【いろいろな相関係数を解釈】")
print()
test_values = [0.95, 0.6, 0.3, 0.05, -0.4, -0.85]
for r in test_values:
interpret_correlation(r)
print()
※ 画面が小さい場合は、コードブロックを横にスクロールできます
実行結果
【いろいろな相関係数を解釈】 相関係数: 0.95 解釈: 強い正の相関があります 相関係数: 0.60 解釈: 中程度の正の相関があります 相関係数: 0.30 解釈: 弱い正の相関があります 相関係数: 0.05 解釈: 相関はほとんどありません 相関係数: -0.40 解釈: 中程度の負の相関があります 相関係数: -0.85 解釈: 強い負の相関があります
⚠️ 4. 相関と因果関係の違い(超重要!)
データ分析で最も大切な注意点を学びましょう。
🔰 相関があっても因果関係があるとは限らない
相関があるからといって、原因と結果の関係(因果関係)があるとは限りません。これは非常に重要なポイントです!
⚠️ 有名な疑似相関の例
「アイスクリームの売上」と「水難事故の数」には正の相関があります。
でも、アイスを食べると溺れるわけではありません!
真の原因は「夏(気温)」です。
・夏は暑い → アイスが売れる
・夏は暑い → 海やプールに行く人が増える → 水難事故が増える
このように、第三の要因が両方に影響しているだけの相関を「疑似相関」と呼びます。
コード:疑似相関と真の因果関係の例
print("=" * 55)
print("【相関はあるが因果関係がない例(疑似相関)】")
print("=" * 55)
print()
print("例1: アイスクリームの売上 と 水難事故")
print(" 相関: ✅ ある(正の相関)")
print(" 因果: ❌ ない")
print(" 理由: どちらも「夏の暑さ」が原因")
print()
print("例2: 身長 と 語彙力(子供のデータ)")
print(" 相関: ✅ ある(正の相関)")
print(" 因果: ❌ ない")
print(" 理由: どちらも「年齢」が原因")
print()
print("例3: 消防車の数 と 火災の被害額")
print(" 相関: ✅ ある(正の相関)")
print(" 因果: ❌ ない(消防車が被害を増やすわけではない)")
print(" 理由: 「火災の規模」が両方に影響")
print()
print("=" * 55)
print("【相関も因果関係もある例】")
print("=" * 55)
print()
print("例1: 勉強時間 と テストの点数")
print(" 相関: ✅ ある(正の相関)")
print(" 因果: ✅ ある(勉強が点数を上げる)")
print()
print("例2: 喫煙量 と 肺がんリスク")
print(" 相関: ✅ ある(正の相関)")
print(" 因果: ✅ ある(喫煙がリスクを高める)")
print()
print("例3: 運動量 と 体重減少")
print(" 相関: ✅ ある(負の相関)")
print(" 因果: ✅ ある(運動が体重を減らす)")
※ 画面が小さい場合は、コードブロックを横にスクロールできます
実行結果
======================================================= 【相関はあるが因果関係がない例(疑似相関)】 ======================================================= 例1: アイスクリームの売上 と 水難事故 相関: ✅ ある(正の相関) 因果: ❌ ない 理由: どちらも「夏の暑さ」が原因 例2: 身長 と 語彙力(子供のデータ) 相関: ✅ ある(正の相関) 因果: ❌ ない 理由: どちらも「年齢」が原因 例3: 消防車の数 と 火災の被害額 相関: ✅ ある(正の相関) 因果: ❌ ない(消防車が被害を増やすわけではない) 理由: 「火災の規模」が両方に影響 ======================================================= 【相関も因果関係もある例】 ======================================================= 例1: 勉強時間 と テストの点数 相関: ✅ ある(正の相関) 因果: ✅ ある(勉強が点数を上げる) 例2: 喫煙量 と 肺がんリスク 相関: ✅ ある(正の相関) 因果: ✅ ある(喫煙がリスクを高める) 例3: 運動量 と 体重減少 相関: ✅ ある(負の相関) 因果: ✅ ある(運動が体重を減らす)
📘 因果関係を確かめるには?
📌 因果関係を確かめるポイント
1. 時間的な順序
原因が結果より先に起きているか?
2. メカニズム(仕組み)
どのような仕組みで影響するか説明できるか?
3. 第三の変数
他の要因が両方に影響していないか?
4. 実験
条件を変えて結果が変わるか試せるか?
📊 5. 実践例:ビジネスデータの相関分析
📘 例1:営業活動の分析
コード:営業訪問と成約の相関
# 営業担当者ごとのデータ
visits = [10, 15, 20, 25, 30, 35, 40] # 訪問件数
contracts = [2, 3, 5, 6, 7, 8, 9] # 成約件数
# 相関係数を計算
correlation = calculate_correlation(visits, contracts)
print("【営業活動の分析】")
print()
print("訪問件数 成約件数")
print("-" * 25)
for v, c in zip(visits, contracts):
print(f"{v:5}件 {c:3}件")
print()
print(f"相関係数: {correlation:.3f}")
interpret_correlation(correlation)
print()
print("💡 分析結果:")
print(" 訪問件数を増やすと成約件数も増える傾向がある")
print(" (ただし、訪問の質も重要かもしれない)")
※ 画面が小さい場合は、コードブロックを横にスクロールできます
実行結果
【営業活動の分析】 訪問件数 成約件数 ------------------------- 10件 2件 15件 3件 20件 5件 25件 6件 30件 7件 35件 8件 40件 9件 相関係数: 0.988 解釈: 強い正の相関があります 💡 分析結果: 訪問件数を増やすと成約件数も増える傾向がある (ただし、訪問の質も重要かもしれない)
📘 例2:複数の変数の相関を比較
コード:広告費・価格・売上の相関分析
# 店舗ごとのデータ
ad_cost = [10, 15, 20, 25, 30] # 広告費(万円)
price = [1000, 1200, 1500, 1800, 2000] # 平均価格(円)
sales = [100, 120, 150, 140, 180] # 売上(万円)
# 各ペアの相関係数を計算
corr_ad_sales = calculate_correlation(ad_cost, sales)
corr_price_sales = calculate_correlation(price, sales)
corr_ad_price = calculate_correlation(ad_cost, price)
print("【売上に影響する要因の分析】")
print()
print(f"広告費と売上の相関: {corr_ad_sales:.2f}")
interpret_correlation(corr_ad_sales)
print()
print(f"価格と売上の相関: {corr_price_sales:.2f}")
interpret_correlation(corr_price_sales)
print()
print(f"広告費と価格の相関: {corr_ad_price:.2f}")
interpret_correlation(corr_ad_price)
print()
print("💡 分析のまとめ:")
print(" - 広告費と売上には強い正の相関がある")
print(" - 広告を増やすと売上が増える可能性が高い")
※ 画面が小さい場合は、コードブロックを横にスクロールできます
実行結果
【売上に影響する要因の分析】 広告費と売上の相関: 0.93 解釈: 強い正の相関があります 価格と売上の相関: 0.78 解釈: 強い正の相関があります 広告費と価格の相関: 1.00 解釈: 強い正の相関があります 💡 分析のまとめ: - 広告費と売上には強い正の相関がある - 広告を増やすと売上が増える可能性が高い
📝 練習問題
ここまで学んだことを、実際に手を動かして確認しましょう。
問題1:相関の方向を判定(初級)
📋 問題
以下のデータペアが正の相関、負の相関、無相関のどれか判定してください。
X: [1, 2, 3, 4, 5]
Y: [5, 4, 3, 2, 1]
解答例を見る
コード
x = [1, 2, 3, 4, 5]
y = [5, 4, 3, 2, 1]
print("X:", x)
print("Y:", y)
print()
# データを見る
for xi, yi in zip(x, y):
print(f"X={xi} のとき Y={yi}")
print()
print("判定: 負の相関")
print("理由: Xが増えるとYが減っている")
# 相関係数で確認
corr = calculate_correlation(x, y)
print(f"\n相関係数: {corr:.2f}(-1に近い = 強い負の相関)")
※ 画面が小さい場合は、コードブロックを横にスクロールできます
実行結果
X: [1, 2, 3, 4, 5] Y: [5, 4, 3, 2, 1] X=1 のとき Y=5 X=2 のとき Y=4 X=3 のとき Y=3 X=4 のとき Y=2 X=5 のとき Y=1 判定: 負の相関 理由: Xが増えるとYが減っている 相関係数: -1.00(-1に近い = 強い負の相関)
問題2:相関係数の計算(初級)
📋 問題
X: [10, 20, 30, 40, 50] と Y: [15, 25, 35, 45, 55] の相関係数を計算し、解釈してください。
解答例を見る
コード
x = [10, 20, 30, 40, 50]
y = [15, 25, 35, 45, 55]
correlation = calculate_correlation(x, y)
print(f"X: {x}")
print(f"Y: {y}")
print()
print(f"相関係数: {correlation:.3f}")
interpret_correlation(correlation)
※ 画面が小さい場合は、コードブロックを横にスクロールできます
実行結果
X: [10, 20, 30, 40, 50] Y: [15, 25, 35, 45, 55] 相関係数: 1.000 解釈: 強い正の相関があります
問題3:因果関係の判定(中級)
📋 問題
「傘の売上」と「交通事故の件数」について、相関があるか、因果関係があるかを考察してください。
解答例を見る
コード
print("【傘の売上 と 交通事故の分析】")
print()
print("相関: ✅ ある可能性が高い(正の相関)")
print()
print("因果関係: ❌ ない")
print()
print("理由:")
print(" - 両方とも「雨」という共通の原因がある")
print(" - 雨の日は傘が売れる")
print(" - 雨の日は道路が滑りやすく視界も悪いので事故が増える")
print(" - 傘を買うことが事故を引き起こすわけではない")
print()
print("これは「疑似相関」の典型的な例です")
print()
print("💡 ポイント:")
print(" 相関を見つけたら、まず「第三の要因」を疑いましょう")
※ 画面が小さい場合は、コードブロックを横にスクロールできます
実行結果
【傘の売上 と 交通事故の分析】 相関: ✅ ある可能性が高い(正の相関) 因果関係: ❌ ない 理由: - 両方とも「雨」という共通の原因がある - 雨の日は傘が売れる - 雨の日は道路が滑りやすく視界も悪いので事故が増える - 傘を買うことが事故を引き起こすわけではない これは「疑似相関」の典型的な例です 💡 ポイント: 相関を見つけたら、まず「第三の要因」を疑いましょう
問題4:相関の強さで分類(上級)
📋 問題
複数のデータペアの相関係数を計算し、「強い相関」「中程度の相関」「弱い相関」「相関なし」に分類する関数を作成してください。
解答例を見る
コード
def classify_correlations(data_pairs):
"""
複数のデータペアを相関の強さで分類
引数:
data_pairs: [(名前, xリスト, yリスト), ...] の形式
"""
strong = [] # 強い相関
moderate = [] # 中程度の相関
weak = [] # 弱い相関
none = [] # 相関なし
for name, x, y in data_pairs:
corr = calculate_correlation(x, y)
abs_corr = abs(corr)
if abs_corr >= 0.7:
strong.append((name, corr))
elif abs_corr >= 0.4:
moderate.append((name, corr))
elif abs_corr >= 0.2:
weak.append((name, corr))
else:
none.append((name, corr))
print("【相関の強さ別分類】")
print()
print("🔴 強い相関 (|r| >= 0.7)")
for name, corr in strong:
print(f" {name}: {corr:.3f}")
if not strong:
print(" なし")
print()
print("🟡 中程度の相関 (0.4 <= |r| < 0.7)")
for name, corr in moderate:
print(f" {name}: {corr:.3f}")
if not moderate:
print(" なし")
print()
print("🟢 弱い相関 (0.2 <= |r| < 0.4)")
for name, corr in weak:
print(f" {name}: {corr:.3f}")
if not weak:
print(" なし")
print()
print("⚪ 相関なし (|r| < 0.2)")
for name, corr in none:
print(f" {name}: {corr:.3f}")
if not none:
print(" なし")
# テストデータ
test_data = [
("広告費と売上", [10, 20, 30, 40, 50], [100, 180, 280, 350, 450]),
("価格と販売数", [100, 150, 200, 250, 300], [50, 40, 30, 20, 10]),
("気温と来店数", [15, 20, 25, 30, 35], [100, 110, 105, 115, 108]),
("身長と体重", [150, 160, 170, 180, 190], [50, 60, 70, 80, 90])
]
classify_correlations(test_data)
※ 画面が小さい場合は、コードブロックを横にスクロールできます
実行結果
【相関の強さ別分類】 🔴 強い相関 (|r| >= 0.7) 広告費と売上: 0.998 価格と販売数: -1.000 身長と体重: 1.000 🟡 中程度の相関 (0.4 <= |r| < 0.7) なし 🟢 弱い相関 (0.2 <= |r| < 0.4) 気温と来店数: 0.327 ⚪ 相関なし (|r| < 0.2) なし
🎯 このステップのまとめ
✅ 学んだこと
✓ 相関:2つのデータの関係性
✓ 正の相関:一方が増えると他方も増える(↗)
✓ 負の相関:一方が増えると他方は減る(↘)
✓ 無相関:関係性がない
✓ 相関係数:-1から1の数値で相関の強さを表す
✓ 相関 ≠ 因果関係:相関があっても原因・結果とは限らない
✓ 疑似相関に注意が必要
💡 次のステップに進む前に確認
以下のことができるようになったか確認しましょう:
□ 相関の3種類(正・負・無)を区別できる
□ 相関係数の意味を理解している
□ 相関と因果関係の違いを説明できる
□ 疑似相関の例を挙げられる
これらができたら、次のステップに進みましょう!
❓ よくある質問
Q1: 相関係数が0.5は強いですか?
A: 中程度の相関です。一般的に、0.7以上が強い、0.4〜0.7が中程度、0.2〜0.4が弱い、0.2未満がほとんどないと判断されます。ただし、分野によって基準は異なることがあります。
Q2: 相関があれば予測できますか?
A: ある程度は可能ですが、完璧ではありません。相関係数が1に近いほど予測精度は高くなりますが、他の要因も考慮する必要があります。予測には「回帰分析」という手法を使います。
Q3: 負の相関は悪いことですか?
A: いいえ、悪いことではありません。負の相関は単に「反対方向に動く」という意味です。例えば、「価格と需要」の負の相関(価格が上がると需要が下がる)は経済学では普通のことです。
Q4: 相関係数の計算式を覚える必要はありますか?
A: 実務ではNumPyやPandasの関数を使うので、計算式を暗記する必要はありません。ただし、概念(偏差の積を使う)を理解しておくことで、結果の解釈がしやすくなります。
Q5: 因果関係をどう証明しますか?
A: 実験や介入研究が最も確実です。ランダム化比較試験(RCT)などで、原因を操作して結果が変わるかを確認します。観察データだけでは因果関係の証明は困難です。
学習メモ
Pythonデータ分析入門 - Step 16