【竞赛项目】阿里天池数据挖掘比赛——快来一起挖掘幸福感

整理下这个项目的思路:

对于一般实习或校招生,项目可能比较少。关键要把项目的重点,难点,是如何做的,怎么解决的,学到了什么说清楚。

项目中用到的技术栈好好准备,面试的时候一定要讲清楚,如果能在底层深挖一下会更好。

 


 

〇、项目简介

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%

 

posted @ 2020-03-16 14:50  青杨风2199  阅读(1404)  评论(0编辑  收藏  举报