Datawhale 零基礎入門數據挖掘-Task1 賽題理解
一、 賽題理解
Tip:此部分爲零基礎入門數據挖掘的 Task1 賽題理解 部分,爲大家入門數據挖掘比賽提供一個基本的賽題入門講解,歡迎後續大家多多交流。
賽題:零基礎入門數據挖掘 - 二手車交易價格預測
地址:https://tianchi.aliyun.com/competition/entrance/231784/introduction?spm=5176.12281957.1004.1.38b02448ausjSX
1.1 學習目標
- 理解賽題數據和目標,清楚評分體系。
- 完成相應報名,下載數據和結果提交打卡(可提交示例結果),熟悉比賽流程
1.2 瞭解賽題
- 賽題概況
- 數據概況
- 預測指標
- 分析賽題
1.2.1 賽題概況
比賽要求參賽選手根據給定的數據集,建立模型,二手汽車的交易價格。
來自 Ebay Kleinanzeigen 報廢的二手車,數量超過 370,000,包含 20 列變量信息,爲了保證
比賽的公平性,將會從中抽取 10 萬條作爲訓練集,5 萬條作爲測試集 A,5 萬條作爲測試集
B。同時會對名稱、車輛類型、變速箱、model、燃油類型、品牌、公里數、價格等信息進行
脫敏。
通過這道賽題來引導大家走進 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):
其中代表第個樣本的真實值,其中代表第個樣本的預測值。
一般問題評價指標說明:
什麼是評估指標:
評估指標即是我們對於一個模型效果的數值型量化。(有點類似與對於一個商品評價打分,而這是針對於模型效果和理想效果之間的一個打分)
一般來說分類和迴歸問題的評價指標有如下一些形式:
分類算法常見的評估指標如下:
- 對於二類分類器/分類算法,評價指標主要有accuracy, [Precision,Recall,F-score,Pr曲線],ROC-AUC曲線。
- 對於多類分類器/分類算法,評價指標主要有accuracy, [宏平均和微平均,F-score]。
二分類下評估指標
- True Positive(TP):預測爲正例,實際爲正例
- False Positive(FP):預測爲正例,實際爲負例
- True Negative(TN):預測爲負例,實際爲負例
- False Negative(FN):預測爲負例,實際爲正例
準確率:
錯誤率:
靈敏度:
特效度:
精度、精確度: 預測爲真的樣本中預測正確的概率
召回率: 實際爲真的樣本中預測正確的概率
綜合評價指標:
準確率pr就是找得對,召回率rc就是找得全。
參考鏈接:https://blog.csdn.net/u010883226/article/details/80706075
ROC-AUC曲線:
Pr曲線:
參考鏈接:https://www.cnblogs.com/zf-blog/p/6734686.html
https://www.jianshu.com/p/ac46cb7e6f87
對於迴歸預測類常見的評估指標如下:
- 平均絕對誤差(Mean Absolute Error,MAE),均方誤差(Mean Squared Error,MSE),平均絕對百分誤差(Mean Absolute Percentage Error,MAPE),均方根誤差(Root Mean Squared Error), R2(R-Square)
平均絕對誤差
平均絕對誤差(Mean Absolute Error,MAE):平均絕對誤差,其能更好地反映預測值與真實值誤差的實際情況,其計算公式如下:
均方誤差
均方誤差(Mean Squared Error,MSE),均方誤差,其計算公式爲:
平均絕對百分誤差
平均絕對百分誤差(Mean Absolute Percentage Error, MAPE) :平均絕對百分誤差,公式爲:
均方根誤差(RMSE)公式爲 :
R2(R-Square)的公式爲:
殘差平方和:
總平均值:
其中表示的平均值
得到表達式爲:
用於度量因變量的變異中可由自變量解釋部分所佔的比例,取值範圍是 0~1,越接近1,表明迴歸平方和佔總平方和的比例越大,迴歸線與各觀測點越接近,用x的變化來解釋y值變化的部分就越多,迴歸的擬合程度就越好。所以也稱爲擬合優度(Goodness of Fit)的統計量。
表示真實值,表示預測值,表示樣本均值。得分越高擬合效果越好。
1.2.4. 分析賽題
- 此題爲傳統的數據挖掘問題,通過數據科學以及機器學習深度學習的辦法來進行建模得到結果。
- 此題是一個典型的迴歸問題。
- 主要應用xgb、lgb、catboost,以及pandas、numpy、matplotlib、seabon、sklearn、keras等等數據挖掘常用庫或者框架來進行數據挖掘任務。
- 通過EDA來挖掘數據的聯繫和自我熟悉數據。
1.3 代碼示例
本部分爲對於數據讀取和指標評價的示例。
1.3.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)
Train data shape: (150000, 31)
TestA data shape: (50000, 30)
Train_data.head()
SaleID | name | regDate | model | brand | bodyType | fuelType | gearbox | power | kilometer | ... | v_5 | v_6 | v_7 | v_8 | v_9 | v_10 | v_11 | v_12 | v_13 | v_14 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 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 | 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 | 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 | 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 | 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.75
1.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.9486081370449679
1.4 經驗總結
作爲切入一道賽題的基礎,賽題理解是極其重要的,對於賽題的理解甚至會影響後續的特徵工程構建以及模型的選擇,最主要是會影響後續發展工作的方向,比如挖掘特徵的方向或者存在問題解決問題的方向,對了賽題背後的思想以及賽題業務邏輯的清晰,也很有利於花費更少時間構建更爲有效的特徵模型,賽題理解要達到的地步是什麼呢,把一道賽題轉化爲一種宏觀理解的解決思路。
以下將從多方面對於此進行說明:
-
1) 賽題理解究竟是理解什麼:
理解賽題是不是把一道賽題的背景介紹讀一遍就OK了呢?並不是的,理解賽題其實也是從直觀上梳理問題,分析問題是否可行的方法,有多少可行度,賽題做的價值大不大,理清一道賽題要從背後的賽題背景引發的賽題任務理解其中的任務邏輯,可能對於賽題有意義的外在數據有哪些,並對於賽題數據有一個初步瞭解,知道現在和任務的相關數據有哪些,其中數據之間的關聯邏輯是什麼樣的。 對於不同的問題,在處理方式上的差異是很大的。如果用簡短的話來說,並且在比賽的角度或者做工程的角度,就是該賽題符合的問題是什麼問題,大概要去用哪些指標,哪些指標是否會做到線上線下的一致性,是否有效的利於我們進一步的探索更高線上分數的線下驗證方法,在業務上,你是否對很多原始特徵有很深刻的瞭解,並且可以通過EDA來尋求他們直接的關係,最後構造出滿意的特徵。 -
2) 有了賽題理解後能做什麼:
在對於賽題有了一定的瞭解後,分析清楚了問題的類型性質和對於數據理解的這一基礎上,是不是賽題理解就做完了呢? 並不是的,就像摸清了敵情後,我們至少就要有一些相應的理解分析,比如這題的難點可能在哪裏,關鍵點可能在哪裏,哪些地方可以挖掘更好的特徵,用什麼樣得線下驗證方式更爲穩定,出現了過擬合或者其他問題,估摸可以用什麼方法去解決這些問題,哪些數據是可靠的,哪些數據是需要精密的處理的,哪部分數據應該是關鍵數據(背景的業務邏輯下,比如CTR的題,一個尋常顧客大體會有怎麼樣的購買行爲邏輯規律,或者風電那種題,如果機組比較鄰近,相關一些風速,轉速特徵是否會很近似)。這時是在一個宏觀的大體下分析的,有助於摸清整個題的思路脈絡,以及後續的分析方向。 -
3) 賽題理解的-評價指標:
爲什麼要把這部分單獨拿出來呢,因爲這部分會涉及後續模型預測中兩個很重要的問題:
1. 本地模型的驗證方式,很多情況下,線上驗證是有一定的時間和次數限制的,所以在比賽中構建一個合理的本地的驗證集和驗證的評價指標是很關鍵的步驟,能有效的節省很多時間。
2. 不同的指標對於同樣的預測結果是具有誤差敏感的差異性的,比如AUC,logloss, MAE,RSME,或者一些特定的評價函數。是會有很大可能會影響後續一些預測的側重點。 -
4) 賽題背景中可能潛在隱藏的條件:
其實賽題中有些說明是很有利益-都可以在後續答辯中以及問題思考中所體現出來的,比如高效性要求,比如對於數據異常的識別處理,比如工序流程的差異性,比如模型運行的時間,比模型的魯棒性,有些的意識是可以貫穿問題思考,特徵,模型以及後續處理的,也有些會對於特徵構建或者選擇模型上有很大益處,反過來如果在模型預測效果不好,其實有時也要反過來思考,是不是賽題背景有沒有哪方面理解不清晰或者什麼其中的問題沒考慮到。
Task1 賽題理解 END.
— By: AI蝸牛車
PS:東南大學研究生,研究方向主要是時空序列預測和時間序列數據挖掘
公衆號: AI蝸牛車
知乎: https://www.zhihu.com/people/seu-aigua-niu-che
github: https://github.com/chehongshu
關於Datawhale:
Datawhale是一個專注於數據科學與AI領域的開源組織,彙集了衆多領域院校和知名企業的優秀學習者,聚合了一羣有開源精神和探索精神的團隊成員。Datawhale 以“for the learner,和學習者一起成長”爲願景,鼓勵真實地展現自我、開放包容、互信互助、敢於試錯和勇於擔當。同時 Datawhale 用開源的理念去探索開源內容、開源學習和開源方案,賦能人才培養,助力人才成長,建立起人與人,人與知識,人與企業和人與未來的聯結。
本次數據挖掘路徑學習,專題知識將在天池分享,詳情可關注Datawhale:
(圖片!!!)