Sierですが何か?

仕事、趣味などで興味を持った技術など(ブログタイトル迷走中)

初めての機械学習で株価の未来予測

初めての機械学習で株価の未来予測

f:id:shinji-fsi-5761:20161008022107j:plain


10cmです。こんにちは。今回は機械学習について記載していきます。

私事ですが、最近株をはじめました。本件とは別に、株価を確認するためのスマホアプリを休日に作成しております。

せっかく株価データをAPIを使って取得しているため、他にも使えないかと思い、機械学習に走りました。

株価の未来予測なんて他の方がたくさんやられていますが、今回はメモ感覚で記載します。

今回はサイトの実装を参考にして(パクって)実装します。


環境

  • CentOS 7
  • python3.6
  • scikit-learn
  • pandas


概要

予測したい日付の株価(終値、以下株価)を、前n日分の株価を用いて予測します。
アルゴリズムは、決定木を使用します。

実装

# 株価データの取得
orign_data = getOneDay(6752)

# リターンインデックス(丸パク)
returns = pd.Series(orign_data).pct_change()
ret_index = (1 + returns).cumprod()
ret_index[0] = 1

# 教師データの作成
x, y = createData(ret_index.tolist())

# 予測データと答え
xx = x.pop(-1)
yy = y.pop(-1)


# 決定木(丸パク)
clf = tree.DecisionTreeClassifier()
clf.fit(x, y)

result_y = getResult(xx, clf)
print('期待値	:{0}'.format(yy))
print('結果	:{0}'.format(result_y))

orign_data

株価データはmysqlでデータとして保持しているため、銘柄コードのデータを日付順にソートして取得しています。

ret_index

リターンインデックス、と言うものが何を表しているのかよくわかっていません。
生の株価データを利用するより割合?で教育データを作った方が良いとのこと。

x, y

xには、教育に利用するデータ(30日分)、yにはその時の結果がリストで入っています。

x = [[100, 111, 112, ・・・ , 120, 115], [] ・・・・ []]
y = [1, 0, 0, 1, ・・・, 1, 0]
# 1: 上がった、 0: 下がった


clf

clfには、scikit-learnで提供されている、決定木のオブジェクトが入ります。
clf.fit(x, y)とすることで、学習が行われます。

clf.predict(予測用データ)とすることで、予測結果が返ってきます。

最後に、答え合わせを行っています。


結果

学習データの数によって、1になったり0になったり。。。(当たりまえか)
わかってはいましたが、株価だけではやはり教育データとして決定打にかけている。

外的要因(ニュースなど)を用いた株価予測などを今後やっていこうと思います。

参考

機械学習で未来を予測する - scikit-learn の決定木で未来の株価を予測


にほんブログ村 IT技術ブログへ
にほんブログ村