零基础入门数据挖掘-Task1 赛题理解

零基础入门数据挖掘-Task1 赛题理解

xiaoyao 修改之后

一、 赛题理解

Tip:此部分为零基础入门数据挖掘的 Task1 赛题理解部分,为入门数据挖掘比赛提供一个基本的赛题入门讲解。

赛题:零基础入门数据挖掘 - 二手车交易价格预测

地址:https://tianchi.aliyun.com

1.1 学习目标

  • 理解赛题数据和目标,清楚评分体系。
  • 完成相应报名,下载数据和结果提交打卡(可提交示例结果),熟悉比赛流程

1.2 了解赛题

- 赛题概况
- 数据概况
- 预测指标
- 分析赛题

1.2.1 赛题概况

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

通过这道赛题来引导大家走进 AI 数据竞赛的世界,主要针对于于竞赛新人进行自我练
习、自我提高。

1.2.2 数据概况


一般而言,对于数据在比赛界面都有对应的数据概况介绍(匿名特征除外),说明列的性质特征。了解列的性质会有助于我们对于数据的理解和后续分析。
Tip:匿名特征,就是未告知数据列所属的性质的特征列。


train.csv

  • SaleID - 销售样本ID
  • name - 汽车编码
  • regDate - 汽车注册时间
  • model - 车型编码
  • brand - 品牌
  • bodyType - 车身类型
  • fuelType - 燃油类型
  • gearbox - 变速箱
  • power - 汽车功率
  • kilometer - 汽车行驶公里
  • notRepairedDamage - 汽车有尚未修复的损坏
  • regionCode - 看车地区编码
  • seller - 销售方
  • offerType - 报价类型
  • creatDate - 广告发布时间
  • price - 汽车价格
  • v_0’, ‘v_1’, ‘v_2’, ‘v_3’, ‘v_4’, ‘v_5’, ‘v_6’, ‘v_7’, ‘v_8’, ‘v_9’, ‘v_10’, ‘v_11’, ‘v_12’, ‘v_13’,‘v_14’ 【匿名特征,包含v0-14在内15个匿名特征】

数字全都脱敏处理,都为label encoding形式,即数字形式

1.2.3 预测指标


本赛题的评价标准为MAE(Mean Absolute Error):

M A E = ∑ i = 1 n ∣ y i − y ^ i ∣ n (式1) MAE=\frac{\sum_{i=1}^{n}\left|y_{i}-\hat{y}_{i}\right|}{n}\tag{式1} MAE=ni=1nyiy^i(1)
其中 y i y_{i} yi代表第 i i i个样本的真实值,其中 y ^ i \hat{y}_{i} y^i代表第 i i i个样本的预测值。


一般问题评价指标说明:

什么是评估指标:

评估指标即是我们对于一个模型效果的数值型量化。(有点类似与对于一个商品评价打分,而这是针对于模型效果和理想效果之间的一个打分)

一般来说分类和回归问题的评价指标有如下一些形式:

分类算法常见的评估指标如下:
  • 对于二类分类器/分类算法,评价指标主要有accuracy, [Precision,Recall,F-score,Pr曲线],ROC-AUC曲线。
  • 对于多类分类器/分类算法,评价指标主要有accuracy, [宏平均和微平均,F-score]。
对于回归预测类常见的评估指标如下:
  • 平均绝对误差(Mean Absolute Error,MAE),均方误差(Mean Squared Error,MSE),平均绝对百分误差(Mean Absolute Percentage Error,MAPE),均方根误差(Root Mean Squared Error), R2(R-Square)

平均绝对误差
平均绝对误差(Mean Absolute Error,MAE):平均绝对误差,其能更好地反映预测值与真实值误差的实际情况,其计算公式如下:
M A E = 1 N ∑ i = 1 N ∣ y i − y ^ i ∣ (式2) MAE=\frac{1}{N} \sum_{i=1}^{N}\left|y_{i}-\hat{y}_{i}\right|\tag{式2} MAE=N1i=1Nyiy^i(2)

均方误差
均方误差(Mean Squared Error,MSE),均方误差,其计算公式为:
M S E = 1 N ∑ i = 1 N ( y i − y ^ i ) 2 (式3) MSE=\frac{1}{N} \sum_{i=1}^{N}\left(y_{i}-\hat{y}_{i}\right)^{2}\tag{式3} MSE=N1i=1N(yiy^i)2(3)

R2(R-Square)的公式为
残差平方和:
S S r e s = ∑ ( y i − y ^ i ) 2 (式4) SS_{res}=\sum\left(y_{i}-\hat{y}_{i}\right)^{2}\tag{式4} SSres=(yiy^i)2(4)
总平均值:
S S t o t = ∑ ( y i − y ‾ i ) 2 (式5) SS_{tot}=\sum\left(y_{i}-\overline{y}_{i}\right)^{2}\tag{式5} SStot=(yiyi)2(5)

其中 y ‾ \overline{y} y表示 y y y的平均值
得到 R 2 R^2 R2表达式为:
R 2 = 1 − S S r e s S S t o t = 1 − ∑ ( y i − y ^ i ) 2 ∑ ( y i − y ‾ ) 2 (式6) R^{2}=1-\frac{SS_{res}}{SS_{tot}}=1-\frac{\sum\left(y_{i}-\hat{y}_{i}\right)^{2}}{\sum\left(y_{i}-\overline{y}\right)^{2}}\tag{式6} R2=1SStotSSres=1(yiy)2(yiy^i)2(6)
R 2 R^2 R2用于度量因变量的变异中可由自变量解释部分所占的比例,取值范围是 0~1, R 2 R^2 R2越接近1,表明回归平方和占总平方和的比例越大,回归线与各观测点越接近,用x的变化来解释y值变化的部分就越多,回归的拟合程度就越好。所以 R 2 R^2 R2也称为拟合优度(Goodness of Fit)的统计量。

y i y_{i} yi表示真实值, y ^ i \hat{y}_{i} y^i表示预测值, y ‾ i \overline{y}_{i} yi表示样本均值。得分越高拟合效果越好。

1.2.4. 分析赛题

  1. 此题为传统的数据挖掘问题,通过数据科学以及机器学习深度学习的办法来进行建模得到结果。
  2. 此题是一个典型的回归问题。
  3. 主要应用xgb、lgb、catboost,以及pandas、numpy、matplotlib、seabon、sklearn、keras等等数据挖掘常用库或者框架来进行数据挖掘任务。
  4. 通过EDA来挖掘数据的联系和自我熟悉数据。

1.3 代码示例

本部分为对于数据读取和指标评价的示例。

1.3.1 数据读取pandas

%pwd
'D:\\python code\\2tianchi competition\\二手车交易预测'
# 导入package
import pandas as pd
import numpy as np

## 1) 载入训练集和测试集;
path = './data/'
Train_data = pd.read_csv(path+'used_car_train_20200313.csv', sep=' ')
Test_data = pd.read_csv(path+'used_car_testA_20200313.csv', sep=' ')

# 查看训练数集和测试集形状
print('Train data shape:',Train_data.shape)
print('TestA data shape:',Test_data.shape)
Train data shape: (150000, 31)
TestA data shape: (50000, 30)
Train_data.head()
SaleIDnameregDatemodelbrandbodyTypefuelTypegearboxpowerkilometer...v_5v_6v_7v_8v_9v_10v_11v_12v_13v_14
007362004040230.061.00.00.06012.5...0.2356760.1019880.1295490.0228160.097462-2.8818032.804097-2.4208210.7952920.914762
1122622003030140.012.00.00.0015.0...0.2647770.1210040.1357310.0265970.020582-4.9004822.096338-1.030483-1.7226740.245522
221487420040403115.0151.00.00.016312.5...0.2514100.1149120.1651470.0621730.027075-4.8467491.8035591.565330-0.832687-0.229963
337186519960908109.0100.00.01.019315.0...0.2742930.1103000.1219640.0333950.000000-4.5095991.285940-0.501868-2.438353-0.478699
4411108020120103110.051.00.00.0685.0...0.2280360.0732050.0918800.0788190.121534-1.8962400.9107830.9311102.8345181.923482

5 rows × 31 columns

1.3.2 分类指标评价计算示例

## accuracy  精确率是一个二分类指标,而准确率能用于多分类。
import numpy as np
from sklearn.metrics import accuracy_score
y_pred = [0, 1, 0, 1]
y_true = [0, 1, 1, 1]
print('ACC:',accuracy_score(y_true, y_pred))
ACC: 0.75
## Precision,Recall,F1-score  精确率/查准率,    查全率,,F1值
from sklearn import metrics
y_pred = [0, 1, 0, 0]
y_true = [0, 1, 0, 1]
print('Precision',metrics.precision_score(y_true, y_pred))
print('Recall',metrics.recall_score(y_true, y_pred))
print('F1-score:',metrics.f1_score(y_true, y_pred))
Precision 1.0
Recall 0.5
F1-score: 0.6666666666666666
## Roc曲线的绘制
import numpy as np
import matplotlib.pyplot as plt
from sklearn import svm, datasets
from sklearn.metrics import roc_curve, auc  ###计算roc和auc
# from sklearn.model_selection import cross_val_score
from sklearn.model_selection import train_test_split
 
# Import some data to play with
iris = datasets.load_iris()
X = iris.data
y = iris.target
 
##变为2分类
X, y = X[y != 2], y[y != 2]
 
# Add noisy features to make the problem harder
random_state = np.random.RandomState(0)
n_samples, n_features = X.shape
X = np.c_[X, random_state.randn(n_samples, 200 * n_features)]
 
# shuffle and split training and test sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=.3,random_state=0)
 
# Learn to predict each class against the other
svm = svm.SVC(kernel='linear', probability=True,random_state=random_state)
 
###通过decision_function()计算得到的y_score的值,用在roc_curve()函数中
y_score = svm.fit(X_train, y_train).decision_function(X_test)
 
# Compute ROC curve and ROC area for each class
fpr,tpr,threshold = roc_curve(y_test, y_score) ###计算真正率和假正率
roc_auc = auc(fpr,tpr) ###计算auc的值
 
plt.figure()
lw = 2
plt.figure(figsize=(10,10))
plt.plot(fpr, tpr, color='darkorange',
         lw=lw, label='ROC curve (area = %0.2f)' % roc_auc) ###假正率为横坐标,真正率为纵坐标做曲线
plt.plot([0, 1], [0, 1], color='navy', lw=lw, linestyle='--')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('Receiver operating characteristic example')
plt.legend(loc="lower right")
plt.show()
<Figure size 432x288 with 0 Axes>

在这里插入图片描述

from sklearn.metrics import roc_curve, auc
y_true = np.array([0, 0, 1, 1])
y_scores = np.array([0.1, 0.4, 0.35, 0.8])

fpr,tpr,threshold = roc_curve(y_true, y_scores) ###计算真正率和假正率
roc_auc = auc(fpr,tpr) ###计算auc的值

lw = 2
plt.plot(fpr, tpr, color='darkorange',
         label='ROC curve (area = %0.2f)' % roc_auc)
plt.plot([0, 1], [0, 1], color='navy', lw=lw, linestyle='--')
plt.legend(loc="lower right")
plt.show()

在这里插入图片描述

## AUC  
import numpy as np
from sklearn.metrics import roc_auc_score
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))
AUC socre: 0.75

1.3.3 回归指标评价计算示例

平均绝对误差(MAE)

也叫做 L 1 L1 L1范数损失,计算公式如下:
M A E = 1 N ⋅ ∑ i = 1 N ∣ y i − p i ∣ (式7) MAE = \cfrac{1}{N}\cdot\sum_{i=1}^{N}\vert{y_i-p_i}\vert\tag{式7} MAE=N1i=1Nyipi(7)

其中, N N N为样本数, y i y_i yi为第 i i i条样本的真实值, p i p_i pi为第 i i i条样本的预测值。模型使用MAE作为损失函数,则是对数据分布的中指进行拟合。某些模型比如(XGBoost)必须要求损失函数有二阶导数,所以不能直接优化MAE。

加权平均绝对误差(WMAE)

对每条样本考虑不同的权重,比如考虑时间因素,距离当前时间越久的样本权重越低,计算公式如下:
W M A E = 1 N ⋅ ∑ i = 1 N w i ∣ y i − p i ∣ (式8) WMAE = \cfrac{1}{N}\cdot\sum_{i=1}^{N}w_i\vert{y_i-p_i}\vert\tag{式8} WMAE=N1i=1Nwiyipi(8)

其中, w i w_i wi是每条样本的权重。

平均绝对百分误差(MAPE)

MAPE通过计算绝对误差百分比来表示预测效果,取值越小越好。如果MAPE=10, 表示预测平均偏离真实值10%。MAPE计算与量纲无关,因此在特定场景下,不同问题具有一定可比性。

计算公式如下:

M A P E = 100 N ⋅ ∑ i = 1 N ∣ y i − p i y i ∣ , y i ≠ 0 (式9) MAPE = \cfrac{100}{N}\cdot\sum_{i=1}^{N}\left|{\cfrac{y_i-p_i}{y_i}}\right|\quad{, y_i\neq{0}}\tag{式9} MAPE=N100i=1Nyiyipi,yi=0(9)

MAPE对负值误差的惩罚大于正值误差。

均方根误差(RMSE)

RMSE代表的是,预测值与真实值差值的样本标准差。和MAE相比,RMSE对大误差样本有更大的惩罚,但他也对离群点敏感,健壮性不如MAE。

计算公式如下:
R M S E = 1 N ⋅ ∑ i = 1 N ( y i − p i ) 2 (式10) RMSE = \sqrt{\cfrac{1}{N}\cdot\sum_{i=1}^{N}(y_i-p_i)^2}\tag{式10} RMSE=N1i=1N(yipi)2 (10)

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))
MSE: 0.2871428571428571
RMSE: 0.5358571238146014
MAE: 0.4142857142857143
MAPE: 0.1461904761904762
## R2-score
from sklearn.metrics import r2_score
y_true = [3, -0.5, 2, 7]
y_pred = [2.5, 0.0, 2, 8]
print('R2-score:',r2_score(y_true, y_pred))
R2-score: 0.9486081370449679

1.4 经验总结

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

    • 1) 赛题理解究竟是理解什么:
      理解赛题是不是把一道赛题的背景介绍读一遍就OK了呢?并不是的,理解赛题其实也是从直观上梳理问题,分析问题是否可行的方法,有多少可行度,赛题做的价值大不大,理清一道赛题要从背后的赛题背景引发的赛题任务理解其中的任务逻辑,可能对于赛题有意义的外在数据有哪些,并对于赛题数据有一个初步了解,知道现在和任务的相关数据有哪些,其中数据之间的关联逻辑是什么样的。 对于不同的问题,在处理方式上的差异是很大的。如果用简短的话来说,并且在比赛的角度或者做工程的角度,就是该赛题符合的问题是什么问题,大概要去用哪些指标,哪些指标是否会做到线上线下的一致性,是否有效的利于我们进一步的探索更高线上分数的线下验证方法,在业务上,你是否对很多原始特征有很深刻的了解,并且可以通过EDA来寻求他们直接的关系,最后构造出满意的特征。
    • 2) 有了赛题理解后能做什么:
      在对于赛题有了一定的了解后,分析清楚了问题的类型性质和对于数据理解的这一基础上,是不是赛题理解就做完了呢? 并不是的,就像摸清了敌情后,我们至少就要有一些相应的理解分析,比如这题的难点可能在哪里,关键点可能在哪里,哪些地方可以挖掘更好的特征,用什么样得线下验证方式更为稳定,出现了过拟合或者其他问题,估摸可以用什么方法去解决这些问题,哪些数据是可靠的,哪些数据是需要精密的处理的,哪部分数据应该是关键数据(背景的业务逻辑下,比如CTR的题,一个寻常顾客大体会有怎么样的购买行为逻辑规律,或者风电那种题,如果机组比较邻近,相关一些风速,转速特征是否会很近似)。这时是在一个宏观的大体下分析的,有助于摸清整个题的思路脉络,以及后续的分析方向。
    • 3) 赛题理解的-评价指标:
      为什么要把这部分单独拿出来呢,因为这部分会涉及后续模型预测中两个很重要的问题:
      1. 本地模型的验证方式,很多情况下,线上验证是有一定的时间和次数限制的,所以在比赛中构建一个合理的本地的验证集和验证的评价指标是很关键的步骤,能有效的节省很多时间。
      2. 不同的指标对于同样的预测结果是具有误差敏感的差异性的,比如AUC,logloss, MAE,RSME,或者一些特定的评价函数。是会有很大可能会影响后续一些预测的侧重点。
    • 4) 赛题背景中可能潜在隐藏的条件:
      其实赛题中有些说明是很有利益-都可以在后续答辩中以及问题思考中所体现出来的,比如高效性要求,比如对于数据异常的识别处理,比如工序流程的差异性,比如模型运行的时间,比模型的鲁棒性,有些的意识是可以贯穿问题思考,特征,模型以及后续处理的,也有些会对于特征构建或者选择模型上有很大益处,反过来如果在模型预测效果不好,其实有时也要反过来思考,是不是赛题背景有没有哪方面理解不清晰或者什么其中的问题没考虑到。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值