天池大賽第一次打卡-3.23

一、賽題數據

賽題以預測二手車的交易價格爲任務,數據集報名後可見並可下載,該數據來自某交易平臺的二手車交易記錄,總數據量超過40w,包含31列變量信息,其中15列爲匿名變量。爲了保證比賽的公平性,將會從中抽取15萬條作爲訓練集,5萬條作爲測試集A,5萬條作爲測試集B,同時會對name、model、brand和regionCode等信息進行脫敏。

 

解讀:什麼是數據信息脫敏處理?[1]

數據脫敏(Data Masking),又稱數據漂白、數據去隱私化或數據變形。 
   百度百科對數據脫敏的定義爲:指對某些敏感信息通過脫敏規則進行數據的變形,實現敏感隱私數據的可靠保護。在涉及客戶安全數據或者一些商業性敏感數據的情況下,在不違反系統規則條件下,對真實數據進行改造並提供測試使用,如身份證號、手機號、卡號、客戶號等個人信息都需要進行數據脫敏。生活中不乏數據脫敏的例子,比如我們最常見的火車票、電商收貨人地址都會對敏感信息做處理,甚至女同志較熟悉的美顏、有些視頻中的馬賽克都屬於脫敏。 

 

比賽初始階段需要完成的事情:

1.瞭解賽題概況

2.瞭解數據概況

train.csv
SaleID- 銷售樣本ID
name-汽車編碼
regData-汽車編碼
brand-品牌
bodyType-車身類型
fuelType-燃油類型
gearbox-變速箱
power-汽車功率
kilometer-汽車行駛公里
notRepairedDamage-汽車有尚未修復風險
regioCode-看車地區編碼
seller-銷售方
offerType-報價類型
creatDate-廣告發布時間
price-汽車價格
v_0,v_1,v_2,...v_14-15個脫敏處理的匿名特徵

 

下載到的數據集有三個,其中used_car_sample_submit.csv是提醒提交答案時候答案的格式

used_car_train 意思是當前可以使用到的訓練數據集

user_car_testA 意思是本地測試使用的測試數據集

test分爲A,B,網站上提交評價使用的是testB

 

3.預測指標

MAE預測指標,所有對應真實標籤與預測標籤之間絕對值的和的平均值

這個指標應該存在bug,可以通過評價指標的bug去提高結果

對於迴歸問題常見的評估指標爲:平均絕對誤差(MAE),均方誤差(MSE), 平均絕對百分誤差(Mean Absolute Percentage Error)

均方根誤差(Root Mean Squared Error) , R2等

 

4.分析賽題

主要用xgb、lgb、catboost、以及pandas、numpy、matplotlib、seaborn、keras等等數據挖掘常用庫或者框架來進行數據挖掘任務

 

數據的輸入與預測指標的使用方法:windows版本

 

 

Task2:數據特徵分析

目的1:瞭解數據集,對數據特徵進行清洗,以便數據可以在接下來的實驗中使用。

目的2:探究數據變量之間的的關係,以及變量與預測值之間的關係

學習內容總結:

1.數據可視化工具:

數據科學庫:pandas、numpy、scipy;

可視化庫:matplotlib、seaborn;

2.數據導入

載入數據和測試集

簡略觀察數據,使用head()和shape兩個函數

3.數據總覽

通過describe()來熟悉數據的相關統計量

通過info()來熟悉數據類型

4.判斷數據缺失和異常

查看數據每列NAN情況,視爲數據缺失,提出相應手段

檢查異常值

5.瞭解預測值的分佈

總體分佈概況(無界約翰遜分佈等)

查看skewness and kur

tos

is

查看預

 

測值的具體頻數

6.特徵分爲類別特徵和數字特徵,對類別特徵查看unique分佈

7.數字特徵分析

相關性分析

查看幾個特徵的峯值和偏度

查看數字特徵的分佈可視化

數字特徵相互之間的關係可視化

多變量互相迴歸關係可視化

8.類型特徵分析

unique分佈

類別特徵箱形圖可視化

類比特徵的小提琴圖可視化

類別特徵的柱形圖可視化類別

特徵的每個類別頻數可視化(count_plot)

9.用pandas_profiling生成數據報告

 

#載入各種數據科學以及可視化庫
#coding:utf-8
#導入warnings包,利用過濾器來實現忽略警告語句。
import warnings
warnings.filterwarnings('ignore')

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import missingno as msno
#載入各種數據科學以及可視化庫
#coding:utf-8
#導入warnings包,利用過濾器來實現忽略警告語句。
import warnings
warnings.filterwarnings('ignore')

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import missingno as msno
#載入數據集
## 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=' ')
#載入數據集
## 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=' ')

 

所有特徵集均脫敏處理

  • name - 汽車編碼
  • regDate - 汽車註冊時間
  • model - 車型編碼
  • brand - 品牌
  • bodyType - 車身類型
  • fuelType - 燃
  • 油類型
  • gea
  • r
  • box
  • - 變速箱
  • 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個匿名特徵】
## 2) 簡略觀察數據(head()+shape)
Train_data.head().append(Train_data.tail())
Train_data.shape
Test_data.head().append(Test_data.tail())
Test_data.shape

 

#總覽數據概況
## 1) 通過describe()來熟悉數據的相關統計量
Train_data.describe()
Test_data.describe()
## 2) 通過info()來熟悉數據類型
Train_data.info()

Test_data.info()


#判斷數據缺失和異常

## 1) 查看每列的存在nan情況
Train_data.isnull().sum()

Test_data.isnull().sum()

# nan可視化
missing = Train_data.isnull().sum()
missing = missing[missing > 0]
missing.sort_values(inplace=True)
missing.plot.bar()

# 可視化看下缺省值
msno.matrix(Train_data.sample(250))

msno.bar(Train_data.sample(1000))

# 可視化看下缺省值
msno.matrix(Test_data.sample(250))

msno.bar(Test_data.sample(1000))


## 2) 查看異常值檢測
Train_data.info()

Train_data['notRepairedDamage'].value_counts()

Train_data['notRepairedDamage'].replace('-', np.nan, inplace=True)

Train_data['notRepairedDamage'].value_counts()

Train_data.isnull().sum()

Test_data['notRepairedDamage'].value_counts()

Test_data['notRepairedDamage'].replace('-', np.nan, inplace=True)

Train_data["seller"].value_counts()

Train_data["offerType"].value_counts()

del Train_data["seller"]
del Train_data["offerType"]
del Test_data["seller"]
del Test_data["offerType"]

 

#瞭解預測值的分佈

Train_data['price']

Train_data['price'].value_counts()

## 1) 總體分佈概況(無界約翰遜分佈等)
import scipy.stats as st
y = Train_data['price']
plt.figure(1); plt.title('Johnson SU')
sns.distplot(y, kde=False, fit=st.johnsonsu)
plt.figure(2); plt.title('Normal')
sns.distplot(y, kde=False, fit=st.norm)
plt.figure(3); plt.title('Log Normal')
sns.distplot(y, kde=False, fit=st.lognorm)

## 2) 查看skewness and kurtosis
sns.distplot(Train_data['price']);
print("Skewness: %f" % Train_data['price'].skew())
print("Kurtosis: %f" % Train_data['price'].kurt())

Train_data.skew(), Train_data.kurt()

sns.distplot(Train_data.skew(),color='blue',axlabel ='Skewness')

sns.distplot(Train_data.kurt(),color='orange',axlabel ='Kurtness')

## 3) 查看預測值的具體頻數
plt.hist(Train_data['price'], orientation = 'vertical',histtype = 'bar', color ='red')
plt.show()

# log變換 z之後的分佈較均勻,可以進行log變換進行預測,這也是預測問題常用的trick
plt.hist(np.log(Train_data['price']), orientation = 'vertical',histtype = 'bar', color ='red') 
plt.show()

 

經驗總結

所給出的EDA步驟爲廣爲普遍的步驟,在實際的不管是工程還是比賽過程中,這只是最開始的一步,也是最基本的一步。

接下來一般要結合模型的效果以及特徵工程等來分析數據的實際建模情況,根據自己的一些理解,查閱文獻,對實際問題做出判斷和深入的理解。

最後不斷進行EDA與數據處理和挖掘,來到達更好的數據結構和分佈以及較爲強勢相關的特徵


數據探索在機器學習中我們一般稱爲EDA(Exploratory Data Analysis):

是指對已有的數據(特別是調查或觀察得來的原始數據)在儘量少的先驗假定下進行探索,通過作圖、製表、方程擬合、計算特徵量等手段探索數據的結構和規律的一種數據分析方法。

數據探索有利於我們發現數據的一些特性,數據之間的關聯性,對於後續的特徵構建是很有幫助的。

  1. 對於數據的初步分析(直接查看數據,或.sum(), .mean(),.descirbe()等統計函數)可以從:樣本數量,訓練集數量,是否有時間特徵,是否是時許問題,特徵所表示的含義(非匿名特徵),特徵類型(字符類似,int,float,time),特徵的缺失情況(注意缺失的在數據中的表現形式,有些是空的有些是”NAN”符號等),特徵的均值方差情況。

  2. 分析記錄某些特徵值缺失佔比30%以上樣本的缺失處理,有助於後續的模型驗證和調節,分析特徵應該是填充(填充方式是什麼,均值填充,0填充,衆數填充等),還是捨去,還是先做樣本分類用不同的特徵模型去預測。

  3. 對於異常值做專門的分析,分析特徵異常的label是否爲異常值(或者偏離均值較遠或者事特殊符號),異常值是否應該剔除,還是用正常值填充,是記錄異常,還是機器本身異常等。

  4. 對於Label做專門的分析,分析標籤的分佈情況等。

  5. 進步分析可以通過對特徵作圖,特徵和label聯合做圖(統計圖,離散圖),直觀瞭解特徵的分佈情況,通過這一步也可以發現數據之中的一些異常值等,通過箱型圖分析一些特徵值的偏離情況,對於特徵和特徵聯合作圖,對於特徵和label聯合作圖,分析其中的一些關聯性。

參考鏈接:

[1].數據脫敏:https://blog.csdn.net/huyuyang6688/article/details/77689459/

[2].https://tianchi.aliyun.com/notebook-ai/detail?spm=5176.12281978.0.0.68021b43qv8zV8&postId=95457

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章