06.6.1 高校生向け
相関ヒートマップ(高校生向け)
こんな場面を想像してみよう #
部活のマネージャーが「練習時間・睡眠時間・食事の回数・体重・タイム」の 5 つを記録していたとします。2 つの量の関係なら散布図 1 枚で見えますが、5 つなら組み合わせは 10 通り。散布図を 10 枚並べるのはたいへんです。「まずどのペアが強く結びついているかだけ知りたい」。そのための図が相関ヒートマップです。
下の図は標準版の例で、お店の 4 つの指標(売上・集客・滞在時間・リピート率)の相関係数を色で塗ったものです。

セルの中の数字が相関係数、色の濃さがその大きさです。この例ではどのペアも 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 の定義どおりに計算したものです。
| |
結果は 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 組のペアの関係を点で見る基本は 散布図の読み方(高校生向け)、直線を引いて傾きを読む方法は 回帰直線を重ねた散布図(高校生向け) へ進んでください。相関を扱う図の一覧は 相関のセクション にまとめています。