【算法竞赛学习】二手车交易价格预测-Task1赛题理解
二手車交易價格預測-Task1 賽題理解
一、 賽題理解
Tip:此部分為零基礎入門數據挖掘的 Task1 賽題理解 部分,為大家入門數據挖掘比賽提供一個基本的賽題入門講解,歡迎后續大家多多交流。
賽題:零基礎入門數據挖掘 - 二手車交易價格預測
地址:https://tianchi.aliyun.com/competition/entrance/231784/introduction?spm=5176.12281957.1004.1.38b02448ausjSX
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
- 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’(根據汽車的評論、標簽等大量信息得到的embedding向量)【人工構造 匿名特征】
數字全都脫敏處理,都為label encoding形式,即數字形式
1.2.3 預測指標
本賽題的評價標準為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個樣本的真實值,其中y^i\hat{y}_{i}y^?i?代表第iii個樣本的預測值。
一般問題評價指標說明:
什么是評估指標:
評估指標即是我們對于一個模型效果的數值型量化。(有點類似與對于一個商品評價打分,而這是針對于模型效果和理想效果之間的一個打分)
一般來說分類和回歸問題的評價指標有如下一些形式:
分類算法常見的評估指標如下:
- 對于二類分類器/分類算法,評價指標主要有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):平均絕對誤差,其能更好地反映預測值與真實值誤差的實際情況,其計算公式如下:
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),均方誤差,其計算公式為:
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表達式為:
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,表明回歸平方和占總平方和的比例越大,回歸線與各觀測點越接近,用x的變化來解釋y值變化的部分就越多,回歸的擬合程度就越好。所以R2R^2R2也稱為擬合優度(Goodness of Fit)的統計量。
yiy_{i}yi?表示真實值,y^i\hat{y}_{i}y^?i?表示預測值,y ̄i\overline{y}_{i}y?i?表示樣本均值。得分越高擬合效果越好。
1.2.4. 分析賽題
1.3 代碼示例
本部分為對于數據讀取和指標評價的示例。
1.3.1 數據讀取pandas
import pandas as pd import numpy as nppath = './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) 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 分類指標評價計算示例
## 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 回歸指標評價計算示例
# 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)) 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 經驗總結
作為切入一道賽題的基礎,賽題理解是極其重要的,對于賽題的理解甚至會影響后續的特征工程構建以及模型的選擇,最主要是會影響后續發展工作的方向,比如挖掘特征的方向或者存在問題解決問題的方向,對了賽題背后的思想以及賽題業務邏輯的清晰,也很有利于花費更少時間構建更為有效的特征模型,賽題理解要達到的地步是什么呢,把一道賽題轉化為一種宏觀理解的解決思路。
以下將從多方面對于此進行說明:
-
1) 賽題理解究竟是理解什么:
理解賽題是不是把一道賽題的背景介紹讀一遍就OK了呢?并不是的,理解賽題其實也是從直觀上梳理問題,分析問題是否可行的方法,有多少可行度,賽題做的價值大不大,理清一道賽題要從背后的賽題背景引發的賽題任務理解其中的任務邏輯,可能對于賽題有意義的外在數據有哪些,并對于賽題數據有一個初步了解,知道現在和任務的相關數據有哪些,其中數據之間的關聯邏輯是什么樣的。 對于不同的問題,在處理方式上的差異是很大的。如果用簡短的話來說,并且在比賽的角度或者做工程的角度,就是該賽題符合的問題是什么問題,大概要去用哪些指標,哪些指標是否會做到線上線下的一致性,是否有效的利于我們進一步的探索更高線上分數的線下驗證方法,在業務上,你是否對很多原始特征有很深刻的了解,并且可以通過EDA來尋求他們直接的關系,最后構造出滿意的特征。 -
2) 有了賽題理解后能做什么:
在對于賽題有了一定的了解后,分析清楚了問題的類型性質和對于數據理解的這一基礎上,是不是賽題理解就做完了呢? 并不是的,就像摸清了敵情后,我們至少就要有一些相應的理解分析,比如這題的難點可能在哪里,關鍵點可能在哪里,哪些地方可以挖掘更好的特征,用什么樣得線下驗證方式更為穩定,出現了過擬合或者其他問題,估摸可以用什么方法去解決這些問題,哪些數據是可靠的,哪些數據是需要精密的處理的,哪部分數據應該是關鍵數據(背景的業務邏輯下,比如CTR的題,一個尋常顧客大體會有怎么樣的購買行為邏輯規律,或者風電那種題,如果機組比較鄰近,相關一些風速,轉速特征是否會很近似)。這時是在一個宏觀的大體下分析的,有助于摸清整個題的思路脈絡,以及后續的分析方向。 -
3) 賽題理解的-評價指標:
為什么要把這部分單獨拿出來呢,因為這部分會涉及后續模型預測中兩個很重要的問題:
1. 本地模型的驗證方式,很多情況下,線上驗證是有一定的時間和次數限制的,所以在比賽中構建一個合理的本地的驗證集和驗證的評價指標是很關鍵的步驟,能有效的節省很多時間。
2. 不同的指標對于同樣的預測結果是具有誤差敏感的差異性的,比如AUC,logloss, MAE,RSME,或者一些特定的評價函數。是會有很大可能會影響后續一些預測的側重點。 -
4) 賽題背景中可能潛在隱藏的條件:
其實賽題中有些說明是很有利益-都可以在后續答辯中以及問題思考中所體現出來的,比如高效性要求,比如對于數據異常的識別處理,比如工序流程的差異性,比如模型運行的時間,比模型的魯棒性,有些的意識是可以貫穿問題思考,特征,模型以及后續處理的,也有些會對于特征構建或者選擇模型上有很大益處,反過來如果在模型預測效果不好,其實有時也要反過來思考,是不是賽題背景有沒有哪方面理解不清晰或者什么其中的問題沒考慮到。
總結
以上是生活随笔為你收集整理的【算法竞赛学习】二手车交易价格预测-Task1赛题理解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 美国最大连锁院线 AMC 推出影厅分区售
- 下一篇: 12306怎么修改个人信息