2017年9月22日 星期五

Machine Learning on TWSE -- vol.1

在Study了許多文件以後, 發現Deep Learning跟我一開始想的不完全一樣,
又或者說, 我又更了解了Deep Learning一點
在這塊領域上面, 台灣是落後的,
當然, 我更是一個半途出家的研究者,
不敢說自己有多專業, 更多的是希望拋磚引玉,
引進更多志同道合的夥伴們一起成長,

在vol.0作出一個初步的結果以後, 遲遲沒有拿出來,
因為在實作之前有一個更重要的問題,

如何確定未來數據會重現我訓練出來的行為?  
如何確定這個model是general的

先說個我一開始認為的謬誤
我認為的Neural Network是不管我餵甚麼數據給他,
他總是能依靠著電腦強大的運算能力, 去找出相關性,
然而, 事情並不像傻人想的那麼簡單,
如果單純把開高低收成交量送進去計算,
相當高的機率是學不到任何東西的,

所以這時候我採用以某一天的開盤價作為基礎, 將開高低收轉變為1左右的數字
這樣既可以解決個股票之間, 價格高低水位不同的問題

也可以一併解決learning rate的問題,
相信大家在學machine learning的時候,
都聽過要做normalization, 但可能都不知道為什麼
先扯到一個machine learning的超參數 "learning rate"
(超參數意指非machine learning會學習的變數, 只能由人在外面調適, 每次學習的時候這個超參數是固定的)
就我所認為的應該是因為每個神經元每個input在學習的時候, 會根據作learning rate大小的shift, 以去求gradient找最適化參數,
然而如果input data每次不一樣, 甚至同一個minibatch輸入進去的input data不一樣,
那麼每個神經元學習的速度會不一樣, 這時可能會導致本來該學會的東西,
反而學不會,
至於成交量我還沒想到一個比較好的做法,
因此目前先採用開高低收作input data,

因為想要學習一個general的方法
下一篇可能會講解如何random選股票送進去當training data






2017年9月16日 星期六

Machine Learning on TWSE -- vol.0

研究了數日以後,
從原先想研究的RL方向,
先轉換成現在較成熟的DNN,
開高低收成交量加入了data preprocess, normalize
訓練了2~3天, 有一個初步的結果是train loss跟test loss會同步下降,
這通常表示著我們找到了一個gerneral的規則, 能夠提升我們的勝率(預測),


至於其他詳細的detail,  等我訓練到滿意以後, 應該會一次釋出
目前初步預估, 是可以用來做交易的model,
如果考慮100元的股票 手續費86 + 300證交稅 = 0.00386
加上買賣各讓一個點差 = 0.01
每次交易成本如果設定在0.01386
目前每次交易平均獲利是在0.03x
如果有機會把平均交易獲利提升到0.05的話或許已經是一個相當不錯的model

當然data並不是那麼完美, 尤其遇到增減資, 每年的股利發放, 可能會造成誤判,
但對於目前50萬筆的日資料, 或許例外狀況是可以忽略不計的

2017年9月13日 星期三

初入 - Machine Learning

在自己胡亂摸索了 ML兩個多月以後,
在Deep Reinforcement Learning上面碰壁以後,
決定更加深入這門學問,



其中中國有一個莫凡老師,
做了許多python 以及機器學習的教學影片, 文字, source code
https://morvanzhou.github.io/tutorials/
簡潔易懂, 可以做為入門的參考

目標是能夠學會DNN, CNN, RNN, DRL等等
在甚麼情況應該用甚麼model, 用甚麼演算法, 用甚麼方法來學習

進階的可以參考機器人學習大神
http://ufal.mff.cuni.cz/~straka/courses/npfl114/2016/sutton-bookdraft2016sep.pdf
Richard S. Sutton的Reinforcement Learning : An Introduction

----------------------------------------------------------------------------------------------------

首先先科普一下

Machine Learning主要分三(四)大類:
Supervised : 每一組data會對應一組答案, 讓機器來學習
Unsupervised : data沒有對應任何答案, 主要讓機器自己學著把data分類
Reinforcement Learing : 機器在邊跟environment 互動中, 藉由reward學習

(進化學習) : 這塊我還不熟悉






XGBoost (python3.5) (windows) (anaconda) plot_tree 修正

windows anaconda下載的XGBoost plot_tree default function畫出來只會顯示 f0, f1, f2......作為feature的切割 如上圖 參考了網路上的做法, 做了修正 1. 首先要建立一個fmap的文件 ...