【天池学习笔记】二手车交易价格预测

1.赛题理解

1.1背景

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

  • 回归问题,属于传统数据挖掘,不适用神经网络
    • 回归问题用机器学习,主要注意构建特征和选择模型
  • 比赛主要应用xgb、lgb、catboost
  • 价格和时间是否有关?时间跨度多大
  • 异常值的影响

1.2 赛制

本次赛事分为两个阶段,分别为正式赛及长期赛。

正式赛(3月12日 - 4月11日) 报名成功后,选手下载数据,在本地调试算法,通过赛题页左侧提交入口提交结果;
提交后将进行实时评测;每天每支队伍可提交2次;排行榜每小时更新,按照评测指标得分从高到低排序;排行榜将选择历史最优成绩进行展示;
最后一次排行榜更新时间为4月11日晚上20点,将以该榜单成绩作为依照,评选出正式赛期间的奖项名次,予以奖励。 长期赛(4月11日以后)
自4月11日开始,本场比赛将长期开放,报名和参赛无时间限制。

  • 比赛要求,如实名认证,切榜,时间,等信息

1.3赛题数据

  • 一般有官方特征介绍,显示特征和匿名特征在这里插入图片描述
  • 显式特征,可以先构思怎么构造有价值特征,如时间:时间差值,类别:one-hot编码,特征组合
  • 匿名特征,常识性工作,如做log或指数变化,做四则运算,进行筛选
  • 数值范围,判断是否是异常值
  • 数据样本量,确定比赛机器的配置等

1.4评测标准

  • 最好的选区标准,验证集的评价标准保持线下线上保持一致 在这里插入图片描述
  • 不同评测标准也需要考虑不同策略,比如均方误差相比平均绝对误差,一个比较偏离目标值的预测结果会贡献更大的误差,所以需要更加注意不能有过多差异过大的预测.

1.5结果格式

注意提交结果的文件格式,内容格式,比如是否有列名之类

总结

作为切入一道赛题的基础,赛题理解是极其重要的,对于赛题的理解甚至会影响后续的特征工程构建以及模型的选择,最主要是会影响后续发展工作的方向,比如挖掘特征的方向或者存在问题解决问题的方向,对了赛题背后的思想以及赛题业务逻辑的清晰,也很有利于花费更少时间构建更为有效的特征模型,赛题理解要达到的地步是什么呢,把一道赛题转化为一种宏观理解的解决思路。
以下将从多方面对于此进行说明:

1) 赛题理解究竟是理解什么:
理解赛题是不是把一道赛题的背景介绍读一遍就OK了呢?并不是的,理解赛题其实也是从直观上梳理问题,分析问题是否可行的方法,有多少可行度,赛题做的价值大不大,理清一道赛题要从背后的赛题背景引发的赛题任务理解其中的任务逻辑,可能对于赛题有意义的外在数据有哪些,并对于赛题数据有一个初步了解,知道现在和任务的相关数据有哪些,其中数据之间的关联逻辑是什么样的。
对于不同的问题,在处理方式上的差异是很大的。如果用简短的话来说,并且在比赛的角度或者做工程的角度,就是该赛题符合的问题是什么问题,大概要去用哪些指标,哪些指标是否会做到线上线下的一致性,是否有效的利于我们进一步的探索更高线上分数的线下验证方法,在业务上,你是否对很多原始特征有很深刻的了解,并且可以通过EDA来寻求他们直接的关系,最后构造出满意的特征。

2) 有了赛题理解后能做什么: 在对于赛题有了一定的了解后,分析清楚了问题的类型性质和对于数据理解的这一基础上,是不是赛题理解就做完了呢?
并不是的,就像摸清了敌情后,我们至少就要有一些相应的理解分析,比如这题的难点可能在哪里,关键点可能在哪里,哪些地方可以挖掘更好的特征,用什么样得线下验证方式更为稳定,出现了过拟合或者其他问题,估摸可以用什么方法去解决这些问题,哪些数据是可靠的,哪些数据是需要精密的处理的,哪部分数据应该是关键数据(背景的业务逻辑下,比如CTR的题,一个寻常顾客大体会有怎么样的购买行为逻辑规律,或者风电那种题,如果机组比较邻近,相关一些风速,转速特征是否会很近似)。这时是在一个宏观的大体下分析的,有助于摸清整个题的思路脉络,以及后续的分析方向。

3) 赛题理解的-评价指标: 为什么要把这部分单独拿出来呢,因为这部分会涉及后续模型预测中两个很重要的问题: 1.
本地模型的验证方式,很多情况下,线上验证是有一定的时间和次数限制的,所以在比赛中构建一个合理的本地的验证集和验证的评价指标是很关键的步骤,能有效的节省很多时间。
2. 不同的指标对于同样的预测结果是具有误差敏感的差异性的,比如AUC,logloss,
MAE,RSME,或者一些特定的评价函数。是会有很大可能会影响后续一些预测的侧重点。

4) 赛题背景中可能潜在隐藏的条件:
其实赛题中有些说明是很有利益-都可以在后续答辩中以及问题思考中所体现出来的,比如高效性要求,比如对于数据异常的识别处理,比如工序流程的差异性,比如模型运行的时间,比模型的鲁棒性,有些的意识是可以贯穿问题思考,特征,模型以及后续处理的,也有些会对于特征构建或者选择模型上有很大益处,反过来如果在模型预测效果不好,其实有时也要反过来思考,是不是赛题背景有没有哪方面理解不清晰或者什么其中的问题没考虑到。

2.Baseline

baseline: 一个完整的结题框架
打比赛的流程分享: 先写一个baseline,看看得分,在baseline上修改,组队,模型融合(由简入深)
基本流程如下:

  1. 导函数工具箱
  2. 数据读取
    • head()简要浏览
    • describe()看每个字段的统计信息,如简要发现异常,看看字段分布一不一致
  3. EDA
  4. 特征构建
    • 提取数值特征
    • 特征筛选,如进行分布变换,通过业务逻辑构建特征
    • 填补缺失值
    • 构建训练和测试样本
  5. 模型训练与预测
    6 . 模型融合

3.探索性数据分析EDA

3.1介绍

目标

  • 数据表达了什么
  • 发掘数据的结构
  • 锁定重要特征
  • 检测异常和离群的数据
  • 根据数据找到最佳模型
    绘图
  • 原始图像,如散点图,柱状图
  • 统计图,均值,箱型,直方图 等
  • 多特征混合的图,对比差异
    量化方法
  • 区间估计,偏度,峰度,方差,分位数等
  • 数据范围
  • 大概的分布

3.2常用绘图

1.时序图
在这里插入图片描述
2. 直方图
在这里插入图片描述
3.密度曲线图
在这里插入图片描述
4.箱型图

在这里插入图片描述
5.小提琴图
在这里插入图片描述

3.3相关性,独立性分析

在这里插入图片描述
在这里插入图片描述

3.4问题解答

在这里插入图片描述
A:
回归分析的5个基本假设
大部分特征正态分布,所以希望标签也服从正态分布
长尾分布,用log转化,是的尾部数据的差异增大便于预测
在这里插入图片描述
A :

  1. 精度差
  2. 训练集的相同特征的车子可能会分到不同的价格区间,会导致分类模型难以收敛
    在这里插入图片描述
    A:当数据量足够大的时候,部分特征应当服从正态分布,而且部分模型要求特征应该满足正态分布
    详细可以看看这篇文章特征工程——转换为正态分布

在这里插入图片描述
A
特征工程,

Q怎么提升更快
A
先自己做到较高排名,然后找类似排名同学组队,或者找基友

3.5代码

在这里插入图片描述
在这里插入图片描述
这种属性下面值分布差异非常大的可以直接删掉,近似于就一种类型的值

在这里插入图片描述
在这里插入图片描述
power明显和大家不一样

总结

数据探索在机器学习中我们一般称为EDA(Exploratory Data Analysis):

是指对已有的数据(特别是调查或观察得来的原始数据)在尽量少的先验假定下进行探索,通过作图、制表、方程拟合、计算特征量等手段探索数据的结构和规律的一种数据分析方法。

数据探索有利于我们发现数据的一些特性,数据之间的关联性,对于后续的特征构建是很有帮助的。

对于数据的初步分析(直接查看数据,或.sum(),
.mean(),.descirbe()等统计函数)可以从:样本数量,训练集数量,是否有时间特征,是否是时许问题,特征所表示的含义(非匿名特征),特征类型(字符类似,int,float,time),特征的缺失情况(注意缺失的在数据中的表现形式,有些是空的有些是”NAN”符号等),特征的均值方差情况。

分析记录某些特征值缺失占比30%以上样本的缺失处理,有助于后续的模型验证和调节,分析特征应该是填充(填充方式是什么,均值填充,0填充,众数填充等),还是舍去,还是先做样本分类用不同的特征模型去预测。

对于异常值做专门的分析,分析特征异常的label是否为异常值(或者偏离均值较远或者事特殊符号),异常值是否应该剔除,还是用正常值填充,是记录异常,还是机器本身异常等。

对于Label做专门的分析,分析标签的分布情况等。

进步分析可以通过对特征作图,特征和label联合做图(统计图,离散图),直观了解特征的分布情况,通过这一步也可以发现数据之中的一些异常值等,通过箱型图分析一些特征值的偏离情况,对于特征和特征联合作图,对于特征和label联合作图,分析其中的一些关联性。

4.特征工程

特征工程( Feature Engineering):将数据转换为能更好地表示潜在问题
的特征,从而提高机器学习性能。
1.数据理解;
2.数据清洗
3.特征构造
4.特征选择
5.类别不平衡。

4.1数据理解

在这里插入图片描述

4.2数据清洗

在这里插入图片描述

4.3特征构造

在这里插入图片描述

4.4特征选择

在这里插入图片描述

4.5类别不平衡

在这里插入图片描述

4.6代码

1.特征构造会引入异常数据,如构造used_time,日期相减会出现月份或者天数为0的情况,转换时候会出错

2.为什么要进行数据分桶

为什么要做One-hot编码呢,原因有很多

  1. 离散后稀疏向量内积乘法运算速度更快,计算结果也方便存储,容易扩展;
  2. 离散后的特征对异常值更具鲁棒性,如 age>30 为 1 否则为 0,对于年龄为 200 的也不会对模型造成很大的干扰;
  3. LR 属于广义线性模型,表达能力有限,经过离散化后,每个变量有单独的权重,这相当于引入了非线性,能够提升模型的表达能力,加大拟合;
  4. 离散后特征可以进行特征交叉,提升表达能力,由 M+N 个变量编程 M*N 个变量,进一步引入非线形,提升了表达能力;
  5. 特征离散后模型更稳定,如用户年龄区间,不会因为用户年龄长了一岁就变化
data['power_bin'] = pd.cut(data['power'], bin, labels=False)

3.归一化

要用训练集的最大最小值进行归一化
长尾分布链接先取log,再归一化

4.类别特征one-hot 编码

data = pd.get_dummies(data, columns=['model', 'brand', 'bodyType', 'fuelType',
                                     'gearbox', 'notRepairedDamage', 'power_bin'])

5.特征选择
相关性过滤,相关系数和数据分布有关,和标签相关性比较小的特征,一般再实验后才考虑是否删掉

print(data['power'].corr(data['price'], method='spearman'))

特征选择方法
包裹式的特征选择

from mlxtend.feature_selection import SequentialFeatureSelector as SFS
from sklearn.linear_model import LinearRegression
sfs = SFS(LinearRegression(),
           k_features=10,
           forward=True,
           floating=False,
           scoring = 'r2',
           cv = 0)

4.5Q&A

1在这里插入图片描述
2在这里插入图片描述
3
在这里插入图片描述
A :一次特征构造比较方便,保证一致性; √

4 在这里插入图片描述
A:EAD的各种图表主要是用来方便展示,EDA和特征工程起始有交叉

5
在这里插入图片描述
就是这个表示3个程度更不可能的异常值范围

总结

特征工程是比赛中最至关重要的的一块,特别的传统的比赛,大家的模型可能都差不多,调参带来的效果增幅是非常有限的,但特征工程的好坏往往会决定了最终的排名和成绩。

特征工程的主要目的还是在于将数据转换为能更好地表示潜在问题的特征,从而提高机器学习的性能。比如,异常值处理是为了去除噪声,填补缺失值可以加入先验知识等。

特征构造也属于特征工程的一部分,其目的是为了增强数据的表达。

有些比赛的特征是匿名特征,这导致我们并不清楚特征相互直接的关联性,这时我们就只有单纯基于特征进行处理,比如装箱,groupby,agg
等这样一些操作进行一些特征统计,此外还可以对特征进行进一步的 log,exp
等变换,或者对多个特征进行四则运算(如上面我们算出的使用时长),多项式组合等然后进行筛选。由于特性的匿名性其实限制了很多对于特征的处理,当然有些时候用
NN 去提取一些特征也会达到意想不到的良好效果。

对于知道特征含义(非匿名)的特征工程,特别是在工业类型比赛中,会基于信号处理,频域提取,丰度,偏度等构建更为有实际意义的特征,这就是结合背景的特征构建,在推荐系统中也是这样的,各种类型点击率统计,各时段统计,加用户属性的统计等等,这样一种特征构建往往要深入分析背后的业务逻辑或者说物理原理,从而才能更好的找到
magic。

当然特征工程其实是和模型结合在一起的,这就是为什么要为 LR NN
做分桶和特征归一化的原因,而对于特征的处理效果和特征重要性等往往要通过模型来验证。

总的来说,特征工程是一个入门简单,但想精通非常难的一件事

5.建模与调参

建模与调参
1 .统计学习分类
在这里插入图片描述
2. 验证方法
在这里插入图片描述
3.评价函数和目标函数的区别
评价函数只用评价模型是好是坏
目标函数则会影响模型的优化策略

6.模型融合

比赛后期,组队模型融合,前期模型不要特别类似,但是各自模型都要不错

在这里插入图片描述
算术平均融合的权重不要差异太大,模型的评分差异也不要太大
在这里插入图片描述
存在的问题:容易过拟合

  • 次级分类器一般不会选择太复杂,LR,岭回归,逻辑回归
  • k折交叉验证

后处理:对预测值认为处理,比如把负数值变成正数之类的

Q&A

1.在这里插入图片描述
A:
先用简单的模型,吧特征工程做到最好,然后再考虑更复杂更优化的模型在这里插入图片描述
A:遍历切片,找最好的方案

总结

比赛的融合这个问题,个人的看法来说其实涉及多个层面,也是提分和提升模型鲁棒性的一种重要方法:

1)结果层面的融合,这种是最常见的融合方法,其可行的融合方法也有很多,比如根据结果的得分进行加权融合,还可以做Log,exp处理等。在做结果融合的时候,有一个很重要的条件是模型结果的得分要比较近似,然后结果的差异要比较大,这样的结果融合往往有比较好的效果提升。

2)特征层面的融合,这个层面其实感觉不叫融合,准确说可以叫分割,很多时候如果我们用同种模型训练,可以把特征进行切分给不同的模型,然后在后面进行模型或者结果融合有时也能产生比较好的效果。

3)模型层面的融合,模型层面的融合可能就涉及模型的堆叠和设计,比如加Staking层,部分模型的结果作为特征输入等,这些就需要多实验和思考了,基于模型层面的融合最好不同模型类型要有一定的差异,用同种模型不同的参数的收益一般是比较小的。

7.语法上的一些笔记

7.1字典的字典创建df

在这里插入图片描述

7.2 深浅copy

深copy开辟内存复制一份,修改各自影响
浅copy两个引用指向同一个数据,修改互相影响
但是平常我们做一些不加inplace的修改起始都是返回一个修改后的深copy,所以深copy这个操作感知不强
在这里插入图片描述在这里插入图片描述

7.3groupby后的数据结构到底什么样?

series 索引是被分组的属性的不重复的值, 对应的是一个新的df
在这里插入图片描述

7.4groupby和aggregate、transform、apply以及filter的区别

groupby和aggregate、transform、apply以及filter的区别

8.notebook

446分,感谢wjz1994同学

下载

  • 2
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
天池大赛是一个面向数据科学竞赛的平台,近年来二手车交易价格预测一直是热门赛题之一。在这个比赛中,参赛者需要利用给定的二手车交易数据集,通过数据挖掘机器学习的方法,预测二手车交易价格。这不仅对于参赛者来说是一次实战锻炼,同时也对于二手车交易市场具有一定的指导意义。 CSND作为一个大型的IT技术社区,对于数据科学和机器学习领域有着丰富的技术资源和人才储备。因此,CSND的技术团队及社区成员在天池大赛二手车交易价格预测中表现突出。他们不仅能够熟练运用数据挖掘机器学习的算法,还能够结合实际场景进行问题建模和特征工程,提高了预测模型的准确性和鲁棒性。 在比赛中,CSND的选手们使用了多种机器学习算法,例如线性回归、决策树、随机森林、GBDT等,针对数据集的特点进行了合理的选择和调参。同时,他们还对缺失值、异常值和分类特征进行了有效的处理,提高了模型的稳健性。在模型评估和优化方面,CSND选手们还运用了交叉验证、模型融合等方法,进一步提升了预测效果。 总的来说,CSND在天池大赛二手车交易价格预测中展现出了数据科学领域的实力和水平,为整个社区树立了一个良好的技术典范。通过这样的比赛,CSND的技术团队和社区成员们得到了技术上的提升和实战经验的积累,也为二手车交易市场的定价和交易提供了有益的参考。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值