【Python】LSTMによる株価予測【Chainer】

【Python】LSTMによる株価予測【Chainer】AI
スポンサーリンク

はじめに

Python、ChainerによるLSTMにて日経平均株価の予測を試みる。
Chainerを使用しているのは、過去に実験的に作ったLSTMがChainerを使用しており、それを使いまわしているため。

ソースコードは最後の方に丸っと貼ってます。

AI関連の記事はG検定のまとめ記事を中心にいろいろ記事を書いてるので興味ある方はこちらもどうぞ。
https://www.simulationroom999.com/blog/jdla-deep-learning-for-general-2020-1/

※ 文字数/画像数が多いためかページが重くなったので4ページに分割しました。

スポンサーリンク

割とどうでもいいことなんだけど。

なんか株の銘柄が擬人化されてる。
株価の上がり下がりがそのまま感情表現になるとか。
さすが日本。気が狂ってる。(誉め言葉)

IRroid、株価、擬人化

IRroid。すでにサービスは終了してるっぽい。

以降、真面目に行きます。

スポンサーリンク

発端

うちの嫁に、
「株価予測するアプリ作れ」って脅された。

そもそも、それほど株取引の知識が無いのですけど。

とりあえず、それっぽいものを作るべくLSTMで実験した。

ちなみに嫁PCでも動作させる必要があったので、Pythonをexe化してPython環境構築しなくても動作させる必要があるのだが、それは別記事で記載してる。

スポンサーリンク

結果

ダメでした。
敗因は以下。

  • 株価自体が何かルールを持っているわけではない
    • 外乱の塊をそのまま予測することは不可能。
  • データ量が多ければ良いという感じでもない。
    • 株価自体が基本的に緩やかな上昇をしているので、データ量を増やすと局所的な特徴が消え、緩やかな上昇という特徴だけが際立つ
  • 直近の予測が新型コロナの影響を受けすぎていて、なんか無理。
    • 明らかな定性がある場合は、過去の定量など意味がない。

ソースコードはこちら

GitHub - KEIKEI999/StocPriceForecast: Pydhon,ChainerによるLSTMを使った日経平均株価予測。
Pydhon,ChainerによるLSTMを使った日経平均株価予測。. Contribute to KEIKEI999/StocPriceForecast development by creating an account on GitHub.
スポンサーリンク

予測結果

予測結果、訓練データで使用した方、2019年1月から4月、テストデータとして使用した方、2020年1月から4月

訓練データで使用した方はうまく予測している。
というか知っている波形なので予測と言ってよいのか・・・。

テストデータの方は全くだめ。
新型コロナの影響が大きすぎて、過去データが全く通用しない。

以下、技術的解説

スポンサーリンク

分析手法

株価の分析手法は大きく2つに分かれる。

  • ファンダメンタル分析
  • テクニカル分析

今回実施する方式は後者に該当する。

ファンダメンタル分析

ファンダメンタル分析とは、財務諸表、健全性、経営、競争優位性、競合相手、市場などを分析することである。先物や為替に適用する場合は、経済、金利、製品、賃金、企業経営の全般的な状況に着目する。この用語は、他の種類の定量的な分析やテクニカル分析などの投資分析と区別するために使用されている。ファンダメンタル分析は過去と現在のデータを用いて行われるが、その目標は業績予想である 。個人投資家においては長期保有を前提に配当などの利回りを重視する立場をとる。大手機関投資家すなわち各銀行の含み益にも関係することから株価に全く無関心なことはないが、短期の上げ下げに一喜一憂しないアプローチ手法である。

Wikipediaより



テクニカル分析

テクニカル分析(テクニカルぶんせき、英: technical analysis)とは、主に株式・商品取引・為替等の取引市場で、将来の取引価格の変化を過去に発生した価格や出来高等の取引実績の時系列パターンから予想・分析しようとする手法である。 将来の取引価格の予想を需給、収益性評価およびそれらの背景となる経済情勢分析に基づいて行う手法であるファンダメンタル分析と相対する概念である。判定ルールに多少なりともトレーダー自身の相場観や曖昧な視覚的判断を用いたものである場合、トレード手法としてはファンダメンタル分析と同じ裁量トレードに分類されるが、ルールを厳格化したりコンピュータ分析などを主体とするなどして、相場観や曖昧な視覚的判断を廃したルールを採用しているものについてはシステムトレードに分類される。またテクニカル分析とファンダメンタル分析以外にはアノマリーがある。

Wikipediaより



スポンサーリンク

内挿と外挿

学習と予測は、内挿と外挿の関係になる。
内挿の精度を上げると外挿がの精度が上がるかというとそうでもない。
今回の結果がまさにそれを語っている。


スポンサーリンク

LSTMとは

長・短期記憶(ちょう・たんききおく、英: Long short-term memory、略称: LSTM)は、深層学習(ディープラーニング)の分野において用いられる人工回帰型ニューラルネットワーク(RNN)アーキテクチャである。標準的な順伝播型ニューラルネットワーク(英語版)とは異なり、LSTMは自身を「汎用計算機」(すなわち、チューリングマシンが計算可能なことを何でも計算できる)にするフィードバック結合を有する。LSTMは(画像といった)単一のデータ点だけでなく、(音声あるいは動画といった)全データ配列を処理できる。例えば、LSTMは分割されていない、つながった手書き文字認識や音声認識といった課題に適用可能である。ブルームバーグ ビジネスウィーク誌は「これらの力がLSTMを、病気の予測から作曲まで全てに使われる、ほぼ間違いなく最も商業的なAIの成果としている」と書いた。

Wikipediaより

一言で言うと、
「系列データの予測が得意なRNNの拡張版で”勾配消失問題”、”将来に於いては関係があるデータの扱いの問題”の対策を入れたもの」
になる。

RNN、LSTMについては以下の記事でもう少し詳しく説明しているので、よろしければご参考に。

スポンサーリンク

深層学習(ディープラーニング)とは

以下の記事を参照。

JDLA G検定の話も参考になるかも。

スポンサーリンク

LSTMに学習させる際の注意点

LSTMは系列データの予測に強いと言っても、何でもOKというわけではない。
LSTMの構造上の都合で、以下の制約がある。

  • ON/OFFスイッチ(シグモイド都合)
  • プラス/マイナスの方向切替スイッチ(tanh都合)
LSTMの各ゲート層、忘却ゲート、入力ゲート、出力ゲート、入力値、前回値によっては記憶セルを忘却、入力値、前回値によっては記憶セルを増減、出力を+-で切替

よって、

LSTMが苦手な波形。ずっとプラス側にいるような波形。

こういうのは常にプラス方向なので、LSTMの表現力が半減未満になる。

LSTMが得意な波形。0を中心とした波形の方が得意、1.0未満だと尚良い。

こういった感じの0を中心とした波形の方が得意
さらに1.0未満だと尚良い。

スポンサーリンク

データ加工方針

前項の理由により、そのまま株価を突っ込んでもLSTMの予測能力は期待できない。
よって、以下の方針でデータ加工する。

LSTMの特にな波形にするための仕掛け。微分してから積分。ついでに±1.0に収まるように正規化、予測開始時のデータを積分定数として取り込む。
  • 株価波形を微分する
  • 微分した波形を±1.0に収まるように正規化する
  • LSTMに学習&予測させる
  • LSTMが予測した波形を不定積分する
  • 不定積分した際に出てくる積分定数は予測直前のデータとする。
スポンサーリンク

微分、積分について

積分、微分というキーワードを使ったが、やることは、引き算と足し算。

微分(差分法)
$$f(t)d/dt≒f(t)-f(t-1)≒f(t+1)-f(t)$$

積分(総和法)
\(C:\)積分定数
$$∫f(t)dt≒\displaystyle\sum_{i=1}^n f(t_i)+C$$

積分、微分の離散化の話は以下の記事を参照。




 
次は日経株価平均のデータ取得方法。

コメント

タイトルとURLをコピーしました