文章目录

  • 1.赛题理解
    • 1.1背景
    • 1.2 赛制
    • 1.3赛题数据
    • 1.4评测标准
    • 1.5结果格式
    • 总结
  • 2.Baseline
  • 3.探索性数据分析EDA
    • 3.1介绍
    • 3.2常用绘图
    • 3.3相关性,独立性分析
    • 3.4问题解答
    • 3.5代码
    • 总结
  • 4.特征工程
    • 4.1数据理解
    • 4.2数据清洗
    • 4.3特征构造
    • 4.4特征选择
    • 4.5类别不平衡
    • 4.6代码
    • 4.5Q&A
    • 总结
  • 5.建模与调参
  • 6.模型融合
    • Q&A
    • 总结
  • 7.语法上的一些笔记
    • 7.1字典的字典创建df
    • 7.2 深浅copy
    • 7.3groupby后的数据结构到底什么样?
    • 7.4groupby和aggregate、transform、apply以及filter的区别
  • 8.notebook

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同学

下载

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

  1. 【算法竞赛学习】二手车交易价格预测-Task5模型融合

    二手车交易价格预测-Task5 模型融合 五.模型融合 Tip:此部分为零基础入门数据挖掘的 Task5 模型融合 部分,带你来了解各种模型结果的融合方式,在比赛的攻坚时刻冲刺Top,欢迎大家后续多多 ...

  2. 【算法竞赛学习】二手车交易价格预测-Task4建模调参

    二手车交易价格预测-Task4 建模调参 四.建模与调参 Tip:此部分为零基础入门数据挖掘的 Task4 建模调参 部分,带你来了解各种模型以及模型的评价和调参策略,欢迎大家后续多多交流. 赛题:零 ...

  3. 【算法竞赛学习】二手车交易价格预测-Task3特征工程

    二手车交易价格预测-Task3 特征工程 三. 特征工程目标 Tip:此部分为零基础入门数据挖掘的 Task3 特征工程部分,带你来了解各种特征工程以及分析方法,欢迎大家后续多多交流. 赛题:零基础入 ...

  4. 【算法竞赛学习】二手车交易价格预测-Task2数据分析

    二手车交易价格预测-Task2 数据分析 二. EDA-数据探索性分析 Tip:此部分为零基础入门数据挖掘的 Task2 EDA-数据探索性分析 部分,带你来了解数据,熟悉数据,和数据做朋友,欢迎大家 ...

  5. 【算法竞赛学习】二手车交易价格预测-Task1赛题理解

    二手车交易价格预测-Task1 赛题理解 一. 赛题理解 Tip:此部分为零基础入门数据挖掘的 Task1 赛题理解 部分,为大家入门数据挖掘比赛提供一个基本的赛题入门讲解,欢迎后续大家多多交流. 赛 ...

  6. 【算法竞赛学习】二手车交易价格预测-Baseline

    二手车交易价格预测-Baseline Baseline-v1.0 版 Tip:这是一个最初始baseline版本,抛砖引玉,为大家提供一个基本Baseline和一个竞赛流程的基本介绍,欢迎大家多多交流 ...

  7. 阿里天池二手车交易价格预测(一)——EDA

    阿里天池二手车交易价格预测(一)--EDA Exploratory Data Analysis是数据科学领取理解和分析数据的方法,通过不断的收集.分析和假设验证,以取得对数据的深入理解. EDA的价值 ...

  8. 天池_二手车交易价格预测

    二手车交易价格预测 赛题链接天池: https://tianchi.aliyun.com/competition/entrance/231784/introduction 笔记记录:Github 主要 ...

  9. 天池大赛——二手车交易价格预测方案分享(一)

    这个比赛是天池的一个数据挖掘入门赛,要求根据提供的数据预测二手车的交易价格,属于回归问题,此篇主要分享一下特征工程和基础模型方面的思路. 1. 特征基本统计 date_cols = ['regDate ...

  10. python二手车价格预测_天池_二手车交易价格预测数据分析

    字典 FieldDescription SaleID 交易ID,唯一编码 name 汽车交易名称,已脱敏 regDate 汽车注册日期,例如20160101,2016年01月01日 model 车型编 ...

最新文章

  1. 1400小时开源语音数据集,你想要都在这儿
  2. 数据结构实验之二叉树六:哈夫曼编码
  3. 阅读代码工具:Visual Studio Code
  4. SAP MM 评估类型 评估类别
  5. DCMTK:读取DICOM图像,并使用设置创建PGM位图
  6. 数据库面试题【六、Sql的优化】
  7. android 自定义控件viewgroup,Android自定义控件ViewGroup
  8. jQuery中文手册, jQuery API, jQuery UI, 分页插件 下载
  9. mysql数据库事务隔离级别是_数据库事务隔离级别-MySQL为例 · Sean
  10. uva 10158(并查集)
  11. 马云:CFO 不能做 CEO;腾讯推短视频“哈皮”;三星中国份额跌至 2% | 极客头条...
  12. FPGA 串口接收不准确,有误码
  13. 怎样通过微PE工具箱制作启动盘?
  14. Android框架揭秘读书笔记
  15. Taro 如何开始微信小程序的开发
  16. Dynamics 365 自定义图表的颜色
  17. Portillo’s上市首日涨幅45.5%,资本爱上吃“热狗”?
  18. 服务器存储系统的模式,服务器的三种存储方式
  19. 【算法竞赛学习笔记】佩尔方程-数学提升计划
  20. 创建一个SpringBoot工程

热门文章

  1. 全网最硬核 Java 新内存模型解析与实验 - 4. Java 新内存访问方式与实验
  2. myOracleTool
  3. Windows上利用Zerotier配置moon无法连接
  4. 利用shell脚本自动更新部署SpringBoot项目
  5. 2022最新总结【Java岗面试核心笔记】速成版
  6. win7关闭系统索引服务器,如何优化Win7系统之如何关闭索引服务
  7. CSS总结(基本文本和字体样式)
  8. 计算机在医学领域的最新应用领域,计算机技术在医学领域的具体应用及发展研究...
  9. 赵一新:多元数据解构城市和交通发展规律
  10. IPFS官方周报(第19期)