【竞赛项目】阿里天池数据挖掘比赛——快来一起挖掘幸福感
整理下这个项目的思路:
对于一般实习或校招生,项目可能比较少。关键要把项目的重点,难点,是如何做的,怎么解决的,学到了什么说清楚。
项目中用到的技术栈好好准备,面试的时候一定要讲清楚,如果能在底层深挖一下会更好。
〇、项目简介
2020.01 - 2020.02 阿里天池数据挖掘比赛——快来一起挖掘幸福感。
数据:
阿里云上面给Excel形式数据,数据量在1.2万;100多属性:收入、学历、地域、心理预期、性别、身高体重......
对应的幸福感指数:1/2/3/4/5
目标:
训练DNN模型,由属性=》幸福感指数
训练集数据给出,而测试集未给出,用来检验上传模型的优劣:
用均方差MSE()衡量预测准确度,MSE值越小越好
一、数据预处理
缺失值处理:(学历缺失)
- 通常用:均值填充,但效果不如找规律赋值(因为学历缺失一般意味着学历不佳)
- 实在匮乏才删除属性。即使90%缺失也可能有相当的价值。
数据分箱
(用处不是很大,作用是防止过拟合)
二、特征工程:观察数据的特征,创造新的特征组合。
关于新特征,我的发现主要是两个:“相对值” & “反常现象”。
(1)相对值(幸福是相对的,不仅在于绝对值,更在于相对值)
- 相对收入= 绝对收入 - 基准值 (基准可以是:城市农村、性别、年龄段、与配偶比):
构造新特征 or 改造原有特征
- BMI:体重/身高^2,组合出的新特征,更能反映问题 1+1>2,与目标happiness更高的相关性,远好于各个单一属性。
分箱:特征离散化以后,简化逻辑回归模型,降低过拟合的风险。(合理分箱:BMI用了世卫组织的分箱标准:正常、超重、肥胖、特别肥胖) (年龄也分箱:5/10岁分为一段,比一岁岁好用,不容易过拟合。70 后 80后 90后 00后)
(2)反常现象
"研究生收入" 问题:在读本科生、研究生的收入相对同龄已经工作的同学,收入绝对劣势,但是其幸福感反倒高很多。
于是,找出:学历高&在读,强制加 "人为工资" 进去。
三、深度学习 DNN模型选择+组合、调参
lgb+xgb(两个都是boosting),然后stacking模型融合
boosting:多个决策树串行,减小bias偏差;stacking:不同模型串行,类似搭积木。
- 决策树:基于信息熵增益,每次选择增益最大的属性分裂(-Σnlogn)
- 多个决策树boosting(串行迭代)变为GBDT(梯度boosting决策树)
- GBDT--> lgb:对连续值,分段离散(简化)后计算
一些困难:
(1)计算迭代慢:
融合模型(lgb、xgb先内部串行--boosting,后之间串行--stacking)--> 单独用 lgb(轻量化模型):约提高迭代速率15-20倍。
(2)idea副作用:(比如上面的学历缺失、相对收入就是idea)(看似很好、很合理的idea,到实际结果,竟然是副作用)
一开始小组成员都是:直接加 多个新特征,直接3个模型bagging+boosting完整走一遍,迭代速度超慢,很难一个个验证效果
改用单独lgb轻量级模型,一个个验证尝试,剔除了大概一半新特征(不仅没有提高,还有副作用)
不断改进 效果显著,
最终成绩进入所有比赛队伍前1%