コンテンツにスキップ

第7章 データの関係

1 2つのデータの関係

今度は2つのデータの関係について見てみます。 例えば、国語と社会について散布図で表示してみます。

df.plot.scatter(x="国語",y="社会")

右肩上がりのグラフになります。 これは国語が点数が高い人は社会も高い人が多いことを表しています。これを正の相関といいます。

次に国語と理科を見てみます。

df.plot.scatter(x="国語",y="理科")

データはバラバラです。これは2つのデータに相関が無いことを示しています。

sns.pairplotを行うことで全データの散布図を一度に出すことができます。これを散布図行列と言います。

sns.pairplot(data=df)

2 回帰直線

散布図でデータに相関関係があるとき、その中心部分に線を引くことが出来れば、Xがある値の時にYはどのような値を取るか、予測することが出来ます。

このような直線を回帰直線といいます。seabornの機能で回帰直線を引くことが出来ます。

sns.regplot(data=df, x="国語", y="社会")

薄い色の範囲は95%の確率でそこに入るだろうという範囲を表しています。これを信頼区間といいます。

全ての散布図に回帰直線を引いた散布図行列を表示してみましょう。

sns.pairplot(data=df, kind="reg")

3 相関係数

相関があるかどうかは計算して数値として求めることが出来ます。それが相関係数です。

pandasでは、corrメソッドで求められます。

df[["国語","算数","理科","社会"]].corr()

相関係数は1~-1で0の場合、相関がありません。正の数値の場合、片方が増えれば片方が増える関係(正の相関関係)になります。全く同じ数値同士の相関関係は1になります。

負の数値の場合、片方が増えれば片方が減る関係(負の相関関係)になります。

絶対値を以下のような目安で当てはめることが出来ます。

0.00.2ほとんど相関関係がない
0.20.4弱い相関関係がある
0.40.7やや相関関係がある
0.71.0強い相関関係がある

今回のデータの場合、国語と社会は 0.75 と高い相関を示しており、算数と理科も0.72と高い相関を示しています。つまり、国語が点数が高い人は社会も高く、算数が高い人は理科が高い傾向がある、ということです。

4 相関と因果関係

相関があってもそれが因果関係があると考えることは単純にはできないことに注意しましょう。

因果関係とは原因と結果の関係です。あることが原因でその結果が起こる関係です。

例えば、気温が上がればアイスクリームの売り上げが上がる場合、気温とアイスクリームの売り上げには相関関係があります。 また、気温が上がれば水難事故も増えます。気温と水難事故には相関関係があります。

この2例は因果関係もあると言えるでしょう。気温が上がったのでアイスクリームの売り上げが増えた、気温が上がったので水難事故が増えた、ということです。

このようなとき、水難事故とアイスクリームの売り上げも相関関係にあります。つまり、水難事故が増えればアイスクリームの売り上げも上がります。しかし、因果関係はありません。つまり、水難事故が増えたからアイスクリームの売り上げが上がったとは言えないわけです。そこには共通の原因(潜在変数)があるだけに過ぎません。このような相関を擬似相関と呼びます。

また、因果関係があった場合にもその向きに注意しなければなりません。気温が上がったのでアイスクリームの売り上げが上がるわけで、アイスクリームの売り上げが上がったら気温が上がる訳ではありません。