iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 19
0
Google Developers Machine Learning

AI可以分析股票嗎?系列 第 19

暴力LSTM模型實測-你是在跟我開玩笑嗎? <補>

<補>修正dataset問題

零、引言

今天,我有一個大膽的想法,我下載了台股5秒交易資訊的資料,想要去做「極短期股價預測」。我想應該很簡單且有趣才是...應該會很有趣才是呀!!!! 話不多說,這東西浪費了我極多時間,但效果卻是一馬平川...到底是不是哪裡做錯呢? 這跟我想的不一樣啦! 開講~

一、資料和預處理

資料集來源Taiwan Stock Real Time Crawler

a、資料

  • 這個資料集的樣子如下

    • 時間, 最近成交價, 當盤成交量, 累積成交量, 最佳五檔(賣價), 最佳五檔(賣量), 最佳五檔(買價), 最佳五檔(買量)
  • 我統計了這些資料的筆數(一天內的資料量)

    • 發現幾乎所有資料都是每日500筆,所以直接使用這個範圍的資料

b、資料預處理

因為資料實在不少,我最後留下 「最近成交價, 當盤成交量, 最佳五檔(賣價), 最佳五檔(賣量), 最佳五檔(買價), 最佳五檔(買量)」,但會經過正規化處理

  • 價格

    • 價格資訊包含 最近成交價和最佳五檔的買賣價格,我最後觀察下來,只留下最佳的1檔
    • 台灣股票在之前有提到,漲跌幅不會超過10%,所以我將開盤價格的正負10%當作我的MinMaxScaler正規化
    • 所以總共會有3個與價格有關的input data,最近成交價、最佳1檔賣價、最佳1檔買價
  • 成交量

    • 成交量的正規化我用的比較模糊,就是最基本的局部正規,考慮到再怎麼說也無法全局正規,那就局部正規吧XD
  • 最佳買賣量

    • 我個人認為這也有可能是影響股價原因,所以也有考慮
    • 我的正規化算是如下
      • |sell-buy|/max(sell, buy)/2 + (0.5 if sell > buy else - 0.5)
  • 以上總共有5個input data,都是正規到0-1,那麼time stamp呢? (笑

c、time stamp

這是純粹的暴力美學,使我非常後悔... 靈感來自之前看過處理語意解讀的處理方式,一天500筆資料對吧? 那我將第一筆資料當作第一個input,第二個資料取自第一和第二筆資料以此類推...

  • 資料(第xinput),總維度維持500
    • [data[0], 0, 0, 0, ...]
    • [data[0], data[1], 0, 0, 0, ...]
    • [data[0], data[1], data[2], 0, 0, 0, ...]
    • ...

夠暴力吧...

二、模型和輸出

模型

我使用三層的LSTM,input shape理所當然地是shape(500, 5) (完全沒有理所當然Orz

輸出

我希望能預測下一筆的交易價格,所以輸出是1

三、結果

我才使用不到1/3的資料集,就訓練超級久!!!

  • 參數
    • epochs = 5
    • batch_size = 500
    • optimizer = radam

光是input 維度是500我就覺得根本瘋掉了,但抱持著完全測試的心情,還是用下去了,直接看結果吧Orz

  • Loss

  • Pridiction

一馬平川 (笑死,上方藍紅的標籤打相反了Orz

我原本真的預計至少會亂跳一點,怎麼結果就這麼平? 其實後來想想,模型為了要將loss用到最低,很可能這是最好的方式... 明天我會測試「action」預測看看,但要先改改input data,不然這東西不能繼續啦 XDDD

你說怎麼不繼續training久一點? epochs多一點啊?

一個epochs要8分多鐘,10個epochs要80分鐘,100個要...自己算,這沒有CP值啦! (怕.jpg

程式碼

model_01_LSTM_base_action_predict


上一篇
沒有實作所以只好講幹話系列(三) :: 過擬合了 !!
下一篇
暴力輸入資料實測-單純的我被嘲諷了<補>
系列文
AI可以分析股票嗎?30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言