はじめに
やっとテストが終わったので、DataScienceBowl2019の簡単なアウトプットでもしようと思います。今更だとは思いますが、初めてのコンペで、せっかく参加したので復習しようと思いました。
正直な話、初めてのコンペで手も足も出なかったので、上位入賞者の手法を簡単にまとめていきます。
まだまだ若輩者でおかしなところもあると思いますが、何かございましたら是非ご指摘お願いします。
※現在は2位までしかまとめていませんが、時間があればもう少し追加でまとめたいと思ってます。
コンペの詳細
- 10/24-1/23の間に開催されたコンペ
- 児童用教育ゲームのログデータの分析
- ゲームの最後にテストが用意されており、何回目の思考でそれをクリアするかを予測
1st place solution
summary
マルチシードの5Foldに基づくLightGBMのシングルモデル
private score: 0.568
public score: 0.563
Validation
初期の段階で、LBが不安定で local cv との相関が小さかったため local cv のみに着目することにした。
以下の2つの validation set を使用
- GroupK CV
- installation_idを5分割を5回
- 格分割で異なる列順序とseed値を使用
- qwkは安定しなかったので重み付きrmseを使用
- Nested CV
- GroupK CV が直感に反するような結果の時に使用
- 全データを使用した1400のユーザデータをtrainに、一部のデータを打ち切った2200のユーザデータをtest に使用
- 50〜100回繰り返して平均スコアをとる
Feature Engineering
およそ2万個の特徴量を作成して、null importancesを利用して500個の特徴量を選択。
- 多くの統計量。おなじassessmentか似たようなゲームに基づくものが特に重要だった。(ゲームが対応する同様のassessmentにマッピング)
- 履歴データを部分的に取り出して特徴量を作成。
- 全履歴
- 最後の5/12/48時間
- 前回のassessmentから現在まで
- 現在のイベントと次のイベントのインターバル。mean/lastをeventid/eventcodeでグルーピングして算出。いくつかはとても有効であった。
- clip event interval / clip length により算出した video skip 特徴量。
- event data に関する特徴量。eventid / eventcode の組み合わせの統計量から作成。
Feature Selection
- 重複した特徴量の削除
- adversarial AUC が0.5になるように adversarial validation
- null importances
Model
- すべてのデータを使って学習
- trainにはrmseを、validationには加重平均rmseを使用
- Optimizer Rounderを使って weighted qwk の閾値を調整
- 08lightgbm+0.2catboost の簡単なブレンディングを行ったが、local cv がよくなかったので最終モデルには使用していない
2nd place splution
summary
LightGBM, CatBoost, NN のアンサンブルモデル
public score: 0.563
private score: 0.563
Feature Engineering
- Word2Vec の利用
- assessment までの title の流れを文章と捉えて Word2Vec でベクトル化
- 各統計量を計算
- Historical feature
- session, world, types, title, event_id, event_code の履歴データをワールド別、または全ワールドごとにカウント
- event_round, game_time, event_count の履歴データの Count, mean, max を計算
- Decayed historical feature
- title, type, world, event_id, event_code について履歴データの減衰してカウント
- session ごとに半減
- Density of historical feature
- title, type, world, event_id, event_code の履歴データの密度を計算
- 各カウントを初起動日からの経過に数で割る
- Lagged Assessment
- num_correct, num_incorrect, accuracy, accuracy_group の統計量を計算
- 過去のassessmentからの経過時間を計算
- Meta Features
- 各titleのassessmentごとの評価を特徴量として追加
- それを予測して、その結果を新たに特徴量として追加
Feature Selection
- 重複したカラムを削除
- 相関がつよい特徴量を削除(0.99以上)
- 最終的に null importance で上位300のものを選択
Model
- validation用に1ユーザー辺り、1サンプルになるようにリサンプリング
- StratifiedGroupKFold(5Fold)
- RSA (5 random seed) of LGB, CB, and NN
- 0.5 * LGB + 0.2 * CB + 0.3 * NN でアンサンブル