相関係数と散布図(データの連動性と外れ値)
「気温が上がるとビールはどれくらい売れるのか?」ピアソンの相関係数 r と直線の傾きの数理
- 1
- 2つの変数 X と Y の直線的な関連の強さを -1.0 から +1.0 の数値で表した指標を「相関係数(ピアソンの積率相関係数 r)」と呼ぶ
- 2
- r = +1 は完全な正の相関(右肩上がり一直線)、r = 0 は無相関、r = -1 は完全な負の相関(右肩下がり一直線)を示す
- 3
- 相関係数は「たった1つの外れ値(極端なデータ)」によって値が激変する脆弱性があり、「相関関係は因果関係を意味しない(疑似相関)」というデータ分析の最重要原則がある
なぜこれを学ぶのか? — 現実社会とテクノロジーでの価値
なぜ生まれたのか?
「気温とアイスの売上」のように、2つのデータにどれくらい直線的な連動性があるかを -1.0〜+1.0 の統一尺度で定量化するために生まれた。
身につく武器・思考力
データのバラツキの中から真の関連性を見抜き、外れ値1個に惑わされないデータリテラシーと「相関と因果の混同」を防ぐ眼が養われる。
実社会・ITでの活躍現場
- •機械学習における入力特徴量の選定(多重共線性の排除)
- •NetflixやAmazonの「あなたへのおすすめ」レコメンドエンジン
- •株式投資における銘柄間のポートフォリオ分散(リスクヘッジ)
- •マーケティングにおける広告費と売上データの連動性分析
Layer 1 — 直感・シミュレーター
散布図上のデータ点をクリックしてドラッグしたり、新しい点を追加してみよう。相関係数 と最適な回帰直線(ベストフィットライン)がリアルタイムに変動する。特に、右上に1つだけ極端な「外れ値」を置くだけで相関係数が一気に跳ね上がる現象を体感できる。
相関係数 r = 0.85 という強い正の相関が観測されたとき、科学的に正しい解釈はどれか?
Layer 2 — 定義・受験・証明
定義
2組のデータ に対し、各変数の平均値を 、標準偏差を とする。 - 共分散(Covariance):
- ピアソンの積率相関係数:
常に を満たす。
公式・数理モデル
証明・導出
コーシー・シュワルツの不等式による の証明: ベクトル と を考える。 ベクトルの内積とノルム(長さ)の定義より、
したがって相関係数は、実は2つの偏差ベクトルの「なす角 の余弦 」そのものである:
コサインの値域は常に であるため、相関係数 も数学的に厳密に 以上 以下の範囲に収まる。(同方向ベクトル)のとき 、(無関係に直交)のとき となる。
押さえておきたいポイント
- 相関係数は「偏差ベクトルのコサイン 」という幾何学的な正体を持つ
- : 強い相関、: 中程度の相関、: ほとんど相関なし
- 相関係数は「直線的な関係」しか捉えられない(二次関数 のような綺麗な放物線関係でも になる)
- アンスコムの例(Anscombe's quartet): 平均・分散・相関係数が全く同じでも、散布図を描くと全く異なる形状になる有名な教訓
本トピックの内容・数理モデルは、文部科学省学習指導要領(算数・数学・情報)および国際標準カリキュラムに準拠し、エンジニアリング現場の実装事例と照らし合わせてMath World Lab編集部により検証・作成されています。
Layer 3 — 工学応用・現場実装
機械学習の多重共線性(Multicollinearity)排除と特徴量相関マトリクス
AIモデルの学習前に、入力特徴量同士の相関係数行列を計算し、相関係数が高すぎる()冗長な特徴量を自動的に間引いて過学習と計算負荷を抑制するデータ前処理パイプライン。
1// 2つの配列からピアソンの相関係数 r を計算2function calculateCorrelation(x: number[], y: number[]): number {3 const n = x.length;4 if (n !== y.length || n === 0) return 0;56 const meanX = x.reduce((a, b) => a + b, 0) / n;7 const meanY = y.reduce((a, b) => a + b, 0) / n;89 let numerator = 0; // 共分散の分子10 let denomX = 0; // x の偏差平方和11 let denomY = 0; // y の偏差平方和1213 for (let i = 0; i < n; i++) {14 const dx = x[i] - meanX;15 const dy = y[i] - meanY;16 numerator += dx * dy;17 denomX += dx * dx;18 denomY += dy * dy;19 }2021 const denominator = Math.sqrt(denomX) * Math.sqrt(denomY);22 return denominator === 0 ? 0 : numerator / denominator;23}2425// 例: 最高気温とアイス売上個数のデータ26const temperature = [22, 25, 28, 32, 35, 18, 30];27const iceCreamSales = [120, 150, 210, 310, 390, 80, 270];2829const r = calculateCorrelation(temperature, iceCreamSales);30console.log(`相関係数 r: ${r.toFixed(3)}`); // 約 0.979 (極めて強い正の相関)
次に学ぶならコレ!おすすめトピック
この単元と深い繋がりを持つ、あわせて学ぶと理解が深まるおすすめ単元