4th Place Solution
運営の皆様、参加者の皆様ありがとうございました。
既に上位の方々もSolutionを公開されており、特別自分のアプローチが特殊だとは感じませんでしたのであまり長くならない程度に簡単にやったことの箇条書きだけさせていただきます。
Feature Engineering
- 基本皆さんと同じようにlikes/dislikes/omment_count系の四則演算と、ChannelIDやCategoryId, disabledなどのグループ毎のAggregation特徴量です。
- グループ内でのRanking特徴量などもけっこう効いてました。
- titleやdescriptionなどテキスト特徴量に対しては、tfidfなどは使いましたが、せっかくなのでBERTも試しました。特に日本語のものに対しては、目視なども駆使しクリーニングしたのち日本語BERTを使い特徴量抽出してKmeansクラスタリングを行い、そのクラスに対してAggregation特徴量などを作りました。他の方で「性能に寄与しなかった」とありましたが、自分にはちょっとだけ効きました(cv: 0.003くらい)
- あとは画像系からの特徴量を使ってみたいと考えてましたが、画像系の経験が少なく画像認識モデルなどは使えませんでした。代わりに、サムネイルリンクから取得した画像をいくつか眺めていると、サムネ画像が削除されているもの(よくyoutubeで動画が削除/停止されている時に見るグレイの画像)があったため、それらはフラグを立てAggregationしたりしました。またサムネイルURLを見ていると、ほとんどがdefaultというファイル名ですが一部default_liveという名前のものがあり、これらは名前から察するにライブ放送だ(渋谷スクランブル交差点の定点カメラとか)ということで少し傾向が違うと思い、これもフラグを立ててAggregationしたりしました。dislikes系と比べると影響度は低かったですが少しだけ効いていたこともあり面白いかなと思い最後まで使ってました。
CV
他の方のSolutionでもありましたように、yのbinを切ったStratifiedKfoldです。
Feature Selection
Null Importanceを使用しました。
Modeling
senkin13さんとBIZENさんチームの1st Solutionにもあるように、dislikes数などは再生回数とかなり相関が高い&disabledされているものはvalidationの精度が低かったので、diaabledされているdislikes数などを予測し、予測に使いました。これが自分の中でもCVとLB共に良かった気づきだったと思います。
シングルモデルとしてはLGBM, XGB, Catboostを試しましたが、自分の環境ではCatboostが一番良かったです。次にXGBで、LGBMは今回は微妙でした。
特徴量セットもいくつか作り20個ほどCatboostとXGB, NNでモデルを作り、Stackingを行いました。
簡単で恐縮ですが、以上です。ありがとうございました。
(あまり分析周りの知り合いがいないので、またどこかで見かけたらチームとか組んでくれたら嬉しいです..プロフィールにtwitterは貼っているのでどうぞ気軽にフォローしてください..)