見出し画像

ちょうど良い説明変数の情報量を知りたい


今回は説明変数に対して相関行列を算出します

これまでの検証を通じて、株価に基づき何かを予測するAIモデルには、ちょうど良い説明変数の情報量とAIモデルの構造を知る必要があると気がつきました。

今回は、ちょうど良い説明変数の情報量を知るため、相関行列を算出したいと思います。

相関行列の算出式、等につきましては、前回の記事を参照ください。

相関行列を算出する説明変数の構成

説明変数に対する相関行列を算出するにあたり、下記の構成の説明変数を対象とします。

  • 説明変数(全37項目)

    • 日経平均株価(始値、高値、安値、終値、出来高)

    • 単純移動平均(5日、25日、75日)

    • ボリンジャーバンド(+2σ, +σ, 20日SMA, -σ, -2σ)

    • MACD(MACD)

    • RSI(RSI)

    • ダウ平均株価(始値、高値、安値、終値、出来高)

    • S&P500(始値、高値、安値、終値、出来高)

    • NASDAQ(始値、高値、安値、終値、出来高)

    • VIX指数(終値)

    • ドル円為替レート(始値、高値、安値、終値)

    • 米13週国債(終値)

    • 米10年国債(終値)

また、説明変数の期間は、下記の通りです。

  • 期間: 2015年1月1日 ~ 2023年12月31日の9年間

さらに、相関行列を算出する際に、RNNの段数(timesteps)は、1とします。

説明変数に関するデータ作成は、以前に作成した下記のPythonプログラムを使用します。

また、Pythonプログラムの実行方法は、下記となります。

> python file.py --fp label.py --c N225 --i SMA BB MACD RSI DOW SP500 NAS VIX USD IRX TNX --s 2014-9-10 --e 2024-1-10 --n 4 --r 1

Pythonプログラムの実行後にtraining.csvとvalidation.csvが作成されます。

今回必要なのは、training.csvのみですので、validation.csvは削除してもかまいません。

また、training.csv内のLabelも不要ですので、Labelの列も手動で削除します。

相関行列を算出するPythonプログラムのソースコード

相関行列を算出するPythonプログラムのソースコードを以下に記載します。

import pandas as pd
import numpy as np
import argparse
import seaborn as sns
import matplotlib.pyplot as plt


def main():
    # コマンドライン引数の処理
    parser = argparse.ArgumentParser(description = '相関行列の算出')
    parser.add_argument('--f', required = True, help = 'データファイル名(csv形式)')

    args = parser.parse_args()

    # csvファイルのデータをDataFrameに入力
    Data = pd.read_csv(args.f, encoding = 'utf-8')

    # 相関行列を算出
    CorrMatrix = Data.corr(method = 'pearson')

    # ヒートマップを作成
    plt.figure(figsize=(16, 12)) # 図のサイズを調整
    sns.heatmap(CorrMatrix, annot = True, cmap = 'coolwarm', center = 0, fmt = '.1f')

    # ヒートマップを表示
    plt.tight_layout()
    plt.show()


if __name__ == '__main__':
    main()

上記のPythonプログラムを実行する際は、下記の様にコマンドを実行します。

> python file.py --f training.csv

算出した相関行列の可視化

算出した相関行列をヒートマップで可視化したものが、下記となります。

ちなみに、相関の見方は、次の通りです。

  • 相関が1: 全く同じ

  • 相関が0: 全く異なる

  • 相関が-1: 全く真逆

説明変数 全37項目 相関行列 ヒートマップ
説明変数(全37項目)の相関行列ヒートマップ

一般的に強い相関があるとされる0.7以上、あるいは、-0.7以下のものを抽出した結果を以下に示します。

  • 相関が1.0

    • グループA

      • 日経平均株価(始値、高値、安値、終値)

      • 単純移動平均(5日、25日、75日)

      • ボリンジャーバンド(+2σ, +σ, 20日SMA, -σ, -2σ)

    • グループB

      • ダウ平均株価(始値、高値、安値、終値)

      • S&P500(始値、高値、安値、終値)

      • NASDAQ(始値、高値、安値、終値)

    • グループC

      • ドル円為替レート(始値、高値、安値、終値)

  • 相関が0.9

    • グループD

      • 日経平均株価(始値、高値、安値、終値)

      • ダウ平均株価(始値、高値、安値、終値)

      • S&P500(始値、高値、安値、終値)

      • NASDAQ(始値、高値、安値、終値)

  • 相関が0.8

    • グループE

      • 日経平均株価(始値、高値、安値、終値)

      • 単純移動平均(5日、25日、75日)

      • ボリンジャーバンド(+2σ, +σ, 20日SMA, -σ, -2σ)

      • ダウ平均株価(始値、高値、安値、終値)

      • S&P500(始値、高値、安値、終値)

      • NASDAQ(始値、高値、安値、終値、出来高)

    • グループF

      • MACD(MACD)

      • RSI(RSI)

    • グループG

      • ドル円為替レート(始値、高値、安値、終値)

      • 米10年国債(終値)

  • 相関が0.7

    • グループH

      • S&P500(出来高)

      • VIX指数(終値)

    • グループI

      • ドル円為替レート(始値、高値、安値、終値)

      • 米13週国債(終値)

これ程までに各情報の相関関係が高い状況に、私は驚きました。

さて、相関が0.6以上、かつ、-0.6以下のグループでは、代表を一つだけ選択すれば良いと考えます。

  • グループA: 日経平均株価(終値)

  • グループB: S&P500(終値)

  • グループC: ドル円為替レート(終値)

  • グループD: グループA + B → グループA, Bから一つを選択

  • グループE: グループA + B + NASDAQ(出来高) → グループA, Bから一つを選択

  • グループF: MACD(MACD)

  • グループG: グループC + 米10年国債(終値) → グループCで代替

  • グループH: VIX指数(終値)

  • グループI: グループC + 米13週国債(終値) → グループCで代替

以上の結果より、グループA~Iで選択する説明変数は、以下の通りです。

  • 日経平均株価(終値)

  • MACD(MACD)

  • VIX指数(終値)

  • ドル円為替レート(終値)

また、上記以外の相関関係がほぼない項目を合わせたものが下記となります。

  • 相関行列に基づく説明変数の最適な構成(全6項目)

    • 日経平均株価(終値、出来高)

    • MACD(MACD)

    • ダウ平均株価(出来高)

    • VIX指数(終値)

    • ドル円為替レート(終値)

改めて、上記の6項目で相関行列を算出し、ヒートマップ化したものを下記に示します。

説明変数 全6項目 相関行列 ヒートマップ
説明変数(全6項目)の相関行列ヒートマップ

以上で、日経平均株価+αを対象とした場合のちょうど良い説明変数の情報量が明確になりました。

ただし、注意が必要なのは、対象を他の銘柄に変更した場合は、改めて、相関を確認する必要があるという点です。

その結果によっては、説明変数の項目が変更となる可能性は十分にあります。

このようなことを考えると、学習および評価データを作成するPythonプログラムをどのように修正すべきか、非常に悩ましいです。
(´Д`;)ドウシヨウ

とりあえず、学習および評価データを作成するPythonプログラムを修正します。

その後に、上記の6項目と単純な構造のAIモデルの組み合わせで評価します。

いいなと思ったら応援しよう!

この記事は noteマネー にピックアップされました

noteマネーのバナー