返回列表

4th place solution

665. CMI - Detect Behavior with Sensor Data | cmi-detect-behavior-with-sensor-data

开始: 2025-05-30 结束: 2025-09-02 健康管理与公共卫生 数据算法赛
第 4 名解决方案

第 4 名解决方案

作者: dott (Grandmaster)
发布日期: 2025-09-03
竞赛排名: 第 4 名
获赞数: 58

感谢大家,恭喜获奖者!让我简要总结一下我的解决方案并分享代码。

目标 (Target)

我所有模型的目标是以下 3 者的组合:gesture(手势)、orientation(方向)以及来自 "behavior" 列初始状态中隐藏的 Relax&Move / Move。这个新目标有 18 * 4 * 2 个潜在值,并且没有受试者(subject)记录超过 1 个序列的每个值。这是我后处理的基础。

后处理 (Post-processing)

在推理期间,我累积每个受试者的预测概率历史。当新受试者进来时,我在每个目标类别出现不超过一次的约束下运行最大似然估计(maximum LLH)优化。你可以使用新记录的优化输出作为预测,但为了在早期记录(历史太短时)获得微小改进,我只是强制将过去序列中的类别概率设置为零,用于当前处理的序列。然后按 gesture 求和概率并取 argmax。
由于数据是随机顺序来的,这造成了分数的显著方差,最终选择有点像彩票。最终解决方案的重新提交得分从 0.868 到 0.880,我最终选择了 0.876。

模型 (Models)

我使用了 2 种模型架构的混合,每种都进行了大量的 Bagging 集成。我分别训练了仅 IMU (imu-only) 和全数据 (full-data) 模型,对于仅 IMU 变体,使用相同的架构但切断了 thm 和 tof 分支。当与全数据模型混合时,仅 IMU 模型提供了非常好的提升。

  1. CNN - Attention - Pooling 架构: 具有 separate branches for velocity, position, thm, thm diff, tof and tof diff。如果你好奇细节可以检查代码,但我觉得那里没什么特别的。
  2. 基于 BERT 的架构: 衍生特征 borrowed from 此 notebook。感谢 @wasupandceacar 发布它!我只删除了一些 IMU 衍生变量,因为它们损害了我的交叉验证 (CV) 分数。

数据增强 (Augmentations)

考虑到 LB 分数的高方差,我不确定增强带来的好处有多大,但我使用了:

  • 丢弃 phase == "Transition" 的第一条记录
  • 丢弃 phase == "Gesture" 的最后一条记录
  • 随机噪声
  • 混合具有相同目标的不同训练记录的 "Transition" 和 "Gesture" 部分

特征工程 (Feature engineering)

这里相当直接,我在 CV 上没有发现复杂衍生特征的价值,所以我使用了非常有限的特征集,如 scaled thm 和 tof,去除重力分量的加速度以及从 rot 向量衍生的角度。有几条记录缺少 rot 向量,对于它们我使用了一些从 acc 粗略估计的值,并从 acc 向量中移除移动平均值以使值更接近所需分布。
当然,对于 handedness == 0 的受试者,翻转某些变量的值。

同比赛其他方案