<株進捗>8/18 データ学習方法の改良

目次

  1. リファクタリング作業内容の整理
  2. データ学習方法の改良
  3. その他

1.リファクタリング作業内容の整理

コメダにこもって考えました。
f:id:kurupical:20170818225455p:plain

2.データ学習方法の改良

今日は以下の赤文字部分の改良をしました。

  1. [学習フェーズ]以下を指定し、AIに株の値動きを学習させる。
    • 翌営業日の株価を予想するために取り込むデータ数(例:100日分を取り込み次の1日の株価を予想)
    • 各種パラメータ(隠れ層の数(2次元)、学習率、分類器、学習回数)
    • 学習対象データの絞り込み(例:指定した銘柄の値動きと相関が高いものだけを学習データとする)
  2. [学習フェーズ]学習済モデル(いわゆるAI)ができる
  3. [売買フェーズ]以下を指定する
    • [学習フェーズ]でできた学習モデル
    • 適用する売買アルゴリズム(例:予想が10%以上上がっていれば買い)
    • 適用する資産管理ルール(例:総資産の10%は現金として保有する)
    • 売買対象の銘柄
    • 売買開始時期
    • 売買日数
  4. [売買フェーズ]売買プログラムを走らせる
  5. [売買フェーズ]以下のような結果が出力される
    • 売買履歴
    • 最終的な利益
    • (売買履歴をグラフ化したもの)…余裕があれば作りたいです。

学習の仕方は現在1つで。「過去100日分を取り込み、次の1日の株価を予想。」
指定した過去100日分の株価だけで予想できるほど単純ではないと思っています。
また、学習モデルに30日先を予想しようとすれば

①1日〜100日               → 101日目の株価を予想
②2日〜100日+予想した101日        → 102日目の株価を予想
③3日〜100日+予想した101〜102日     → 103日目の株価を予想



㉚30日〜100日+予想した101〜129日     → 130日目の株価を予想

上記のようになり、日が進めば進むほど、「取込データのうち学習モデルが予想したデータ」の割合が高くなり、先になればなるほど精度が悪くなるのは目に見えていました。
ということで、どうすればよいか考察しました。

まずは、成果目標の見直し。

目標:年利10%

そのうえで、2つの仮説を立てました。

目標達成の仮説1:学習データを「100銘柄の100日分」とする。
(※100日分、100銘柄の各値は要チューニング)
これまでは学習データとして1銘柄の100日分を用意していましたが、これではデータ不足であると思っています。ということで、学習に使うデータをもっと増やして、精度が高くなるか確かめます。
参考:
qiita.com
この記事では、28つの為替レートを学習データとして、1つの為替レートを予想しています。
※RNNではなく、ベーシックなNNを使っています。

目標達成の仮説2:過去100日のデータから、未来30日分の株価の「最大値」「最小値」を予想する→予想した最大値が、現在価格より10%以上であれば売り注文を出す。
(※100日、未来30日、10%は各値は要チューニング)
次に…そもそも、成果目標は「株価を予想すること」ではなく、年利10%を実現することです。
ですので、キレイに未来のチャートの形を予想することは絶対ではないです。
値動きの幅さえわかれば売買は可能でしょう。

この2つを実装する(+将来的に他の仮説を検証する)ためには、1.で挙げたソースのリファクタリング(機能単位に分割)が必須です。今のソースだとかなりテストがし辛いです。

3.その他

ソースコードは以下で公開しています。
github.com
・またDeepLearningのところに戻ってこれて、テンションあがってきました。
・Qiitaとかに書き込みしている人は、どれくらいの時間で完成させているのか気になります。1記事でキレイにまとめあげているので…