633. Child Mind Institute — Problematic Internet Use | child-mind-institute-problematic-internet-use
我很惊讶能在这次竞赛中获得第二名,尤其是因为我几个月前基本上已经放弃了。我的 最终方案 基于 Starter Notebook 的 fork。关键的观察是原始 notebook 没有显式处理缺失值,而是依赖 CatBoost 自动处理。虽然我不太熟悉 CatBoost 的内部方法,但我觉得通过自定义插补策略利用一些领域知识可能是一个强有力的替代方案。
以下是我用于处理不同列中缺失值的字典:
replacement_strategy = {
'Basic_Demos-Age': 'average',
'Basic_Demos-Sex': 'new_number',
'CGAS-CGAS_Score': 'average',
'Physical-Diastolic_BP': 'average',
'Physical-HeartRate': 'average',
'Physical-Systolic_BP': 'average',
'Fitness_Endurance-Max_Stage': 'average',
'Fitness_Endurance-Time_Mins': 'average',
'Fitness_Endurance-Time_Sec': 'average',
'FGC-FGC_CU': 'new_number',
'FGC-FGC_CU_Zone': 'new_number',
'FGC-FGC_GSND_Zone': 'new_number',
'FGC-FGC_GSD_Zone': 'new_number',
'FGC-FGC_PU_Zone': 'new_number',
'FGC-FGC_SRL_Zone': 'new_number',
'FGC-FGC_SRR_Zone': 'new_number',
'FGC-FGC_TL_Zone': 'new_number',
'BIA-BIA_Activity_Level_num': 'average',
'BIA-BIA_Frame_num': 'average',
'SDS-SDS_Total_Raw': 'average',
'SDS-SDS_Total_T': 'average',
'PreInt_EduHx-computerinternet_hoursday': 'average'
}
我没有把所有事情都留给 CatBoost,因为它无法完全“理解”每个特征背后的含义。例如,互联网使用小时数可能显示为离散整数,但我们知道它有明确的顺序和特定解释(小时数越多 = 使用量越高)。其他特征,如某些项目的 ID,也显示为离散整数,但不携带这种自然顺序。只有我们人类才能做出这种区分并应用合适的插补方法。
替换规则:
仅当列严格为整数(或识别为类别)时才使用这些策略。当特征基于浮点数时,“平均值”替换更合理,假设它具有数值意义而不是离散类别。
我还将交叉验证的折叠数从 5 增加到了 20。在那之后,我看到了收益递减,所以我停止了。具有讽刺意味的是,尽管交叉验证分数有所提高,但我的公共排行榜分数却低于 baseline notebook,这相当出乎意料。然而,最终的私有排行榜结果却是一个令人惊喜的消息。我很想听听任何关于在我的方法背景下公共分数和私有分数之间存在如此显著差异的想法。
祝好,
Aradhye