https://www.kaggle.com/greenarrow2018/santander-value-prediction-challenge
剖析問題
要求你預(yù)測用戶產(chǎn)生的價(jià)值是多少,他會(huì)使用RMSLE來估計(jì)。簡單來說就是回歸問題,回歸問題之前House prediction就遇到過,一般來說,看找這種問題首先還是要考慮label是否符合高斯分布,因?yàn)楹芏嗄P途褪腔诟咚狗植纪瓿伞?/p>
引入數(shù)據(jù),數(shù)據(jù)分析
引入數(shù)據(jù)后我們看到,首先是test比train要多很多,幾乎是10倍了,對(duì)于過擬合要小心考慮,深度學(xué)習(xí)這些還是少用。其次是feature column特別多,feature engineering也要很小心。
觀察這些數(shù)據(jù),可以看到有很多的0,這是稀疏矩陣。可能會(huì)有很多全是0的列。
Feature Engineering
Label
首先要觀察label是不是符合高斯分布了,符合高斯分布有兩個(gè)好處,首先許多模型都是基于高斯分布完成的,其次高斯分布會(huì)有很好的泛化性,因?yàn)榇蟛糠值恼`差都符合高斯分布。
直方圖可以看到偏度有點(diǎn)大,需要做一個(gè)box-cos變換才行。
變換之后好多了。當(dāng)然不要忘記對(duì)test也要做這個(gè)操作。
unique
接下來我們看看有沒有多余的列,如果有一個(gè)column他的值全都是constant,那么我們可以直接去掉。
發(fā)現(xiàn)了256個(gè)列,等下直接刪掉。
Correlation Coefficient
有三大相關(guān)系數(shù),這里我沒有選擇pearson相關(guān)系數(shù),因?yàn)楹芏?,只有少量的是非0元素,如果是線性相關(guān)性的話那不就是乘上0的了嗎?所以我選擇Spearman相關(guān)系數(shù)。
之所以用scipy不用pandas的corr,是因?yàn)閜andas這個(gè)沒辦法加上進(jìn)度條,而且這個(gè)4000多個(gè)特征,pandas要求很久的。
最后我們畫出相關(guān)系數(shù)的條形圖,會(huì)發(fā)現(xiàn)基本都是0.1左右,其實(shí)0.2以上才是弱相關(guān)的,所以看不出有什么相關(guān)性。
Feature important
既然畫圖是看不出了,那直接算法分析吧。我們采用ExtraTreesRegressor和lightbgm來判斷feature的重要程度。
有些特征是相關(guān)系數(shù)特別大的,lightbgm也差不多,這里不貼圖了。
刪去那256列沒有用的列之后直接預(yù)測的值是1.53。
借鑒了https://www.kaggle.com/alexpengxiao/preprocessing-model-averaging-by-xgb-lgb-1-39
的做法之后改進(jìn)。
Upgrade
主要改進(jìn)在5個(gè)方面。
- 特征重要性使用隨機(jī)森林模型。其實(shí)我覺得這個(gè)影響應(yīng)該是不大的。
- 只保留了1000個(gè)重要的模型。
- 使用Kolmogorov-Smirnov test來判斷這train和test的column是否是同一個(gè)distribution出來的。
- 增加了statistical feature 和 low-dimension features。
- 聚合模型
其中第三第四點(diǎn)我是沒有想到。第三點(diǎn)使用KS假設(shè)檢驗(yàn)來檢測train和test的column有哪一列不是同一個(gè)distribution的,如果不是,就是刪了。因?yàn)槠鋵?shí)檢驗(yàn)了之后并沒有不是同一個(gè)distribution生成的,所以notebook就懶的寫的了。第四點(diǎn)中他增加的特征有兩種,一種是統(tǒng)計(jì)特征,比如一行中的均值,方差,最大值等等,這種做法之前我還沒有遇到過,個(gè)人認(rèn)為這種添加可能只是應(yīng)用于少數(shù)情況吧。畢竟想其他如果不是匿名的column這么用就太荒謬了。另一個(gè)是添加了低緯度的數(shù)據(jù),講原始數(shù)據(jù)做的降維之后和原始數(shù)據(jù)合并,這個(gè)做法也是第一次見,很神奇。但是不得不說還是有效果的,可能是一種特征增強(qiáng)的方法吧。
最后score是1.41,比原來的好上不少。
主要接觸了幾個(gè)新的數(shù)據(jù)預(yù)處理方法:
1. 如果column非常多,可能會(huì)存在常數(shù)列,可以考慮去掉。
2. 增加feature還可以增加statistical feature和low-dimension feature, 但是場合可能要考慮。
3. feature importance主要有3個(gè),random forest,lightbgm,ExtraTrees
4. KS假設(shè)檢驗(yàn)檢測是否同一分布(我覺得這個(gè)很重要。)
條形圖,直方圖,柱狀圖
條形圖和柱狀圖表達(dá)的數(shù)據(jù)的形式基本相同,只不過一個(gè)橫著一個(gè)豎著。
直方圖和條形圖和柱狀圖的區(qū)別在于,直方圖是描述連續(xù)變量的,比如上面的label畫的直方圖就是,一個(gè)一個(gè)區(qū)間的數(shù)量。而條形圖和柱狀圖是離散變量的,如上面的feature importance所畫的圖。
Pearson correlation coefficient
皮爾森相關(guān)系數(shù)是一種線性相關(guān)系數(shù)。用來記錄兩個(gè)變量之間的線性相關(guān)程度的。絕對(duì)值越大,表示相關(guān)系數(shù)越強(qiáng)。
估算樣本的協(xié)方差和標(biāo)準(zhǔn)差,可得到樣本相關(guān)系數(shù):
當(dāng)r > 0的時(shí)候說明兩個(gè)變量是正相關(guān),一個(gè)變量越大另一個(gè)變量也是越大的。
當(dāng)r < 0的時(shí)候說明兩個(gè)變量負(fù)相關(guān),一個(gè)變量越大另一個(gè)變量反而越小。
當(dāng)r = 0說明兩個(gè)變量無相關(guān)性。
當(dāng)r = 1 or -1說明兩個(gè)變量相關(guān)性呈線性直線。
0.8-1.0 極強(qiáng)相關(guān)
0.6-0.8 強(qiáng)相關(guān)
0.4-0.6 中等程度相關(guān)
0.2-0.4 弱相關(guān)
0.0-0.2 極弱相關(guān)或無相關(guān)
皮爾森系數(shù)通常要求是數(shù)據(jù)間要符合聯(lián)合高斯分布,不是僅僅X和Y分比符合高斯分布,而是兩個(gè)數(shù)據(jù)一起符合一個(gè)聯(lián)合高斯分布,當(dāng)然這個(gè)條件并不是嚴(yán)格限制的。另外皮爾森系數(shù)還要求數(shù)據(jù)間差距不能太大,也就是離群點(diǎn)不能多,否則會(huì)干擾計(jì)算結(jié)果。
所以pearson相關(guān)系數(shù)有四個(gè)使用條件:
1. 兩個(gè)變量都是要測量到的連續(xù)變量。
2. 兩個(gè)變量總體都應(yīng)該符合高斯分布。
3. 變量必需是成對(duì)存在。
4. 變量間應(yīng)該為線性關(guān)系。
但是就算是Pearson相關(guān)系數(shù)是0,也可能存在曲線的關(guān)系。
Spearman correlation coefficient
Pearson相關(guān)系數(shù)并不是在什么情況下都可以使用,而Spearman相關(guān)系數(shù)是一個(gè)非參數(shù)度量兩個(gè)變量相關(guān)性的指標(biāo),用單調(diào)函數(shù)來評(píng)估兩個(gè)變量之間的相關(guān)性。
首先對(duì)按照從大到小的順序排列,
為排列之后的下標(biāo),也就是排列之后所在的位置,令
為秩差。則相關(guān)系數(shù)可以表示成:
Spearman相關(guān)系數(shù)經(jīng)常被稱為是非參數(shù)相關(guān)的參數(shù),有兩層含義:
1. 只要X和Y都單調(diào)的函數(shù)關(guān)系,X和Y就是spearman相關(guān)的。而pearson是只有在線性相關(guān)的才有相關(guān)性。
2. Spearman可以在不知道X和Y的概率密度的時(shí)候求解。
3. Spearman對(duì)離群點(diǎn)的敏感性不高。因?yàn)槟阕畲笠皇桥诺谝粋€(gè)要不就是排最后一個(gè)。
雖然這個(gè)Spearman的適用范圍會(huì)廣一些,但是統(tǒng)計(jì)效能要比Pearson低一些,不太容易檢測出相關(guān)性。
Kendall correlation coefficient
kendall相關(guān)系數(shù)是基于協(xié)同的思想,對(duì)于兩個(gè)變量,如果就稱這兩對(duì)觀察值是和諧的,否則就是不是。
和諧的觀察值對(duì)減去不和諧的觀察值對(duì)的數(shù)量,除以總的觀察值對(duì)數(shù)。
Kendall主要是檢測兩個(gè)變量之間的等級(jí)關(guān)系。