![見出し画像](https://assets.st-note.com/production/uploads/images/140986294/rectangle_large_type_2_6debfeea46f08e4c40dcce74b8eb5ca5.jpeg?width=1200)
AIによる推論で明日の日経平均株価を予測する はじめての推論実行編
AIによる推論で明日の日経平均株価を予測する
AIモデルに対する過学習の問題が解決できない状況が続いています。
一方で、AIモデルによる日経平均株価の予測精度(Accuracy)は60%強まで実現できています。
このあたりで、一度、学習済みAIモデルを使って明日の日経平均株価の予測を行ってみたいと思います。
学習済みAIモデルを使って何らかのデータや情報、等を導き出す行為を、専門用語では、AIによる推論と表現するようです。
Neural Network Consoleによる学習済みAIモデルを使った推論について、実行方法を紹介しているドキュメントと動画は下記の通りです。
ドキュメント
動画
「NNCチュートリアル:作成した認識機をPythonから利用する方法」(下記を参照)
上記のドキュメントと動画は、何れも下記の2種類の方法について紹介しています。
ドキュメントおよび動画で紹介されている学習済みAIモデルを利用する方法
NNabla Python CLI(コマンドラインインターフェース)を使用する方法
NNabla Python API(アプリケーションプログラミングインターフェース)を使用する方法
しかし、内容に差分があります。
おそらく、ドキュメントや動画がリリースされた時期と、それと並行して行われたであろう実行環境のバージョンアップが関係しているのではないかと勝手に推測しています。
私の感覚では、動画の方が分かりやすかったので、動画を参照しながら作業を進めることにしました。
Neural Network Libraries(NNabla)のインストール方法
Neural Network Consoleによる学習済みAIモデルを使った推論を実行するにはNeural Network Libraries(NNabla)をインストールする必要があります。
ですが、その前に、Pythonのバージョンを確認してください。
Neural Network Libraries(NNabla)が対応するPythonのバージョン
バージョン3.8~3.10
上記の動画では2分15秒辺りにNeural Network Libraries(NNabla)のインストール方法が紹介されています。
また、インストールに関するドキュメントも用意されています。
Neural Network Libraries(NNabla)のインストールに関するドキュメント
インストールに関するドキュメントの方が内容が詳細なので、そちらを参照しながらNeural Network Libraries(NNabla)のインストールを行っていくことにしました。
ちなみに、私はWindousユーザーですので、「OS別ワークフロー」の「Windowsへのインストール」を参照しました。
上記のドキュメントによると、Neural Network Libraries(NNabla)のインストール方法は、下記の通りです。
Neural Network Libraries(NNabla)のインストール方法
Pythonが実行可能な環境で下記のコマンドを実行
conda install scipy scikit-image ipython
pip install nnabla
インストールが完了したら下記のコマンドを実行して出力メッセージを確認
python -c "import nnabla"
出力メッセージ: YYYY-MM-DD HH:MM:SS,NNN [nnabla][INFO]: Initializing CPU extension...
pipコマンドによるNeural Network Libraries(NNabla)のインストールを試したところ、エラーメッセージとインストールが成功したというメッセージが出力されました。
> pip install nnabla
Collecting nnabla
(中略)
Installing collected packages: numpy, h5py, nnabla
Attempting uninstall: numpy
Found existing installation: numpy 1.22.4
Uninstalling numpy-1.22.4:
Successfully uninstalled numpy-1.22.4
ERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.
mkl-fft 1.3.8 requires mkl, which is not installed.
Successfully installed h5py-3.10.0 nnabla-1.38.0 numpy-1.26.4
エラーメッセージの内容(Google翻訳より)
pipの依存関係リゾルバーは現在、インストールされているすべてのパッケージを考慮していません
この動作は、次の依存関係の競合の原因になります
mkl-fft 1.3.8にはmklが必要ですが、mklはインストールされていません
どうやら、mklというライブラリをインストールする必要がありそうです。
> conda install mkl -c conda-forge
mklライブラリのインストールは正常に終了しました。
念のため、pipコマンドによる依存関係の確認を再度行うことにしました。
> pip check
mkl-fft 1.3.8 requires mkl, which is not installed.
pandas-datareader 0.10.0 requires lxml, which is not installed.
pandas-datareader 0.10.0 requires pandas, which is not installed.
mkl, lxml, pandasの3つのライブラリがインストールされていないと指摘されました。
mklライブラリはcondaコマンドでインストールしたたため、pip checkでは認識されないのかもしれません。
念のため、condaコマンドでインストール状況を確認すると、以下の通り(一部を抜粋)で問題ありませんでした。
> conda list
# Name Version Build Channel
mkl 2023.2.0 h6a75c08_50497 conda-forge
ところで、lxmlライブラリはともかく、pandasライブラリがインストールされていないという指摘はいくら何でもおかしいと考えられます。
なぜなら、前回作成したPythonプログラムではpandasをimportし、使用しているからです。
しかし、念のため、前回作成したPythonプログラムを実行したところpandasに対するエラーが出力され、プログラムが動作しませんでした。
なぜ? と考えても原因が分かりませんでした。
このため、lxmlおよびpandasライブラリを追加でインストールしました。
> conda install lxml -c conda-forge
> conda install pandas -c conda-forge
NNabla Python CLI(コマンドラインインターフェース)を使用する方法
上記の動画の2分30秒辺りに、NNabla Python CLI(コマンドラインインターフェース)を使用する方法が紹介されています。
> nnabla_cli forward -c results.nnp -d data.csv -o out_folder
nnabla_cliは、AIモデルに推論を実行させるコマンドで、forwardが推論を指示するオプションです。
results.nnpは、Neural Network ConsoleでAIモデルを学習させた際に作成されるファイルを指定します。
デフォルトでは、results.nnpというファイルが作成されます。
data.csvは、学習済みのAIモデルに推論させるためのデータを保存したファイルを指定します。
今回のケースでは、日経平均株価を予測させるためのデータとなります。
data.csvファイルのフォーマットは、これまで使用した学習データ、あるいは、評価データに対して、ラベルの列を削除したものになります。
out_folderは、AIモデルの推論結果が保存されるフォルダを指定します。
NNabla Python API(アプリケーションプログラミングインターフェース)を使用する方法
上記の動画の5分00秒辺りに、NNabla Python API(アプリケーションプログラミングインターフェース)を使用する方法が紹介されています。
動画を参考に、NNabla Python APIを使用するPythonプログラムを作成しました。
作成したPythonプログラムのソースコードを以下に示します。
'''
Neural Network Consoleによる学習済みAIモデルの推論を実施します
事前にNeural Network Libraries(NNabla)のインストールが必要です
実行方法
python filename.py --nnp file1.nnp --csv file2.csv
'''
from nnabla.utils import nnp_graph
import sys
import numpy as np
import pandas as pd
import argparse
def main():
# コマンドライン引数の処理
parser = argparse.ArgumentParser(description = 'Execute inference using trained AI models by Python API')
parser.add_argument('--nnp', required = True, help = 'NNP file')
parser.add_argument('--csv', required = True, help = 'csv file')
args = parser.parse_args()
print('NNP file:', args.nnp, file = sys.stderr)
print('Input file:', args.csv, file = sys.stderr)
# csvファイルのデータをDataFrameに入力
csv = pd.read_csv(args.csv, encoding = 'utf-8')
# 学習済みニューラルネットワークの読み込み
nnp = nnp_graph.NnpLoader(args.nnp)
# 推論用ニューラルネットワークの取得
graph = nnp.get_network('MainRuntime', batch_size = 1)
# 入力変数xの取得
x = list(graph.inputs.values())[0]
# 出力変数yの取得
y = list(graph.outputs.values())[0]
# 推論処理
for i in range(len(csv)):
# 入力変数xに値を代入
x.d = csv.iloc[i]
# 推論実行
y.forward()
# 推論結果を表示
print(y.d.reshape(-1)[0]) # 0次元化
if __name__ == '__main__':
main()
#EOF
上記のPythonプログラムを保存したファイル名をfilename.pyとした場合、実行方法は下記の通りです。
> python filename.py --nnp results.nnp --csv data.csv > inference.csv
--nnpオプションは、Neural Network ConsoleでAIモデルを学習させた際に作成されるファイルを指定します。
--csvオプションは、AIモデルに推論させるためのデータを保存したファイルを指定します。
AIモデルが推論した結果は、inference.csvに保存されます。
NNabla Python CLIおよびAPIの実行結果の比較
NNabla Python CLIおよびAPIの実行結果を比較してみました。
学習済みAIモデルの推論に使用した環境は、以下の通りです。
学習済みAIモデルの推論に使用した環境
学習済みAIモデル: 混同行列のAccuracyが60.4%であった4層Affine構造のAIモデル
推論に使用したデータ: 2024年2月1日~2024年3月29日までの日経平均株価、SMA, ボリンジャーバンド、MACD, 一目均衡表、RSI, ストキャスティクス
以下に、推論を実行した結果を並べて示します。
![NNabla Python CLI API 実行結果 比較](https://assets.st-note.com/img/1712747067400-AYjXLn8CPe.png)
色付けした箇所が、NNabla Python CLIおよびAPIで実行結果が異なる部分です。
数値としては、ほとんどが有効桁数(四捨五入)による差ですが、中には0.46154717と0.46154723といった違いも確認できます。
それでも、予測による判定結果に差が生じるものではなく、微妙な差分です。
私の感覚的には、差分が生じる原因はさっぱり分かりませんし、微妙な差分でもありますので、現時点ではスルーします。
学習済みAIモデルの予測結果に対する考察
続いて、NNabla Python CLIでのAIモデルが予測した結果と、実際の日経平均株価の変化とを比較しました。
![AIモデル 推論 日経平均株価 比較](https://assets.st-note.com/img/1715916211017-dtmHIn6qLA.png?width=1200)
私が作成したAIモデルは、当日の株価情報に基づいて翌営業日の日経平均株価が上昇するか下落するかを予測します。
また、推論に使用したAIモデルは、混同行列のAccuracyが60.4%であった4層Affine構造のAIモデルです。
推論結果
予測全数: 39
AIモデルの予測「上昇」、実際の日経平均株価「上昇」の回数: 12
AIモデルの予測「下落」、実際の日経平均株価「下落」の回数: 7
正解率: 48.7%
正解率が50%以下とは、かなりショックな結果となってしまいました。
ただし、Accuracyが60.4%となった評価データは、250日分のデータでした。
一方で、推論に使用したデータは39日分と少ないため、正解率が期待値より低下する可能性も考えられます。
つまり、予測させる日数を増やしていけば、やがて正解率が期待値である60%前後に近づくのではないかと私は考えます。
学習済みAIモデルの推論に使用するデータについて
前回作成したPythonプログラムに学習済みAIモデルの推論に使用するデータを出力する機能を追加しました。
詳細は、下記の記事を参照ください。