挑戦の経緯
未経験からデータ分析の仕事に転職して1年経ったところで、E資格の勉強をはじめましたが、講義動画はどうしても眠くなりがちでいまいち頭に入ってこない状況でした。
そんなときに、Kaggleで磨く 機械学習の実践力--実務xコンペが鍛えたプロの手順を読み、やってみようというのがきっかけでした。
機械学習に興味はありつつも実務ではなかなか機会がなく、資格取得を含めて勉強しようとしていたのですが手を動かして勉強したほうが楽しそうだと思いkaggleにチャレンジすることにしました。
挑戦したのはこちらのコンペ
American Express - Default Prediction
アメックスの会員が将来デフォルトするかを予測するというものでした。
テーブルデータコンペかつ、参加者も多いことから取り組みやすそうだなと思いこのコンペを選びました。
苦労と学び(=楽しみ)
1.いきなりメモリーエラー...
まずはベースラインを作ってみようという本の内容に従い、コンペにエントリーしてさっそくデータセットを読み込もうとしたところ、メモリーエラーで読み込めないという事象に陥りました。
2.先人のノートブックを参考
XGBoostの公開ノートブックを見つけたのでこれをベースに修正していくことにしました。
上位の方のコードは読みやすく、意図と処理が理解しやすく勉強になります。
こちらのコードではデータセットが大きすぎて読み込めない点は、他の方が作成したparquet形式の公開データセットを利用するようになっていました。
3.ハイパラのチューニング→スコアアップ!
見様見真似で
'max_depth'
'learning_rate'
'subsample'
'colsample_bytree'
などのハイパーパラメータを動かしては学習→バリデーションを繰り返してはスコアの変化を確認しました。
いろいろ動かしてみて頭打ちとなったところで特徴量の生成に移ることにしました。
4.特徴量の作成→スコアアップ!
仮説を立てて特徴量を作成しては学習→バリデーションを繰り返しました。
ほとんどのケースではスコアは上がらなかったのですが、自分で考えて作った特徴量をモデルに組み込んでスコアが上がるのはうれしく、楽しいものでした。
仮説を検証するために目的の処理をPythonでどのように実装するのかというのを調べて書いていくのは勉強になりました。
5.またしてもメモリーエラー...
コンペ終了日前夜まで特徴量生成をあれこれ試した挙げ句、これでスコアが上がらなければ終わりにしようというところで、バリデーションのスコアが自己ベストを更新しました。よしこれをサブミットして終わろうとした矢先に、テストデータの読み込みでメモリーエラーに陥りました。
あれこれ変数を削除して gc.collect()
を実行しても解消されず、、、
最終的には学習したモデルを書き出した上で、ノートブックを再起動、モデルを読み込み、テストデータを読み込みでなんとか乗り越えることができました。
メモリーエラーで始まり、メモリーエラーで終わるというkaggle初挑戦となりました。
結果は4875チーム中、2320位という結果に終わりましたが、とても楽しかったです。
やって見る前はそんなにハマるものだろうかと思っていましたが、やってみるものですね、ハマりました。
kaggleに限らず、NishikaやSIGNATE、ProbSpaceなど国内でもいろいろなデータ分析コンペのプラットフォームがあるようなので、また違うコンペに挑戦してみようと思います。