SIGNATEで10万円を目指した話
機械学習を勉強し始め、何か成果が欲しいと考え始めたときKaggleそしてSIGNATEに出会った。
コンペに参加して結果が出るまでの所感を振り返っていきたいと思う。
参加したコンペはリンクより。
経緯
8/5
参加を決意。コンペの優勝賞金は何と10万円!という額も魅力的だった。
チュートリアルが終了
暫定評価:0.6099554
8/7
前処理ある程度実施して結果を確認。
この前処理が思ったより大変だった。
半角スペースや、一行に複数の値が混合していたり、半角と全角があったり、誤字脱字があったり、ほんとにそんな間違いするか?と思いながら、苦戦した。でも、ぐっと評価も上がりうれしかった。
暫定評価:0.8096017
8/9
同僚とチームを組んでみる。
8/11
LightGBMと出会い、ローカルでのスコアがよかったのに、投稿して暫定評価を見るといまいちで不思議に思う。
8/12
欠損値の補完にチャレンジしたk近傍法(k-NN)と出会いそれを試していく。
欠損値を埋めるために他の欠損値を埋める必要があり、矛盾しながらも図や表を作成しながら、平均値や中央値、k-NNを使用して補完。
大切そうな値は、k-NNという振り分けで行った。
評価も上がり、当時は、100位近辺で喜んだ。
暫定評価:0.8268088
8/13
暫定評価とローカルでのスコアに差が開いているのが気になりだしたので、クロスバリデーションの実装を行う。
8/14
社会人夏休み期間で投稿数が増えランキングがすごいスピードで下がり落ち込む
8/17
アンサンブル学習やハイパーパラメーターのチューニングを無作為に行う。
特徴量を作り出したりもした。
8/18
SMOTEというオーバーサンプリング手法に出会い試していると自分の中で壁になっていった0.82の壁を超える。
そして、ここが間違いの始まり。。。
暫定評価:0.8374942
※最終評価:0.8223802と実はあまりいい結果ではなかった。味を占めた私は、ひたすら、ハイパーパラメータのチューニングを膨大な時間をかけてやってしまう。また、LightGBMは過学習のリスクがあると知りながらも、それ以外考えられなくなってしまう。
8/25
アドバイスを聞いて、特徴量の相関が高いものを削除したり、PCAで特徴量を統合したりした。スコアが微増した。
暫定評価:0.8393088
8/28
特徴量の見直しで欠損値を発見してそこを補完する。
8/29
変更した特徴量でハイパーパラメータのチューニングを行うとローカルの評価:0.83と暫定評価:0.84のスコアが出て小躍りする。100以内に入りブロンズとれると思っていた。。
暫定評価:0.8425245
ローカルでの評価
分割数5のクロスバリデーションの評価
LightGBM (Cross-Validation):
accuracy: 0.8757 (± 0.0095)
precision: 0.6845 (± 0.0775)
recall: 0.2658 (± 0.0458)
f1: 0.3823 (± 0.0592)
roc_auc: 0.8308 (± 0.0227)
今思うと偏差が0.07等があり、ばらつきがここでも出ている。
8/31
ブロンズ圏外に押し出される。焦る。
~9/1
素晴らしいハイパーパラメータを求めてひたすら回す。しかし時間は過ぎていく。LightGBM Tunerと出会う。
9/2
結果確認コンペ終了
8/29の暫定評価の一番よかったものを提出するが最終評価:0.8244711となっており、ショックを受ける。。
最終結果としては 631/1,226という結果でした。。(思ったより悔しい結果となった)
以下は、日付に対してのグラフ、8/18日から、暫定評価と最終評価が乖離している。
便利だった技術?
・Google Colabとローカル環境どちらでも使用できるようにしておく。sys.modulesを使用して、Google Colabかどうかを判断して保存や読み込みを行う。
・前処理はChatGPTに聞く。チュートリアルにもあったが、前処理の方法など分からないときは積極的に聞いていく。
・ !jupyter nbconvert --to markdownコマンドで、ノートブックをマークダウン形式に変更する。chatGPTにソースを確認させたいときに便利
・jupter notebookをブラウザで動かすよりもvscodeで動かした方がいい。長くハイパーパラメーターをチューニングさせていると、webページがnotefoundになってしまい、再接続の方法が分からなかった。その点、vscodeは、時間を空けても問題なかった。
今後試してみたいこと
・Gitを使うことでこういう振り返りもさらにやりやすくなったのではないかと思う。
・特徴量とパラメーターとスコアの関係が最後の方はあやふやになってきたのでMLflowを使用してみて、整理できるのか試してみたい。
MLflowとは何か - Qiita
まとめ
最終結果は631位/1,226人中と、目標には遠く及ばず、悔しい気持ちでいっぱいでした。しかし、この経験を通して、機械学習の実践的なスキルを身につけることができました。データの前処理からモデル構築、評価まで、一連の流れを体験できたことは、大きな財産です。
特に、過学習の恐ろしさを身をもって知ることができたのは、今後の機械学習ライフにおいて非常に重要な教訓となりました。
今回のコンペで得られた学びを活かし、次の挑戦では、リーダーボードに惑わされず、データと真摯に向き合い、より良い結果を目指したいと思います。
この記事が気に入ったらサポートをしてみませんか?