目录

题目背景

初期工作

数据分析和特征选择

模型选择

总结


最近参加了天池的一个入门级数据挖掘比赛:二手车交易预测。昨天比赛结束,从参赛到结束也就10天,正经投入时间大概有5天吧,虽然是入门级比赛,看起来是很简单的回归预测,但是想冲进前13名(前13名有奖励)还是非常不容易的。2746组中最终排名48,对比投入时间和所做的工作,这个名次也没啥好说的。现在结束了,排名在前的队伍应该最近会写比赛分享,到时候再好好学习一下,看看自己到底是哪里还有待提高吧。为了给自己有个交代,简单总结一下自己在这次比赛中的工作吧。

题目背景

赛题以预测二手车的交易价格为任务,数据集报名后可见并可下载,该数据来自某交易平台的二手车交易记录,总数据量超过40w,包含31列变量信息,其中15列为匿名变量。为了保证比赛的公平性,将会从中抽取15万条作为训练集,5万条作为测试集A,5万条作为测试集B,同时会对name、model、brand和regionCode等信息进行脱敏。

评价标准为MAE(Mean Absolute Error)。

MAE越小,说明模型预测得越准确。

初期工作

为了让自己快速进入状态,首先看到了举办方发布的baseline方案,通过copy代码,上传成绩得到了baseline分数:680.31。通过baseline代码,我快速掌握了数据读取,模型预测保存成提交文件的方式。通过对baseline的方案的阅读,我知道baseline方案是选择了31列特征的18个作为模型输入特征,选择xgboost和lgb两个模型进行预测,最后两个预测结果进行加权平均得到提交结果的。数据挖掘比赛往往会经过这么几个阶段:数据分析和预处理——特征选择——模型选择——集成学习,显然baseline的18个特征只是一个简单的示例。所以下一步就开始好好分析一下数据情况了。

数据分析和特征选择

查看缺失值情况,如下包含model, bodyType, fuelType,gearbox, 其中fuelType缺失值较多,达到5.79%。缺失值的处理方式有:补为-1,填充中位数,填充众数,填充上下条的数据,填充KNN,插值,填充均值,这里我选择了一个最简单的:补为-1。

然后,开始考虑31个特征选择哪些作为模型的输入特征,经分析和单个特征与交易价格的趋势可视化观察,排除了:saleID(唯一标识), name(经过数据分析,15W个数据中,出现99662个值,快达到唯一标识了,所以我选择去掉这个特征,ps:后来发现这个决定是错误的,很多前排队伍都说这个特征很重要,当时我是自我感觉不重要也没做趋势分析直接pass了),saller(15W数据只有1个不同case),offerType(15W数据此特征全部一样值)。所以一共选了26个特征,并且对regDate,createDate进行了处理,因为这两个特征是时间值,我就按照时间先后,进行了等值替换,如regDate的时间范围是19910001到20151212,我就把1992年之前的重标为0,1992-1993年的数据重标为1,每隔一年一次类推直到2015年之后标记为24。

其它特征,如model, regionCode, createDate通过它们编码和price的趋势观察,发现具有相关性,所以要加入这些特征,如下图可以看到不同model,regionCode, createDate编码与价格具有明显分层效果。

   

    

其中左下是notRepairedDamage的数据,0标识汽车有尚未修复的损坏,结果售价却普遍高于没有损坏的,优点违背常识,不知道是不是举办方做过处理(还有regData的时间编码月份居然是从0-12的,一年有13个月吗?有点奇怪)。

经过增加模型输入特征到26个,最终线上分数为569.50。

模型选择

接着我觉得特征选择和数据处理的工作算是结束了,我找到了很多做回归的模型进行选择,包含:linearegression,DecisionTreeRegressor, RandomForestRegressor,GradientBoostingRegressor,MLPRegressor,Bagging, XBGRession,LGBMRegressor,最终发现较好的是随机森林,XGB,LGB。因为是直接调用,使用默认参数,接着我又网上搜了一大堆的随机深林,XGB,LGB的调参技巧,希望通过一个合适的参数得到比baseline更好的效果,最终发现很多参数调节用处不大,暴力增加n_estimators的个数效果有了明显的提升。因为随机深林即使调参后与xgb和lgb的mae还是差了接近100,所以我最终还是使用的baseline方案xgb,lgb,把评估器的个数设置分别设置为了5000,30000。最终线上效果达到495.78。然后对数据进行了归一化处理等一些小的操作,线上达到487.86就不行了。

至此,我的比赛陷入了瓶颈期,我尝试用MLP进行训练,但是mae还是在600左右徘徊。然后把这个比赛放了两天后,看到又大佬分享了一个简单的keras实现的神经网络案例,称效果达到450,我马上复现了一下,然而mae只能到470左右,但是比我的MLP好了很多(我觉得可能是我的MLP没有加Relu激活函数的原因),线上成绩达到471.08,我通过对这个keras进行调超参,如优化器,神经元个数,网络层数等,线上成绩465.63。

至此,我的线上成绩一直没有排进前100名(天池显示前100队伍),我觉得自己已经尝试了我所能想到的所有,比赛还有2天结束,我想最后把xgb+lgb和keras的提交结果加权平均一下,就当结束了,结果在线mae居然降到了436.87,进入了50多名,这可真实山穷水复无疑路,柳暗花明又一村呢,好高兴。

最后我看到keras训练的神经网络模型训练集mae能降到300,但是测试集总是460左右,想着按照防止过拟合的方向每一层加入了l2正则以及dropout层,只要解决了过拟合就能在线上达到400的mae,这样就能进入前13名了,但是理想很美好,现实很残酷。然后因为神经网络每次初始权重随机初始化的方式,导致模型性能不变,但是预测结果会有出入,所以我进行了6个模型预测结果的集成取平均,然后再和xgb+lgb的集成取平均,提交在线mae:428.51。最终排名48。

总结

总体来说,并没有投入很多精力,在数据分析,特征选择模块还有很多没有做好的地方,模型选择的话,大家基本都是用xgboost和lgb,这块不用花费过多时间。最后结果集成特别重要。可以选择成绩相同,模型不同的结果进行取平均等的集成,这样可能会带来很大的提升。比如本次比赛中神经网络模型和决策树模型的集成结果,远远超越它们各自的成绩。

后面等前排大佬分享了比赛经验,我再补充一下自己的不足吧。

入门级数据挖掘比赛——二手车交易价格预测相关推荐

  1. 天池比赛——二手车交易价格预测(主要步骤)

    Step 1:导入函数工具箱 Step 2:数据读取 1) 数据简要浏览 2) 数据信息查看 3) 数据统计信息浏览 Step 3:特征与标签构建 1) 提取数值类型特征列名 2) 构建训练和测试样本 ...

  2. 【二手车交易价格预测】赛题理解

    一.赛题背景 本次新人赛是Datawhale与天池联合发起的0基础入门系列赛事第一场 -- 零基础入门数据挖掘之二手车交易价格预测大赛. 赛题以二手车市场为背景,要求选手预测二手汽车的交易价格,这是一 ...

  3. 二手车交易价格预测-01

    数据挖掘入门- 二手车交易价格预测-01 1-赛题分析 1.1 目的 1.2 数据 1.3 字段表 2-评测标准 3-结果提交 4-Datawhale带学资料 4.1 Baseline方案 4.2 比 ...

  4. 二手车交易价格预测-task2

    数据挖掘入门- 二手车交易价格预测-task2 EDA(Exploratory Data Analysis)-数据探索性分析 2.1 EDA目标 2.2 内容介绍 2.3 经验总结 EDA(Explo ...

  5. 【直播】王茂霖:二手车交易价格预测-千变万化特征工程(河北高校数据挖掘邀请赛)

    二手车交易价格预测-千变万化特征工程 目前 河北高校数据挖掘邀请赛 正在如火如荼的进行中.为了大家更好的参赛,王茂霖分享了 从0梳理1场数据挖掘赛事!,完整梳理了从环境准备.数据读取.数据分析.特征工 ...

  6. 【直播】王茂霖:二手车交易价格预测 Baseline 提高(河北高校数据挖掘邀请赛)

    二手车交易价格预测 Baseline 提高 目前 河北高校数据挖掘邀请赛 正在如火如荼的进行中.为了大家更好的参赛,王茂霖分享了 从0梳理1场数据挖掘赛事!,完整梳理了从环境准备.数据读取.数据分析. ...

  7. 数据挖掘实战:二手车交易价格预测

    赛题数据 数据来自某交易平台的二手车交易记录,总数据量超过40w,包含31列变量信息,其中15列为匿名变量.从中抽取15万条作为训练集,5万条作为测试集A,5万条作为测试集B,同时会对name.mod ...

  8. Task 3 特征工程 Datawhale零基础入门数据挖掘- 二手车交易价格预测

    Task 3 特征工程 Datawhale零基础入门数据挖掘- 二手车交易价格预测 Tips:此部分为零基础入门数据挖掘的Task3特征工程部分,主要包含各种特征工程以及分析方法 赛题:零基础入没人能 ...

  9. 零基础入门数据挖掘——二手车交易价格预测:baseline

    零基础入门数据挖掘 - 二手车交易价格预测 赛题理解 比赛要求参赛选手根据给定的数据集,建立模型,二手汽车的交易价格. 赛题以预测二手车的交易价格为任务,数据集报名后可见并可下载,该数据来自某交易平台 ...

  10. 《零基础入门数据挖掘 - 二手车交易价格预测》Baseline实施

    @[TOC]<零基础入门数据挖掘 - 二手车交易价格预测>baseline实施 <零基础入门数据挖掘 - 二手车交易价格预测>Baseline实施 前面陆陆续续学习机器学习大概 ...

最新文章

  1. 自己动手写cpu pdf_自己动手写 Promise
  2. 【Java 网络编程】UDP API 简介 ( DatagramSocket | DatagramPacket )
  3. 如何在阿里云上使用Data Lake Analytics分析Table Store数据
  4. 实验二:进程的创建与可执行程序的加载
  5. 一个可行的绑定下拉列表的方法(bind dropdownlist)
  6. tomcat 启动异常 The web application [ROOT] registered the JDBC driver [xxx] but failed to unregister it
  7. 俄罗斯方块之四 运动块的绘制实现
  8. LeetCode之Merge Sorted Array
  9. 【LeetCode笔记】617. 合并二叉树(Java、DFS、二叉树)
  10. Qt工作笔记-QSS中关于QCombox的设置
  11. CSS3: 动画循环执行(带延迟)的实现
  12. cad填充图案乱理石_CAD绘图,缺少填充图案怎么办?900多种自定义图案可解燃眉之急...
  13. USB控制相关批处理
  14. 机械电子工程专业和计算机科学,机械电子工程专业属于什么类别
  15. 觅风易语言教程全集(完整超清版+源码)
  16. Fiddler证书 在 ios 上信任后仍提示不受信任的解决方法
  17. CMMI 项目计划实战
  18. qduoj 分辣条1 (搜索+剪枝)
  19. 2019.5.29 中移物联网前端实习生笔试
  20. 记录,Cents 7 更改home和root的中文路径

热门文章

  1. JAVA并发---记录2
  2. 模型的矛盾:工业界 vs 学术界
  3. python开发AutoCAD- -80行代码轴类小零件自动绘制
  4. uniapp 输入验证码+倒计时+隐藏电话号码
  5. 计算机ps二级考试2017,2017年计算机等级考试一级PS考前试题及答案二
  6. 租售同权市场利好,梦享社区携手机智云落地政府城中村智能升级改造试点项目
  7. 库卡机器人提示无合适的mam文件处理
  8. 2018--- (Centos7) gitlab服务器搭建与使用
  9. PHP Array 数组
  10. 历经16年猪八戒网如何成功实现双活流量架构