様々な観点から作った株価予測モデルを評価してみました。
非常に長いので読まなくてもよいです。
データ分析に興味がある人は少し楽しめるかもしれません。




2005年から2015年のデータで検証しています。
これを次の三つの期間に分けて、この株価予測モデルが通用しているかどうか、今後も通用するかどうかを考察してみたいと思います

期間A : 2005年 - 2012年 (モデルを作るのに利用した学習期間)
期間B : 2013年 - 2014年(モデルを評価するのに利用したテスト期間)
期間C : 2015年 (データを完全に隔離しておいた純粋なテスト期間 最新のデータ)


まずは次のようなシミュレーションの結果のデータがあるので、これを解析します。
12


①シミュレーションによる資産推移(の傾き)

36
n日目の資産額をx[n]とすると、上記グラフは ln(x[n] / x[1]) を表示しています。
とりあえず傾きだけをみて、全期間に関して同じような傾きを持っていることを確認しました。
切片0の回帰直線を引き、係数を比較すると
期間A : 0.001336816
期間B : 0.001956041
期間C : 0.00190602



ただこの資産推移は市況に影響を受けるので、次のように市況の影響を打ち消すように平滑化しました。
シミュレーションにおいて、ある株を総資産のp%の金額で売買する際、同じようにp%の比率で日経平均を売買するエージェントを追加してシミュレーションを同時に行った。
そのときそのエージェントの資産推移を日経推移と名付け、y[n]と表す。

そこで資産推移x[n]とy[n]の比率である ln( (x[n]/x[1]) / (y[n] / y[1])) 相対推移と名付けて平滑化された推移とみなすことにする。

以上のように平滑化するとグラフはこのようになった。
24

同様に回帰直線の傾きを計算すると、
期間A : 0.001309382
期間B : 0.001384416
期間C : 0.001608874

3つの期間でほぼ同じような傾きが得られていることが確認できた。



②フラット期間(資産最高点を更新するまでに要する期間)
資産が最高点を更新しないと、やきもきするので、この期間を算出しておきます。

期間A
平均:6.194日
中間値 : 2日
最大 : 266日 ( 1年 = 250営業日なので1年以上)

期間B
平均: 5.116日
中間値 : 2日
最大 : 62日

期間C
平均:4.535日
中間値 : 2日
最大 : 34日

健全に推移していれば、だいたい2日で資産最高値を更新していけるという期待のできる数字です。
ただ暴落を経験すれば、最大で1年以上最高値を更新できないということもあるようです。
ただしこのシミュレーションはレバレッジをかけていない設定なので、もしレバレッジをかけるとこの期間は一般的に伸びます。


③ n日後の勝率
負けると不安になります(今日も負けました)
実際のところ、1日単位の勝率はどれくらいなのでしょうか?
昨日よりも資産が増えている確率を算出すると、

期間A : 0.5025641
期間B : 0.5217391
期間C : 0.509901

意外なことに、1日単位の勝率はほぼ50パーセントで、適当に売買するのと変わらないレベルです。


では20日後(1ヶ月)に資産が増えている確率はどれくらいでしょうか

期間A : 0.7138728
期間B : 0.7649573
期間C : 0.75

20日後の勝率は70 ~ 75%ほどのようです。


n日後と勝率の関係をグラフにしたくなります。
00


1日単位の勝率はほぼ50パーセントですが、期間を伸ばせば飛躍的に勝率が伸びるようです。
ちょっと不気味ですね。


不気味に思って簡単な数値実験をしてみました。
51パーセントの確率で+1点
49パーセントの確率で-1点
を得られるゲームを行い、n回試行した後に0以上なる確率を算出してみました。
30
明らかに先ほど見られたようなジャンプが見られません。

ゲームのルールを少し変えてみます。

先ほどは勝ったとき+1、負けたとき-1としていましたが、勝ったとき+2 負けたとき-1としてみると次のようになりました。
34

ジャンプしました。どうもこのような性質になっているようですね。
実際に、推移が増えたときの平均利率と 推移が減ったときの平均損失を見てみると

期間B
平均利率 : 1.250321パーセント
平均損失 : 0.90386パーセント

やはりこの二つの間の差異が影響したものと考えられます。



続いて、次のような個別銘柄ごとのシミュレーション売買データがあるのでこれを解析します。
11

①平均利益、平均損失、損益レシオ
期間A
平均利益: 3.36362447611065[%]
平均損失: -3.74747891566265[%]
損益レシオ: 0.897569953509897

期間B
平均利益: 3.07546774193548[%]
平均損失: -3.21089696969697[%]
損益レシオ: 0.957821995212052

期間C
平均利益: 2.24144680851064[%]
平均損失: -2.16118987341772[%]
損益レシオ: 1.037135531718


最近はボラティリティーが減少しているようです。
損益レシオがなぜか向上していますが、偶然の可能性がありもしこの損益レシオが低下したら資産推移に影響を与えそうな気がします。


②個別銘柄の利率と日経利率の関係

個別銘柄の利率をr , 日経利率をRとすると、rとRの間には相関関係が見られます(わずかですが)
そこでr ~ Rの回帰直線を引いてその切片を見る方法で、どの程度優位性があるのかを把握することができます。
12


ただ数値を出してみると、その切片の値と(r - R)の平均値がほぼ一致しました。
(r - R)は市況で平滑化した利率と言えるので、その値を見てみます。

期間A
0.7418739[%]
期間B
0.6484144[%]
期間C
0.5122321[%]

減少傾向にあることに不安を感じます。
1回あたりの取引の優位性が減少傾向にあるということは、いずれこの予測モデルが使えなくなることを意味するので注視したいところです。
また1回あたりの期待利率はこれを参照するのが最も合理的です。
手数料や税金の影響がこのパーセントを超えると取引の優位性が失われます。

例えば現物取引の場合、100万円の株の手数料が1000円だったとき0.1パーセントが手数料となります。
とりあえずは0.5は0.1よりも大きいので、手数料負けすることはないはずです。(そもそもこのシミュレーションでは手数料を考慮しているのでもう少し余裕があります)



次に月別の集計したデータがあるのでこれを解析します。
42

①理想値を満たす確率はどれくらいか
私はモデルの成績を見るときになんとなく
「PFは1.5以上、期待値は0.5%以上、勝率は60%以上だったらいいな」
という理想値を持っています。

最近のデータでこの理想値を下回っていたりするの非常に不安になったりするのですが、実際のところこの理想値を上回っている月はどれくらいあるのかを知りません。
そこで安心のために、理想値を上回る確率を算出しておきます。

期間A
PF > 1.5
[1] 0.5630252
期待値 > 0.5
[1] 0.605042
勝率 > 0.6
[1] 0.4782609

期間B
PF > 1.5
[1] 0.5833333
期待値 > 0.5
[1] 0.5833333
勝率 > 0.6
[1] 0.5833333

期間C
PF > 1.5
[1] 0.7272727
期待値 > 0.5
[1] 0.7272727
勝率 > 0.6
[1] 0.6


理想値を下回ると非常に不安がっていましたが、わりと高い確率でこの理想値を下回るようです。よかった。

同様に1ヶ月あたりで負けるとこれもまた不安になるわけですが、この確率も出しておきました。
ただ数値は「n日後の勝率」の項目で出した数値とほぼ一致したので、省略します。



最後に予測精度を出しておきます
39


この数値は、買った銘柄の利率がその日の予測対象のすべて銘柄の中で何位だったのかを表しています。
予測対象の中で1番利率が良いものを買っていれば1
一番利率が悪いものを買っていれば0になるように規格化されています。


この平均値が予測精度を表すことになります。0.5よりも上になることが条件です。

期間A + 期間B : 0.5312683
期間C  :              0.5439792






☆まとめ
概ね全期間でよい数値が出ており、最新のデータに関しても問題なく予測ができている様子がうかがえます。
うまくいっているはずなら資産はどのように推移するかも算出できたので、実売買の推移がそれに従うかどうかをチェックできるようになりました。

あとは私のプログラムに致命的なミスが存在している可能性がなくもないが、幾度となくコードは確認しているのでそのようなミスはない、、はず。。
なので多分うまくいく、はず。。。
多分・・・(自信はない)