赛题理解01


赛题理解是第一步,也是为了后面的特征工程和模型选择调优等做一个基础性的理解工作。

赛题数据

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

FieldDescription
SaleID交易ID,唯一编码
name汽车交易名称,已脱敏
regDate汽车注册日期,例如20160101,2016年01月01日
model车型编码,已脱敏
brand汽车品牌,已脱敏
bodyType车身类型:豪华轿车:0,微型车:1,厢型车:2,大巴车:3,敞篷车:4,双门汽车:5,商务车:6,搅拌车:7
fuelType燃油类型:汽油:0,柴油:1,液化石油气:2,天然气:3,混合动力:4,其他:5,电动:6
gearbox变速箱:手动:0,自动:1
power发动机功率:范围 [ 0, 600 ]
kilometer汽车已行驶公里,单位万km
notRepairedDamage汽车有尚未修复的损坏:是:0,否:1
regionCode地区编码,已脱敏
seller销售方:个体:0,非个体:1
offerType报价类型:提供:0,请求:1
creatDate汽车上线时间,即开始售卖时间
price二手车交易价格(预测目标)
v系列特征匿名特征,包含v0-14在内15个匿名特征

数据初探

首先是使用pandas中的一些方法查看一下数据:
1.使用read_csv()方法打开文件

import pandas as pd
import numpy as np

## 1) 载入训练集和测试集;
path = './datalab/231784/'
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)

一般会打印出出数据的维度,也即是shape
2.使用head()、tail()、describe()、info()等发法查看一下数据详细信息

Train_data.head()

默认会显示出前5行,如果要显示后五行可以使用tail(),函数里面可以加一个参数表示具体查看前面多少行

Train_data.info()

这部分一般会显示的内容为行数、列数、每列的非空数据个数、每列的数据类型是什么,这部分一般是作为后面特征工程的重大参考,因为如果发现一个列缺失值很多,那么可以直接将该列删除;还有一个重要信息是就是数据类型,因为一般的话原始数据的数据类型可能并不是我们想要的,这时候就需要做一些数据类型变化的工作,比如将数据类型为object类型的转换为int等,具体方法可以参考这篇文章Pandas 数据类型概览

Train_data.describe()

对于数值型的列可以通过describe()方法查看具体的其均值、中位数、最大值、最小值等的信息。

Train_data.power.value_counts()

通过value_counts()可以查看某列值的数量信息,其返回值为Series
通过describe和value_counts这两个方法可以初步查看是否有异常值。

评价指标

这些函数都是定义在sklearn中的metrix中

分类问题

二分类:accuracy, [Precision,Recall,F-score,Pr曲线],ROC-AUC曲线。

import numpy as np
from sklearn.metrics import accuracy_score
from sklearn.metrics import precision_score
from sklearn.metrics import recall_score
from sklearn.metrics import f1_score
from sklearn.metrics import roc_auc_score
#example
y_pred = [0, 1, 0, 1]
y_true = [0, 1, 1, 1]
print('ACC:',accuracy_score(y_true, y_pred))
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))

多分类:accuracy, [宏平均和微平均,F-score]。

print('F1-score:',metrics.f1_score(y_true, y_pred, average = 'micro'))
print('F1-score:',metrics.f1_score(y_true, y_pred, average = 'macro'))

回归问题

MSE:均方误差(Mean Square Error),范围 [0,+∞)[0,+∞)
M S E = 1 n ∑ i = 1 n ( y ^ i − y i ) 2 M S E=\frac{1}{n} \sum_{i=1}^{n}\left(\hat{y}_{i}-y_{i}\right)^{2} MSE=n1i=1n(y^iyi)2

RMSE: 根均方误差(Root Mean Square Error),范围 [0,+∞)[0,+∞)
R M S E = 1 n ∑ i = 1 n ( y ^ i − y i ) 2 R M S E=\sqrt{\frac{1}{n} \sum_{i=1}^{n}\left(\hat{y}_{i}-y_{i}\right)^{2}} RMSE=n1i=1n(y^iyi)2

MAE:平均绝对误差(Mean Absolute Error),范围 [0,+∞)[0,+∞)
M A E = 1 n ∑ i = 1 n ∣ y ^ i − y i ∣ M A E=\frac{1}{n} \sum_{i=1}^{n}\left|\hat{y}_{i}-y_{i}\right| MAE=n1i=1ny^iyi

平均绝对百分比误差(Mean Absolute Percentage Error)
M A P E = 100 % n ∑ i = 1 n ∣ y ^ i − y i y i ∣ M A P E=\frac{100 \%}{n} \sum_{i=1}^{n}\left|\frac{\hat{y}_{i}-y_{i}}{y_{i}}\right| MAPE=n100%i=1nyiy^iyi

# coding=utf-8
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))

经验总结

拿到赛题应该首先是需要查看该问题是属于什么类型的问题,是回归还是分类,是二分类还是多分类,评价指标用什么,要是数据出现不均衡的情况评价指标相应地用什么;然后就是观察哪些特征是具有比较高的价值,在做特征工程的时候应该需要重点分析,哪些特征是无关紧要的;最后就是构建合理的训练集和验证集,因为一般的话在模型选择的时候是通过验证集来看的,平台一般提交次有限,需要通过验证集得到最好的线下模型,再去预测线上数据,再提交

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值