科赛网新人赛-员工满意度预测 - 竞赛思路

  • 原贴地址
  • 项目地址

文章目录

  • 科赛网新人赛-员工满意度预测 - 竞赛思路
    • 有用的资料、文档、博客
    • 环境与工具
    • 1.0 基础知识
      • 1.1 数据挖掘流程:
    • 2.0 数据探索性分析
      • 2.1 单变量分析
      • 2.2 多变量分析
    • 3.0 特征工程
      • 3.1 特征创建
        • 3.1.1 笛卡尔积特征创建
        • 3.1.2 使用 number_project 对 average_monthly_hours 进行加权
      • 3.2 特征筛选
        • 3.2.1 互信息法
      • 3.3 特征预处理
        • 3.3.1 package 特征
        • 3.3.2 无量纲化
    • 4.0 建模
      • 4.1 单模 RandomForestRegressior
      • 4.2 Stacking 模型融合 Lightgbm + Xgboost + Ridge
    • 5.0 冲分日志

有用的资料、文档、博客

类别 链接
数据预处理 API–Pandas https://pandas.pydata.org/docs/reference/index.html
机器学习库–Sklearn https://scikit-learn.org/stable/modules/classes.html
数据可视化库–Seaborn http://seaborn.pydata.org/
木东居士的特征工程系列(强烈推荐) https://blog.csdn.net/zhaodedong/article/details/103451692
数据科学大杀器模型-LightGBM https://lightgbm.readthedocs.io/en/latest/Python-API.html
Baseline 代码 https://www.kesci.com/home/competition/forum/5f0aa9679ac5ac002db1d29f
模型融合博客 https://wmathor.com/index.php/archives/1428/
新人赛讨论区 https://www.kesci.com/home/competition/forumlist/5ec3b6987ba12c002d3e42bc
机器学习CheatSheet https://machinelearningmastery.com/
强烈推荐这个人的数据挖掘系列 https://wmathor.com/index.php
贝叶斯调参 https://www.cnblogs.com/yangruiGB2312/p/9374377.html
Xgboost API Document https://xgboost.readthedocs.io/en/latest/python/python_api.html

环境与工具

  • 编程语言:Python
  • 环境:Anaconda
  • 主要工具
    • Numpy(矩阵计算、数值计算)
    • Pandas(数据表分析)
    • Matplotlib、Seaborn(数据可视化)
    • Scikit-Learn(机器学习工具包)

1.0 基础知识

1.1 数据挖掘流程:

  • 赛题 / 数据来源/ 背景 理解
  • 数据探索性分析
  • 数据预处理
  • 特征工程(80%)
    • 特征创建
    • 特征筛选
    • 特征预处理
  • 建模
    • 模型选择
    • 模型训练
    • 模型调参
    • 模型效果检验
  • 预测

2.0 数据探索性分析

2.1 单变量分析

  • 数据认知(字段类型、统计量)
  • 异常值探索
  • 统计量分析
  • 数据分布
  • 数据可视化

2.2 多变量分析

  • 相关性分析

3.0 特征工程

3.1 特征创建

我是做了很多别的尝试的,这里只给出能提升分数最多的方法

3.1.1 笛卡尔积特征创建
  • 在做这个之前有考虑聚合特征创建,但是这个数据集一对多的关系很少,不适合使用 featuretools 这种工具做聚合特征创建

  • 这个数据集里面大部分是类别型特征,而且维度不大,只有 9 维,因此对所有的类别型特征做二阶笛卡尔积来创建新特征

3.1.2 使用 number_project 对 average_monthly_hours 进行加权
  • 通过相关性分析得知,number_projectaverage_monthly_hours 呈正相关
  • 之前跑随机森林时对特征进行可视化,发现 average_monthly_hours 的特征重要性非常高,重要性排前三
  • 跑单模 LightGBM 发现,average_monthly_hours 的特征重要性甚至是排在第一
  • number_project 本身应当作为连续值,如果这个特征进行独热编码,其实是丢失了其本身的大小关系!!!
  • 利用 number_project 的大小关系对特征 average_monthly_hours 进行加权l o g 2 log_2 log2 这个对数转换使得加权数值比较合理,不会太大也不会太小
  • 不知道你有没有发现,average_monthly_hours 是以小时为单位,个人认为以天为单位的模型鲁棒性会更好,所以对这个值除以 24

3.2 特征筛选

3.2.1 互信息法

使用互信息法,从笛卡尔积特征创建的四百多维的特征中筛选出 8 个最佳特征,互信息既可以捕捉单个特征与标签的线性关系,也可以捕捉单个特征与标签的非线性关系

3.3 特征预处理

3.3.1 package 特征

通过对 package 特征进行分组,求 satisfaction_level 的均值,发现 a, c, e 类别对应的均值很相近,b, d 类别对应的均值很相近,把 a, c, e 类别的归为一类,b, d类别的归为一类。

3.3.2 无量纲化
  • average_monthly_hours 进行 MaxAbs 归一化

4.0 建模

根据别人的 Kernel,我发现单模效果最好的还是随机森林,自己也跑过 Lightgbm 发现效果并不理想

4.1 单模 RandomForestRegressior

4.2 Stacking 模型融合 Lightgbm + Xgboost + Ridge

5.0 冲分日志

2020-12-7

  • 跑通 Baseline,并分析 Baseline 的方法

2020-12-8

  • 跑了个 LightGBM,并进行了调参,但是没有 RF 效果好(MSE:0.032)
  • 进行了 RF 调参,但是还是没有调参前的 RF 效果好
  • Baseline 的 PCA + RF 第八名

2020-12-9

  • 发现聚合特征创建不适合这个数据集,放弃 featuretools + 特征选择 + RF 这个思路
  • 根据数据分析结果进行特征创建(package预处理:0.02936)第五名

  • 笛卡尔积特征创建 + f 检验(0.02933)第四名
  • 笛卡尔积特征创建 + 互信息(0.02904271)第四名

2020-12-10