バナナでもわかる話

開設当初は計量経済学・統計学が専門の大学院生でした。今はデータを扱うお仕事をしています。統計学・経済学・投資理論・マーケティング等々に関する勉強・解説ブログ。ときどき趣味も。極力数式は使わずイメージで説明出来るよう心掛けていますが、時々暴走します。

【初心者向け】ファンダメンタル分析を使って儲かるポイントを発見する

久々に株式投資関連の記事です。前回、前々回はアノマリー現象について考えたうえで、このアノマリー現象をうまく見つけることが株取引の儲けに繋がるという話をしました。
bananarian.hatenablog.com


今回はアノマリー現象をどうやって見つけるのか、その方法についてお話ししたいと思います。


株価の本源的価値

まず、本源的価値という用語についてお話します。簡単に言ってしまうとある企業の真の株価を本源的価値と呼びます。

と言ってもよく分からないと思うので、もう少し説明すると

例えばI社の株価が、偶然日本中の投資家が同じタイミングで購入しようとし、その価値が一時的に急上昇したとします。このような突発的な株価の増加は株価本来の価値を反映したものではなく、偶然起こったものなので、ある時を境に本来の価値に戻っていくはずです。


この、株価の本来の価値を本源的価値と呼びます。

経済学の効率的市場仮説に基づくのならば、市場は必要な情報を瞬時に反映するため、常に株価は本源的価値を表していることになりますね。

しかし、この効率的市場仮説が成り立たないという現象がアノマリー現象でした。

そして、アノマリー現象を利用して、従来の本源的価値よりも低い評価を受けている株を購入しておけば、色々な誤差を乗り越えた後に、本源的価値に戻ってくるので、利ザヤで儲けることが出来るというわけです。


ファンダメンタル分析

しかし、本源的価値を見極めればいいことはわかったけど、その本源的価値が分からないから皆困っているんじゃないか!!
ということになりますよね。


こうして企業の本源的価値を評価してやろうという分析がファンダメンタル分析と呼ばれます。


ファンダメンタル分析は企業や株式の価値評価をするモデルを構築するところから始まりますが、大きく分けて次のような種類に分けられます。


・絶対価値評価モデル
・相対価値評価モデル


絶対価値評価モデルや相対価値評価モデルの具体例はまた後日投資分析カテゴリーの記事にあげますので、今はとりあえず

ファンダメンタル分析によって企業や株価の本源的価値を評価して、アノマリー現象を見つけてやろう

ということだけおさえておいてください。


具体的な分析方法はまた次の記事で~

見せかけの回帰

株価予測を行う上で、

見せかけの回帰

という現象があるので紹介しておきます。



ソフトバンクの株価を線形回帰で予測してみる


ソフトバンクのt期目の株価をy_tと置きます。回帰分析を勉強したことのある人ならばこんなことを考えるかもしれません。


ソフトバンクの株価を説明できるような変数 x_tを見つけてきて、
それを使って回帰分析して、次期の株価を x_tを使って予測してやればよいじゃないか。


と思うわけです。

そこで、なんと私、そんな予測に使える x_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)


そして、私が取ってきた変数 x_tを使って回帰分析をしてみます。

summary(lm(y~x))

f:id:bananarian:20180905135922p:plain

調整済み決定係数0.772,二つの変数は両方有意でした。


なんだ、これで予測すれば良いじゃないかと思うわけです。


ネタバラシ

ところで、この x_tは一体どうやって見つけたものかというと


実は株価と全く関係のない乱数です。

正確に言うと、株価の平均、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))

ちなみに、プロットしてやるとこんな感じです。

まず、ソフトバンクの株価
f:id:bananarian:20180904192627p:plain

次に一個目の変数
f:id:bananarian:20180905142555p:plain

二個目の変数
f:id:bananarian:20180905142611p:plain




見せかけの回帰

株価の列が全く関係ない乱数の列によって回帰できてしまうという現象を見せかけの回帰と呼びます。
この現象、いくら説明力が高いからと言って、明らかに信用できませんよね。この回帰を回避するためには次のような操作をしてやります。

 y,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))

回帰の結果
f:id:bananarian:20180905141831p:plain

結果を見るとわかりますが、決定係数が著しく小さい値を取り、変数も有意ではなくなりました。


まとめ

・株価予測を行う際に何らかの説明変数を使う場合には注意が必要

・階差を取って回帰分析を行ってやることで、見せかけの回帰を見抜くことが出来る

【初心者向け】株取引のための時系列データ分析事始め

前回は今まで記事にした内容のみを使って、簡単な株価分析が出来ちゃうぞという話をしました。
bananarian.hatenablog.com


しかし、次のように感じた方も多いのではないでしょうか。

せっかく時間によって変動するデータなのに時間に関する情報全然使ってないじゃん。


そうです。使ってません。時系列データの扱い方は少々高度なので、今までは初心者向けということで記事にしていなかったのです。

しかし、当然株価予測を行いたいなんて考えた時には時系列分析に関する知識が最低限必要になってきます。


そこで今回から何回かの記事では、株価予測に焦点を当てた時系列分析の方法を、難しい話は大胆カットして、使える部分だけを切り貼りし、記事にしていきたいと思います。

今回は使用するモデルの概要について記事にしました。
f:id:bananarian:20180905131119j:plain



基本となる時系列モデルの紹介

時系列分析のキホンのキであるモデルが主に三種類あるので紹介します。

AR過程

次のような形で、以前の状態が今の状態に影響(相関)している時系列データをAR(p)過程と言います。

 y_{t}=c+\phi_1 y_{t-1}+\phi_2 y_{t-2}+…+\phi_p y_{t-p}+\epsilon_t

 cは定数
 \epsilon_tはホワイトノイズ。


ここでホワイトノイズとは次のような条件を満たす確率過程を指します。

全てのtにおいて次の条件が成り立つ
 E[\epsilon_t]=0
 Var[\epsilon_t]=\sigma^2
 cov[\epsilon_t,\epsilon_s]=0,t≠s


p=1、つまりAR(1)は次のようになります。

 y_{t}=c+\phi_1 y_{t-1}+\epsilon_t


MA過程

次のような形で、以前の状態が今の状態に影響(相関)している時系列データをMA(q)過程と言います。

 y_{t}=c+\epsilon_{t}+\psi_1 \epsilon_{t-1}+\psi_2 \epsilon_{t-2}+…+\psi_q \epsilon_{t-q}

 cは定数
 \epsilon_tはホワイトノイズ。


q=1、つまりMA(1)は次のようになります。

 y_{t}=c+\epsilon_{t}+\psi_1 \epsilon_{t-1}



ARMA過程

AR過程とMA過程を合体させたモデルをARMA(p,q)過程と呼びます。

 y_{t}=c+\phi_1 y_{t-1}+\phi_2 y_{t-2}+…+\phi_p y_{t-p}+\epsilon_{t}+\psi_1 \epsilon_{t-1}+\psi_2 \epsilon_{t-2}+…+\psi_q \epsilon_{t-q}



これらのモデルでのパラメータ \phi \psiは主に最尤法で推定されます。


自己相関の検定

上のようなモデルをうまく使うためには、時系列データが自己相関しているかどうかが重要になる。
そこで用いられるのがportmanteau testです。


ARIMA過程

AR過程やMA過程、ARMA過程は定常性という特殊な条件が成り立っていないとうまく扱うことが出来ません。
しかし、株価データは普通定常性が成り立っておらず、非定常データと言われます。

非定常データではあるが、d階差分をとることで定常なARMA(p,q)モデルになるような場合はARIMA(p,d,q)モデルというモデルで表現することが出来ます。

普通株価のデータに対してはこのARIMAモデルを当てはめます。

モデル選択

ARIMAを使えばよいというのはわかったけど、p,d,qの値をどうやって決めればよいでしょうか。
これについてはAIC(赤池情報量基準)と呼ばれる基準に従って、モデル選択を行うのが一般的です。



以上説明した内容については、簡単に実装するパッケージがたくさんあるので、次の記事ではそれについて説明します。

ソフトバンクの株価の分析を簡単にやってみる

今回は今まで記事にした内容(+α)のみを使うだけでも、結構しっかりした株価分析が出来ちゃうぞーという話をします。

まだ今までの記事は簡単な事しかやっていませんが、これだけの道具でも結構色々なことがわかるんですよ。
ちなみに前回までの記事は株式投資カテゴリーにまとめてあります。
bananarian.hatenablog.com





とりあえず、前回やったRのquantmodパッケージを使って2000年以降の株価を取得してチャートで見てみます。
bananarian.hatenablog.com

library(quantmod)
getSymbols("9984",src="yahooj",from = "2000-01-01")
chartSeries(YJ9984)

次のようになりました。
f:id:bananarian:20180904192420p:plain

何やら2000年はじめの株価が急落していますね。この動きは明らかにおかしいのでググってみたところ、
どうやらこの時期にITバブルがはじけて、IT系企業の株価が急落したらしいです。この動きは明らかに特異な動きであり、これを今回使う統計分析に利用しようとすると、バイアスがかかるのでこのあたりのデータは使わないことにします。

※どういうバイアスがかかるかは後述



というわけで2004年以降のデータを使うことにします。

getSymbols("9984",src="yahooj",from = "2004-01-01")
chartSeries(YJ9984)

f:id:bananarian:20180904192627p:plain



まず、Rで調整済み株価の部分だけをとりだします。

data=as.data.frame(YJ9984)
adj_stock_price=data[,6]


今回はリターンの分析をしたいので、各期のリターンを計算します。この時に便利なRの関数にdiff関数があります。

return=diff(adj_stock_price)/adj_stock_price[-length(adj_stock_price)]


以前までの話であればリターンは確率変数と仮定するわけでした。

しかし、少し確率論に詳しい人であれば
「どんな確率変数なの??」
と疑問に思うはずです。


そこで今回は独立に同一な分布に従う確率変数(i.i.d.r.v.)であるという仮定を置きます。

※ITバブルのデータを省いた理由はここにあって、ITバブル時期のデータは明らかに平常時とは異常な状況であり、同一な分布であるという仮定に反します。


それでは、分布の状態を確認してみましょう。

mean(return)
sd(return)
hist(return)

f:id:bananarian:20180904194239p:plain
f:id:bananarian:20180904194247p:plain
微妙にプラスの方向に寄っていますね。四分位点も確認してみます。

quantile(return)

f:id:bananarian:20180904194530p:plain


つまり、ヒストリカルな(過去に得られた)データは、微妙にプラスによった分布をしていることがわかります。また、よっぽど運悪くマイナスになったとしても、高々-3.5%であるということもわかりました。最も端の-20%が起こる確率はかなり低そうです。

※あくまでヒストリカルなデータに基づいた、平常時の話であることに注意しておいてください。何か大きなイベント(ITバブルや、新商品発表など)がある場合のことは保証していません。


しかし、これはあくまで、「過去のデータに基づいた話だから、将来はどうなるかわからない。」と思う人もいるかと思います。そこで次のようにモデルを仮定します。


リターンは独立同一に、正規分布に従っている


この仮定に対する検証はコルモゴロフスミルノルフ検定というノンパラメトリックな仮説検定を使うと便利です。

ks.test(x=return,y="pnorm",mean=mean(return),sd=sd(return))

f:id:bananarian:20180904195630p:plain


一応p値を見る限り棄却されていないので、正規分布に従っていると考えて良いという判断になります。
※コルモゴロフスミルノルフ検定はタイ(同率)を考慮した検定もあるのですが、Rのks.test関数はその方法は取っていないようで警告が出ています。ただ、内部でどういう処理をしているのかはわかりかねますが、とりあえずp値は出してくれているので、恐らくタイとなったデータのどちらか一方を省いて出力しているんだと思います。まあそれなら別に問題ないのでこの検定を信用して先に進もうと思います。

※もう一つ注意は、コルモゴロフスミルノルフ検定はノンパラメトリックな検定であるので、サンプルサイズが重要になります。今回は3600近いデータを使っているので、とりあえず使用してみました。


真のリターンの分布が正規分布に従っていると考えて、改めて四分位点を取ってみましょう。

sim=rnorm(1000000,mean=mean(return),sd=sd(return))
quantile(sim)

f:id:bananarian:20180904200413p:plain

先ほどよりも起こりうる値の範囲は広いですが、リスク評価に関してはほぼ関係ありませんでしたね。
微妙にプラスによった分布をしていることはかわりませんし、よっぽど運悪くマイナスになったとすると-3.5%ほどのマイナスが出ると思われます。一番端の部分で28%の損失がありますが、ここが起こる確率はかなり低そうです。


一応5%点も見ておきましょうか。

quantile(sim,c(0,0.05,0.5,0.95,1))

f:id:bananarian:20180904202052p:plain

つまり、損失9%は、確率的にはかなり出にくい数字であり、もしこの値が出たとすると、市場に何かしら変化があった恐れがあると考えるべきです。

まとめ

以上より、ソフトバンク株のリターンの性質及び戦略をまとめると次のようになります。


・期待値としては僅かにプラスであり、大きく分散しているわけではないので、長期投資する価値はある。


・もし、短期投資をした際の損失を見積もるのであれば、1日辺りの損失として、投資額に対して3%から4%の損失を見積もっておくとよい。


・また、1日で20%以上の大損失が発生した場合、統計的にはほぼ出ない数字であるため、事前に行っていた独立同一の仮定が崩れたと判断すべきです。すなわち、何か市場構造に悪い変化があった(ITバブルかもしれない)恐れがあるので早急に手仕舞いして撤退すべきという戦略を立てておきます。


・更にあまり損失を出したくない人ならば、5%点の時点で、何かしらの悪い市場変化があったと考え撤退すべきという戦略も立てられます。つまり、今回であれば1日で9%以上の大損失が発生した場合はとりあえず撤退しておくということになりますね。



というわけで、基本的に今まで過去に記事で書いた内容しか使っていませんが、結構しっかりした戦略が立てられましたね。
もう少し投資理論・統計を学べば、より実践的な分析を行うことが出来ます。

それについては、また以降の記事で少しずつ書いていこうと思います。

おまけ

リターンのヒストグラムとシミュレーションのヒストグラムを重ねて描いてみます。

sim=rnorm(length(return),mean=mean(return),sd=sd(return))
hist(return, col = "#ff00ff40", border = "#ff00ff", breaks = 20)
hist(sim, col = "#0000ff40", border = "#0000ff", breaks = 20, add = TRUE)

f:id:bananarian:20180904235344p:plain

【初心者向け】市場アノマリーの一過性について

前回は、ざっくり言うと市場アノマリーさえ見つければ儲かるんじゃね?っていう話をしました。
bananarian.hatenablog.com


今回は小型株効果を例に、市場アノマリーはバレたら皆が群がるから効果がすぐなくなるという話をします。


小型株効果

市場アノマリーの有名な例に小型株効果があります。これは、小型株の平均リターンが理論値よりも大きくなる一方で、大型株の平均リターンが理論値よりも小さくなるという現象です。

小型株とは要は時価総額が小さい企業だと思ってください。

この小型株効果はRolf Banz[1981]によって発表されました。

ここで興味深いのはその後の追実験では、1982年以降、つまり小型株効果が存在するとアナウンスされてから、小型株効果の消失が確認されたということです。


つまり、何が言いたいかというと、市場アノマリーは見つかってしまったが最後、皆がアノマリーからウマイ汁を吸おうと群がるために、市場アノマリーが消失するということです。

日本でも同様の現象が見られましたが、その後一旦消失しているそうです。


過去の市場アノマリーを調べることは意味がないのか

じゃあ、過去の市場アノマリーを調査しても意味がないじゃないか。そんな文句が飛んできそうですが、そんなことはありません。

アナウンスメントによって皆がアノマリーを打ち消す動きをするわけですが、それはアノマリーに関する知識を備えた人のみの動きなわけで、数年、十数年も経てばそんなアナウンスメントなんか知らない投資家が市場参入してくるわけです。

そうすると再び市場アノマリーが発生します。

実際、一度は効果が減退した小型株効果ですが、日本において再び確認出来たという研究ノートも上がっていました。
https://www.smtb.jp/business/pension/information/center/operation/pdf/07_04_35_12.pdf


そういうわけで、市場アノマリーは次のように活用すべきであると私は考えます。

・まず、事前に過去の市場アノマリーについて知っておく
・次に、直近のデータを使って市場で市場アノマリーが発生しているかどうかを調査する
・発生していれば参入時だし、発生していなければ参入すべきではない

マーケットポートフォリオの調べ方

ところで、小型株効果は、マーケットポートフォリオのリターンと比べて異常にリターンが高いとか低いとかで判断するわけですが(本当はJensenのαで調べるわけですが簡易的に)、マーケットポートフォリオはどうやって調べればいいんだとなりますよね。


結論から言うと、マーケットポートフォリオを調べるのは無理です。あらゆる資産を全部考慮に入れなければいけないので不可能なんですね。そこで普通は代理変数を利用します。

例えば国内の株価だと、TOPIXですね。
stocks.finance.yahoo.co.jp

TOPIXの過去の平均リターンと比較することで簡易的に小型株効果が発生しているかどうか調べたり、もう少ししっかりやりたい人は、

マーケットポートフォリオの超過リターンを各小型株の超過リターンの分位点に回帰してやることでJensenのαのt値を確認するという方法を取ります。
※超過リターンとは、リターンとリスクフリーレートの差から得られます。

分位点で回帰する理由は、小型株のリターンの標準偏差は一般的に大きいため、単なる平均だと信用ならないためです。


※個人的には、別に推定分散で標準化してやればいいんじゃない?というような気もするんですが、そこのところどうなんでしょう。よくわからないです。まあそれをしないのはサンプルサイズの関係でしょうか。

株取引には必須?Rのquantmodパッケージで簡単に株価データを取得する方法

今回はデータの取得方法に関する話です。
お恥ずかしい話なのですが、私はあまりウェブスクレイピングの類のやり方がわからなくてですね。

株価に関して何か分析する際は、いつもヤフーファイナンスにて全選択~コピー~Excelにペースト~みたいな地道なことをやってたわけなんですが。


圧倒的情弱でした笑

スポンサーリンク



Rのパッケージにヤフーファイナンスから株価データを習得できるものがあったようで、それを使ったらなんと一発で株価取得が出来て、しかもそのパッケージで結構キレイめな図まで描けてしまうということで、是非使い方と合わせてシェアしておきます。
※2019/11/28現在、株価の取得ができなくなったみたいです。ヤフーさんのサイトがスクレイピングを禁止しているので、パッケージのコードが引っかかったものと思われます。

※quantmodパッケージに関しては結構色々なブログが説明してくれているのですが、正直どのサイトを見てもあまりうまく使いこなせていない様子でした。というのも、どのサイトも某本のコピペをしているだけなんですけど、正直実際に使おうとするとそのコピペじゃあ使える範囲が限られてきます。色々いじっているうちに使い方がわかったのでそれも踏まえて説明させていただきます。



quantmodパッケージ

というわけでRのquantmodパッケージの使い方を説明していきます。
とりあえずパッケージを取り込みます

install.packages("quantmod")
library(quantmod)

何やら為替データや人口データ等も取得できるみたいですが、とりあえず株価データしか用事がないのでとりあえず株に関する話に留めておきます。


株価データの取得

取得方法ですが、まず、知りたい企業が海外企業であればその企業のティッカーシンボルを、日本企業なら証券コードを調べてコピーしておいてください。
企業名+ティッカーシンボル(or証券コード)でググれば出てきます。



※某R用参考書は基本的に海外版ヤフーファイナンスからの株価取得を目標としているので、ティッカーシンボルを取ってくるよう書いてあり、その辺に転がっているブログも皆その本のコピペであるため、ティッカーシンボルからの説明しかしていませんが、これだと日本企業の株価を取ってくることが出来ません。

ちなみに今回はソフトバンクとLARSEN & TOUBROで試してみます。ソフトバンクの証券コードは9984で、LARSEN & TOUBROは海外の企業でティッカーシンボルはLT.NSです。



そんでR画面に戻ります。
まず日本企業であるソフトバンクの株価取得から。
getSymbols関数を使うと株価を取り込むことが出来ます。

getSymbols("9984",src="yahooj",from = "2016-01-01",to="2017-01-01")

と、入力します。コードの説明ですが、


まず、src引数でヤフージャパンのヤフーファイナンスページからデータを取ってくることを指示しています。
更にfromとtoでいつからいつまでのデータを取ってくるか指定します。


そうすると恐らくこんな感じになります。
f:id:bananarian:20180903195158p:plain

このYJ9984が株価を格納する変数に変わります。どういうことかというと、要はYJ9984と打ち込んでやると次の画像のように株価が出力されます。
f:id:bananarian:20180903195511p:plain


海外のヤフーファイナンスから取得する場合にはsrcを指定する必要はありません。

getSymbols("LT.NS")


取得した株価データをcsv形式で保存したい場合は次のようにすれば保存できます。

stock_data=as.data.frame(YJ9984)
write.csv(stock_data,"Softbank.csv")


良い感じですね。
f:id:bananarian:20180903200734p:plain


ちなみにデータの各列についての説明ですが、
左から始値("Open"),高値("High"),安値("Low"),終値("Close"),出来高("Volume"),調整後終値("Adjusted")
となっております。



可視化する

quantmodパッケージにはかなり高精度の可視化機能も含まれています。物は試しでcharSeries関数を使ってみます。

chartSeries(LT.NS, subset="2013-12-01::2014-12-01")

f:id:bananarian:20180903201316p:plain

結構キレイですよね?ちなみにaddBBandsでボリンジャーバンドも付けられます。

chartSeries(LT.NS, TA="addBBands(n=20)",subset="2013-12-01::2014-12-01")

f:id:bananarian:20180903201451p:plain

ボリンジャーバンドとは要は、もし上がったり下がったりしてもこのくらいの幅に値動きが収まるよーという指標です。


更にtype="bar"と加えるだけでローソク足も加わります。

chartSeries(LT.NS, TA="addBBands(n=20)",type="bar", subset="2013-12-01::2014-12-01")

f:id:bananarian:20180903201833p:plain
まあ、ローソク足についてはもっと期間を短くしないと見にくいですね。
緑色が上昇でオレンジ色が下落です。


TA引数に複数追加したい場合は、;で区切ります。今回はMACDも追加してみました。

chartSeries(LT.NS, TA="addBBands(n=20);addMACD()",type="bar", subset="2013-12-01::2014-12-01")

f:id:bananarian:20180903202300p:plain


めっちゃキレイじゃないですか?すごいですねquantmodパッケージ。


注意

ついでに財務情報も取得できると言うことでやってみたのですが、次のようになりました。
f:id:bananarian:20180903202935p:plain

どうやら財務情報についてはグーグルファイナンスから取ってきてたっぽいんですが、今年から提供してくれなくなってしまったようです。残念。

財務情報もいちいちEDINET等からダウンロードしてくるのは面倒なので、もし簡単に取ってこれるのならありがたいんですけどねー。

【初心者向け】効率的市場仮説と市場アノマリーを考えて株取引で儲ける方法を考える

株式投資を考えるにあたっては、前回までの記事でやったようなリスクとリターンを考えることが古典的な経済学の基本でした。
bananarian.hatenablog.com

今回は経済学的な考え方として、効率的市場仮説と市場アノマリーについて説明したうえで、では株式投資で儲けるには何を考えればよいのかといったことを考えます。


効率的市場仮説

古典的な経済学において、人間はある意味において合理的であると考えます。どういう点で合理的かというと、人間は必要な情報を全て持っている下で自らの効用(嬉しさ)を最大化するように行動するという点で合理的であるというのです。

これは主に数学的な定式化のしやすさを考えての仮定なのですが、使用する場面によっては強すぎる仮定となるため、適宜緩めたり、解釈する必要が生じるわけです。


株式投資も経済学の考え方のもとで定式化されますが、これも上のような考え方に沿って定式化されます。このように市場の参加者が皆合理的であるような市場を仮定することを効率的市場仮説と呼びます。

要点だけ説明しておくと、効率的市場仮説の下では、必要な情報が瞬時に市場参加者に反映されるため、どんな情報を用いたとしてもリスクに見合う以上のリターンを上げることが出来ないという結論になります。


しかし、この仮定は実際に株式投資を行う人間にとっては(※)強すぎる仮定です。

株式投資を行うわけではなく、市場全体の大きな動きを分析したいといった場合には適切であることが多々あります。


市場アノマリー

次に市場アノマリーという言葉を説明します。

古典的な経済学、つまり効率的市場仮説に基づいて分析を行ってみたら、その仮説に沿わない状況が観察されたという状況が多々あります。

このような状況を市場アノマリーと呼びます。


しかし、ここでよく考えてみてほしいのです。
効率的市場仮説の下ではうまく儲けることが出来ないということは、効率的市場仮説が成り立たないような状況、つまり市場アノマリーが存在する状況では儲けることが出来るという話になりませんか。


そうです、経済学的な考え方を逆手に取るのです。

よくあまり理解していない人が経済学に基づく株式投資分析を説明し、CAPMについて説明した挙句、

「現実にはこんな状況考えられないから、この分析は意味がないよねー」

なんて結論付けるわけですが、

完全に間違いです。


現実において経済学的な仮定が成り立つ部分と成り立たない部分をはっきり区別することで儲かるポイントを発見することが出来るわけです。



というわけで、次回の投資記事では市場アノマリーの例について解説していこうと思います。

【初心者向け】安全資産を考慮した投資

前回はポートフォリオのリスクリターン曲線がどういう形をしているのか、相関係数を動かして確認しました。
bananarian.hatenablog.com

今回は安全資産も踏まえたポートフォリオについて考えていきます。

安全資産とは何か

そもそも安全資産とは何かについて説明します。安全資産とは要はリスクがほとんど0で収益を出すことのできる資産のことを指します。リスクがものすごく小さいわけなので普通はそこから得られるリターンもごく僅かなものとなります。

安全資産の例

例えば、日本国債は安全資産であると言われています。大きな価値の変動もなく、日本が急に財政破綻するようなこともあまり考えられないためです。他にも銀行預金も安全資産に入ります。あくまで銀行は倒産しないだろうという見込みのもとになりますが....


安全資産を考慮した投資

仮に安全資産のリターンが0.01だったとします。この安全資産のリターンのことをリスクフリーレートとか呼んだりします。

仮に2つの資産に分散投資するとして、まず元手の80%を2資産の分散投資にあてて、20%は安全資産に投資しようとか、元手の50%は分散投資にあてて、残り50%は安全資産に投資しておこうといったことを考えるわけです。

何故安全資産に投資をするのか

端的に言うとリスクの回避です。例えば各企業の株に投資をしていたとして、もし世界大恐慌が起こってしまったとしたら、ほぼすべての株の株価が大暴落します。こればっかりはどうしようもありません。確率的にはほとんど起きない話ですが、偶然起きてしまったときに大変な目にあってしまいます。

そこで安全資産も持っておこうというわけです。当然そんなリスクを考慮してても仕方がないという方は全ての資産を投資に回しても理論上は問題ありません。

つまり、安全資産にどれくらいの割合投資して、リスクのある資産にいくら投資するのかは各人の好みになります。これを経済学の用語で効用、又は効用関数と呼び、数学的に定式化することもできます。が、今回は省略します。

投資可能集合を図に表してみる

前回リスクリターン曲線を図に表しました。これに安全資産も加えたらどのような図になるでしょうか。

数値例をあげたうえでそれをプロットしてみます。

資産1のリターンの期待値→0.15
資産1のリターンの分散→3

資産1のリターンの期待値→0.05
資産2のリターンの分散→1.2

資産1,2のリターンの相関係数→-0.5

リスクフリーレート→0.01

今回は空売り・借入等は考えず、安全資産も借り入れが出来ないものとする。

f:id:bananarian:20180831184424p:plain

緑色の点が (0,0.01),つまり安全資産です。リスクが0,リターンが0.01となっています。

青い点、黄色い点が資産1,資産2になります。そして空売り、借入は不可なので、この2資産にどのような割合で投資するかに従って曲線が引かれます。この曲線の説明は前回の記事参照。

そして今回は安全資産とリスクのある資産に対して適当な割合で投資を行うので、曲線上の点と安全資産を結ぶ直線上も投資することが可能になります。

そういうわけなので、投資可能な領域は図の水色で塗った部分(境界を含む)となり、上のような図となるわけです。


なお、赤い点、つまり安全資産を切片として引いたリスクリターン曲線に対する接線が成す接点を接点ポートフォリオと呼びます。

この接点ポートフォリオは投資理論において重要な位置づけがあるのですが、それについてはまた今度お話します。

どこに投資すべきか

さて、今投資可能な領域は水色全体です。結局どの点で投資するのが合理的なのでしょうか。

例えば黄色の点を見てみると、黄色の点の真上に水色の領域があります。
これ、よく考えてみるとわかりますが、黄色の点と同じリスクにもかかわらず、黄色の点よりも期待リターンの大きい投資方法が存在することを意味しませんか?

つまり、何が言いたいかというと黄色の点の投資方法は絶対に行うべきではないわけです。

これを他の場所についても同様に考えてやると、投資すべき場所は

緑色の点から赤色の点までの直線上の点か、赤色の点から青色の点までの曲線上の点ということになりませんか。

この点のうち、じゃあ実際に投資するにあたってどの方法を取るかは先ほど説明した好みの問題ということになります。

色々な状況によって図は変わることに注意

分散投資の基本的な方法は今説明した通りになりますが、実際の状況は色々あります。資産を空売りする、借入れる、安全資産を借り入れたり貸し出したりするにあたって金利が発生するためリスクフリーレートが上のような一点にならない等々あります。

状況に応じて図は変わるということ、それによって最適なポートフォリオが変化するということに注意が必要です。

トービンの分離定理

既に投資理論について勉強している方だと先ほどの図に違和感を覚えたかもしれません。「おいおい、トービンの分離定理に反しているぞ」とツッコミが飛んでくる恐れがありますが、今回は問題ありません。

まず、トービンの分離定理について簡単に説明します。

トービンの分離定理とは

安全資産と接点ポートフォリオを適当な割合で投資することで任意の効率的なポートフォリオを作ることが出来る

という定理です。

しかし、そうすると先ほどの図にあてはめるとおかしなことが起こって、

赤色の点から青の点までの曲線上の点は投資対象にならないという話になるわけです。

しかしそのトービンの分離定理ですが、安全資産が借入できる場合でないと成り立ちません。今回は安全資産を借入れることを許していないためこのような状況が起こります。

でもまあ、接点ポートフォリオと安全資産の適当な割合を取れば効率的なポートフォリオになることは間違いないので、

投資家は投資対象を考えたら、接点ポートフォリオを頑張って探してやれば、それと安全資産を適当に組み合わせれば良いという話は出来ますね。

Rのコード

今回の図ですが、描くにあたってRを利用しました。汎用的なコードをかくのが面倒だったので、値がゴリゴリ入っていて、関数化もしてないので全く実用的ではありませんが、とりあえずメモ程度に置いておきます。

#資産1の期待値(ex),分散(var),標準偏差(sd)
sisan1_ex=0.15
sisan1_var=3
sisan1_sd=sqrt(sisan1_var)

#資産2の期待値(ex),分散(var),標準偏差(sd)
sisan2_ex=0.05
sisan2_var=1.2
sisan2_sd=sqrt(sisan2_var)

#投資比率
w1=seq(0,1,0.01)
w2=1-w1

#ポートフォリオの期待値(ex)
port_ex=w1*sisan1_ex+w2*sisan2_ex

#資産1,2の相関係数
ro=-0.5

#ポートフォリオの分散(var)
port_var=(w1^2)*sisan1_var+(w2^2)*sisan2_var+2*w1*w2*sisan1_sd*sisan2_sd*ro

#安全資産
r_f=0.01



png("1.png")
plot(c(0,2),c(0,0.2),type="n",xlab="risk",ylab="return")
points(sqrt(port_var),port_ex,type="l")
points(seq(-0,2.0,0.5),r_f+0.12*seq(-0,2.0,0.5),type="l")
points(seq(-0,2.0,0.5),r_f+0.081*seq(-0,2.0,0.5),type="l")
points(seq(-0,2.0,0.5),r_f+0.036*seq(-0,2.0,0.5),type="l")
dev.off()

【初心者向け】相関係数を動かしてポートフォリオのリスク・リターン曲線を確認してみる

前回は2資産ポートフォリオのリターンの期待値、分散、そしてトータルリスクの導出についてやりました。
詳しくはこちら
bananarian.hatenablog.com


今回はポートフォリオのトータルリスクと期待リターンの関係についてRのプロットを使って確認していこうと思います。


前回の復習

資産a、資産bの2資産に投資を行う際のポートフォリオのリターン
R_pは投資比率 wを使って次のように表すことができる。


R_p=w_aR_a+w_bR_b


更にその期待値、分散、トータルリスクは次のようになる。


E [ R_p ]=w_a E [ R_a ]+w_b E [ R_b ]


Var [ R_p ]=w_a^2 Var [ R_a ]+w_b^2 Var [ R_b ] + 2w_aw_b cov[ R_a,R_b ]


\sigma_p=\sqrt{Var [ R_p ]}


実際の図をもって確認

次のような状況でのリスクとリターンの図を描いてみます。

資産1
・期待リターン:0.15
・リターンの分散:3

資産2
・期待リターン:0.05
・リターンの分散:1.2

相関係数の値を-1から1の範囲で変えていく
相関係数が1の時は青色
相関係数が-1の時は赤色
相関係数が0の時は緑色
相関係数がそれ以外の場合は黒色
f:id:bananarian:20180830010237p:plain

コードは次のよう。

#資産1の期待値(ex),分散(var),標準偏差(sd)
sisan1_ex=0.15
sisan1_var=3
sisan1_sd=sqrt(sisan1_var)

#資産2の期待値(ex),分散(var),標準偏差(sd)
sisan2_ex=0.05
sisan2_var=1.2
sisan2_sd=sqrt(sisan2_var)

#投資比率
w1=seq(0,1,0.01)
w2=1-w1

#ポートフォリオの期待値(ex)
port_ex=w1*sisan1_ex+w2*sisan2_ex

png("1.png")
plot(c(0,2),c(0,0.2),type="n",xlab="risk",ylab="return")

#資産1,資産2の相関係数を-1から1の範囲で動かす
for(ro in seq(-1,1,0.1)){
	#ポートフォリオの分散(var)
	port_var=(w1^2)*sisan1_var+(w2^2)*sisan2_var+2*w1*w2*sisan1_sd*sisan2_sd*ro

	if(ro==-1){
		#相関係数が1の時は赤色でプロット
		points(sqrt(port_var),port_ex,type="l",col="red")
	}
	else{
		#相関係数が0の時は緑色でプロット
		if(ro==0){
			points(sqrt(port_var),port_ex,type="l",col="green")
		}
		else{
			#相関係数が1の時は青色でプロット
			if(ro==1){
				points(sqrt(port_var),port_ex,type="l",col="blue")
			}
			else{
				#それ以外は黒でプロット
				points(sqrt(port_var),port_ex,type="l")
			}	
		}
	}
}
dev.off()


さらに、投資比率を1以上、もしくは負の値にすることで、資金の借り入れ、空売りを表現することが出来、よりリスクは高いが期待リターンの大きい投資が可能になる。それをプロットすると次のようになる。
f:id:bananarian:20180830010641p:plain

#変更点
w1=seq(-1,2,0.01)
plot(c(0,5),c(-0.1,0.3),type="n",xlab="risk",ylab="return")

実際は相関係数が定まる代わりに、投資対象が増大するわけですが、このようなリスクリターン平面を描くことでポートフォリオのリスクとリターンの関係を確認することが出来ます。


また、図を見ると確認できますが、正の相関をしている資産の組ではリスク分散効果がなく、分散投資をしたところであまり意味はなさそうです。一方、負の相関をしている組では、リスク0のポートフォリオが存在しています。

【初心者向け】ポートフォリオのリスク分散効果について

前回はポートフォリオのリターンと、各資産のリターンの間にどのような関係があるかを説明しました。
そして、前回ちょっと数式が多すぎて見てて嫌になった方も多いと思うので、
今回は雰囲気とイメージで、今までの記事を読んでいなくとも理解できるよう説明するよう心掛けてみます。

↓数式が多いと噂の前回の記事
bananarian.hatenablog.com


f:id:bananarian:20180829014846j:plain



前回の復習

一般にリターンは次のような形で表現出来るわけですが、


R_x=\frac{X_{t+1}-X_t}{X_t}=\frac{X_{t+1}}{X_t}-1

資産a、資産bの2資産に投資を行う際のポートフォリオのリターン
R_pは次のように表すことができるというところまでやりました。


R_p=w_aR_a+w_bR_b

ここで
wとは投資比率です。

期待値と分散

期待値とか分散とか知らん知らんって人のために簡単にイメージだけ導入しておきます。
まず、期待値や分散を考えなければいけない場面は確率的に何かが決まる場面です。
サイコロを投げたらどの面が出る?とか、明日の株価は上がるか下がるかとかそういった不確実な事象に対して、人間は基本的には無力です。運否天賦に任せるほかありません。しかしそれでは心もとないわけなので、その出来事が数えきれないくらい起こった場合どれくらいの割合で出てくるのかといったことを考えます。それが確率です。

そして、その確率の性質として、全体を均したらこれくらいの値になるというような値として期待値どれくらいバラついているかを示す値として分散を考えます。
逆転の発想で期待値や分散が確率を決めていると考えることもあります。


いやいや、「実際の出来事は1回しか起こらないし、何度かあったとしても高々数回でしょ?」と文句が出てくるかもしれません。

その通りです現実世界で確率なんぞわかりません。当然期待値や分散も分かりません。しかし理論においては期待値や分散を使います。何故かと言うと人間が運否天賦に立ち向かうための道具がこの確率論しかないからです(ちょっと言い過ぎ?笑)。

そういうわけなので私たちは運否天賦に対して確率論で分析を行い、分からない値(期待値や分散などなど)は統計学を使って限りなく信ぴょう性の高い値を代わりに突っ込んでカバーするわけです。

ポートフォリオの期待値と分散

それでは導入したところで確率を扱っていきます。
そして確率的に変化するような値、つまり不確実な物事を以降確率変数と呼んでいきます。


資産a、資産bの2資産に投資を行う際のポートフォリオのリターン
R_pについて考えるわけですが、資産aに投資したらどれくらいのリターンが入るかなんて、事前には分かりませんよね。つまり不確実な事象です。これは確率変数です!資産bのリターンも同様です。

そういうわけで、資産aのリターン
R_aと資産bのリターン
R_bは確率変数であると考えます。

投資比率はどうでしょう。投資比率とは元手を資産aに何%振り分けたか、資産bに何%振り分けたかというものでした。これは振り分ける本人が勝手に決める値なので、全く不確実ではありません。よってこれは確率変数ではなく定数として考えます。

最後にポートフォリオのリターンはどうでしょう。これはもうわかるかとは思いますが、確率変数です。というか不確実な事象を2つ足している値なわけですから、これが急に確実なものになるわけがないというわけです。


期待値を取るという記号をE,分散を取るという記号をVarで表すことにします。そうするとポートフォリオの期待値と分散は次のように表せます。


E [ R_p ]=w_a E [ R_a ]+w_b E [ R_b ]


Var [ R_p ]=w_a^2 Var [ R_a ]+w_b^2 Var [ R_b ] + 2w_aw_b cov[ R_a,R_b ]

知らん記号が出てきたので説明しておくと、cov[]とは共分散です。共分散とは何かというと二つの確率変数について、この二つの確率変数のバラツキ具合がお互いの影響を受けあっているかどうかを表す指標です。
つまり、全く関係なくバラついている場合は共分散は0になります。
例えば手元にあるサイコロがどの目を出すかという確率変数と、地球の裏側にいるブラジルの人が道ですっ転ぶ確率に関する確率変数の共分散は0になります。

ポートフォリオのリスク

ポートフォリオのリスクに関する概念はたくさんあるのですが、その中の1つを紹介します。
分散に平方根を取ったものを標準偏差なんて呼んだりしますが、これがポートフォリオのリスク概念の1つです。

つまりポートフォリオのリスク
\sigma_pは、


\sigma_p=\sqrt{Var [ R_p ]}

となります。これをポートフォリオのトータルリスクと呼びます。

この標準偏差をリスクと呼んでいる理由は単純で、要はバラツキ具合を表しているわけなので、数値が色々な値を取るということは上がり下がりも大きいわけで、それをリスクが大きいと呼んでいるのです。

リスク分散効果

最後に今までの話を使って投資のリスク分散について数式で表現してみます。ここに関しては数式を用いるので、わからない人は雰囲気でいってください。


Var [ R_p ]=w_a^2 Var [ R_a ]+w_b^2 Var [ R_b ] + 2w_aw_b cov[ R_a,R_b ]

について、これを資産a、資産bに関する投資のトータルリスク
\sigma_a
\sigma_bポートフォリオのトータルリスク
\sigma_pを用いて表すと次のようになる。


\sigma_p^2=w_a^2 \sigma_a^2+w_b^2 \sigma_b^2+ 2w_aw_b \rho \sigma_a \sigma_b

ここで
\rho =\frac{cov[ R_a,R_b ]}{\sigma_a \sigma_b}であり、資産a,資産bのリターンに関する相関係数である。

更に平方完成を施すと次のようになる。


\sigma_p^2=(w_a \sigma_a+w_b \sigma_b)^2- 2w_aw_b (1-\rho) \sigma_a \sigma_b

ここで、
w_a,w_bが非負であることを仮定すると(これはロングポジションである限りは成り立つ。)

\sigma_a, \sigma_bは定義から非負であるので、


\sigma_p^2≦(w_a \sigma_a+w_b \sigma_b)^2

が成り立つ。最後に両辺の平方根を取ると


\sigma_p≦(w_a \sigma_a+w_b \sigma_b)

つまり、相関係数
\rhoが1でない限りは必ず分散投資のトータルリスクは個々の資産のトータルリスクの加重平均を下回るということになりますね。

特に相関係数が-1の場合はトータルリスクを完全に打ち消すことも可能になります。

これが分散投資の効果です。