1. 写在前面
今天是本系列的第一篇赛题理解,这一个算是热身,作为切入一道赛题的基础,赛题理解是极其重要的,对于赛题的理解甚至会影响后续的特征工程构建以及模型的选择,最主要是会影响后续发展工作的方向,比如挖掘特征的方向或者存在问题解决问题的方向,正确了解赛题背后的思想以及赛题业务逻辑的清晰,也很有利于花费更少时间构建更为有效的特征模型。 今天我们就从赛题的理解出发, 首先了解一下这次赛题的概况和数据,从中分析赛题以及大致的处理方式, 其次我们了解一些模型评测的指标,最后对赛题的理解整理一些经验(来自Datawhale团队的零基础入门数据挖掘)
大纲如下:
- 赛题的了解(这里面会涉及赛题概况和分析)
- 模型的预测指标
- 数据读取和指标评价的代码实战
- 总结tricks
Ok, let’s go!
2. 赛题的分析
2.1 赛题概况
这次比赛是天池和Datawhale联手举办的一个数据挖掘的入门竞赛,是要求根据给定的二手车的数据集,来预测二手车的交易价格。
该数据来自某交易平台的二手车交易记录,总数据量超过40w,包含31列变量信息,其中15列为匿名变量。为了保证比赛的公平性,将会从中抽取15万条作为训练集,5万条作为测试集A,5万条作为测试集B,同时会对name、model、brand和regionCode等信息进行脱敏。
2.2 数据概况
这次的数据集是二手车的交易记录, 官方提供三个文件供下载:
used_car_train_20200301.csv: 这是训练集部分, 150000条交易记录, 31列,其中30列是变量信息,1一列价格信息。
used_car_testA_20200301.csv: 这是测试集A部分, 里面是50000个测试样本,依旧是30列特征信息,没有价格列(这个我们需要建立模型自己预测)
user_car_sample_submit.csv:这一个是看一下最后结果的提交格式
下面看一下训练集和测试集的30个字段的含义:
其中后面的V系列特征是根据汽车的评论和标签等大量信息得到的embedding向量,不知道具体含义了。
初步看这个表,可以大体上了解一下每一列到底是什么样的数据格式,代表着什么信息,这样的好处是后续处理的时候能够大体上知道哪些字段可能对价格的预测没有作用(比如ID, name等), **这样我们后面就可以删掉这些字段; 也看看每一个字段的类型,比如上面的字段中有些数值型的,像发动机功率, 汽车行驶公里等, 还有些类别型的,像车身类型, 燃油类型,变速箱这些字段, 我们也得大体看一下,做到心中有数,这样的好处是后续处理的时候至少把数值型的和类别型的数据分开进行处理, 类别型的该独热的独热,并且缺失值处理的时候,特征工程的时候,数值型和类别型的字段处理方式是不一样的,所以在这里就可以先留点心 。
所以通过初步看这个表可以给我们的信息就是有30个字段, 15个匿名的,我们不知道具体含义,先可以不管, 15个知道含义的,我们得重点处理分析,这里面我们可以排除一些对价格预测无作用的字段,还得数值型和类别型的字段分开处理。
2.3 赛题分析
有了前面的两步,就可以稍微的分析一下这个任务了,我们的目标就是根据给的训练集的数据,建立一个模型,然后去预测测试集里面的每个样本的价格。
因为预测的价格是连续型的数据,所以这是一个典型的回归任务,知道是回归任务之后,我们就基本上能够确定出用于回归预测的模型(Regressor系列),然后也能确定出评价指标(回归任务的评价指标)
这样,基本上根据这个赛题,我们大体上就可以梳理出一个简单的处理框架:
- 数据集导入,然后进行初步探索
- 数据挖掘的过程
- 建立回归模型的过程
- 使用回归模型的评价指标对模型评价,选出好的模型
- 预测结果的过程
有了这个框架,每一步大体做什么就有数了。
3. 评价指标
赛题给出的评价指标是MAE(Mean Absolute Error)
MAE越小, 说明模型预测的越准确。
这里赛题既然给出了评价指标,我们肯定是用这个来评价模型了, 当然这里整理一下其他的用于分类或者回归的评价指标:
回归预测类模型的评估指标: 平均绝对误差(Mean Absolute Error, MAE)、均方误差(Mean Squared Error, MSE), 平均绝对百分误差(Mean Absolute Percentage Error, MAPE), 均方根误差(Root Mean Squared Error), R2(R-Square),这些具体怎么算车哥在零基础入门数据挖掘中总结的很清楚,Datawhale 零基础入门数据挖掘-Task1 赛题理解。
这些指标,sklearn库中都已经集成,想用的话直接掉包即可:
1
from sklearn.metrics import r2_score, mean_absolute_error, mean_squared_error
分类算法常见的评估指标:accuracy score, 精准率,召回率, F1值, ROC-AUC曲线等,混淆矩阵等,这个我之前整理过算法模型评估之混淆矩阵,accuracy,查准率,查全率,AUC(ROC)等小总结
同样,sklearn中已经集成,直接调用即可。
1
from sklearn.metrics import accuracy_scorec, precision_score, recall_score, f1_score, auc, confusion_matrix
4. 数据读取和指标评价的代码实战
4.1 数据读取pandas
1 | import pandas as pd |
4.2 分类指标评价计算示例
1 | import numpy as np |
4.3 回归指标评价计算示例
1 | import numpy as np |
5. 总结
这次算是零基础数据挖掘入门系列的热身,主要是进行了二手车价格预测的赛题分析和数据集的了解,然后是评价指标的简要介绍,最后是一个小的代码实操。
今天的学习比较简单,下面整理一下关于赛题理解的一些经验(来自Datawhale的零基础入门数据挖掘的团队整理):
- 赛题理解究竟是在理解什么?
理解赛题是从直观上对问题进行梳理, 分析问题的目标,到底要让做什么事情
分析问题的可行度,从赛题背景引发的赛题任务出发理解任务逻辑, 探索对赛题任务有意义的外在数据
对赛题数据有一个初步了解,知道和任务相关的数据字段和数据字段的类型, 数据之间的内在关联等。这样有利于后面的处理
对于不同的问题,在处理方式上的差异是很大的。如果用简短的话来说,并且在比赛的角度或者做工程的角度,就是该赛题符合的问题是什么问题,大概要去用哪些指标,哪些指标是否会做到线上线下的一致性,是否有效的利于我们进一步的探索更高线上分数的线下验证方法,在业务上,你是否对很多原始特征有 很深刻的了解,并且可以通过EDA来寻求他们直接的关系,最后构造出满意的特征。
- 有了赛题理解之后,我们该做什么?
在对于赛题有了一定的了解后,分析清楚了问题的类型性质和对于数据理解 的这一基础上,是不是赛题理解就做完了呢? 并不是的
我们至少要有一些相应的理解分析,比如这题的难点可能在哪里,关键点可能在哪里,哪些地方可以挖掘更好的特征.
用什么样得线下验证方式更为稳定,出现了过拟合或者其他问题,估摸可以用什么方法去解决这些问题
哪些数据是可靠的,哪些数据是需要精密的处理的,哪部分数据应该是关键数据(背景的业务逻辑下,比如CTR的题,一个 寻常顾客大体会有怎么样的购买行为逻辑规律,或者风电那种题,如果机组比较邻近,相关一些风速,转速 特征是否会很近似)
这时是在一个宏观的大体下分析的,有助于摸清整个题的思路脉络,以及后续的分析方向。
- 赛题理解的评价指标
这部分会涉及后续模型预测中两个很重要的问题:
1. 本地模型的验证方式,很多情况下,线上验证是有一定的时间和次数限制的,所以在比赛中构建一个合理的本地的验证集和验证的评价指标是很关键的步骤,能有效的节省很多时间。
2. 不同的指标对于同样的预测结果是具有误差敏感的差异性的,比如AUC,logloss, MAE,RSME,或者一些特定的评价函数。是会有很大可能会影响后续一些预测的侧重点。
- 赛题背景中可能潜在隐藏的条件:
其实赛题中有些说明是很有利益的, 都可以在后续答辩中以及问题思考中 所体现出来的,比如高效性要求,比如对于数据异常的识别处理,比如工序流程的差异性,比如模型运行的 时间,模型的鲁棒性,有些的意识是可以贯穿问题思考,特征,模型以及后续处理的,也有些会对于特征构建或者选择模型上有很大益处,反过来如果在模型预测效果不好,其实有时也要反过来思考,是不是赛题 背景有没有哪方面理解不清晰或者什么其中的问题没考虑到。
今天的整理就到这里了,热身结束, 后面就是真正的对于这个比赛的实战了,分为数据探索性分析, 数据清洗,特征工程,建模调参和模型融合这几个步骤, 这五个步骤,会有五篇文章进行整理,也算是对之前学习的知识和这次学习知识的一个大整合,通过这几个步骤,应该可以入门数据挖掘了,后面就是不断的通过比赛和项目进行自己探索,总结的过程了,加油 😉。
对了,关于这个比赛, 今天玩了那个baseline版本,不过我稍微改了一下, 提交了两次,第一次是把预测值过大的样本删除掉,结果是803.0332, 然后我感觉这样做可能不太妥当,毕竟这种极差值对于模型影响还是比较大的,所以第二次我保留了下来, 又训练提交,这次成绩到了658.5030, 效果好了一些,可以发现这种极差值带来的误差影响会非常大。对于price的离群点可能要做专门的分析。
参考: