機械学習

相関係数を信じて良いのか?【MLC#15】

こんにちは、チズチズです!

今日もこの前の続きをやります。

前回まで……

前回の記事

前回は

このような事故案件を発見しました。

なぜか365243がめっちゃ多くて、しかもこれ働いてる日数で1000年も働いてることになって社畜さん多いなってわけじゃなくて普通に外れ値です。

それで前回は終わりました。

今回やること

  • 闇の365243を倒す
  • 変数の相関係数を調べる
  • カーネル密度推定を使ってtargetとの相関を表示させる

今回は主にこの3つです。最初の方はグラフが収まりきってないものがありますが、ご了承下さい…

闇の365243

多分外れ値である365243が無かったらどうなるのかと見てみます。

一番上のコードは次で使うので書いておきます。

365243を欠損値として扱い、プロットします。

なぜかグラフの端写ってませんが……

0に近くなればなるほど多くなってます。良い感じの上がり方です。

次は外れ値の数を見ます。

5分の1くらいが欠損値になりました。

相関

相関係数の目安です。

0.7~1かなり強い相関
0.4~0.7やや相関あり
0.2~0.2弱い相関
0~0.2ほとんど相関無し

ではさっきのデータの相関係数を見てみます。

ソートさせて小さい順に並べ、マイナスの相関とプラスの相関で表示します。

結果は長いので別にします

全体的に低い……

年齢のやつはマイナスのデータなので絶対値を取ってプラスにして相関係数を取ってみます。

歳を取るにつれて期限内にローンを返す傾向がありますね…

歳の分布をみてみます。

 

この年齢の分布は異常値が無いことしか伝えてくれません。そこで、年齢の影響も加えてプロットできるそうなのでやってみます。

まぁ年齢に1000歳とかあるわけじゃないのでこれについては外れ値はありません。(当たり前

次はカーネル密度推定を使ってなめらかなグラフを作ります。

targetと年齢の相関関係です。

カーネル密度推定についてわかりやすい記事

seabornのkdeplotでカーネル密度推定の可視化が出来ます。

targetが1のときは30歳から減っています。 0のときは微妙なグラフです…

次は、別の方法でこのグラフを作ってみます。

データを分割させて、ヒストグラムのように…

【pd.cut()】

指定した領域にデータを分割し、格納する。

bins=で領域区間の指定ができる。

良い感じですね!

ヒストグラム風になるのかなぁと思っています。

Matplotlibで前のようにはみ出てしまうときは、

plt.savefig(“Failure to Repay by Age Group”, bbox_inches=’tight’)

このように最後に bbox_inches=”tight”を付けるとちょうどうまく入ってくれます。

このグラフ本当に階段状ですね…

縦軸は返済しない割合なので、若者ほど払わない人が多いんですね しかも12%も…

負の相関

さっきあった負の相関をもう一度貼ります。

負の相関が強い3つは EXT_SURCE_3, EXT_SURCE_2, EXT_SURCE_1です。

こっちも相関係数をとって詳しく見ていきます。

次はみんな大好きヒートマップに…

これらEXT_SOURCEの変数とtargetは全て負の相関が見られます。

つまり、それらの変数の値が大きくなればなるほどtargetは小さくなるってことです。

そして、さっきのようにカーネル密度推定で滑らかにtargetの分布を見ます。

今度は3つ同時にグラフ作成するので、forで回して、subplotで下に表示させるようにします。

これを見るとEXT_SOURCE_3がtargetとの差というか山が違っていて良いデータかと思われます。

相関係数としては弱い方ですが、機械学習においては有能になるのかなぁと思います。

まとめ

  • カーネル密度推定を使うことで、滑らかなグラフが書ける
  • plt.savefig()の中にbbox_inches=”tight”を入れるとはみ出ずに保存される
  • 相関係数は負の数でも強い弱いはある(説明変数が大きくなると目的変数が小さくなる

このような感じでしょうか。

後1回程でこのKernelも終わります。

相関係数を取った上での変数の可視化は非常に大事です。

お読みいただいてありがとうございました。

COMMENT

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です