K_DM Book
用語集
対象者 高校生
対象者別の入口 →

対象者の設定はこのブラウザの中にだけ保存されます。

言語 JA

相関ヒートマップ(高校生向け)

入門高校生

06.6.1 高校生向け

相関ヒートマップ(高校生向け)

最終更新 2026-11-01 読了時間 2 分
まとめ
相関ヒートマップは、多くの量のすべてのペアの相関係数を表にして、値の大きさを色の濃さで塗った図です。答える問いは「たくさんの量の中で、どのペアが一緒に動いているか」で、散布図を何十枚も描く代わりに 1 枚で見渡せます。対角線(自分自身との相関)は必ず 1、表は左右対称なので、見るべきは対角線の片側だけです。色が表すのは「相関の強さ」であって「原因と結果」ではないので、気になるペアは散布図で形を確かめます。

こんな場面を想像してみよう #

部活のマネージャーが「練習時間・睡眠時間・食事の回数・体重・タイム」の 5 つを記録していたとします。2 つの量の関係なら散布図 1 枚で見えますが、5 つなら組み合わせは 10 通り。散布図を 10 枚並べるのはたいへんです。「まずどのペアが強く結びついているかだけ知りたい」。そのための図が相関ヒートマップです。

下の図は標準版の例で、お店の 4 つの指標(売上・集客・滞在時間・リピート率)の相関係数を色で塗ったものです。

売上・集客・滞在時間・リピート率の 4 指標の相関係数を 4×4 の表にし、値が 1 に近いほど濃い青で塗った相関ヒートマップ。対角線はすべて 1 で最も濃く、他のセルも 0.99 前後の濃い青が並び、どの指標も強く一緒に動いていることを示す

セルの中の数字が相関係数、色の濃さがその大きさです。この例ではどのペアも 0.99 以上で、「集客が多い月は売上も滞在時間もリピート率も高い」という強い結びつきが、ひと目で分かります。

表はこう作る #

まず、ペアを 1 組選んで相関係数 \(r\) を計算します。売上と集客なら、8 か月分の 8 個の点から \(r\) を求めます。計算は数学I と同じです。次に、同じ計算をすべてのペアで繰り返します。4 つの量なら 4 × 4 = 16 マスですが、「売上と集客」と「集客と売上」は同じ値なので、実際に計算するのは 6 通りだけです。それから対角線を 1 で埋めます。自分自身との相関は定義から必ず 1 になり、情報はないので読むときは飛ばします。最後に、−1 から 1 の値を色の濃さに対応させます。この図は 1 に近いほど濃い青です。

データが変わると図はどう変わるでしょう。相関 0.9 のセルは濃い青、0.2 のセルはずっと薄い青になり、色の濃さだけで「強いペア」を探し出せます。これが色で塗る利点です。一方、もし「値引き率」のように売上が増えると下がる指標を加えると、その \(r\) は負(たとえば −0.8)になります。この図のような青一色の塗り方では −0.8 は「ほぼ白」になり、強い関係があるのに「関係が薄い」ように見えてしまいます。負の相関が出るデータでは、0 を白にして正を青・負を赤に塗る2 色の塗り方に変えるのが約束です。

次のコードは、売上と集客の \(r\) を、数学I の定義どおりに計算したものです。

1
2
3
4
5
6
7
x = [100, 120, 150, 170, 190, 210, 180, 205]   # 売上
y = [230, 260, 300, 320, 350, 370, 330, 360]   # 集客
mx, my = sum(x) / len(x), sum(y) / len(y)
sxy = sum((a - mx) * (b - my) for a, b in zip(x, y))
sxx = sum((a - mx) ** 2 for a in x)
syy = sum((b - my) ** 2 for b in y)
print(f"r = {sxy / (sxx * syy) ** 0.5:.3f}")

結果は 0.998。図では小数第 2 位までの表示なので「売上 × 集客」のセルに 1.00 と出ています。

動かして見てみよう #

下の図で「再生」を押すと、説明した手順が 1 つずつ進みます。手順ごとの説明は図の下に出ます。

気をつけたいこと #

いちばん多い失敗は、相関係数 0.99 を「原因と結果」と読んでしまうことです。「滞在時間とリピート率の相関が 0.99」でも、滞在時間を無理に延ばせばリピートが増えるとは言えません。滞在時間とリピート率の両方を動かす第三の量(店の人気)があるかもしれないからです。二つ目は色だけで判断すること。相関係数は直線的な関係の強さしか測らないので、U 字型の関係は \(r\) が 0 に近くなって「弱い」色に塗られ、見逃します。気になるペアは散布図で形を確かめます。三つ目はデータ数を忘れることです。8 か月分の 8 点で計算した 0.9 と、1,000 点で計算した 0.9 では信頼度が違い、点が少ないほど偶然で大きな \(r\) が出やすくなります。四つ目は量が多すぎること。50 個以上の量を並べるとセルが小さくなって読めないので、関係の強い量だけ選んで描き直します。

やってみよう #

最初の課題は、クラスの 10 人分の「身長・体重・靴のサイズ・50 m 走のタイム」を集め、6 通りのペアそれぞれの相関係数を表計算ソフトで計算して 4 × 4 の表にし、色鉛筆で濃さを塗り分けることです。二つ目は、塗った表の中で「負の相関」になったペアがあれば、散布図を描いて帯の向きが右下がりになっているか確かめること。三つ目は、「相関が強いが、原因と結果ではないペア」の例を 1 つ考え、両方を動かしている第三の量を説明することです。

つぎに読む #

df.corr() と sns.heatmap での描き方、色の選び方は 標準版の相関ヒートマップ で扱っています。1 組のペアの関係を点で見る基本は 散布図の読み方(高校生向け)、直線を引いて傾きを読む方法は 回帰直線を重ねた散布図(高校生向け) へ進んでください。相関を扱う図の一覧は 相関のセクション にまとめています。