こんにちは。アナリティクスコンサルティングユニット所属の尾村と内田です。
2023年9月~12月にかけて、Kaggleで開催されたChild Mind Institute - Detect Sleep Statesコンペに2チームで参加し、金メダルと銀メダルを獲得することができました!
本ブログでは、コンペの紹介と、どのような手法が有効であったのか、ご紹介したいと思います。
コンペの概要
リストバンド型の加速器センサのデータを使用して、就寝と起床のタイミングを予測する精度を競うコンペでした。
加速器センサのデータは5秒間隔で記録されており、腕の角度(anglez)と加速度(enmo)の2種類の値のみが与えられました*1。
参考程度ではありますが、以下に学習データ内のあるユーザー(ID: 038441c925bb)のanglezとenmoのデータを示します。
解法
共通のアプローチ
リーダーボード上位陣の多くは独自のアプローチをしています。一方で、モデルの精度向上のために共通して取り組んでいるアプローチもあります。例えば、上位陣の多くはアーキテクチャとしてCNNなどの深層学習モデルを使用するなどです。
ここでは、CodeやDiscussionで言及されていた中でも、我々も含めて多くのチームが採用していた「ソフトラベリング」「睡眠ラベルの追加」「後処理の工夫」について簡単に説明します。
ソフトラベリング
本コンペで使われた評価指標は、正解ラベル周辺を含めて評価するような指標でした。この指標に対応するために、就寝と起床それぞれの正解ラベルをソフトラベルに変換するようなアプローチが大半のチームで採用されていました。
睡眠ラベルの追加
就寝時点と起床時点以外にも、ある時点で睡眠しているかどうかをモデルに学習させるために、就寝と起床の期間を睡眠中、それ以外を活動中とした睡眠ラベルを含めた3種類のラベルを使ったアプローチが多くのチームで採用されていました。
後処理の工夫
リーダーボード上位陣ではモデルの予測値に対して、何かしらの特別な後処理をしているだろうとDiscussionでも度々話題に上がっていました。後処理の方法としては、機械学習モデルを使った方法やルールベースの方法などが上位解法で紹介されており、それぞれのチームで独自の後処理を実装しスコアを上げていることが確認できました。
尾村・内田チーム(17位)
このチームで大きく予測精度に寄与したと考えられる要素は、「特徴量」「モデルアーキテクチャ」「予測区間」「後処理」の4つでした。各項目について簡単に説明します。
最終的に、深層学習モデル10種類を加重平均でアンサンブルした結果が最も良く、CVが0.812、Private LBが0.822でした。
特徴量
曜日によって就寝や起床の時刻が変わる可能性があると考え、weekdayを与えることで精度に寄与しました(CVで+0.004程度)
他にも、上位陣の一部がしていたように、anglezとenmoの差分絶対値や移動標準偏差なども使用していました。
モデルアーキテクチャ
公開されているモデルアーキテクチャ(Unet 2D + Unet 1D)に加えて、
Parkinson's Freezing of Gait Predictionコンペの上位解法のモデルやTimeNetを使いました。
最終的にアンサンブルに利用したモデルは以下に箇条書きで出典とともにまとめています。
- Transformer + LSTM(Parkinson: 1st place solution)
- Stacked GRU(Parkinson: 4th place solution)
- WaveNet(Parkinson: 5th place solution)
- TimeNet([1706.08838] TimeNet: Pre-trained deep recurrent neural network for time series classification)
予測区間
本コンペで扱ったモデルは、予測させる区間が固定長になる必要があったため、モデルに予測させる時間幅は精度に大きな影響があり重要でした。
ユーザによってデータの開始時刻はばらばらですが、夕方から夜に集中していました。24時間区間で予測をさせると、就寝と起床の大半が収まるだろうと考え、どのモデルでも24時間区間で予測させていました。24時間区間で予測させることは実際に上位陣の多くがしていたことでした。
また先述したように、データの開始時刻は夕方から夜に集中していたため、予測させる区間の開始時刻が夕方から夜になるようにずらして学習させることで精度向上に寄与しました(CVで+0.003程度)。
後処理
いくつかのDiscussionで言及されていたように、提供されたデータセットには全く同じ特長量が一定間隔で繰り返す部分が多分に含まれていました。
この”repeating”の原因について、運営側から明確に言及されていませんでしたが、欠損している部分を補完するためにこのような処理をしているのだろうと考え、”repeating”部分の予測確率を0にするような後処理をしました。
結果として、CVは0.007改善しPublic LBは0.001上昇しました。Private LBは0.008上昇したためshake-upに大きく寄与したと考えられます。
米川チーム(13位)
こんにちは。データエンジニアリングユニット所属の米川です。
私は社外の方4名とチームを組み、金メダルを獲得することができました。
チーム解法についてはこちらに概要が記載されていますが、その中から重要だった取り組みを紹介させていただきます。
重複フラグ
尾村・内田チームの取り組みで言及されている"repeating"の範囲を0-1のバイナリフラグで表現したものになります。弊チームも序盤は尾村・内田チームと同じように後処理で"repeating"に対処していました。しかし、終盤にてこの重複フラグを後処理ではなくモデルの入力として使用することで、後処理よりもスコアを大幅に改善できることがわかりました。
正解ラベルや評価指標の性質を考慮した後処理
正解ラベルや評価指標の性質を考慮した後処理は非常に重要な取り組みでした。
まず、正解ラベルにはラベル付けされたステップ数が必ず12の倍数になるなどの性質がありました。次に、評価指標には正解ラベルと予測ラベルの距離に対して特定の閾値(たとえば12ステップ、36ステップなど)が設定されており、各閾値内での正解ラベルと予測ラベルのペアの有無がスコアに強い影響を及ぼす性質がありました。
これらの性質を考慮し正解ラベルと予測ラベルの距離が12ステップ以内となるラベルペアの数が増加するよう、いくつかのシフト処理を適用することでスコアを大幅に改善させることができました。
最後に
ブレインパッドでは、自己研鑽としてSIGNATEやKaggleなどの外部コンペへの参加が推奨されており、社内のGPU環境を利用することが可能です。また、より多くのリソースが必要な場合には、クラウドコンピューティングサービスの利用が可能です(クラウド利用費用なども支給されます)。
その他、社内では、過去に行われていたコンペのコードを読む輪読会や、実際にコンペに参加した人からの知見共有会なども開催されています。ご興味のある方、ぜひ採用へのご応募お待ちしています!
*1:着用者の年齢や性別などの属性などは不明