Baseline鏈接

控制變數法Baseline?

tianchi.aliyun.com

初賽A榜 5/2682 B,C榜多寫了一行代碼(去掉那一行,按榜上成績,BC榜應該都是前三?,當然其他選手可能也有不同程度的失誤,emmm,心裡自我安慰一下),直接翻車,初賽 總排名 30/2682

複賽未提交(主要原因是思路失效了,過年回家沒有太多時間調優了)

其實我在天池論壇裏這一份代碼,只要修改幾行,就足以在初賽的A,B,C榜排名top10。

起初我開源這份代碼完全是無意之舉,因為我調了大概一天多,結果都不太理想,所以我就放棄了,開源到了論壇裏,但是因為我當時排名100+,好像並沒有太多人注意到我的開源思路,直到當天下午我在喫飯前繼續調了5分鐘,提交了一份碰碰運氣。

這份代碼直接就排名A榜 19名,相比於開源代碼,我只修改了一行。這一行代碼的關鍵之處也是控制變數法的關鍵之處,就是 ID差的絕對值要在10之內,因為只有同一批次連續做的實驗相關性纔是最大的。一開始效果不好的原因就是,我把值取得太大,造成了數據中雜訊太多。(這一點其實我已經在開源的文檔中指出了,要控制數據量,要不然模型根本不收斂,emm,看出這一點的小夥伴基本都起飛了。)emm,然而B,C榜前排使用這套開源方案的人太多,主辦方直接降低了預賽所佔成績的比例,同時複賽數據id的發生了改變。

10 這個超參數怎麼選出來的呢??? 其實大家把訓練數據按id排序之後就可以看出,連續的10個數據是一組的,比如1-10,11-20這樣,每一組內的特徵(也就是實驗參數)是有強相關的。

特徵工程

  • +: emm,這題A榜其實不用增加特徵,我只加了一個B14的ration特徵。
  • -:有很多時間特徵,可以根據線下CV剔除掉,這題的線下和線上非常的穩定,保留部分差值特徵即可。

Motivation

  • 首先,大家做特徵工程一定要按照業務邏輯!業務邏輯!業務邏輯!重要的話說三遍。因為這是一道化學題,我能想起來有關化學實驗的內容也只有 控制變數法了,這個是做實驗最基本的原則,每次實驗必定是按照這個原則的。巧合的是,這一批數據給了id,排序之後,數據正好是遵循這個原則的。
  • 其次,一定要關注Bad Case!Bad Case!Bad Case!這題數據的bad case產生的原因主要在於 特徵同值,但是label不相同。產生這個問題的原因在於,批次不同,就算加入的原料的質量是一樣的,效果也是不一樣的。解決這個問題最好的方法就是使用同一批次的數據建模。遺憾的是,這樣數據量會大大減小,但是控制變數法正好可以規避這一點,使用相對量建模,這樣每一批次中的相對量的量綱就是一致的,有效的解決了 特徵同值,標籤不同值的問題。

失誤原因

我手動修改了B14異常數據的B14特徵值,其實完全不用修改,因為B14的特徵有局部性,控制變數法完全可以自己學出其中的奧妙,但是我畫蛇添足手動修改了B14的值。

複賽沒有id怎麼辦呢??(下面這段是我想像的)

雖然沒有了測試集的id,但是我們還有訓練集的id,用其他的特徵相關性,我們應該足以找出測試集在訓練集中的批次。手動給測試集打上id,就很有可能可以解決這個問題。這個方案也不違反遊戲規則,因為實際過程中,來了一個新測試數據,完全可以利用他的其他特徵找出與其相似的批次數據,然後利用局部性建模。

特徵工程之道

下面的內容都是我瞎逼逼的,與上面的比賽沒太大關係。

  • 特徵工程到底在做什麼呢?

加減乘除?其實並不是,santander-customer-transaction-prediction(Kaggle)這個鏈接裏的內容寫的挺好的。特徵工程主要做的是找出模型所學不到的東西,指導模型的學習。正如津南這個比賽一樣,模型從全局來看,特徵值一樣的話,對於它來說都是一毛一樣的,其實不然,因為這個題的特徵是與位置強相關的。肯定有小夥伴會疑惑,直接用id全局建模,id+b14不是就可以成功判斷出label和id,b14的關係了嗎?樹模型全局來考慮的話,它會收斂到全局最優,雖然它會參考id,b14的關係,但是它並不會收斂到最優的地方,這個時候就需要人聰明的大腦來進行特徵工程了,來告訴模型,b14在這個XX位置是表示的是blabla,在這個XX位置表示的是blabla。

所以把人看到的東西告訴獃獃的模型,模型就會變得聰明瞭,這也是特徵工程的主要目的。

  • 如何做特徵工程呢?

具體問題需要具體分析,關鍵之處在於 業務邏輯 + bad case + EDA。這三樣東西需要配合使用才能把特徵工程做好。

業務邏輯,這一部分模型是不知道的,只有人知道相關的先驗知識,聰明的大腦就需要將我們知道的知識賦予給模型,把它調教成一個聰明的模型,轉化知識的構成就是特徵工程需要做的了。

bad case, 也就是模型學不到的地方了,人如何來觀察模型不會的東東呢?舉個例子,比如小孩子寫作業,只有做錯了,家長才知道孩子哪裡不足,需要改進,特徵工程也是一樣,只有知道了模型哪裡不足,我們才能更好的改進模型。

EDA,主要就是看圖說話了,我們需要利用可視化來觀察數據中存在的異常,當然excel表格也可以辦到這件事情。可視化的速度可能會更快點,也更直觀一點。找到異常之後,我們就需要提出相應的方案讓模型學習到這種異常。

以上幾點做好,基本上比賽特徵工程相關的問題都能解決了。

推薦閱讀:

相關文章