【要約】ランダム分割で 70%、GroupKFold で 45% ―― CNC 工具摩耗データで見る交差検証のデータ漏えい [Zenn_Python] | Summary by TechDistill
> Source: Zenn_Python
Execute Primary Source
// Problem
機械学習エンジニアがCNC工具の摩耗検知モデルを構築した際、評価指標が実態を反映しない問題に直面した。窓関数を用いた時系列データの分割において、評価の妥当性が損なわれていた。
- ・StratifiedKFoldを用いた分割では、正解率が70%と高値を示した。
- ・窓が半分ずつ重なっているため、同一実験の信号が学習と評価の両方に混入した。
- ・モデルが摩耗ではなく、実験固有の特性を学習するデータ漏えいが発生した。
- ・これにより、未知の加工に対する真の性能が隠蔽される事態となった。
// Approach
筆者は評価の妥当性を確保するため、データの分割単位を「窓」から「実験(グループ)」へと変更した。これにより、未知の加工条件に対するモデルの真の性能を測定する。
- ・scikit-learnのGroupKFoldを採用し、実験単位でデータを完全に分離した。
- ・さらに、1つの実験を評価に回すLeave-One-Group-Out法で検証を深めた。
- ・窓に「どの実験由来か」というグループ番号を渡すことで、グループ間の分離を実現した。
- ・これにより、モデルが一度も見たことのない加工条件での性能を評価した。
// Result
分割手法を厳格化した結果、モデルの真の性能が明らかになった。評価設定の変更により、本番環境での性能をより正確に予測可能となった。
- ・正解率は70%から45%へと大幅に低下し、25ポイントの過大評価が判明した。
- ・モデルが「摩耗あり」のクラスに偏っているという、真の弱点が特定された。
- ・摩耗ありの回は当たりやすいが、新品の回は当たらないという偏りが判明した。
- ・評価の振れ幅を確認することで、データの少なさに起因する不安定さも浮き彫りになった。
Senior Engineer Insight
> 高精度なモデルほど、評価設計の不備による「偽りの成功」を疑うべきだ。特にセンサーデータや時系列データは、個体やセッションといった「グループ」の概念が不可欠である。現場では、本番環境が「既知のグループの継続」か「未知のグループ」かを定義し、それに応じたGroupKFold等の手法を選択する設計力が求められる。