返回列表

14th Place Solution

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

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

第 14 名解决方案

作者: Davut Polat (Grandmaster)
发布日期: 2025-09-08
竞赛排名: 14

非常感谢组织者——这次挑战提供了丰富的建模思路试验场,也带来了许多来之不易的经验教训。

概要 (TL;DR)

我使用了基于受试者的 GroupStratifiedKFold 交叉验证(分析时用 5 折;最终提交时用 20 折 Bagging),仔细的用手习惯标准化(镜像左手→右手),以及对两名反向佩戴受试者的 180° 校正。建模栈结合了 WaveNet、ResNet、U-Net 和 SqueezeFormer,处理 96 步序列,并使用样本权重、时间序列增强和 EMA 权重平滑进行训练。由于某些序列缺乏旋转(四元数)特征,我训练了四种模型变体(仅 IMU vs IMU+THM+ToF;含/不含仅加速度计)。在推理时,当缺少旋转特征时,我将示例门控到相应的变体。这种门控在私有排行榜上带来了 +0.0015 的提升,使我保持在金牌区。

预处理与标准化

  • 用手习惯标准化:将左手记录镜像到右手坐标,以统一运动学特征。
  • 反向佩戴校正:两名受试者反向佩戴了设备;我应用了180°旋转以使他们的帧对齐。
  • 序列窗口化:固定序列长度 = 96 个样本/示例。
  • 缺失旋转特征:某些序列缺乏四元数/衍生的旋转特征 (NaN)。这促使了下面的模型变体和推理路由器的设计。

交叉验证

  • 交叉验证方案: 基于受试者的 GroupStratifiedKFold,以保持类别比例同时防止受试者泄露。
  • 折数: 我运行了 5 折实验(报告 CV),然后通过 20 折 Bagging 构建最终集成(在相同的受试者分组原则下使用不同的拆分/种子)。
  • 为何重要: 受试者具有独特的运动特征;将受试者混合 across train/valid 会虚增 CV。分组 CV 产生了稳定的 CV↔排行榜一致性,并降低了过拟合风险。

特征

我结合了有竞争力的公共特征想法与额外的时间/物理描述符:

  • 公共基线特征(从社区 Notebook 中采用并修剪)
  • 时间梯度
  • 绝对值
  • 四元数衍生特征

模型家族(多架构集成)

所有模型都消耗96 步序列,并使用相同的训练/验证拆分。

  • WaveNet
  • ResNet
  • U-Net
  • SqueezeFormer

四种训练变体(用于处理缺失的旋转):

  1. 仅 IMU(所有 IMU 特征)。
  2. 仅 IMU(仅加速度计特征)。
  3. IMU + THM + ToF(所有 IMU 特征)。
  4. IMU(仅 accel) + THM + ToF。

推理路由: 当旋转/四元数衍生特征缺失时,我相应地使用(2) 或 (4)。否则使用(1) 或 (3)。 这个简单的门控 materially 提高了混合模态测试数据的最终可靠性。

训练细节

  • 损失与加权: 通过样本权重解决类别不平衡问题
  • 增强(时间序列): 轻微抖动、时间偏移和尺度扰动;镜像/旋转操作符合物理上合理的变换。
  • EMA 权重平滑: 维护模型参数的指数移动平均(Exponential Moving Average);验证/推理时使用 EMA 权重以稳定损失。

非常感谢竞赛组织者和 Kaggle 社区提供的资源和讨论。

同比赛其他方案