Consoleで日経平均株価をディープラーニングツイートシェアはてブGoogle+Pocket今回のテーマは日経平均株価こんにちは、cedroです。前々回は、オリジナルの画像データセット(指原莉乃さん)を作ってディープラーニングをしました。今回はオリジナルの数値データセットを作ってディープラーニングしたいと思います。テーマは日経平均株価です。将来の株価を予測をするためには、テクニカルとファンダメンタルの両側からの分析が必要ですが、ファンダメンタルを入れると変数が膨大になるため、今回はテクニカルだけに絞ります。株投資歴4年の私から言わせて貰えば、テクニカル分析だけでも、結構予測できますよ。自分の好きな時だけエントリーすれば良いという条件であれば、テクニカルだけでも7割くらいの精度で予測は出来るのではないかと思っています。今回のディープラーニングは、1週間の株価チャートを見て翌週が、「下がる」、「小動き」、「上がる」の3つに分類させることにします。「小動き」を入れたのは、相場が小動きの時に無理にエントリーしても、結局はチャラということが多いです。「小動き」の時は無理にエントリーせず、ここぞという時だけエントリーすべきだという考え方からです。データを収集・加工する。Yahooファイナンスから、過去5年間の日経平均株価を取得します。と4つありますが、使うのはシンプルに終値だけにします。これにテクニカル要素として、5日移動平均(当日を含む過去5日間の終値の平均)、25日移動平均(当日を含む過去25日間の終値の平均)、75日の移動平均(当日を含む過去75日間の終値の平均)の3つを計算して加えます。*この株価に、短・中・長期の移動平均線を加えたチャートというのが、テクニカル分析の基本中の基本で、私も良く使います。その内容は、ここでは説明しませんので、興味のある方は、ググってみてください。この4つのデータを5日毎に区切って1週間分とします。結果、1週間のデータは5行×4列となります。これだけでは、各データの相互関係が分かり難いので、各データが前週の最終日の終値に対して何%乖離しているかを計算します。上の表では、1月12日~1月18日までの20個のデータそれぞれを、1月11日の終値(8,448)に対して何%乖離しているか計算しています。1月18日の終値の乖離率は、(8,551/8,448)-1=+1.22%となるわけです。5年間の全データを確認すると、大体-10%~+10%(ー0.1~+0.1)の範囲に収まっていましたので、各データを10倍して、マニュアルの指示にあるように、おおむねー1.0~+1.0の中に納まるように調整しました。画像データの場合は、適当に切り取った後に、一括して同じピクセルサイズに縮小すれば良かった(指原莉乃をディープラーニングを参照)のですが、数値データはどうやって作るのでしょうか?ネットで色々調べてみると、EXCELでは作れません(マクロを使うとできるみたいですが、私には無理です)。これを解決する方法について、さらにネットで色々調べてみた結果、OpenOfficeのCalcを使うのが一番という結論に達しました。Officと同様なアプリケーションのセットで、Excelに該当するのがCalcという表計算ソフトです。Consoleで読める数値データファイルが作成できます。このリンクからダウンロードして、インストールして下さい。http://forest.watch.impress.co.jp/library/software/openoffice/Calcは、ほとんどExcel互換ですので、データ収集の段階からCalcを使うのがおすすめです。ドキュメントをクリックし、新規ファイルを作成します。1週間分のデータ(5行×4列)をコピーして、新規ファイルの1行A列のところを右クリックし、「形式を選択して貼り付け」を選びます。すると、上記のポップアップメニューが出ますので、そのままOKを押します。はい、5行×4列のデータが数値でコピーされました。次に、ファイルー保存をクリックします。すると、こんなポップアップメニューが出ます。ファイル名は自分の好きなファイル名を入力(私は、b1と入力しました)。ファイルの種類は、最初「ODF表計算ドキュメント(.ods)」が表示されていますが、ここを「テキストCSV(.csv)」に変更して、「保存」を押します。すると、文字列選択画面になります。最初「日本語(Windows-932)」が表示されていますが、ここを「Unicode(UTF-8)」に変更して、「保存」を押します。Consoleが読めるb1.scvという数値データファイルが出来ました。過去5年間の週間データ(244個)を見て翌週が、下がる(ー2%以上)、小動き(±2%以内)、上がる(+2%以上)の3種類に分類します。分類してみると、半分くらいは「小動き」で、「上がる」と「下がる」は少ないです。3つのデータが均等に収集できるように、それぞれ60個×3=計180個のデータを選ぶことにし、数値データファイルを作成して、フォルダーに分けます。いう翌週下がる数値データファイルを格納します(sはsellの略のつもり)。いう翌週小動きの数値データファイルを格納します(kはkeepの略のつもり)。いう翌週上がる数値データファイルを格納します(bはbuyの略のつもり)。画像データの場合は、これだけ用意すれば良かったのですが、数値データの場合は、学習用ファイルと評価用ファイルも自分で作る必要があります。いっても、特に難しいわけではないです。学習用ファイルや評価ファイルには、使用する数値データファイルの名前とラベルが書いてあるだけです。ラベルというのは数値データファイルの種類を表すもので、今回は翌週が下がるは「0」、小動きは「1」、上がるは「2」というラベルを付けることにします。これが、私が作った学習ファイルの一部です(評価ファイルも同様です)。2行目は、フォルダーstock0にあるs1.csvファイルのラベルは「0」ですと書いてあります。こんな感じで、ラベルが「0」、「1」、「2」のファイルを同数書いておけばOKです。これもCalcで書いて下さいね。今回データは全部で180個ですので、学習ファイルには144個(80%)、評価ファイルには36個(20%)振り分けて記載しました。nikkei_test.csvというファイル名にしておきます。Consoleの登場です。Consoleを起動したら、左側のDATASETタブをクリックします。Dataset」をクリックします。先ほど、作ったSNNC30フォルダーを表示させ、nikkei_train.csvファイルを選択し、「開く」を押します。はい、学習用データセットが読み込まれました。右側の画像をみると、それぞれに、終値、5日、25日、75日の4つの線が並んでいるのが分かります。同様に、読み込ませます。ニューラルネットワークの設計をするPROJECT画面で、binary_connect_mnist_MLR.sdcprojを開きます。今回は3分類ですので、ブロックの最後にS(Softmax)とC(CategoricalCrossEntropy)が付いているこのプロジェクトを流用します。いうファイル名で、先ほどのSNNC30フォルダーにセーブします。これは、モノクロ28×28ピクセルの画像から、5行×4列の数値データに変更したという意味です。その他、2048と書いてあるところは全部とりあえず80に変更。Consoleが自動最適化を行ってくれるので、適当です。