思维导图:零基础入门数据挖掘的学习路径

1. 写在前面

零基础入门数据挖掘系列是记录自己在Datawhale举办的数据挖掘专题学习中的所学和所想, 该系列笔记使用理论结合实践的方式,整理数据挖掘相关知识,提升在实际场景中的数据分析、数据清洗,特征工程、建模调参和模型融合等技能。所以这个系列笔记共五篇重点内容,也分别从上面五方面进行整理学习,既是希望能对知识从实战的角度串联回忆,加强动手能力的锻炼,也希望这五篇笔记能够帮助到更多喜欢数据挖掘的小伙伴,我们一起学习,一起交流吧。

既然是理论结合实践的方式,那么我们是从天池的一个二手车交易价格预测比赛出发进行学习,既可以学习到知识,又可以学习如何入门一个数据竞赛, 下面我们开始吧。

今天是本系列的第一篇赛题理解,这一个算是热身,作为切入一道赛题的基础,赛题理解是极其重要的,对于赛题的理解甚至会影响后续的特征工程构建以及模型的选择,最主要是会影响后续发展工作的方向,比如挖掘特征的方向或者存在问题解决问题的方向,正确了解赛题背后的思想以及赛题业务逻辑的清晰,也很有利于花费更少时间构建更为有效的特征模型。 今天我们就从赛题的理解出发, 首先了解一下这次赛题的概况和数据,从中分析赛题以及大致的处理方式, 其次我们了解一些模型评测的指标,最后对赛题的理解整理一些经验(来自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系列),然后也能确定出评价指标(回归任务的评价指标)

这样,基本上根据这个赛题,我们大体上就可以梳理出一个简单的处理框架:

  1. 数据集导入,然后进行初步探索
  2. 数据挖掘的过程
  3. 建立回归模型的过程
  4. 使用回归模型的评价指标对模型评价,选出好的模型
  5. 预测结果的过程

有了这个框架,每一步大体做什么就有数了。

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库中都已经集成,想用的话直接掉包即可:

    from sklearn.metrics import r2_score, mean_absolute_error, mean_squared_error
    
  • 分类算法常见的评估指标:accuracy score, 精准率,召回率, F1值, ROC-AUC曲线等,混淆矩阵等,这个我之前整理过算法模型评估之混淆矩阵,accuracy,查准率,查全率,AUC(ROC)等小总结

    同样,sklearn中已经集成,直接调用即可。

    from sklearn.metrics import accuracy_scorec, precision_score, recall_score, f1_score, auc, confusion_matrix
    

4. 数据读取和指标评价的代码实战

4.1 数据读取pandas

import pandas as pd
import numpy as np
path = './data/'
## 1) 载入训练集和测试集;
Train_data = pd.read_csv(path+'train.csv', sep=' ')   # 间隔符这次读的时候不要忘,否则读取错误
Test_data = pd.read_csv(path+'testA.csv', sep=' ')
print('Train data shape:',Train_data.shape)
print('TestA data shape:',Test_data.shape)

4.2 分类指标评价计算示例

import numpy as npfrom sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score, roc_auc_score, confusion_matrixy_pred = [0, 1, 0, 1]
y_true = [0, 1, 1, 1] print('ACC:',accuracy_score(y_true, y_pred))
print('Precision',precision_score(y_true, y_pred))
print('Recall',recall_score(y_true, y_pred))
print('F1-score:',f1_score(y_true, y_pred))
print('confusion_matrix: ', confusion_matrix(y_true, y_pred)# AUC
y_true = np.array([0, 0, 1, 1])
y_scores = np.array([0.1, 0.4, 0.35, 0.8])
print('AUC socre:',roc_auc_score(y_true, y_scores))

4.3 回归指标评价计算示例

import numpy as np
from sklearn import metrics# MAPE需要自己实现
def mape(y_true, y_pred): return np.mean(np.abs((y_pred - y_true) / y_true))y_true = np.array([1.0, 5.0, 4.0, 3.0, 2.0, 5.0, -3.0])
y_pred = np.array([1.0, 4.5, 3.8, 3.2, 3.0, 4.8, -2.2])
# MSE
print('MSE:',metrics.mean_squared_error(y_true, y_pred))
# RMSE
print('RMSE:',np.sqrt(metrics.mean_squared_error(y_true, y_pred)))
# MAE
print('MAE:',metrics.mean_absolute_error(y_true, y_pred))
# MAPE
print('MAPE:',mape(y_true, y_pred))## R2-score
y_true = [3, -0.5, 2, 7]
y_pred = [2.5, 0.0, 2, 8]
print('R2-score:',metrics.r2_score(y_true, y_pred))

5. 总结

这次算是零基础数据挖掘入门系列的热身,主要是进行了二手车价格预测的赛题分析和数据集的了解,然后是评价指标的简要介绍,最后是一个小的代码实操。

今天的学习比较简单,下面整理一下关于赛题理解的一些经验(来自Datawhale的零基础入门数据挖掘的团队整理):

  • 赛题理解究竟是在理解什么?

    理解赛题是从直观上对问题进行梳理, 分析问题的目标,到底要让做什么事情

    分析问题的可行度,从赛题背景引发的赛题任务出发理解任务逻辑, 探索对赛题任务有意义的外在数据

    对赛题数据有一个初步了解,知道和任务相关的数据字段和数据字段的类型, 数据之间的内在关联等。这样有利于后面的处理

    对于不同的问题,在处理方式上的差异是很大的。如果用简短的话来说,并且在比赛的角度或者做工程的角度,就是该赛题符合的问题是什么问题,大概要去用哪些指标,哪些指标是否会做到线上线下的一致性,是否有效的利于我们进一步的探索更高线上分数的线下验证方法,在业务上,你是否对很多原始特征有 很深刻的了解,并且可以通过EDA来寻求他们直接的关系,最后构造出满意的特征。

  • 有了赛题理解之后,我们该做什么?

    在对于赛题有了一定的了解后,分析清楚了问题的类型性质和对于数据理解 的这一基础上,是不是赛题理解就做完了呢? 并不是的

    我们至少要有一些相应的理解分析,比如这题的难点可能在哪里,关键点可能在哪里,哪些地方可以挖掘更好的特征.

    用什么样得线下验证方式更为稳定,出现了过拟合或者其他问题,估摸可以用什么方法去解决这些问题

    哪些数据是可靠的,哪些数据是需要精密的处理的,哪部分数据应该是关键数据(背景的业务逻辑下,比如CTR的题,一个 寻常顾客大体会有怎么样的购买行为逻辑规律,或者风电那种题,如果机组比较邻近,相关一些风速,转速 特征是否会很近似)

    这时是在一个宏观的大体下分析的,有助于摸清整个题的思路脉络,以及后续的分析方向。

  • 赛题理解的评价指标

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

  • 赛题背景中可能潜在隐藏的条件:

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

今天的整理就到这里了,热身结束, 后面就是真正的对于这个比赛的实战了,分为数据探索性分析, 数据清洗,特征工程,建模调参和模型融合这几个步骤, 这五个步骤,会有五篇文章进行整理,也算是对之前学习的知识和这次学习知识的一个大整合,通过这几个步骤,应该可以入门数据挖掘了,后面就是不断的通过比赛和项目进行自己探索,总结的过程了,加油

零基础数据挖掘入门系列(一) - 赛题理解相关推荐

  1. 零基础数据挖掘入门系列(二) - 数据的探索性(EDA)分析

    思维导图:零基础入门数据挖掘的学习路径 1. 写在前面 零基础入门数据挖掘是记录自己在Datawhale举办的数据挖掘专题学习中的所学和所想, 该系列笔记使用理论结合实践的方式,整理数据挖掘相关知识, ...

  2. 零基础数据挖掘入门系列(三) - 数据清洗和转换技巧

    思维导图:零基础入门数据挖掘的学习路径 1. 写在前面 零基础入门数据挖掘是记录自己在Datawhale举办的数据挖掘专题学习中的所学和所想, 该系列笔记使用理论结合实践的方式,整理数据挖掘相关知识, ...

  3. 零基础数据挖掘入门系列(四) - 特征工程

    思维导图:零基础入门数据挖掘的学习路径 1. 写在前面 零基础入门数据挖掘是记录自己在Datawhale举办的数据挖掘专题学习中的所学和所想, 该系列笔记使用理论结合实践的方式,整理数据挖掘相关知识, ...

  4. 零基础数据挖掘入门系列(五) - 模型建立与调参

    思维导图:零基础入门数据挖掘的学习路径 1. 写在前面 零基础入门数据挖掘是记录自己在Datawhale举办的数据挖掘专题学习中的所学和所想, 该系列笔记使用理论结合实践的方式,整理数据挖掘相关知识, ...

  5. 【Python零基础快速入门系列 | 03】AI数据容器底层核心之Python列表

    • 这是机器未来的第7篇文章 原文首发地址:https://blog.csdn.net/RobotFutures/article/details/124957520 <Python零基础快速入门 ...

  6. 【Python零基础快速入门系列 | 07】浪漫的数据容器:成双成对之字典

    这是机器未来的第11篇文章 原文首发链接:https://blog.csdn.net/RobotFutures/article/details/125038890 <Python零基础快速入门系 ...

  7. 视频教程-零基础JS入门系列课程(2)之JS语法基础精讲-JavaScript

    零基础JS入门系列课程(2)之JS语法基础精讲 螺钉课堂讲师,擅长Vue.React.ReactNative.NodeJS等前端框架及技术 邓老师 ¥59.00 立即订阅 扫码下载「CSDN程序员学院 ...

  8. 零基础前端入门系列(八)

    CSS精讲(二) CSS体系知识介绍 选择器优先级 为什么关注优先级 优先级处理原则 !important 和 内联样式 样式继承 一个继承的例子 继承属性和非继承属性 范例 选择器权重计算 范例1 ...

  9. 易语言零基础新手入门系列教程 第一课

    机器人小鑫易语言源码(作业用): 机器人小鑫源码 - 第一课.zip 视频教程文字版: 新手学习易语言的几点建议 1.由浅入深.由易到难.循序渐进,切勿急功近利,想一步登天! 这是学习的一般规律,学习 ...

最新文章

  1. 星际2正在等待暴雪服务器的响应,win7系统玩星际2一直停留在"正在更新暴雪启动器"页面的解决方法...
  2. 表达式 控件 html,获取HTML表单控件的UrlEncode字符串表达式
  3. NLTK命名实体识别NER
  4. java.io几种读写文件的方式
  5. 站长必看系列:完全揭密百度和谷歌收录规律
  6. linux redis 3.0.7,linux虚拟机上安装配置redis3.0.7
  7. POJ - 2352 Stars(线段树/树状数组)
  8. 浅谈 UNIX、Linux、ios、android 他们之间的关系
  9. Cookie和会话Session
  10. 机器学习 综合评价_PyCaret:机器学习综合
  11. WPF中播放Flash动画
  12. springboot maven项目打jar包
  13. 软件设计师19-系统开发和运行02
  14. 字节工程师薪资排世界第五,中位数 43 万美元,2021 全球程序员收入报告出炉!...
  15. python 特征选择卡方_4. 机器学习之特征选择-Python代码
  16. 区块链教程Fabric1.0源代码分析flogging(Fabric日志系统)
  17. java CANUSB_周立功USBCAN-II 上位机开发(MFC)
  18. 如何解决CC2640用IAR下载固件出现Fatal error: Failed to load the CPU core driver Session aborted的问题
  19. android 实现刮刮乐刮奖效果
  20. NLP(三十九)使用keras-bert实现完形填空及简单的文本纠错功能

热门文章

  1. 丝网印刷电极 WE AE RE
  2. TikTok小店门槛变化
  3. 判断按钮的点击和抬起
  4. python判断类型是float_验证浮点数据类型python
  5. 榆熙电商:拼多多补单发货要注意什么?
  6. Shell脚本和shell
  7. python xy打不开、没有关联程序_解决该文件没有与之关联的程序来执行该操作
  8. YOLO V5 使用
  9. wav文件头格式详解
  10. unity射击游戏:超萌射手(1)使用EasyTouch3.0控制主角