株価予測を行う上で、
見せかけの回帰
という現象があるので紹介しておきます。
ソフトバンクの株価を線形回帰で予測してみる
ソフトバンクのt期目の株価をと置きます。回帰分析を勉強したことのある人ならばこんなことを考えるかもしれません。
ソフトバンクの株価を説明できるような変数を見つけてきて、
それを使って回帰分析して、次期の株価をを使って予測してやればよいじゃないか。
と思うわけです。
そこで、なんと私、そんな予測に使えるを見つけてきたんです。
次の分析を見てください。
まずいつものようにquantmodパッケージを使って実際のソフトバンクの株価の列を取ってきました。
library(quantmod) getSymbols("9984",src="yahooj",from = "2004-01-01") data=as.data.frame(YJ9984) adj_stock_price=data[,6] y=as.vector(adj_stock_price)
そして、私が取ってきた変数を使って回帰分析をしてみます。
summary(lm(y~x))
調整済み決定係数0.772,二つの変数は両方有意でした。
なんだ、これで予測すれば良いじゃないかと思うわけです。
ネタバラシ
ところで、このは一体どうやって見つけたものかというと
実は株価と全く関係のない乱数です。
正確に言うと、株価の平均、2014年1月1日の株価を初期値においた2種類のランダムウォークです。
作り方はこんな感じです。
#hensu1を作る int=adj_stock_price[1] random_walk=c(int) for(i in 1:(length(adj_stock_price)-1)){ walk=random_walk[i]+rnorm(1) random_walk=c(random_walk,walk) } #hensu2を作る int2=mean(adj_stock_price) random_walk2=c(int2) for(i in 1:(length(adj_stock_price)-1)){ walk=random_walk2[i]+rnorm(1,mean(adj_stock_price),1) random_walk2=c(random_walk2,walk) } hensu1=random_walk hensu2=random_walk2 x=rbind(hensu1,hensu2) x=as.matrix(t(x))
ちなみに、プロットしてやるとこんな感じです。
まず、ソフトバンクの株価
次に一個目の変数
二個目の変数
見せかけの回帰
株価の列が全く関係ない乱数の列によって回帰できてしまうという現象を見せかけの回帰と呼びます。
この現象、いくら説明力が高いからと言って、明らかに信用できませんよね。この回帰を回避するためには次のような操作をしてやります。
の1階差分をとって、その差分系列で回帰分析をしてやります。Rのコードは次の通りです。
adj_y=diff(y) adj_x1=diff(hensu1) adj_x2=diff(hensu2) adj_x=rbind(adj_x1,adj_x2) adj_x=as.matrix(t(adj_x)) summary(lm(adj_y~adj_x))
回帰の結果
結果を見るとわかりますが、決定係数が著しく小さい値を取り、変数も有意ではなくなりました。
まとめ
・株価予測を行う際に何らかの説明変数を使う場合には注意が必要
・階差を取って回帰分析を行ってやることで、見せかけの回帰を見抜くことが出来る