先月kaggleのChild Mind Institute - Detect Sleep Statesという時系列系のコンペに参加しました。
このコンペは、子どもの睡眠データ(睡眠中の体の角度、感情指標(enmo))に基づいて、入眠(onset)と覚醒(wakeup)のタイミングを予測するコンペです。こういった予測によって、睡眠パターンをより深く理解し、睡眠障害の解決に役立てることが期待されています。
私の解法と学んだことについて共有します。
一般的な機械学習の予測コンペであり、流れは以下の通りです。
1.前処理
→特徴エンジニアリング
→交差検証(kfold)
2.トレーニング
3.アンサンブル
→Spec2DCNN、DETR2DCNN、CenterNet、transformers.AutoModel、DebertaV3の5つモデルを組み合わせました。
交差検証とアンサンブル、あと一部の特徴エンジニアリング(時間帯を分ける処理とか)は基本的な手法を適用しました。(これらの処理を一通り全部行えば、Top15%くらいに入ります)
今回精度が出して、特に効果的だった特徴量エンジニアリングは、「体の角度の変化量」と「感情指標の変化量」です。体の角度と感情指標それぞれ現在値と5分前、25分前、50分前よりの変化量、合計6つの特徴量を追加しました。
これらの特徴量を追加したことで、精度が大幅に向上しました(0.71⇒0.74)。
そこまですごい手法ではないと思いますが、今回のコンペでの鍵となりました。(最終的に銅メダルを獲得しました)。
ちなみに、"Polars"というライブラリが多くの方が使っていることにも気づきました。
Polarsは大量の表形式データの処理に特化したライブラリで、Pandasより処理速度が格段に速いです。
今回のデータは1億件以上ありますので、Pandasだと時間内で処理完了するのが難しいと思います。(Polarsの書き方は少し特別ですが、慣れたら見やすいと感じました。)
コンペ:
参考になったコード:
Polars: