7th Place Solution
はじめに
皆さまprobspaceの「YouTube動画視聴回数予測」お疲れさまでした。
今回のコンペはCVとPublicLBとPrivateLBすべてが上手く連動しており、非常に面白みのあるコンペでした。
ここまでコンペを盛り上げて下さった参加者及び運営の皆様に感謝申し上げます。
またこの投稿自体が初めてなので至らぬ点があると思いますがどうかご容赦ください。
作成した特徴量
特に有効だった特徴量を簡単に箇条書きで書いていきます。
- channelIdをvalue_count
- comments_disabled・ratings_disabledがTrueのデータを線形回帰で元の特徴量に補完(両方がTrueの場合は補完しない。)
- likes・dislikes・comment_countをchannelIdを元にgroupby。(sum, mean, max, min, std)
- また上記の特徴量とyををchannelIdを元にgroupbyし相関係数を特徴量にする
- pastをchannelIdを元にgroupby。(max, std, skew)
- past・categoryIdをchannelIdを元にgroupby。uniqueを利用しそれをlen()で数値化
- categoryIdをtarget_encordingしそれをchannelIdを元にgroupby(mean, max, min)
- title・describe・channelTitleの含まれている英語の数及び割合
- tagsの中で出現頻度が多いtagを700個程度抽出しダミー変数に変換
※ train["past"] = (train["publishedAt"].dt.floor("D").max() - train["publishedAt"].dt.floor("D")).dt.days
また基本的にgroupbyはtrainとtestをまとめてやってます。comments_disabled・ratings_disabledがTrueのデータは集約から外しています。
モデル
LightGBM単体のモデルではcv:0.721 , publiclb:0.717, privatelb:0.720となりました。
データセットはtagのダミー変数があるものとないものの2つ作成し、lightgbmとxgboostとcatboostに訓練させ、またそれぞれ5つのseedで平均をとりました。これにより合計30個のモデルを作成しました。
最終的に
lightgbm_emsemble = lightgbm×0.55 + lightgbm_drop_dummy×0.45
xgboost_emsemble = xgboost×1 + xgboost_drop_dummy×0
catboost_emsemble = catboost×0.65 + catboost_drop_dummy×0.35
上記のアンサンブルを作成しそれをさらに
lightgbm_emsemble×0.5 + xgboost_emsemble×0.1 + catboost_emsemble×0.4
の割合で作成した予測値でcv:0.716 , publiclb:0.714, privatelb:0.713
を達成しました。
最後に
このような手法でで7位をとったのですがPrivateを見ると7位と6位の差が結構激しいのでどの様な点で差がついたのかが気になっています。
上位陣はどの様な解法でPrivateに合わせられたのでしょうか?
また気になる点等があればコメントしていただければと思います。