Step 16:相関関係を理解しよう

🔗 ステップ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

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