機械学習

Kaggleの車の保険料の予測【MLC第9回】

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

先日から色々ありましたが、終わったコンペの方が情報が多かったり情報共有できるため既に終わったコンペをやろうと思います。

その中で何のコンペをやろうと考えましたが、深層学習にはまだ早いと考え線形回帰等のものをやろうと思います。

そこで、これからは

Porto Seguro’s Safe Driver Prediction

こちらです。Kaggleで数ヶ月前に終わったコンペです。

補足がてら

このコンペではブラジルの最王手の保険会社が主催しています。事故が少ない良いドライバーの保険料は下げて事故が多いドライバーには保険料を上げることが理想です。

人間がそれをやるとデータを見てじっくり考えるため時間がかかるため、機械に任せます。そこで運転手の様々なデータから最適な保険料を決めて下さい。というコンペです。

参考とするKernel

Interactive Porto Insights – A Plot.ly Tutorial

このKernelを参考に進めていきます。

ライブラリから

ある程度は見たことありますが、最後の行

warnings.filterwarnings(‘ignore’)

ここではPythonで実行には影響ない原因不明のエラーを表示させないという命令をしています。

Pythonで廃止予定のエラーを消すとも言われていますが、原因不明で直るはずのないエラーで別に実行には影響無いのなら消しても問題ないということでしょう。

データ読み込み

ここは普通です。

train.head()を見てみると…

59もカラムがあるんですね…

行数と列数を見てみる

2次元配列の場合には、

shape[0]が行数

shape[1]が列数になります。

行数はとても多いですが、これでも普通より少ないくらいかなと思います。

データの吟味

データを詳しく見ていきます。

欠損値、Null値のチェック

欠損値があるかないかの判定にはnumpyのinnull()を使います。

any()では1つでも含まれていたらTrueを返し、含まれていなかったらFalseを返します。

ここではany()を2回書き、行と列両方検出させています。

結果がFalseになったので、このデータには欠損値やNullがありませんでした。

ありがたいデータですw

しかし、

Dateの説明

こちらを見て下さい。

 Values of -1 indicate that the feature was missing from the observation. 

要約:-1だったら欠損値

完全に見落としていました。ということなので、-1をNullにします。

コピーを取ってやります。

replaceで文字を置換しています。

次に、欠損値を可視化させます。

KagglerのAleksey Bilogur氏が作った、Missingnoというパッケージです。

白い帯は欠損値を表しています。これを見ると_catには欠損値がたくさんあるということがわかります。特にps_reg_03, ps_car_03_cat and ps_car_05_catには注意を払わなければいけません。欠損値の量がとても多いです。

こんなに欠損値があるのならNullを-1に替えるのはあまり良いことでは無さそうです…

目的変数のチェック

目的変数(target)の分散を調べます。

ここでは、動くグラフを使うので詳しいことは

[Python] Plotlyでぐりぐり動かせるグラフを作る

このQiitaの記事がわかりやすいと思います。

僕のようにJupyter Notebookを使用していない場合には、

を最後の行に書き加えれば大丈夫です。

Webページにこのようなグラフが表示されます。

これを見ればわかりますが、目的変数はかなりアンバランスです。

データタイプ

データの型を調べます。

Counterは名前の通り、カウントします。まとめてくれるって言ったほうが的確かもしれません。

整数と浮動小数点型のみでした。

整数と浮動小数点型にまとめてこれからのデータの吟味を楽にします。

相関係数の可視化

浮動小数点型

seabornを使ってデータの相関係数をヒートマップにします。

今は浮動小数点の方をやります。

../../_images/colormaps_reference_00.png

color example code

Matplotlibのサイトにある、色のサンプルコードです。

今回は下のmagmaを使用します。

corr()で相関係数を取得できます。

大多数は黒(相関係数が低い)ですが、所々明るい色があります。

相関係数が高いもの(相関係数が0.5以上

(ps_reg_01, ps_reg_03)

(ps_reg_02, ps_reg_03)

(ps_car_12, ps_car_13)

(ps_car_13, ps_car_15)

整数型

整数型の相関係数をヒートマップにして可視化させました。データが非常に多いので、見づらいですw

しかし、相関係数が低いものがとても多いです。つまり、59カラムもある大量のデータでも使うデータはほんの少ししか無いということです。あるデータを全て突っ込むより本当に必要なデータのみを突っ込まないとスコアは低くなります。

正の相関のものがいくつか見られますが、前にあった欠損値が非常に多かったもののようにデータの真実を見ていなければこのような結果でも驚くことはありません。

次回

今回はここまでです。

次は、上の整数型の必要なデータを取捨選択します。

ここまではまだ易しいほうかなと思いますが、これからは結構難しくなるのでゆっくり調べながら記事を書いていこうと思います。

機械学習といってもこのようなデータの品質を見ていくことの方に力と時間を掛けなければ行けないということがわかってきます。

モデル作りよりも前処理等の方が時間がよっぽどかかります。前処理にも色んな方法があるので、色んなコードを参考に学んでいけると良いと思います。

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

COMMENT

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