1. HOME
  2. ブログ
  3. IT技術
  4. 【前編】ディープラーニングで株価予想!【Python】
python-deep-learning-stock-price-forecast-create

【前編】ディープラーニングで株価予想!【Python】

ディープラーニングで株価予想してみる

「株で大儲けしたい!」

誰しも一度は考えたことがあるかもしれません。

そこで今回は、ディープラーニングを使って株価を予想できないか検証してみようと思います!

目指せ!不労所得!

今回のディープランニングで株価予想する上での注意事項

まず、株価分析の手法は、以下の2つに大別できます。

【ファンダメンタル分析】
ファンダメンタル分析は、企業の業績や、市場の方向性を分析して、株価の予想を行う手法です。

【テクニカル分析】
テクニカル分析は、過去の株価を用いて、株価の予想を行う手法です。

今回使うのはテクニカル分析

今回使うディープラーニングは、説明変数として過去の株価を用いるので、「テクニカル分析」を行うことになります。

ですが、過去の様々な論文で、テクニカル分析の効果がないことが実証済みです。

ですので、過度な期待はせず温かい目でご覧ください。

セットアップ

今回は、PC に Python がインストールされていることを前提で進めたいと思います。

それでは最初に、ディープラーニングを行う上では欠かせない「TensorFlow」と、「Keras」をインストールしましょう。

TensorFlowとKerasのインストール

これらは、pip でインストールできます。

コマンドラインに、下記の内容を入力してください。

$pip install tensorflow
$pip install keras

モジュールをインストール

インストール出来たら、次のようにモジュールをインストールしてください。

TensorFlow 、Keras の他にも「pandas」や「numpy」などを使います。

インストールされていない場合は、その都度 pip でインストールしてください。

関連記事

使用するデータ

今回使用するデータはコチラ

  1. データ期間:2000/10~2019/10
  2. 週次の Topix データ

プロットしてみる

pd.read_csv で保存してあるデータを読み込んで、プロットしてみます。

時系列データとして読み込む

元のデータは1列目に「日付(Date)」、2列目に「topix(Topix)」が格納されていました。

ですので、 data を時系列データとして読み込むために、 pd.read_csv の引数として、 index_col=Dateparse_dates=True を指定しました。

encoding 引数は忘れがちですが、自分が保存した文字コードを指定しないとエラーになってしまうので注意してください。

欠損値がある場合には、 dropna() メソッドで取り除いておくことをおススメします。

(欠損値が残っていると、ディープラーニングの入力用テンソルを作成する際に、少々めんどくさくなってしまいます)

関連記事

ディープラーニングモデルの作成

では、Kerasでディープラーニングのモデルを作成してみましょう。

今回作るモデルは、あくまで一例ですので、皆さんも是非自分のモデルを作ってみてください。

Keras は、下記の2通りでディープラーニングモデルを構築できます。

  1. sequential model
  2. functional API model

今回のような単一入力、単一出力の場合は「sequential model」で十分です。

sequential model は、モデルに層を追加していく要領で、誰でも簡単にモデルを作成することができます。

もう1つの「functional API model」は、多入力多出力の場合や、より複雑なモデルになる場合に使用しましょう。

予想を行う2つのモデルを用意

今回は、直近20週間の Topix を用いて、次の週の Topix を予想するモデルを2つ用意しました。

  1. model_1: 全結合層(Dense)のみ用いたモデル
  2. model_2: LSTM層、全結合層を組み合わせたモデル

全結合層は、最も一般的なニューラルネットワークの層で、入力と層のパラメータとの内積を、出力次元の分計算します。

LSTM層は、時系列データ処理に特化した層で、過去データの情報を保ちつつ出力できます。

モデル作成:コード

それでは、実際にモデルを作成してみましょう。

まずはコードを見てみます。

model_1

model_2

sequential modelを用いることで、こんな簡単にモデルを作成することができました!

モデルの作成:解説

基本的な流れを説明します。

models.Sequential()

まず、 models.Sequential() でモデルのインスタンスを作成し、addメソッドで層を追加していきます。

引数

各層の一番最初の引数には出力次元を入力し、それ以降は各層固有の引数が続きます。

(様々な引数が用意されているので、是非 Keras公式ドキュメントなどで調べてみてください)

input_shape引数

最初の層には、input_shape引数に入力次元のタプルを指定してください。

activation引数

Dense層には、activation引数がありますが、一般的に中間層ならば relu を指定すればよいでしょう。

こうすることで、非線形変換が可能になります。

ただし、今回は回帰問題なので、最後の Dense層の activation は、 linear と指定しておきましょう。

Dropout層

model_1、model_2 共に、途中に Dropout層を挟んでいます。

Dropout層は過学習を抑制する効果があり、ディープラーニングモデルを作成する際には入れておくと良いと思います。

compileメソッド

最後に、compileメソッドを用いる際に、問題に対応した誤差関数(loss)を指定するように注意しましょう。今回で言えば回帰問題を解くので loss=mae を指定しました。

入力用、出力用テンソルの作成

ここで、入力用、出力用のテンソルを作成します。

作成の際には、「入力次元」「出力次元」が、modelと整合的になるように注意してください。

今回は、model_1 に合わせて、出力次元を (sample,timesteps) とします。

入力用、出力用テンソルを出力する関数

pd.dataframe を入力し、入力用、出力用テンソルを出力する関数は以下のようになります。

ここで、Topixデータを当てはめてしまいたいところですが、Topix の値は、先ほどプロットしたように変動幅が大きいため、標準化するよう心がけましょう

(そのままの値を用いると大きな値の影響度が大きくなってしまいます)

Topixデータを標準化

よって、以下のように Topixデータを標準化してから当てはめていきます。

トレーニングデータとテストデータに分割

さて、機械学習の分野では、「トレーニングデータでパラメータの学習」を行い、「テストデータを用いて そのパラメータの評価」を行います。

幸いにも、sklearn.model_selection に、そのような関数が用意されているので使わせて頂きましょう。

とても簡単ですね。

test_size=0.2 と指定することでデータを、8:2でトレーニングデータとテストデータに分割しました。

【後編】へつづく

以上で、作成まで終わりました!

後半は、作成したモデルを実践し、その結果を受けて改善していきたいと思います!

ライトコードよりお知らせ

にゃんこ師匠にゃんこ師匠
システム開発のご相談やご依頼はこちら
ミツオカミツオカ
ライトコードの採用募集はこちら
にゃんこ師匠にゃんこ師匠
社長と一杯飲みながらお話してみたい方はこちら
ミツオカミツオカ
フリーランスエンジニア様の募集はこちら
にゃんこ師匠にゃんこ師匠
その他、お問い合わせはこちら
ミツオカミツオカ
   
お気軽にお問い合わせください!せっかくなので、別の記事もぜひ読んでいって下さいね!

一緒に働いてくれる仲間を募集しております!

ライトコードでは、仲間を募集しております!

当社のモットーは「好きなことを仕事にするエンジニア集団」「エンジニアによるエンジニアのための会社」。エンジニアであるあなたの「やってみたいこと」を全力で応援する会社です。

また、ライトコードは現在、急成長中!だからこそ、あなたにお任せしたいやりがいのあるお仕事は沢山あります。「コアメンバー」として活躍してくれる、あなたからのご応募をお待ちしております!

なお、ご応募の前に、「話しだけ聞いてみたい」「社内の雰囲気を知りたい」という方はこちらをご覧ください。

ライトコードでは一緒に働いていただける方を募集しております!

採用情報はこちら

書いた人はこんな人

ライトコードメディア編集部
ライトコードメディア編集部
「好きなことを仕事にするエンジニア集団」の(株)ライトコードのメディア編集部が書いている記事です。

関連記事