械学習と経済予測

1000年後も続く世界を

機械学習を経済予測に利用する際の諸々。

USD/JPYの予測

米ドルと日本円の日次データ(始値、終値、高値、安値)と各アルゴリズムや機械学習のモデルによる予測データ。

なお、誤差を始値、終値、高値、安値それぞれの値について、予測から実際の値を引いた後に2乗し、足したものを平方根で算出している。 そのため、値が小さいほど精度が高い。

また、具体的な値以外に、その日一日で上昇したか下降したかについても予測と誤差の算出(実質的に失敗レート)を行っている。

成績

名称 予測値に関する誤差の平均 上昇下降に関する誤差の平均
アルゴリズム1 0.933510949818 0.511293054771
アルゴリズム2 0.910456600554 0.511293054771
アルゴリズム3 0.669763007166 0.50739056282
アルゴリズム4 0.692458501363 0.505802434192
アルゴリズム5 31.128347504 0.457943925234

直近の予測

名称 始値 終値 高値 安値
アルゴリズム1 109.32 109.24 109.71 109.23
アルゴリズム2 109.24 109.16 109.63 109.15
アルゴリズム3 109.31 109.3052 109.5308 109.0844
アルゴリズム4 109.31 109.278 109.555 109.059
アルゴリズム5 91.78603439331054 91.02254857540132 86.23048449873924 80.00093211365893

過去データ

アルゴリズム1 - 前日の繰り返し1 -

前の日の値をそのまま予測値とするだけのアルゴリズム。

pred.Open = yesterday.Open
pred.Close = yesterday.Close
pred.High = yesterday.High
pred.Low = yesterday.Low

つまり、一切予測を行っていないわけだが、一見すると「それっぽい」グラフが出力される。 (1日ずれた状態できれいに追従するため)

例えば次のグラフは2019年度8月中旬までの終値と、アルゴリズム1が予測する終値である。

2019 algorism 1

実際の終値と非常に似ているグラフが生成されており、一見するとアルゴリズム1の 予測精度が高いように見えるが、上記の通り、あまり意味が無い。

機械学習を行わせた場合、一見すると精度が出ているような、このような単純なアルゴリズム よりも精度が劣っているケースがあるため注意が必要である。

アルゴリズム2 - 前日の繰り返し2 -

前日とまったく同じ動きをすることを想定して予測するアルゴリズム。 アルゴリズム1と大差は無いが、始値を前日の終値から計算するため、一応予測していると言えばしている。 ただし、「前日の終値からさらに前日の動きを繰り返す」ため、アルゴリズム1よりも変動が大きくなることがある。

pred.Open = yesterday.Close
pred.Close = (yesterday.Close - yesterday.Open) + yesterday.Close
pred.High = (yesterday.High - yesterday.Open) + yesterday.Close
pred.Low = (yesterday.Low - yesterday.Open) + yesterday.Close

次のグラフは2019年度8月の終値と、アルゴリズム1、アルゴリズム2の予測結果である。

2019 08 algorism 2

アルゴリズム3 - 単純移動平均(25日) -

始値、高値、安値、終値について、過去25日間の単純移動平均を計算し、前日の終値を始値とした後、 単純移動平均を利用して予測する。 誤差の成績を確認すると、予測値そのものはアルゴリズム1、アルゴリズム2よりも良くなっているが、 その日1日上昇したか下降したかの予測では、ほとんどアルゴリズム1、アルゴリズム2と変わらないことが分かる。

アルゴリズム4 - 単純移動平均(10日) -

単純移動平均は、対象期間を長くするほど長期的な動きの指標となり、短くするほど短期的な動きの指標となる。 対象期間25日とは別に、10日のデータも作成する。

アルゴリズム5 - 多層パーセプトロン -

ニューロン数300、3層の単純な多層パーセプトロン。