KaggleのHome Credit Default Risk体験(サブミット編)

ビッグデータ分析、新卒年収は1000万円以上 東大生の人気職種に(産経新聞)

「官僚でもなく、有名企業でもなく、データサイエンティスト職を志望する東大生が目立ち始めている」(就職情報会社)。
滋賀大は平成29年度から、専門学部として全国初となる「データサイエンス学部」を新設。
横浜市立大も専門学部を開設した。東工大は今年4月から、全大学院生を対象にデータサイエンスとAIの教育を行うことを打ち出した。

AI専門家の大量生産時代が来ようとしています。

 

 

「Get started」の次のステップとされている「Playground」を体験してもメダルは出ません。

であれば、過去の「Featured」を体験して経験値を積むほうが早道です。

書籍も出ているようなので購入しました。

Kaggleで勝つデータ分析の技術

Kaggleで勝つデータ分析の技術

門脇 大輔, 阪田 隆司, 保坂 桂佑, 平松 雄司
3,536円(12/24 01:20時点)
発売日: 2019/10/09
Amazonの情報を掲載しています

ただ「ディープラーニング」や「自然言語」「画像・音声処理」に関する記載はなく、「まずはLightGBMで解け」というKaggleに特化した書籍になっています(Kaggleで勝つことが目的の本なので仕方ないです)。

 

 

過去の「Featured」として、まずはタイタニック同様の「分類」コンテストで有名な次の問題を解いてみます。

Home Credit Default Risk

このコンペは与えられた個人のクレジットの情報や以前の応募情報などから、各データが債務不履行になるかどうかを予測する問題です。

ただし、Titanicのように1ファイルではなく、複数ファイル(テーブル)でデータが与えられています。

[参考] 過去の機械学習関係の記事

今回はサブミットを目標する

「application_train.csv」には顧客一人一人の主要な情報(性別や家族の人数、ローンのタイプ(現金or資産運用など)、資産額、車の有無など)と、ある期間までにローンの支払いができたら「0」、できなかったら「1」のラベルがついています。

「application_test.csv」にはラベルが無く、このファイルのデータの予測が求められています。。

・・・・、とりあえず、これぐらいの理解で進めます。

探索的データ解析(データの理解:EDA)

データの特徴を確認してみます。

次にヒストグラムとヒートマップを確認します。

際立って相関のある特徴量はありません。

うーん、小さ過ぎてよく分かりません・・・。

特徴エンジニアリング(データの準備:前処理)

欠損値の補完と、変数の数値化(エンコーディング)だけ行い、学習データ80%と検証データ20%に分けました。

この辺りも、今まで作成した実装そのままです。

学習モデルの構築

とりあえず分類に関する機械学習アルゴリズム(ディープラーニング除く)を全て試してみます。

その中で最もスコアが高かった結果を利用してサブミットを行ってみます。

学習モデルの実行

実行時間は2時間ぐらい必要でした。

今まで、株のシステムトレードで2,3時間かけて計算していた事を考えれば待つのは苦ではないです。

SVCはアホみたいに時間がかかりました。

その他、GradientBoostingClassifier、MLPClassifier なども遅いです。

一方でLGBMClassifier は早かったです。

そして正解率「0.920」と高いので、KaggleでLightGBMが人気なのも頷けます。

今回は「CatBoost」が最も良い正解率となりました。

結果のサブミット

サブミットした結果「スコア 0.53662」となりました。

順位は終了コンペなので分かりませんが推定で「6812/7175 = Top 95%」という糞結果です。

[改良] サンプルの答えとフォーマットの違いに気づく

「sample_submission.csv」を見てみると「TARGET」が「1」「0」でなくて小数となっていました。

今まではpredictを用いたラベル予測をしていましたが、実際にはどちらのラベルに分類されるか確率で表す事が求められていたようです。

このため、学習モデルをpredict_probaメソッドを使って予測させます。

一列目が「0」である確率、二列目が「1」である確率です。

要するに、下記は同じ事を意味します。

この小数の答えをサブミットしてみたところ、「スコア 0.70639」となりました。

順位は推定で「6119/7175 = Top 85%」という結果です。

まとめ

サブミットを最初の目標として進めました。

まずは準備ができたので、今後は他のKernelなどを見ながらスコアアップを目指していきます。

・・・が、インクリメンタルな開発の方が自分には向いているのかな。。

一度サブミットしてしまうと、モチベーションが下がってます。

全スコアを見る限り「0.81」〜「0.79」に大量に集中しています。

細かいチューニングが鍵ですが、面倒そうだなあ。

よく遭遇するエラー

TypeError: list indices must be integers or slices, not str

【原因】

「indices」([]の中に入るもの)として渡されたものが文字列にも関わらず、listのindicesが整数かスライスではない。

ソースコード

スコアは低いですが、今回のコードです。

タイトルとURLをコピーしました