返回列表

5th Place Solution

528. Playground Series Season 3, Episode 2 | playground-series-s3e2

开始: 2023-01-10 结束: 2023-01-16 临床决策支持 数据算法赛
第5名解决方案

第5名解决方案

作者:Jose Cáliz
发布时间:2023年1月17日

大家好,

鉴于数据集高度不平衡,且AUC会根据样本数量发生很大变化,看来排名确实发生了不小的震动。我意识到我的OOF AUC和排行榜分数之间存在很大差异,所以我决定只信任我的交叉验证(10折分层K折)。

有效的技巧

  1. smoking status(吸烟状态)中的 unknown(未知)类别填充为 never smoked(从不吸烟)。这个直觉来自于我的EDA(探索性数据分析),你可以看到 unknown 类别的中风概率最低。
  2. gender(性别)中的 other(其他)类别填充为 male(男性)。我发现在合成数据集中填充该记录时,CV分数有所提升。我没有在排行榜上验证这一点在测试集上的效果。
  3. 使用梯度下降对预测结果进行排序并集成。
  4. 连接原始中风数据集,并使用分层K折(StratifiedKfold),其中验证集仅包含合成数据。
  5. 使用递归特征消除进行特征选择。我尝试的附加特征:
    def generate_features(df):
        df['age/bmi'] = df.age / df.bmi
        df['age*bmi'] = df.age * df.bmi
        df['bmi/prime'] = df.bmi / 25
        df['obesity'] = df.avg_glucose_level * df.bmi / 1000
        df['blood_heart']= df.hypertension*df.heart_disease
        return df

无效的尝试

  1. 使用来自这个 notebook 的前向选择。这是我的第二次提交,在私人排行榜上得分为0.89941。我认为它没有生效是因为最终的集成仅由XGBoost模型组成,而我最好的提交包含了多种多样的模型。
  2. MeanEncoder、WoEEncoder 和 CountFrequency 编码器。这些都没有提供比 OneHotEncoder 更好的解决方案。

最终集成模型

我的最终集成由几个模型组成:

  • 带有RFE、l2正则化和liblinear求解器的逻辑回归。
  • 带有RFE、无正则化、lbfgs求解器的逻辑回归。
  • 没有RFE、没有特征工程的LightGBM。
  • 另一个带有早停止并监控logloss(是的,是logloss而不是AUC)的LightGBM。
  • 一个受 @dmitryuarov 的 notebook 启发的Catboost模型。我做了一些修改以确保OOF AUC与各折的平均AUC相似。
  • 一个经过特征工程调优的XGBoost(最佳单模型)。查看代码和结果复现 这里

就是这样了。祝贺获胜者,期待下一次的 playground 比赛。

同比赛其他方案