相関係数と回帰直線

回 5-3 分野 5 統計

相関係数は、2 つの値の組が直線の形にそろって増え減りする強さを、−1 から 1 の数で表したものです。1 に近いほど右上がり、−1 に近いほど右下がりの直線にそろい、0 に近いと直線の関係が見えません。共分散を 2 つの標準偏差で割って出します。点の集まりに、誤差の 2 乗の和が一番小さくなるように引いた直線が回帰直線で、これが一番小さい機械学習です。

相関係数と回帰直線を、表で 1 つずつ計算した数と、Python の statistics が出す数の両方で確かめます。

利用者が増えると、CPU はどれだけ忙しくなるか

サーバーを使う人の数と CPU の使用率を、5 回測ったとします。人が増えるほど使用率も上がっているように見えます。その「そろい方」の強さを −1 から 1 の 1 つの数で表すのが、相関係数です。

さらに、点の集まりに 1 本の直線を引けば、「100 人増えると使用率が何 % 上がるか」を数で言えます。この直線を回帰直線と呼び、データから直線を決めることは、一番小さい機械学習でもあります。

一方で、相関係数が 1 に近くても、片方がもう片方の原因とは限りません。この回では、相関係数と回帰直線を表で計算して Python と照らし、どこで外れるかも確かめます。

相関係数と回帰直線の求め方

散布図と相関

2 つの値の組 (x, y) を、横に x、縦に y を取って点で打った図を散布図と呼びます。点が右上がりにそろうなら正の相関、右下がりなら負の相関、ばらばらなら相関が無い、と言います。

この回で使うデータは、次の 5 組です。x は同時に使う人の数 (百人)、y は CPU の使用率 (%) です。数は計算のための作り話です。

回x (百人)y (%)
1235
2336
3547
4759
5863

共分散

x の平均は 5、y の平均は 48 です。各組で、x の偏差 (x − 5) と y の偏差 (y − 48) を掛けます。

x の偏差y の偏差掛けた数
−3−1339
−2−1224
0−10
21122
31545
合計130

x も y も平均より大きい (どちらもプラス) か、どちらも小さい (どちらもマイナス) と、掛けた数はプラスになります。掛けた数の平均を共分散と呼びます。ここでは 130 ÷ 5 = 26 です。共分散がプラスなら右上がり、マイナスなら右下がりの傾向です。

相関係数

共分散は、x と y の単位によって大きさが変わります。そこで、x の標準偏差と y の標準偏差で割って、−1 から 1 の数にそろえます。

相関係数 r = 共分散 ÷ (x の標準偏差 × y の標準偏差)

このデータでは、x の偏差の 2 乗の合計が 26、y が 660 なので、r = 130 ÷ √(26 × 660) ≒ 0.992 です (分母と分子の両方を n で割るので、n は打ち消し合います)。

相関係数が −1 から 1 に収まるのは、偏差の積の合計の絶対値が、2 つの偏差の 2 乗の合計を掛けた数のルートを超えないためです (コーシー・シュワルツの不等式)。全部の点が 1 本の直線に乗ったときだけ、ちょうど 1 か −1 になります。

相関の強さの目安として、絶対値が 0.7 以上で強い相関、0.4 から 0.7 で中くらい、0.2 から 0.4 で弱い、と言うことがあります。目安は分野によって違い、決まった線ではありません。

最小二乗法で回帰直線を引く

点の集まりに直線 y = a + b x を引きます。各点で、実際の y と直線の予測の差 (残差) を取り、残差の 2 乗の和が一番小さくなるように a と b を決めます。これを最小二乗法と呼びます。答えは次の式で出ます。

  • 傾き b = (x と y の偏差の積の合計) ÷ (x の偏差の 2 乗の合計) = 130 ÷ 26 = 5
  • 切片 a = y の平均 − b × x の平均 = 48 − 5 × 5 = 23

回帰直線は y = 23 + 5x です。百人増えるごとに使用率が約 5% 上がる、と読めます。直線は必ず平均の点 (5, 48) を通ります。

決定係数

直線 1 本で予測するとき、y の散らばりのうち直線で説明できる割合を決定係数と呼びます。x が 1 つの回帰では、決定係数は相関係数の 2 乗で、ここでは 130 の 2 乗 ÷ (26 × 660) ≒ 0.985 です (丸めた 0.992 を 2 乗すると 0.984 で、丸めの分だけずれます)。

動かして確かめる

1 本目は、表の計算をそのまま Python で書き、statistics の答えと照らします。statistics.correlation と statistics.linear_regression は Python 3.10 から使えます。

動かす 表の計算と statistics を比べる

python実行可能
出力

▶ 実行ボタンを押すと結果がここに表示されます

実行すると、次の通りに出ます

偏差の積の合計 130
r 0.992
correlation 0.992
傾き 5.0
切片 23.0
slope 5.0
intercept 23.0

手で計算した r と傾きと切片が、statistics の答えと同じです。

2 本目は、本当に残差の 2 乗の和が一番小さいかを、傾きを少しずつ変えて確かめます。直線は平均の点 (5, 48) を通るように切片を合わせます。

動かす 傾きを変えて残差の 2 乗の和を比べる

python実行可能
出力

▶ 実行ボタンを押すと結果がここに表示されます

実行すると、次の通りに出ます

傾き 4 2 乗の和 36
傾き 4.5 2 乗の和 16.5
傾き 5 2 乗の和 10
傾き 5.5 2 乗の和 16.5
傾き 6 2 乗の和 36

傾き 5 のとき 2 乗の和が一番小さく、そこから離れるほど大きくなります。最小二乗法の式は、この一番小さい所を計算で直接出したものです。機械学習では、式で解けない形のときに、傾きを少しずつ動かして一番小さい所を探します (勾配降下法)。

3 本目は、アンスコムの例と呼ばれる 4 組のデータです。統計学者のアンスコムが 1973 年に示したもので、4 組とも平均、相関係数、回帰直線がほぼ同じなのに、散布図にすると形が全く違います。

動かす アンスコムの 4 組

python実行可能
出力

▶ 実行ボタンを押すと結果がここに表示されます

実行すると、次の通りに出ます

I r 0.816 y = 3.0 + 0.5 x
II r 0.816 y = 3.0 + 0.5 x
III r 0.816 y = 3.0 + 0.5 x
IV r 0.817 y = 3.0 + 0.5 x

4 組とも r は約 0.82、直線は約 y = 3 + 0.5x です。けれど I はばらついた右上がり、II は曲線、III は 1 点だけ外れた直線、IV は 1 点だけで傾きが決まっています。相関係数と直線だけを見て、散布図を見ないと、この違いに気付けません。

相関と回帰で外れる所

相関は因果ではない

アイスの売上と水の事故の件数には、正の相関があります。けれど、アイスが事故を起こすわけではなく、どちらも気温が高いと増えます。このように、2 つに共通して効く 3 つ目の要因があると、原因と結果の関係が無くても相関が出ます (見かけの相関)。施策と成果の相関を見つけても、それだけでは原因とは言えません。原因かを確かめる確かな方法の 1 つは、利用者を無作為に 2 つに分け、施策を入れた群と入れない群を比べること (A/B テスト) です。

曲線の関係は 0 に近く出る

相関係数は直線の関係だけを測ります。y = x^2 のように、はっきりした関係があっても、左右対称の曲線なら相関係数は 0 になります。

動かす 曲線の関係と外れ値 1 つ

python実行可能
出力

▶ 実行ボタンを押すと結果がここに表示されます

実行すると、次の通りに出ます

y = x^2 の r 0.0
ばらばら -0.06
1 点足す 0.95

y = x^2 は x で y が決まるのに、r は 0.0 です。値の大きさではなく順位で測る相関 (スピアマンの順位相関係数) は、増え続ける曲線なら直線でなくても 1 と測ります。たとえば x が 0 以上の所だけの y = x^2 は 1 です。Python 3.12 からは statistics.correlation(x, y, method="ranked") で出せます。ばらばらの 8 点は r が約 −0.06 ですが、遠くに 1 点 (30, 30) を足すだけで約 0.95 になりました。r だけで判断せず、散布図を見て、外れた点を確かめます。

データの範囲の外で予測する

上の回帰直線 y = 23 + 5x で、x = 20 (2,000 人) を予測すると 123% になり、ありえない値です。測ったのは 200 人から 800 人の範囲で、その外でも直線の関係が続くとは限りません。範囲の外の予測 (外挿) は、別の方法で確かめます。

どちらかが全部同じ値

x か y のどちらかが全部同じ値だと、その標準偏差が 0 で、相関係数は 0 で割ることになり決まりません。Python の statistics.correlation はエラー (StatisticsError) を出します。点が 2 つ未満のときも、同じくエラーです。

仕事でどう使うか

相関と回帰を使う場面は、次の通りです。

  • 線形回帰。データから直線の a と b を決めるのは、一番小さい機械学習。x を何個にも増やした重回帰も、同じ最小二乗法で解く
  • 容量の見積もり。利用者の数と CPU やメモリの使用率の回帰直線から、どこで足りなくなるかを見積もる。測った範囲の外は外挿になるので、余裕を取る
  • 特徴量の選び方。予測に使う値どうしの相関が強すぎると、片方は要らないことが多い。相関の表を作って確かめる
  • 指標の関係を調べる。表示の速さと離脱の割合のように、2 つの指標の相関を出し、強ければ A/B テストで原因かどうかを確かめる
  • 試験の形で練習するなら、統計検定 2 級の練習問題で、相関係数と決定係数を含む、出題範囲の全体から選んだ問題を 4 択で解ける。回帰直線の傾きや見かけの相関は、分野別クイズの「2 変数以上のデータ」にある

よくある問い

相関係数はどうやって求めますか

x と y の平均を出し、各組で x の偏差と y の偏差を掛けて合計します。それを、x の偏差の 2 乗の合計と y の偏差の 2 乗の合計を掛けた数のルートで割ります。Python なら statistics.correlation(x, y)、Excel なら CORREL 関数で出せます。

相関係数がいくつなら相関があると言えますか

決まった線はありません。目安として、絶対値 0.7 以上で強い、0.4 から 0.7 で中くらい、0.2 から 0.4 で弱いと言うことがあります。データの数が少ないと、偶然でも大きな値が出るので、数の大きさと一緒にデータの個数も見ます。

相関係数と回帰直線の傾きの違いは何ですか

相関係数は、直線にそろう強さを −1 から 1 で表し、単位を持ちません。傾きは、x が 1 増えると y がいくつ増えるかで、単位を持ちます。傾き = 相関係数 × (y の標準偏差 ÷ x の標準偏差) の関係があり、符号はいつも同じです。

回帰分析と相関分析の違いは何ですか

相関分析は、2 つの数の関係の強さを 1 つの数で測ります。回帰分析は、片方 (x) からもう片方 (y) を予測する式を作ります。相関係数は x と y を入れ替えても同じですが、回帰直線は入れ替えると、ふつうは別の直線になります (全部の点が 1 本の直線に乗るときだけ同じ直線です)。

確認クイズ

答えだと思う選択肢を押すと、その場で正誤と理由が開きます。3 問すべてに正しく答えると、この回は修了で、石が緑に変わります (この端末のブラウザに残ります)。間違えた問いは、あとから解き直せます。

1 問目

相関係数が −0.95 の 2 つの値について、正しいのはどれですか。

2 問目

x の偏差と y の偏差の積の合計が 60、x の偏差の 2 乗の合計が 20、x の平均が 4、y の平均が 10 です。最小二乗法の回帰直線はどれですか。

3 問目

このコードを動かすと何が出ますか。

import statistics as st
x = [1, 2, 3, 4]
y = [10, 8, 6, 4]
print(st.correlation(x, y))

説明課題

「相関係数が 0.99 でも、片方がもう片方の原因とは言えない理由」を、具体の例を使って 3 文で説明してください。書いたら、下の模範解答を開いて比べてください。

模範解答

自分の説明を書いてから開いて、比べてください。

この回の先の一歩

2 つの数の関係を直線で表し、どこまでなら予測に使えるかを言えると、容量の見積もりや施策の効果を数で話せます。いまの自分が転職までの道のどの段にいるかは、転職診断で確かめられます。

もっと深く

この回の続きを、ゆめさくのコースの章や道具で深められます。頁の中の確認クイズに答えたあと、手を動かす量を増やしたいときに使ってください。

一次資料

どれも 2026年10月30日に開いて、題と中身を確かめました (Anscombe の論文は、下に書いたとおり本文を除きます)。

次へ

分野 5 統計の回

  1. 5-1平均と分散と標準偏差偏差、分散、中央値頁で読む
  2. 5-2正規分布釣り鐘の形、平均 ± 1σ、標準化頁で読む
  3. 5-3相関と回帰相関係数、最小二乗法この回

分野 5 の頁へ戻るほかの分野を見る