<株進捗>9/5-9/6 プログラムレビュー、パラメータチューニングの実装

目次

  1. レビュー受けました
  2. レビュー受けての感想
  3. 今日やったこと
  4. その他

1.レビュー受けました

僕が6月くらいからずっとお世話になってるもくもく会で、自分のAIプログラムの進捗の話をしました。
この日は結構盛り上がりました。
もくもく会はこれです↓
【大阪・ディープラーニング】Hackers' Salon 09/23【もくもく会】 - connpass

僕が話したこと

  • 現状
    • 過去N日の値動きを取り込み→次の5日で10%以上アップ(買いサイン)、-10%以下ダウン(売りサイン)、その他(サインなし)になる確率を予想
    • 銘柄の学習がうまく行かない。全部「サインなし」になる
    • 1次関数〜4次関数でテストするとそこそこの精度が出る
    • パフォーマンスチューニングはこれから

話しあったこと

  • 考えられる原因と、原因に対する対策は4つ
    • プログラムミス
      1次関数から4次関数は予想できていることから、ある程度動いてそう
    • ハイパーパラメータの調整
      (対策)パラメータを調整して回す。
    • 損失関数の誤り 現在は、出力層がSoftmaxで損失関数はCrossEntropyですが、CrossEntropyは少し問題があると思ってます。 例えば、答えが「10%以上」の学習データがあった場合、次の2つの間違った予想は、評価(損失関数の値)は同じ。「①10%以上である=50%、−10%以下である=50%」 「②10%以上である=50%、ー10%〜+10%である=50%」 ①より②のほうが、実態に近い予想をしていると思いますが、①と②は同じ評価がされてしまいます。 →(対策)新しい損失関数を探す(論文読むなど・・・)
    • そもそも相関がない より予想がしやすいよう、「取り込む値動きの期間を長くする」「予想する期間を短くする」

2.レビュー受けての感想

  • 自分の考えが浅い
    この話をしたとき、実際に作っている自分より相談受けてもらってる人のほうが真剣に考えていました。
    自分は、ある程度話して「ま、いっか!」と諦めかけていたのに。笑 深く考える習慣が全然身についてないなと反省しました。。
  • 「考えられる原因と、原因に対する対策」の考え方がAIとか機械学習では必要!
    AI機械学習関係の開発は、「何が悪いかわからないけどちゃんと動かない…。」なんてことが普通のプログラミング以上にあると思います。そんなときはこの視点で冷静に見ようと思います。

3.やったこと

各種パラメータが設定されているファイルを設定に従って自動生成する機能など、検証が簡単にできる仕組み作りを進めました。

そしていざテスト。

1次関数〜4次関数の予想

y=f(x)(X=1…200)に基づき、y=f(x)(X=201…205)の最大値を予想。
3%を超えれば「Buy」、ー3%を下回れば「Sell」、それ以外は「Stay」

10000回学習させた時の損失関数の推移
f:id:kurupical:20170906223803p:plain:w400

出力結果

2017-09-06 18:51:07,,(予想/結果)
2017-09-06 18:51:07,,(Buy:N%以上up/Sell:N%以上down/Stay:それ以外)
2017-09-06 18:51:07,,(Sell/Sell):356.0
2017-09-06 18:51:07,,(Sell/Stay):124.0
2017-09-06 18:51:07,,(Sell/Buy):68.0
2017-09-06 18:51:07,,(Stay/Sell):16.0
2017-09-06 18:51:07,,(Stay/Stay):644.0
2017-09-06 18:51:07,,(Stay/Buy):0.0
2017-09-06 18:51:07,,(Buy/Sell):28.0
2017-09-06 18:51:07,,(Buy/Stay):0.0
2017-09-06 18:51:07,,(Buy/Buy):1144.0

予想=結果になっているのが、(Sell/Sell)356 + (Stay/Stay)644 + (Buy/Buy)1144 = 2144件。
全体が2380件なので、だいたい90%の正解率です。
Buy/Sellもちゃんと予想できてます。
1次関数〜4次関数に近似する銘柄がもしあれば、このAIはボロ儲けしてくれます。

銘柄の予想

過去200日の値動きに基づき、翌5日の値動きの最大値を予想。
3%を超えれば「Buy」、ー3%を下回れば「Sell」、それ以外は「Stay」

10000回学習させた時の損失関数の推移
f:id:kurupical:20170906224326p:plain:w400

出力結果

2017-09-06 20:45:33,,(予想/結果)
2017-09-06 20:45:33,,(Buy:N%以上up/Sell:N%以上down/Stay:それ以外)
2017-09-06 20:45:33,,(Sell/Sell):0.0
2017-09-06 20:45:33,,(Sell/Stay):0.0
2017-09-06 20:45:33,,(Sell/Buy):0.0
2017-09-06 20:45:33,,(Stay/Sell):36.0
2017-09-06 20:45:33,,(Stay/Stay):1327.0
2017-09-06 20:45:33,,(Stay/Buy):345.0
2017-09-06 20:45:33,,(Buy/Sell):6.0
2017-09-06 20:45:33,,(Buy/Stay):22.0
2017-09-06 20:45:33,,(Buy/Buy):49.0

予想=結果になっているのが、(Stay/Stay)1327 + (Buy/Buy)49 = 1376件。
全体が1785件なので、正解率は77%です。
しかし、正解して欲しいのは「Buy」もしくは「Sell」です。
(「Stay」を正解しても、売買をしないので利益にならない)

「Buy」の正解率は…
正解件数 : (Buy/Buy) 49件
全体件数 : (Stay/Buy) 345件 + (Buy/Buy) 49件 = 394件
つまり、394回の買いどころがあったのに49回しか買えてないということになります。
また、買わなくていいのに買っちゃってるのが(Buy/Sell) 6件 + (Buy/Stay) 22件 = 28件あります。

この精度の予想では、まだまだ利益でなさそうですね・・・。

過去400日の値動きから翌5日、過去200日の値動きから翌3日、などいろいろな数字をチューニングした160パターンで学習テストしてみます。
次のブログでは良かったパラメータランキングを出してみようと思います。
結果が良かったパラメータを使って、今度は30銘柄ぐらい学習させてみようと思います。

4.その他

書籍「ゼロから作るDeepLearning」の読書会を開催することになりました。
osaka-prg-school.connpass.com
読書会行ったことありませんし、もくもく会以外の勉強会に行ったことありません。が、どうしてもやってみたかったので。
今からめっちゃ緊張しますが、楽しみでもあります!

株予想プログラムのソースコード以下で公開しています。
github.com