【算法竞赛学习】二手车交易价格预测-Task1赛题理解
二手車交易價(jià)格預(yù)測(cè)-Task1 賽題理解
一、 賽題理解
Tip:此部分為零基礎(chǔ)入門數(shù)據(jù)挖掘的 Task1 賽題理解 部分,為大家入門數(shù)據(jù)挖掘比賽提供一個(gè)基本的賽題入門講解,歡迎后續(xù)大家多多交流。
賽題:零基礎(chǔ)入門數(shù)據(jù)挖掘 - 二手車交易價(jià)格預(yù)測(cè)
地址:https://tianchi.aliyun.com/competition/entrance/231784/introduction?spm=5176.12281957.1004.1.38b02448ausjSX
1.1 學(xué)習(xí)目標(biāo)
- 理解賽題數(shù)據(jù)和目標(biāo),清楚評(píng)分體系。
- 完成相應(yīng)報(bào)名,下載數(shù)據(jù)和結(jié)果提交打卡(可提交示例結(jié)果),熟悉比賽流程
1.2 了解賽題
- 賽題概況 - 數(shù)據(jù)概況 - 預(yù)測(cè)指標(biāo) - 分析賽題1.2.1 賽題概況
比賽要求參賽選手根據(jù)給定的數(shù)據(jù)集,建立模型,二手汽車的交易價(jià)格。
賽題以預(yù)測(cè)二手車的交易價(jià)格為任務(wù),數(shù)據(jù)集報(bào)名后可見并可下載,該數(shù)據(jù)來自某交易平臺(tái)的二手車交易記錄,總數(shù)據(jù)量超過40w,包含31列變量信息,其中15列為匿名變量。為了保證比賽的公平性,將會(huì)從中抽取15萬條作為訓(xùn)練集,5萬條作為測(cè)試集A,5萬條作為測(cè)試集B,同時(shí)會(huì)對(duì)name、model、brand和regionCode等信息進(jìn)行脫敏。
通過這道賽題來引導(dǎo)大家走進(jìn) AI 數(shù)據(jù)競(jìng)賽的世界,主要針對(duì)于于競(jìng)賽新人進(jìn)行自我練
習(xí)、自我提高。
1.2.2 數(shù)據(jù)概況
一般而言,對(duì)于數(shù)據(jù)在比賽界面都有對(duì)應(yīng)的數(shù)據(jù)概況介紹(匿名特征除外),說明列的性質(zhì)特征。了解列的性質(zhì)會(huì)有助于我們對(duì)于數(shù)據(jù)的理解和后續(xù)分析。
Tip:匿名特征,就是未告知數(shù)據(jù)列所屬的性質(zhì)的特征列。
train.csv
- name - 汽車編碼
- regDate - 汽車注冊(cè)時(shí)間
- model - 車型編碼
- brand - 品牌
- bodyType - 車身類型
- fuelType - 燃油類型
- gearbox - 變速箱
- power - 汽車功率
- kilometer - 汽車行駛公里
- notRepairedDamage - 汽車有尚未修復(fù)的損壞
- regionCode - 看車地區(qū)編碼
- seller - 銷售方
- offerType - 報(bào)價(jià)類型
- creatDate - 廣告發(fā)布時(shí)間
- price - 汽車價(jià)格
- 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’(根據(jù)汽車的評(píng)論、標(biāo)簽等大量信息得到的embedding向量)【人工構(gòu)造 匿名特征】
數(shù)字全都脫敏處理,都為label encoding形式,即數(shù)字形式
1.2.3 預(yù)測(cè)指標(biāo)
本賽題的評(píng)價(jià)標(biāo)準(zhǔn)為MAE(Mean Absolute Error):
MAE=∑i=1n∣yi?y^i∣nMAE=\frac{\sum_{i=1}^{n}\left|y_{i}-\hat{y}_{i}\right|}{n} MAE=n∑i=1n?∣yi??y^?i?∣?
其中yiy_{i}yi?代表第iii個(gè)樣本的真實(shí)值,其中y^i\hat{y}_{i}y^?i?代表第iii個(gè)樣本的預(yù)測(cè)值。
一般問題評(píng)價(jià)指標(biāo)說明:
什么是評(píng)估指標(biāo):
評(píng)估指標(biāo)即是我們對(duì)于一個(gè)模型效果的數(shù)值型量化。(有點(diǎn)類似與對(duì)于一個(gè)商品評(píng)價(jià)打分,而這是針對(duì)于模型效果和理想效果之間的一個(gè)打分)
一般來說分類和回歸問題的評(píng)價(jià)指標(biāo)有如下一些形式:
分類算法常見的評(píng)估指標(biāo)如下:
- 對(duì)于二類分類器/分類算法,評(píng)價(jià)指標(biāo)主要有accuracy, [Precision,Recall,F-score,Pr曲線],ROC-AUC曲線。
- 對(duì)于多類分類器/分類算法,評(píng)價(jià)指標(biāo)主要有accuracy, [宏平均和微平均,F-score]。
對(duì)于回歸預(yù)測(cè)類常見的評(píng)估指標(biāo)如下:
- 平均絕對(duì)誤差(Mean Absolute Error,MAE),均方誤差(Mean Squared Error,MSE),平均絕對(duì)百分誤差(Mean Absolute Percentage Error,MAPE),均方根誤差(Root Mean Squared Error), R2(R-Square)
平均絕對(duì)誤差
平均絕對(duì)誤差(Mean Absolute Error,MAE):平均絕對(duì)誤差,其能更好地反映預(yù)測(cè)值與真實(shí)值誤差的實(shí)際情況,其計(jì)算公式如下:
MAE=1N∑i=1N∣yi?y^i∣MAE=\frac{1}{N} \sum_{i=1}^{N}\left|y_{i}-\hat{y}_{i}\right| MAE=N1?i=1∑N?∣yi??y^?i?∣
均方誤差
均方誤差(Mean Squared Error,MSE),均方誤差,其計(jì)算公式為:
MSE=1N∑i=1N(yi?y^i)2MSE=\frac{1}{N} \sum_{i=1}^{N}\left(y_{i}-\hat{y}_{i}\right)^{2} MSE=N1?i=1∑N?(yi??y^?i?)2
R2(R-Square)的公式為:
殘差平方和:
SSres=∑(yi?y^i)2SS_{res}=\sum\left(y_{i}-\hat{y}_{i}\right)^{2} SSres?=∑(yi??y^?i?)2
總平均值:
SStot=∑(yi?y ̄i)2SS_{tot}=\sum\left(y_{i}-\overline{y}_{i}\right)^{2} SStot?=∑(yi??y?i?)2
其中y ̄\overline{y}y?表示yyy的平均值
得到R2R^2R2表達(dá)式為:
R2=1?SSresSStot=1?∑(yi?y^i)2∑(yi?y ̄)2R^{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}} R2=1?SStot?SSres??=1?∑(yi??y?)2∑(yi??y^?i?)2?
R2R^2R2用于度量因變量的變異中可由自變量解釋部分所占的比例,取值范圍是 0~1,R2R^2R2越接近1,表明回歸平方和占總平方和的比例越大,回歸線與各觀測(cè)點(diǎn)越接近,用x的變化來解釋y值變化的部分就越多,回歸的擬合程度就越好。所以R2R^2R2也稱為擬合優(yōu)度(Goodness of Fit)的統(tǒng)計(jì)量。
yiy_{i}yi?表示真實(shí)值,y^i\hat{y}_{i}y^?i?表示預(yù)測(cè)值,y ̄i\overline{y}_{i}y?i?表示樣本均值。得分越高擬合效果越好。
1.2.4. 分析賽題
1.3 代碼示例
本部分為對(duì)于數(shù)據(jù)讀取和指標(biāo)評(píng)價(jià)的示例。
1.3.1 數(shù)據(jù)讀取pandas
import pandas as pd import numpy as nppath = './data/' ## 1) 載入訓(xùn)練集和測(cè)試集; 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) Train data shape: (150000, 31) TestA data shape: (50000, 30) Train_data.head()| 0 | 736 | 20040402 | 30.0 | 6 | 1.0 | 0.0 | 0.0 | 60 | 12.5 | ... | 0.235676 | 0.101988 | 0.129549 | 0.022816 | 0.097462 | -2.881803 | 2.804097 | -2.420821 | 0.795292 | 0.914762 |
| 1 | 2262 | 20030301 | 40.0 | 1 | 2.0 | 0.0 | 0.0 | 0 | 15.0 | ... | 0.264777 | 0.121004 | 0.135731 | 0.026597 | 0.020582 | -4.900482 | 2.096338 | -1.030483 | -1.722674 | 0.245522 |
| 2 | 14874 | 20040403 | 115.0 | 15 | 1.0 | 0.0 | 0.0 | 163 | 12.5 | ... | 0.251410 | 0.114912 | 0.165147 | 0.062173 | 0.027075 | -4.846749 | 1.803559 | 1.565330 | -0.832687 | -0.229963 |
| 3 | 71865 | 19960908 | 109.0 | 10 | 0.0 | 0.0 | 1.0 | 193 | 15.0 | ... | 0.274293 | 0.110300 | 0.121964 | 0.033395 | 0.000000 | -4.509599 | 1.285940 | -0.501868 | -2.438353 | -0.478699 |
| 4 | 111080 | 20120103 | 110.0 | 5 | 1.0 | 0.0 | 0.0 | 68 | 5.0 | ... | 0.228036 | 0.073205 | 0.091880 | 0.078819 | 0.121534 | -1.896240 | 0.910783 | 0.931110 | 2.834518 | 1.923482 |
5 rows × 31 columns
1.3.2 分類指標(biāo)評(píng)價(jià)計(jì)算示例
## 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 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 ## 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.751.3.3 回歸指標(biāo)評(píng)價(jià)計(jì)算示例
# coding=utf-8 import numpy as np from sklearn import metrics# MAPE需要自己實(shí)現(xiàn) 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.94860813704496791.4 經(jīng)驗(yàn)總結(jié)
作為切入一道賽題的基礎(chǔ),賽題理解是極其重要的,對(duì)于賽題的理解甚至?xí)绊懞罄m(xù)的特征工程構(gòu)建以及模型的選擇,最主要是會(huì)影響后續(xù)發(fā)展工作的方向,比如挖掘特征的方向或者存在問題解決問題的方向,對(duì)了賽題背后的思想以及賽題業(yè)務(wù)邏輯的清晰,也很有利于花費(fèi)更少時(shí)間構(gòu)建更為有效的特征模型,賽題理解要達(dá)到的地步是什么呢,把一道賽題轉(zhuǎn)化為一種宏觀理解的解決思路。
以下將從多方面對(duì)于此進(jìn)行說明:
-
1) 賽題理解究竟是理解什么:
理解賽題是不是把一道賽題的背景介紹讀一遍就OK了呢?并不是的,理解賽題其實(shí)也是從直觀上梳理問題,分析問題是否可行的方法,有多少可行度,賽題做的價(jià)值大不大,理清一道賽題要從背后的賽題背景引發(fā)的賽題任務(wù)理解其中的任務(wù)邏輯,可能對(duì)于賽題有意義的外在數(shù)據(jù)有哪些,并對(duì)于賽題數(shù)據(jù)有一個(gè)初步了解,知道現(xiàn)在和任務(wù)的相關(guān)數(shù)據(jù)有哪些,其中數(shù)據(jù)之間的關(guān)聯(lián)邏輯是什么樣的。 對(duì)于不同的問題,在處理方式上的差異是很大的。如果用簡(jiǎn)短的話來說,并且在比賽的角度或者做工程的角度,就是該賽題符合的問題是什么問題,大概要去用哪些指標(biāo),哪些指標(biāo)是否會(huì)做到線上線下的一致性,是否有效的利于我們進(jìn)一步的探索更高線上分?jǐn)?shù)的線下驗(yàn)證方法,在業(yè)務(wù)上,你是否對(duì)很多原始特征有很深刻的了解,并且可以通過EDA來尋求他們直接的關(guān)系,最后構(gòu)造出滿意的特征。 -
2) 有了賽題理解后能做什么:
在對(duì)于賽題有了一定的了解后,分析清楚了問題的類型性質(zhì)和對(duì)于數(shù)據(jù)理解的這一基礎(chǔ)上,是不是賽題理解就做完了呢? 并不是的,就像摸清了敵情后,我們至少就要有一些相應(yīng)的理解分析,比如這題的難點(diǎn)可能在哪里,關(guān)鍵點(diǎn)可能在哪里,哪些地方可以挖掘更好的特征,用什么樣得線下驗(yàn)證方式更為穩(wěn)定,出現(xiàn)了過擬合或者其他問題,估摸可以用什么方法去解決這些問題,哪些數(shù)據(jù)是可靠的,哪些數(shù)據(jù)是需要精密的處理的,哪部分?jǐn)?shù)據(jù)應(yīng)該是關(guān)鍵數(shù)據(jù)(背景的業(yè)務(wù)邏輯下,比如CTR的題,一個(gè)尋常顧客大體會(huì)有怎么樣的購(gòu)買行為邏輯規(guī)律,或者風(fēng)電那種題,如果機(jī)組比較鄰近,相關(guān)一些風(fēng)速,轉(zhuǎn)速特征是否會(huì)很近似)。這時(shí)是在一個(gè)宏觀的大體下分析的,有助于摸清整個(gè)題的思路脈絡(luò),以及后續(xù)的分析方向。 -
3) 賽題理解的-評(píng)價(jià)指標(biāo):
為什么要把這部分單獨(dú)拿出來呢,因?yàn)檫@部分會(huì)涉及后續(xù)模型預(yù)測(cè)中兩個(gè)很重要的問題:
1. 本地模型的驗(yàn)證方式,很多情況下,線上驗(yàn)證是有一定的時(shí)間和次數(shù)限制的,所以在比賽中構(gòu)建一個(gè)合理的本地的驗(yàn)證集和驗(yàn)證的評(píng)價(jià)指標(biāo)是很關(guān)鍵的步驟,能有效的節(jié)省很多時(shí)間。
2. 不同的指標(biāo)對(duì)于同樣的預(yù)測(cè)結(jié)果是具有誤差敏感的差異性的,比如AUC,logloss, MAE,RSME,或者一些特定的評(píng)價(jià)函數(shù)。是會(huì)有很大可能會(huì)影響后續(xù)一些預(yù)測(cè)的側(cè)重點(diǎn)。 -
4) 賽題背景中可能潛在隱藏的條件:
其實(shí)賽題中有些說明是很有利益-都可以在后續(xù)答辯中以及問題思考中所體現(xiàn)出來的,比如高效性要求,比如對(duì)于數(shù)據(jù)異常的識(shí)別處理,比如工序流程的差異性,比如模型運(yùn)行的時(shí)間,比模型的魯棒性,有些的意識(shí)是可以貫穿問題思考,特征,模型以及后續(xù)處理的,也有些會(huì)對(duì)于特征構(gòu)建或者選擇模型上有很大益處,反過來如果在模型預(yù)測(cè)效果不好,其實(shí)有時(shí)也要反過來思考,是不是賽題背景有沒有哪方面理解不清晰或者什么其中的問題沒考慮到。
總結(jié)
以上是生活随笔為你收集整理的【算法竞赛学习】二手车交易价格预测-Task1赛题理解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 美国最大连锁院线 AMC 推出影厅分区售
- 下一篇: 12306怎么修改个人信息