Kaggle比赛项目:性格预测

🎡 项目名称

Kaggle 游乐园比赛 - 性格预测:内向 or 外向


🔍 项目背景

这是一次来自 Kaggle Playground 系列的比赛,目标是通过个人的社交行为与心理特征预测其性格倾向:Introvert(内向)或 Extrovert(外向)。数据维度不高,但暗含复杂的行为偏好,适合作为结构化建模训练。


🎯 项目目标

构建一个稳定、准确的分类模型,预测用户性格倾向,并力求优化 F1-score,最终提升排行榜排名。同时锻炼数据预处理、特征工程、模型调参、模型融合、可解释性分析等核心技能。


🧱 数据结构

数据集共 18,524 条训练样本,特征如下:

  • Time_spent_Alone
  • Stage_fear
  • Social_event_attendance
  • Going_outside
  • Drained_after_socializing
  • Friends_circle_size
  • Post_frequency
  • Personality(目标变量)

问题特征:

  • 目标变量存在类别不平衡(Introvert:Extrovert ≈ 1:3)
  • 多特征存在缺失值
  • 类别特征非数值型,需要编码

📍 主要建模思路

✅ Step1: 缺失值处理

  • 数值型特征:使用均值填充
  • 类别型特征:使用众数填充
  • 简单但稳妥,避免过度拟合

✅ Step2: EDA & 类别不平衡分析

  • 可视化目标变量比例,确认正负样本分布
  • 各特征分布图 & KDE 曲线分析其与性格倾向的潜在关系

✅ Step3: 建立基线模型

  • 使用逻辑回归、LightGBM、XGBoost 分别建模
  • 评估指标统一使用 F1-score(更适合不平衡问题)
  • 采用 StratifiedKFold 做交叉验证确保结果稳定

✅ Step4: 特征工程探索

  • 构造新特征:如 Post_frequency * Friends_circle_size 表示社交活跃度
  • 分析特征分布偏态,对高偏离特征进行对数平滑尝试(log+1)
  • 使用 SHAP 分析特征重要性,进行解释和删除冗余字段

✅ Step5: 模型融合 & 阈值优化

  • 融合 LightGBM + XGBoost + LR 的软投票结果
  • 使用加权平均概率方式融合 LGB 和 Voting 模型
  • 针对 F1-score 曲线优化分类阈值(最终为 0.40)

✅ Step6: 模型解释

  • 使用 SHAP 分析高影响力变量(如 Time_spent_Alone, Drained_after_socializing)
  • 利用 summary_plot 和 dependence_plot 分析变量与预测值关系

✅ Step7: 模型提交 & Leaderboard 分析

  • 提交多个融合版本观察得分
  • 最终得分:0.974089,排名 546/841,距离 Top 排名仅差 0.0016 分

📉 项目挑战与解决方案

❗挑战1:高比例缺失值如何处理?

  • 训练集中多个特征缺失比例超过5%,尝试使用 KNN 和 MICE 多重插补,发现引入了较大噪声,提升有限。
  • 最终选择基于数据分布特性,数值型特征使用 mean,类别型使用 mode 填充,确保训练稳定性。

❗挑战2:模型结果几轮都不变?

  • 多轮交叉验证结果精度一致,初步以为模型已达上限。
  • 实际原因是:测试集预测概率未变化,阈值未调优,且融合模型未正确加入新的预测。
  • 通过排查代码中 oof_preds_voting 定义,修复后重新生成融合预测,加入 LightGBM 输出,分数上升。

❗挑战3:模型解释困难

  • 初期使用 sklearn 的 feature importance 输出权重,发现排序缺乏直观解释。
  • 引入 SHAP 值分析后,生成 summary_plot 可视化重要特征并标注正负方向。发现 Alone_ratio 是模型影响最大的变量! 右边(推“外向”)的点大多是蓝色。Alone_ratio 越低(即越不爱独处)→ 越可能是外向者。Outside_index、Social_score、Post_frequency 也重要 它们都体现了“社交活跃度”:
    • 外出频率 × 活动频率(Outside_index)
    • 朋友圈人数 × 发帖频率(Social_score)
    • 红色点往右说明:值高 → 趋向外向

❗挑战4:公榜压缩效应严重

  • 初期使用 sklearn 的 feature importance 输出权重,发现排序缺乏直观解释。
  • 引入 SHAP 值分析后,生成 summary_plot 可视化重要特征并标注正负方向。发现 Alone_ratio 是模型影响最大的变量! 右边(推“外向”)的点大多是蓝色。Alone_ratio 越低(即越不爱独处)→ 越可能是外向者。Outside_index、Social_score、Post_frequency 也重要 它们都体现了“社交活跃度”:
    • 外出频率 × 活动频率(Outside_index)
    • 朋友圈人数 × 发帖频率(Social_score)
    • 红色点往右说明:值高 → 趋向外向
    • 同时对 Drained_after_socializing 使用 dependence_plot,发现其与 Post_frequency 存在一定交互。

📈 最终结果

  • CV F1-score:0.9788
  • Kaggle 公榜得分:0.974089
  • 排名:546 / 841
  • 提升策略:模型融合 + 阈值优化 + 特征构造 + SHAP可解释性分析

📚 项目收获

  • 理解结构化建模任务的完整流程
  • 掌握 F1-score 指标优化思路
  • 熟悉 LightGBM/XGBoost/VotingClassifier 的融合方式
  • 掌握 SHAP 分析的实际使用和解释方法
  • 感受到实际项目中千分之一级别的精度优化与调参策略的重要性

📌 后续展望

  • 计划将此项目整理为可复用的建模模板
  • 将项目思路迁移应用到企业用户行为预测或市场分析任务中
  • 继续提升在特征交叉、自动特征构造、模型解释方向的能力
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值