Lifeおわりにはじめに過去コンペまとめ記事の二作目です。Predictionをまとめたいと思います。ChallengeというNLPコンペについてまとめたので興味のある方はこちらの記事をご覧ください。他者のアイディアや解法を読んでいるだけで面白いですし勉強になるので、思い返すとここ一週間は過去コンペばかり漁っていたような気がします。飽き性ではありますが今のところは週一本ペースでまとめ記事を書くことを目標にしているのでどうぞよろしくおねがいします。Seguro(ブラジル最大の自動車保険および住宅保険会社の一つ)が開催する保険金請求予測コンペです。翌年に保険金請求するか否かを予測することは、保険料や保険金を設定する上で非常に重要です。以下の通りで、参加チームは5169チームと非常に多く人気のコンペであったことがわかります。5,864データの種類とタスクテーブルデータを用いた2クラス分類問題です。連続変数・カテゴリ変数・バイナリ変数で構成されており目的変数も2値なので、よくあるデータ形式だと思います。データサイズが小さい、タスクは2クラス分類と一般的、データがきれいなどの理由から初学者にも取り組みやすいことが人気につながったのかもしれません。正例データのサンプル数が少ない不均衡データで、目的変数の分布は下図のとおりです。画像は後ほど紹介しますが、ここから拝借しました。不均衡データの扱いは少し厄介ですが、これも良くあるケースだと思います。データサイズは以下の通りで、テーブル数は2つでサイズも小さめです。58ちなみにtrain.csvのheadはこんな感じです。(カラム数が多いので適当に選びました)連続変数とカテゴリ変数の両方があり、カラム名から変数の意味はわかりません。ind(18種)、reg(3種)、car(16種)、calc(20種)の計57種類です。各カラムの意味は公開されていないため、データの意味や傾向は集計やモデリングを通じて理解していく必要がります。Coefficient)です。標準化ジニ係数は0〜1の値を取る評価指標で1に近いほど良いです。この指標の直感的理解にはこちらのkernelが役立ちます。一応、コンペ概要ページにも簡単な説明があります。提出のフォーマットは以下のとおりです。idごとに保険金請求する確率を以下のように出力します。Discussion上位解法ほどのスコアは出せませんが、kernelとdiscussionは良いアイディアと実装で溢れています。どのアプローチも勉強になったので簡単にまとめておきます。最後に紹介しているtkmさんのyoutube動画は、これからkaggleを始めたい方にとてもおすすめです。スケーリングまでが簡単にまとめられています。以降の解法を読むにあたって簡単にデータを確認しておきたい方には見ておくことをおすすめします。特徴抽出ではカテゴリ変数をダミー化することに加えて、sklearnのPolynomialFeaturesで変数間の相互作用を表現しています。特徴量選択ではsklearnのVarianceThresholdやSelectFromModelを用いた方法が紹介されており、とても参考になります。Kagglexgboostによるモデリングが紹介されています。特徴量抽出やモデリング自体に特に工夫は見られませんが、モデリングする上で必要最小限のコードでテーブルデータコンペ初学者におすすめです。samplingについてまとめられています。learnを用いた手法まで図を用いて直感的に説明されています。sampling(SMOTE)の説明はあまり目にしないため非常に参考になりました。kernelの最後にはおすすめの文献も紹介されており個人的にお気に入りのkernelです。encodingの実装と評価が紹介されています。encodingの実装は単純に目的変数の平均値を求めるのではなく、smoothingやnoise機能が考慮されていて非常に勉強になりました。encodingが有効であることがわかります。KagglePCAとtSNEを用いた次元圧縮と可視化が紹介されています。手法の説明はありませんが図が多く考察部分の説明が丁寧なので、初学者でも十分理解できると思います。前処理の有無による結果の違いも紹介されていて参考になりました。今回のデータセットは正例・負例の分離が難しいことを結果から確認できます。dataに対するtSNEの挙動についてはこちらのdiscussionで紹介されています。lightgbmのパラメータチューニングが紹介されています。最適化手法の説明は無く、探索するパラメータも少ない(実用するには探索項目が少ない)ためこれだけ真似しても使いこなせるかどうか怪しいところですが、サンプルスクリプトがまとめられている点で有用だと思います。lightgbmでデータの渡し方が微妙に異なるので)最近では同じくハイパーパラメータチューニングに使用するoptunaというライブラリが公開されているので、興味がある方は本記事の後半で紹介する日本語の記事を御覧ください。Kaggleシルバーメダル相当のstackingモデルのスクリプトです。このkernelはコンペ終了後に公開されたそうでスコアも良い非常に強力なkernelです。Ensembleクラスにまとめられています。stacker2の3層(数え方が分かりませんがここでは3層ということで)のstackingが実装されており、stacker_1の学習はmode引数で2種類の方法を選択できます。stackingのアイディアを知っている方なら実装もすぐに読めると思うので気になる方は是非読んでみてください。個人的に最も勉強になったkernelです。embeddingの実装です。layerでカテゴリをベクトル表現したものと量的変数にDenseを通したものを全てconcateして、後段のDenseとdropoutにつなげています。solutionと似た解法です。solutionで紹介されており論文も公開されています。Kaggle今回コンペの評価指標である標準化ジニ係数とジニ係数を簡単な数値例を交えて紹介しています。Programmingで作成した特徴量を使用したkernelです。GPの特徴量を見たときは「これが黒魔術か...!!」と驚いた記憶があります。kernelには特徴量作成ロジックについての言及はありませんが、upuraさんが以前ブログに書いていたので実装に興味のある方はこちらを参考にすると良さそうです。入門動画が共有されています。Search、xgboost)、submit方法などがわかりやすくデモ形式で紹介されています。私はこの動画のおかげでkaggleに入門することができたのでとても感謝しています。この他にも、BigQueryでkaggle入門動画がyoutubeに上がっています。Seguroコンペと直接関係はないのですが、私がBigQueryを使うきっかけとなった動画で「BigQuery気になってるけど、まだ使ったことない」という方にとてもオススメです。個人的にとてもお世話になった動画たちなので目立つリンクを貼っておきます。LightGBMとNNのアンサンブル解法が目立ちます。テーブルコンペの定石であるLightGBMにモデルの多様性を意識したNNモデルを用意できるかが一つポイントだったのかもしれません。3rdで全く解法が異なっているため読んでいて楽しかったです。3rdまでの解法をまとめたいと思います。NN×5(これとは別に特徴量抽出用にNN×5)で各モデルのパラメータ設定は表のとおりです。autoencoder)による特徴量抽出をしています。予測時には6つのモデルの平均値を求めたそうです。DAEで表現学習をする前に、最低限の加工としてcalc系のカラムを全て除外し、カテゴリ変数をダミー化しています。noiseで一定の確率で別レコードの値で入れ替えることでノイズとしたそうです。スケーリングはRankGaussを使用したそうです。RankGaussの説明はこのサイトが参考になります。DAEの学習にはtrainとtestの両方を使用しており、testが多かったことは好都合だったとのこと。scoreにはあまり効果がなかったようです。予想外だったとのこと。CVで、localCVの結果が改善された時だけsubmitしていたそうです。Boatさん解法をまとめます。LightGBMとNNのモデルを作成したようです。Kaggle以下の特徴量を追加して予測を行ったようです。Kaggle以下の特徴量を追加して予測を行ったようです。StandardScalerを使用していました。upで3位入賞した解法です。upを狙っていたそうですが本人もさすがに驚いたようです。モデルはlightgbm×1とNN×1のアンサンブルと非常にシンプルで、正直モデルの強みや特徴がどこにあるのかよくわかりませんでした。モデリングの特徴を箇条書きでまとめます。ネットワーク構造はあまり重要ではなかったとのことその他の上位解法discussionは解法の宝庫ですね。余力がある方はこちらもぜひ。モデルについて紹介しています。コードや考え方を初心者でわかるようにQ&A形式で説明されていてわかりやすいです。Seguroコンペの参加記録を書いています。こちらもQ&A形式で説明されていて非常にわかりやすいです。Seguroコンペのデータを使ってOptunaでLightGBMのパラメータチューニングをしている記事です。Seguroコンペについてまとめました。テーブルコンペでもNNが積極的に使用されていることは驚きでした。3rdで全く異なることから察するに、NNの定石はまだできていないのかもしれません。他のコンペの解法も眺めながら傾向を掴んでいきたいです。次回はメルカリコンペかAvitoあたりをまとめるつもりですのでそちらも読んでいただけると励みになります。まとめ月別アーカイブmathjaxはてなブログをはじめよう!copypaste_dsさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。