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

2023-11-05 15:30

本文主要是介绍入门级数据挖掘比赛——二手车交易价格预测,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

题目背景

初期工作

数据分析和特征选择

模型选择

总结


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

题目背景

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

 评价标准为MAE(Mean Absolute Error)。
enter image description here
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,这块不用花费过多时间。最后结果集成特别重要。可以选择成绩相同,模型不同的结果进行取平均等的集成,这样可能会带来很大的提升。比如本次比赛中神经网络模型和决策树模型的集成结果,远远超越它们各自的成绩。

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

 

这篇关于入门级数据挖掘比赛——二手车交易价格预测的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/350782

相关文章

Tensorflow lstm实现的小说撰写预测

最近,在研究深度学习方面的知识,结合Tensorflow,完成了基于lstm的小说预测程序demo。 lstm是改进的RNN,具有长期记忆功能,相对于RNN,增加了多个门来控制输入与输出。原理方面的知识网上很多,在此,我只是将我短暂学习的tensorflow写一个预测小说的demo,如果有错误,还望大家指出。 1、将小说进行分词,去除空格,建立词汇表与id的字典,生成初始输入模型的x与y d

临床基础两手抓!这个12+神经网络模型太贪了,免疫治疗预测、通路重要性、基因重要性、通路交互作用性全部拿下!

生信碱移 IRnet介绍 用于预测病人免疫治疗反应类型的生物过程嵌入神经网络,提供通路、通路交互、基因重要性的多重可解释性评估。 临床实践中常常遇到许多复杂的问题,常见的两种是: 二分类或多分类:预测患者对治疗有无耐受(二分类)、判断患者的疾病分级(多分类); 连续数值的预测:预测癌症病人的风险、预测患者的白细胞数值水平; 尽管传统的机器学习提供了高效的建模预测与初步的特征重

我们依旧在追梦的路上-山东省第六届ACM比赛总结

这场比赛从结果而言达到了预期(金牌),从过程而言和我的预期相差甚远(打的太乱,个人发挥很差),还好关键时刻队友抗住压力,负责后果真的不堪设想。 热身赛 热身赛纯粹测机器的,先把A,B,C草草水过(A题小写x打成大写的也是醉了),我和老高开始各种测机器,long long不出所料是lld的,试了一下除0和数组越界的re问题,发现没有re,只有wa(甚至数组越界还AC了),至于栈深的话也没过多追

ACM比赛中如何加速c++的输入输出?如何使cin速度与scanf速度相当?什么是最快的输入输出方法?

在竞赛中,遇到大数据时,往往读文件成了程序运行速度的瓶颈,需要更快的读取方式。相信几乎所有的C++学习者都在cin机器缓慢的速度上栽过跟头,于是从此以后发誓不用cin读数据。还有人说Pascal的read语句的速度是C/C++中scanf比不上的,C++选手只能干着急。难道C++真的低Pascal一等吗?答案是不言而喻的。一个进阶的方法是把数据一下子读进来,然后再转化字符串,这种方法传说中

结合Python与GUI实现比赛预测与游戏数据分析

在现代软件开发中,用户界面设计和数据处理紧密结合,以提升用户体验和功能性。本篇博客将基于Python代码和相关数据分析进行讨论,尤其是如何通过PyQt5等图形界面库实现交互式功能。同时,我们将探讨如何通过嵌入式预测模型为用户提供赛果预测服务。 本文的主要内容包括: 基于PyQt5的图形用户界面设计。结合数据进行比赛预测。文件处理和数据分析流程。 1. PyQt5 图形用户界面设计

保研 比赛 利器: 用AI比赛助手降维打击数学建模

数学建模作为一个热门但又具有挑战性的赛道,在保研、学分加分、简历增色等方面具有独特优势。近年来,随着AI技术的发展,特别是像GPT-4模型的应用,数学建模的比赛变得不再那么“艰深”。通过利用AI比赛助手,不仅可以大大提升团队效率,还能有效提高比赛获奖几率。本文将详细介绍如何通过AI比赛助手完成数学建模比赛,并结合实例展示其强大功能。 一、AI比赛助手的引入 1. 什么是AI比赛助手? AI比

CNN-LSTM模型中应用贝叶斯推断进行时间序列预测

这篇论文的标题是《在混合CNN-LSTM模型中应用贝叶斯推断进行时间序列预测》,作者是Thi-Lich Nghiem, Viet-Duc Le, Thi-Lan Le, Pierre Maréchal, Daniel Delahaye, Andrija Vidosavljevic。论文发表在2022年10月于越南富国岛举行的国际多媒体分析与模式识别会议(MAPR)上。 摘要部分提到,卷积

多维时序 | Matlab基于SSA-SVR麻雀算法优化支持向量机的数据多变量时间序列预测

多维时序 | Matlab基于SSA-SVR麻雀算法优化支持向量机的数据多变量时间序列预测 目录 多维时序 | Matlab基于SSA-SVR麻雀算法优化支持向量机的数据多变量时间序列预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab基于SSA-SVR麻雀算法优化支持向量机的数据多变量时间序列预测(完整源码和数据) 2.SS

力扣 | 递归 | 区间上的动态规划 | 486. 预测赢家

文章目录 一、递归二、区间动态规划 LeetCode:486. 预测赢家 一、递归 注意到本题数据范围为 1 < = n < = 20 1<=n<=20 1<=n<=20,因此可以使用递归枚举选择方式,时间复杂度为 2 20 = 1024 ∗ 1024 = 1048576 = 1.05 × 1 0 6 2^{20} = 1024*1024=1048576=1.05 × 10^

回归预测 | MATLAB实现PSO-LSTM(粒子群优化长短期记忆神经网络)多输入单输出

回归预测 | MATLAB实现PSO-LSTM(粒子群优化长短期记忆神经网络)多输入单输出 目录 回归预测 | MATLAB实现PSO-LSTM(粒子群优化长短期记忆神经网络)多输入单输出预测效果基本介绍模型介绍PSO模型LSTM模型PSO-LSTM模型 程序设计参考资料致谢 预测效果 Matlab实现PSO-LSTM多变量回归预测 1.input和outpu