返回列表

8th Place Solution

633. Child Mind Institute — Problematic Internet Use | child-mind-institute-problematic-internet-use

开始: 2024-09-19 结束: 2024-12-19 健康管理与公共卫生 数据算法赛
第 8 名解决方案 - Child Mind Institute
作者: Kzk Knmt (MASTER)
发布日期: 2024-12-21
竞赛: Child Mind Institute - Problematic Internet Use
排名: 第 8 名

第 8 名解决方案

首先,我想感谢所有主持人和 Kaggle 工作人员组织了如此有趣且实用的比赛!
我非常享受处理噪声和缺失数据的试错过程!

概述

  • 由于数据量小且缺失值分布不明确,我专注于改进 CV(交叉验证),而不是 LB( leaderboard)。
  • 我通过空重要性(Null Importance)提取特征以提高鲁棒性。
  • 我使用迭代填补器(Iterative Imputer,估计器=Bayesian Ridge)填补数值缺失特征。
  • 集成 3 种不同的模型:
    • train.csv + 描述性活动图谱特征
    • train.csv (+ 特征工程) + 描述性活动图谱特征
      (+ 一天中的时间分为 4 组 [0-21600, 21600-43200, 43200-64800, 64800-86400])
    • train.csv (仅)
  • 回归模型
    • 目标:mse
    • 模型:lightgbm, xgboost, catboost
  • 我使用 3 个种子×5 折 CV (StratifiedKFold) 计算 QWK 以减少波动。
  • QWK 阈值通过 3 个种子×5 折分层 CV 优化以提高鲁棒性。

特征提取

我使用基于 lightgbm 增益重要性的空重要性(Null Importance)来尽可能减少特征,同时考虑 CV 的权衡。
减少后的特征数量如下所示。

模型 特征数量
train.csv + 描述性活动图谱特征 13
train.csv (+ 特征工程*) + 描述性活动图谱特征
(+ 一天中的时间分为 4 组 [0-21600, 21600-43200, 43200-64800, 64800-86400] **)
40
train.csv (仅) 14

* 特征工程与许多公开 notebook 相同。我还计算了活动图谱数据的绝对值以及 df['XYZ']=np.sqrt(df['X']**2 + df['Y']**2 + df['Z']**2)
** 我为每个划分组计算了描述性活动图谱特征。

提取的特征

train.csv + 描述性活动图谱特征
['Basic_Demos-Age', 'Basic_Demos-Sex', 'Physical-Height', 'Physical-Weight', 'FGC-FGC_CU', 'FGC-FGC_GSND', 'FGC-FGC_GSD', 'FGC-FGC_PU', 'BIA-BIA_Activity_Level_num', 'SDS-SDS_Total_Raw', 'SDS-SDS_Total_T', 'PreInt_EduHx-computerinternet_hoursday', 'light_max']

train.csv (+ 特征工程) + 描述性活动图谱特征
(+ 一天中的时间分为 4 组 [0-21600, 21600-43200, 43200-64800, 64800-86400])

['Basic_Demos-Age', 'Basic_Demos-Sex', 'Physical-Height', 'Physical-Weight', 'Physical-Waist_Circumference', 'FGC-FGC_CU', 'FGC-FGC_GSND', 'FGC-FGC_GSND_Zone', 'FGC-FGC_GSD', 'FGC-FGC_PU', 'PAQ_A-PAQ_A_Total', 'SDS-SDS_Total_Raw', 'SDS-SDS_Total_T', 'PreInt_EduHx-computerinternet_hoursday', 'X_25%_0-21600', 'Y_std', 'Z_mean_0-21600', 'Z_min_43200-64800', 'Z_75%_64800-86400', 'enmo_50%_43200-64800', 'non-wear_flag_mean_0-21600', 'light_std', 'light_max_21600-43200', 'XYZ_50%_21600-43200', 'XYZ_mean_43200-64800', 'XYZ_mean_64800-86400', 'XYZ_std_64800-86400', 'XYZ_50%_64800-86400', 'abs_X_50%_21600-43200', 'abs_X_25%_64800-86400', 'abs_X_75%_64800-86400', 'abs_Y_75%_0-21600', 'abs_Y_min_21600-43200', 'abs_Y_75%_64800-86400', 'abs_Z_75%_21600-43200', 'abs_Z_75%_43200-64800', 'abs_anglez_min_43200-64800', 'BMI_Age', 'Internet_Hours_Age', 'Muscle_to_Fat']

train.csv (仅)
['Basic_Demos-Age', 'Basic_Demos-Sex', 'Physical-Height', 'Physical-Weight', 'Fitness_Endurance-Max_Stage', 'FGC-FGC_CU', 'FGC-FGC_GSND', 'FGC-FGC_GSD', 'FGC-FGC_PU', 'BIA-BIA_Activity_Level_num', 'PAQ_A-PAQ_A_Total', 'SDS-SDS_Total_Raw', 'SDS-SDS_Total_T', 'PreInt_EduHx-computerinternet_hoursday']

缺失值填补

我采用 IterativeImputer 和默认的 Bayesian Ridge 作为估计器来填补缺失值。我也尝试了 GBDT 和 RandomForest,但 CV 低于 Bayesian Ridge。
当在缺失值为 30 或更少的数据上训练填补器时,CV 提高最多。此外,在缺失 'sii' 的数据上训练会降低 CV,所以我们没有使用这些数据。

模型

我采用了简单的加权融合,权重确定为最大化 CV。

模型 权重
train.csv + 描述性活动图谱特征 lgb: 0.2, xgb: 0.2
train.csv (+ 特征工程) + 描述性活动图谱特征
(+ 一天中的时间分为 4 组)
xgb: 0.2
train.csv (仅) lgb: 0.2, cat: 0.1, xgb: 0.1

模型 CV
基线 0.475
提交模型 0.501

基线模型是单个 lightgbm 模型,没有填补缺失值,拥有所有 train.csv + 描述性活动图谱特征。(模型的超参数已优化)

阈值优化

为了确保阈值的鲁棒性,它们是通过 Nelder-Mead 方法从整个 3 个种子×5 折 CV 中计算得出的。

无效的方法

  • 我在缺失 sii 的数据上训练了填补器,但 CV 下降了。
  • Huber 和 MAE 被用作目标函数,但没有改善 CV。
  • CNN 和 LSTM 应用于活动图谱数据,但学习进展不顺利。

未尝试的方法

  • 伪标签 (pseudo-labeling)
  • 自定义目标函数 (custom-objective)

感谢阅读!

同比赛其他方案