株も歩けば犬に当たる

ブラックSlerで働くSEが株やPythonや思ったことについて書いています。

銘柄によって予測精度が異なるようだ

目次

前回の記事の訂正

doz13189.hatenablog.com

前に60%の正答率の株価予測システムでけた〜っと喜んでいたのですが、どうやら糠喜びっぽかったです。

検証を重ねたり、プログラムのミスを見つけたり、いろいろしていると52〜54%あたりに収束していきました。


さすがに60%は怪しいなっ、って思っていたのですがやっぱりでした。

はしゃいでどうもすみませんでした。



ただ予測精度は下がったものの、50%は超えているので少しホッとしています。

(まぁ、またミスが見つかるかもしれませんがね!涙)


どうも論文なんかを漁っていると、いろいろな予測方法がありますがだいたい52%前後の予測精度が多いような気がします。

なので、結果としてはわりと妥当なラインなのかなぁと感じております。


business.nikkeibp.co.jp

この記事はちょっと飛び抜けてますが...

けっこうこの記事参考にしたんですが、さすがに7割には届きそうもありませんというより5割の壁をやっとの思いで超えた自分には想像もできない領域っす。


では今日の本題へ。

どうやら銘柄によって予測精度が異なりそう

決定木を使った株価予測の話です。

考えてみるとまぁ違うわな、と納得感のある結果ではありますが。

説明します。


決定木なので目的変数と説明変数があります。

株価予測をする際に目的変数は、株価の変動指数にしています。

前日より+5%や-3%とかとかです。

決定木は2値が扱いやすいので、もし変動指数がプラスだったら1に変換して、もしマイナスだったら0に変換しています。


問題は説明変数です。

説明変数は30個くらい用意しているんですね。(今自分で数えてびっくり、多いですね笑)

株価に影響を与えそうな指標なんかをごっそりと自分で集めてきているのですが、例えばTopixドル円レート、他にも新発10年国債利回りやマンション契約率(首都圏)などなどです。

ちょっとピンってきますよね。

Topixドル円レートなんかは、どの銘柄にも適した説明変数になっています。

マンション契約率(首都圏)や新発10年国債利回りなどは、全ての銘柄に適した説明変数かと言われるとそうではなさそうですね。

自分で説明変数は選んできたので、けっこう変化球的な指標も選んでいます。

他にもマネタリーベースとか。

きっとこれらが原因で、予測しやすい銘柄とそうではない銘柄にわかれたのだと思います。


識別コードごとに予測するとはっきりとでています。

識別コード:1000〜1999

対象銘柄:[1605, 1928, 1801, 1925, 1812, 1802, 1963, 1803, 1808, 1332, 1893]

予測月 予測精度
2016/10 0.497
2016/9 0.495
2016/8 0.494
2016/7 0.489
2016/6 0.503
2016/5 0.511
2016/4 0.505
2016/3 0.528
2016/2 0.517

識別コード:3000〜3999

対象銘柄:[3092, 3436, 3402, 3064, 3099, 3407, 3659, 3778, 3401, 3405, 3086, 3103, 3668, 3116, 3289, 3626, 3632, 3861, 3193]

予測月 予測精度
2016/10 0.542
2016/9 0.553
2016/8 0.560
2016/7 0.552
2016/6 0.544
2016/5 0.537
2016/4 0.542
2016/3 0.530
2016/2 0.559

予測月というのは、2016年10月以前のデータを使って、2016年10月の株価を予測しています。

識別コード1000〜1999の2016/10は、49.7%の確率で予測が当たっているという意味になります。

※前回までの記事だと日毎で予測していたのですが、どう考えても実用性が低いので月ごとに予測する仕様に変更しました


1000〜1999の識別コードの予測精度は低すぎです。

平均するとおそらく50ちょい。

たしか1000番台は内需系が多かったと思います。

大林組(業界最大手)や日本水産(冷凍食品大手だった気がする)などです。

説明変数を見直すと、内需系には効きにくいものが多いかなぁという気がしないでもないです。


3000〜3999の識別コードの予測精度は相対的に高かったです。

平均すると、55〜54%はありそうです。

3000番台って何系の会社が多いんだろう...さくらインターネットなんかは3000番台だった気がするから情報系?わからない。

3000番台って見知らぬ会社が多いイメージしかない。

なんで3000番台の予測精度が高いのかはちょっとわからねぇ。


テーブルを作るのがめんどうなので、もう載せませんが4000番台もけっこう精度が良かったです。

自分の中で、銀行系に関する説明変数を選んできたつもりだったので、8000番台は良い数字がでるかなぁと思ったのですが、残念、1000番台と同じような結果でした。(これがすごく意外)


思っていたよりも、はっきりと銘柄によって予測の精度が異なりました。

集めてきた説明変数を見ると、納得感ある結果ではあるんですがびっくりです。

やっぱり説明変数の選択が大事

予測するにあたって、やっぱり説明変数が予測精度に直結します。

当たり前っちゃ当たり前なのですが。

決定木の深さや葉の数などなどチューニングなんかをやるよりも、俄然、良い説明変数を見つけてくるほうが予測精度が上がります。

例えば、topixを説明変数に入れるのと入れないのとでは、体感ですが0.5%くらい予測精度が上がったように思います。


予測手法もSVMやら回帰やらいろいろありますが、どの手法を使おうかで悩むよりかは、いろんな説明変数をぶちこんで試してみたほうがいい結果がでるような気がします。

もちろん、手法も大事ですがね。

最近はもっぱらネットサーフィン(死語)しながら良いデータないかなぁって探したり、CiNii行って株価系の論文漁ったりして、良い説明変数になりそうなデータを探しています。

良い説明変数が見つかれば、予測精度7割に届いちゃったりするのだろうか。