シリーズ「移動平均AI」、第3回は 〜予測してみる編〜 です。
ここから移動平均乖離率(の推移)を求めます。
# <<<<< 移動平均を計算 >>>>>
def add_divergence(input_data_df):
input_data_df = input_data_df.assign(MD=0)
sum = float()
for i in range(len(input_data_df)-1-T ,len(input_data_df)):
for j in range(0, T):
sum = sum + input_data_df.iloc[i+j-(T-1),0]
input_data_df.iloc[i,4] = sum/T
sum = 0
return input_data_df
# <<<<< 移動平均解離度を計算 >>>>>
def add_div_divergence(input_data_df):
input_data_df = input_data_df.assign(Div=0)
for k in range(len(input_data_df)-1-T, len(input_data_df)):
input_data_df.iloc[k,5] = input_data_df.iloc[k,0]/input_data_df.iloc[k,4]
return input_data_df
# <<<<< Neural Net への入力データを取り出す >>>>>
def get_feature_data(input_data_df):
# 注! 最後に[NaN]があるので調整している
input_data_df = input_data_df.iloc[len(input_data_df)-T-1:len(input_data_df)-1,5]
predictor_ndarray = input_data_df.T.values
feature_data = np.array([predictor_ndarray]).astype('float32')
return feature_data
ここまでで、最新のデータを入力データに加工できました。
ここから、ニューラル・ネットワークモデルをロードして予測します。
(⬇ここまでの処理を実行するメイン関数)
注:出力の調整について入力の調整でも述べたように、ばらつきが大きくデータの意味が読めないことで調整を行っています。これが移動平均AIの提供している予測です。
※ 免責事項の繰り返しになりますが、本モデルは
(以下、余談)(小難しい言い方をすると、あるいは感覚的な言い方をすると、)
"乖離率(離れ具合)の推移(の形状)"を AIが "見て(認識して)" 、
学習させた期間の推移を"総合的なパターン"としてAIの判断基準としたときに、(条件分岐を組み合わせたり、新たな計算をすることなく、)
移動平均AIの作り方 〜②機械学習編〜 です。
①で作成した入力データを調整しました。
調整したのは、データ列の最後の「UP_Ratio」(上昇・下落度)です。
最終的に2つの"強調加工”をしました。
・1つ目は、変化の幅を強調するため、過去5営業日間で一番絶対値が大きい変化率をその日の変化率としました。これで、“株価の上下の方向性が強調される“よう加工しました。
加工した入力データ(各営業日に対して、当日〜25日前までの移動平均乖離度の列+調整した当日の変化率)をニューラルネットに学習させます。
Tensorflowを使用しました。
ニューラルネットの構成は以下のとおりです。
・入力層(25) ー 中間層(25) ー 出力層(1) ※()内はノード数・損失関数は単純に二乗誤差としました。(エントロピーなどでは良い結果が出ませんでした。) 正答誤差については、各自調整してください。
ここまでで入力データをロードし、整形しました。
以下がニューラル・ネットワークの構成です。
次に学習を行います。学習後、正答率の算出を行っています。(ここでは正答率のみで、F1 Score等出してません。)
⬇上記処理を行うメイン関数です。
今回はここまでです。