iT邦幫忙

2021 iThome 鐵人賽

DAY 11
0
AI & Data

從零開始的套牢生活 - AI股票預測系統系列 第 11

[Day 11] 來自未來的資料 - 數據泄露(Data leakage)

一、數據洩露(Data leakage)

在男性前列腺癌數據中,有個feature叫PROSSUG,代表著這個患者是否接受過前列腺的手術,
這個feature很難說是病人患前列腺癌的‘原因’(患心髒病的原因是接受過心臟手術?),
而更像是一個標記,當然與病人是否患有前列腺癌極度相關。
依靠著這樣的feature訓練出來的模型,肯定能夠得到很好的預測結果,
但對實際了解男性前列腺癌的成因,沒有一點幫助。

存在和利用這種倒‘因’為‘果’的feature的現象,叫數據競賽中的Data Leakage。

From 論數據科學競賽中的Data Leakage

二、股市中的數據泄露

數據泄露最常見的例子之一就是把未來資料的特徵當成訓練集,
舉個例子:

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.8, shuffle=True)

這個語法很多人都用過吧,
沒看過的這邊簡單說一下,該語法的作用就是將資料分成兩堆,
一堆用作訓練、一堆拿來檢查模型的預測效果
為什麼該語法會有問題呢? 問題出在這裡:

......, shuffle=True)

沒錯,他分資料的方式是把資料打亂抽選,這樣會發生甚麼事呢?
要知道股市資料是典型的序列資料(Sequential data)
即前面與後面的資料有極強的關聯性,隨機抽選的話會直接打斷該層連結
然而你會發現用這樣訓練出來的模型準確率異常高
為什麼呢,很簡單,因為你把未來的特徵也加進去了:

試問假如今天我要用9月資料預測10月台積電價格,
結果你給的預測理由是:從10月的台泥開盤價看出來的,
https://imgur.com/MQt361K

三、尾語

為什麼會有這篇呢?
簡單來說有個人試了半天預測模型,結果發現準確率都在50%左右
翻了半天論文發現大家都差不多,
論文的模型準確率在60%以上都算是優秀了,
Debug了半天後發現我參考的論文有這句:

It is important to note that the cases are not exactly consecutive trading days because we split our dataset randomly by shuffling.

From Deep Learning for Stock Market Prediction

呵呵,這個故事告訴我們論文來源要慎選,不然心態容易崩

https://ithelp.ithome.com.tw/upload/images/20210916/20141586nF7Hm86xLx.jpg

From Unknown (我真的找不到這張的來源......)


上一篇
[Day 10] 從零開始的股票預測 - 基本面
下一篇
[Day 12] 當沖實驗結果概述
系列文
從零開始的套牢生活 - AI股票預測系統30

尚未有邦友留言

立即登入留言