讓Machine Learning幫你看財報!

機器學習不是我很專攻的領域,但幸好現在很多強大的package,可以直接使用,假如你不想深入開發model的話,只要把它當作黑盒子就好了,把它插上插頭,讓資料流進去、流出來。很簡單!

機器學習

免費訓練資料

最下方免費有獲得2萬筆訓練資料的方式,在坊間一定是要賣錢的,甚至連課程一起賣,但我想說算了啦,反正我就是個草根碼農XDD,希望大家可以一起互相切磋。

之前寫的策略,選股方式都是用條件拼湊的:

S={sROEs>3 and PBs<1.5}\mathbb{S}=\left\{ s\mid\text{ROE}_{s}>3\text{ and }\text{PB}_{s}<1.5\right\}

但是現在用machine learning的話,就會寫成這樣:

S={sf(ROEs,PBs)=1}\mathbb{S}=\left\{ s\mid f(\text{ROE}_{s},\text{PB}_{s})=1\right\}

這邊用的是分類(classification),假如覺得會上漲,就是1,會下跌就是0。
上面的 ff 就是機器學習的model,我們不太知道這個是個怎樣的函數,因為這個model不是一個公式,而是經過資料訓練而來的。這個簡單的範例只有2個features:ROE、PB。只是一個例子而已,下面會有更多的features:

資料

資料是從2010年底,到2017年,每次財報截止的隔天買入,並在下次財報截止前賣出。
至於features就是用之前寫文章,覺得好用的:

  • 月營收 買入前12個月
  • ROE 買入前12季財報
  • 本益比 買入前一天
  • 股價淨值比 買入前一天
  • 殖利率 最近一期
  • 股價是否大於季線
  • 股價是否大於半年線
  • 負債比率 買入前12季財報

可以到這裡下載歷史資料,假如有人訓練的比我的好的話(應該滿簡單的),歡迎一起討論,我們可以一起合作建構一個初版的平台,或是有人想要train不同的feature,也歡迎留言給我。

除了上述的features,每筆資料還包含:

  • stock_ID 股票的代號
  • buy_date 買入日期
  • buy_price 買入開盤價
  • sell_date 賣出開盤價
  • sell_price 賣出價格
  • gain 賣出價/買入價

不確定這些歷史數據,有沒有錯,假如不放心,可以幫我稍微檢驗一下,另外,關於買賣日期,我是參考IFRS制度上市前後不同的財報截止日,然而有些企業遲交財報,就沒辦法了…所以會包含一點未來數據。

這篇文章有講到財報遲交的公司,還是別買的好,而每年大約只有100家公司會遲交財報,以整體資料而言,未來數據應該不會太多(我覺得啦XD,但不知道資料科學家們怎麼看就是了)。

資料僅供學術發展,請勿用於商業用途!

訓練model的方式

由於我想要弄一個快速的prototype,所以先使用random forest model,這樣就不用pre-processing了XDD

Model
1
2
from sklearn.ensemble import RandomForestClassifier
rf = RandomForestClassifier(n_estimators=500, max_leaf_nodes=None, class_weight='balanced')

以上是用sklearn裡的模型,連參數什麼都沒給,這樣的效果還OK了。訓練時,training data使用2014年以前的資料,而test data是2015年以後的資料

結果太好了,我不敢相信…

以下是還沒篩選前的獲利分佈圖,這邊的獲利是用倍數來衡量,也就是 賣出價格/買入價格。可以看到,這是一個對稱於1的分佈圖,大於1(賺)跟小於1(賠)其實很接近,其平均值是在1.005左右,你有看到一藍藍的地方嗎?那就是篩選後的標的:

2015年後獲利分佈

下面我們把藍色的地方直接畫一張圖,可以發現篩選後,發現結果好很多,分佈偏向大於1,也就是很多的選擇是有獲利的!

2015年後篩選後獲利分佈

平均來到了1.10左右,代表每季買一群股票,平均來說會賺10%左右。且勝率來到了70.2%

對於這樣的結果,我感到有點難過,因為成果太好代表裡面一定有什麼問題,我還是抱著懷疑的態度,各位可以做最嚴格的檢驗,機器學習不是我的專長,願意虛心受教,或是你還希望有什麼額外的features呢?我幾乎都可以幫你生成客製的test data喔!

附註:免費取得訓練資料

取得資料的方法很簡單,幫冷清的寒舍小小宣傳一下:

  1. 按右下角分享於FB
  2. 將分享截圖傳到 [email protected]
  3. 一兩天內即可獲得 data.csv!

依照本blog的含金量、data.csv的完整程度,你一定不會後悔的!

詳細的python教學:利用Machine-Learning-選股新手教學

假如覺得文章不錯,那更不能錯過我們的影音課程喔!
或我們按個 鼓勵一下吧!