クリーム色の背景、色付き表示、高コントラスト、大きな文字のほうが読みやすいですか?配色と文字を選ぶと、すべてのページに一度で反映されます。

無料レッスン

相関係数と因果関係の違い

このレッスンのあとで: 2つの数の関係を相関係数で測り、原因とは区別して言うことができる。

55分のレッスンコマンド2件JupyterLab データサイエンスラボ:pandas、Matplotlib、scikit-learn をブラウザーで

一緒に動く2つの数

相関は、2つの数が一緒に増えたり減ったりする関係です。その強さと向きを、相関係数という1つの数で言い表せます。ただし、それだけでは「原因」まではわかりません。

貸し自転車の店では、気温が高い日ほど貸出が多く、雨の日ほど少ないように見えます。この関係を数で測ります。

このレッスンのゴール

メモ

2つの数の関係を相関係数で測り、原因とは区別して言うことができる。

キーワード

ことばいみ
散布図2つの数を、点で並べたグラフ
相関2つの数が、一緒に動く関係
相関係数直線の関係の向きと強さを、-1から1で表した数
外れ値他の値から大きく離れた値
因果関係一方が、他方の原因になっている関係
交絡別の要因が、2つの数を同時に動かしていること

学生が入力するセルは、このプレビューでは空白です。

散布図と相関係数

2つの数を点で並べたグラフが散布図です。点が右上がりなら正の相関、右下がりなら負の相関です。

相関係数は、その向きと強さを-1から1で表します。1に近いほど右上がりの直線に並び、0に近いほど直線の関係がありません。

相関係数の読み方

相関係数点の並び
1ちょうど右上がりの直線
0.7 前後右上がりの傾向がはっきりある
0直線の関係がない
-0.7 前後右下がりの傾向がはっきりある
-1ちょうど右下がりの直線

学生が入力するセルは、このプレビューでは空白です。

気温と雨の相関係数

コマンド
docker exec jupyter python3 -c "import csv, statistics as s; rows = list(csv.DictReader(open('hires.csv'))); h = [int(r['hires']) for r in rows]; t = [float(r['temp_c']) for r in rows]; rain = [float(r['rain_mm']) for r in rows]; print(round(s.correlation(t, h), 3), round(s.correlation(rain, h), 3))"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

相関係数は掛けて足して割る

2つの数それぞれの、平均との差を掛けて足します。それを、差の2乗の合計どうしを掛けて平方根を取った数で割ると、相関係数です。

一緒に平均より上、または下にある点が多いほど、掛けた値がプラスになり、相関係数は1に近づきます。

例: 気温と貸出の計算

気温貸出気温の差貸出の差掛けた値
0130-10-64640
5160-5-34170
101900-40
15240546230
202501056560
合計2乗の合計 2502乗の合計 105201600

学生が入力するセルは、このプレビューでは空白です。

相関係数を手で計算する

コード: python
# 気温と貸出台数の相関係数を、手で計算します。
temps = [0, 5, 10, 15, 20]
hires = [130, 160, 190, 240, 250]
mean_x = sum(temps) / len(temps)
mean_y = sum(hires) / len(hires)
top = 0
left = 0
right = 0
for n in range(len(temps)):
    dx = temps[n] - mean_x
    dy = hires[n] - mean_y
    top = top + dx * dy
    left = left + dx ** 2
    right = right + dy ** 2
print("相関係数:", round(top / (left * right) ** 0.5, 4))
# 最後の 250 を 100 に変えて、もう一度実行してください。
# 1つの外れた点で、相関係数はどう変わりますか。

相関係数は直線だけを測る

2つの数がはっきり関係していても、直線でなければ、相関係数は小さくなります。x が -2 から 2 のとき、y が x の2乗なら、点は U字に並びますが、相関係数は0です。

外れ値が1つあるだけでも、大きく動きます。必ず散布図を先に描いてください。

U字の相関係数

コマンド
docker exec jupyter python3 -c "import statistics as s; print(round(s.correlation([-2, -1, 0, 1, 2], [4, 1, 0, 1, 4]), 3))"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

よくある間違い

注意

多くの人は、相関が強ければ、一方が他方の原因だと考えます。相関は、一緒に動くことしか示しません。別の要因が、両方を動かしているかもしれません。

一緒に動いても原因とは限らない

アイスの売上と、熱中症で運ばれた人の数は、一緒に増えます。どちらも、暑い月に増えるからです。この別の要因が交絡です。

原因かどうかは、相関係数ではなく、比べる条件をそろえた調べ方で確かめます。

例: 月ごとの3つの数

月気温(度)アイスの売上(千円)熱中症の人数
4月151202
5月201805
6月2526012
7月3034030
8月3238036
9月2728015

学生が入力するセルは、このプレビューでは空白です。

さらに挑戦: 土日と貸出

ノートブックで、土日なら1、平日なら0の列を作り、貸出台数との相関係数を求めてください。

気温の0.77より小さいはずです。それでも、土日の貸出が多いと言えるのはなぜでしょうか。一文で書きましょう。

このラボとソースについて: JupyterLab データサイエンスラボ:pandas、Matplotlib、scikit-learn をブラウザーで

授業で使いますか?このモジュールを学生に割り当てると、教員用ガイド、自動採点つきの課題、学生ごとのラボを使えます。