バナナでもわかる話

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

時系列解析とは?時間の多項式トレンド(polynomial trends)を使った基本姿勢、計算方法とRコードの解説

そういえば時系列に関する話、あまり書いていないなと思ったので記事にしていこうと思います。

スポンサーリンク



時系列とは?

まず、簡単に時系列とは何かっていう話ですが、例えば株価とかを考えてもらうと、時間の経過とともに何か値が連動して変化していますよね。
f:id:bananarian:20181011013926p:plain

こういうのを時系列データと呼びます。


時系列解析の種類

時系列解析では大きく分けて二つの動きを考えます。

トレンド

「上がったり下がったりすれど、大きく見ると時間と共にじわじわ増えているよね~」だとか、「じわじわ下がっているね~」だとか考える時、人はトレンドを考えています。

要は何か一定の周期があったりするわけではないけども、大雑把に見ると時間と共に流れる推移が見えるような場合ってありますよね。その傾向は大抵そのまま続くものです。

このような大きく見た時の傾向をトレンドと呼びます。


周期

一方、何かしらの影響が背後にあって、一定の範囲で周期性があるような動きを周期と呼びます。
例えば、日本の気温の推移を考えてもらえばいいと思うんですけど、

春から夏にかけてどんどん気温が上がっていき、秋、冬にかけて気温が下がっていく、そしてまた春になって同じような動きをする


こんな動きを周期と呼んだりします。


時系列解析ではこの周期とトレンドの二つの観点からものを考えていきます。
例えば気象庁のサイトには日本の平均気温のグラフとして下のようなものがあったりします。


f:id:bananarian:20181112113246p:plain
(気象庁 | 日本の年平均気温より)

この赤い線がトレンドで、上昇傾向にあります。


時系列の基本スタンス

確かに直感的にも時間を伴うデータは大きなトレンドと周期に分けられそうですよね(?)。

とよく説明されるわけですが、正直思いとしては

せめて周期(適当な規則性)がないと、予測も何も出来ないからそれくらいの仮定は設けさせてくれだと思ってます。

だってトレンド(大きな傾向)もなくて、周期(適当な規則)もない各時間ごとに1回こっきりしか観測されないデータを予測するなんてそもそも無理ですよね。だから無理のないやつを予測対象におきたいわけです。

そんな思いがあるわけなので、時系列解析を行う場合には大原則として注意点があって、

「そもそもこのデータには、大きな傾向や規則が生じうるのだろうか」

ということを考える必要があります。

基本のトレンドモデル

前置きが長くなりましたが、今回はそんな時系列解析の内、トレンドを表現するモデルを説明していこうと思います。

トレンドの予測にも色々あって、例えば企業の利益や株価等の経済データを考えてもらうと、これらのデータは大抵は上昇トレンドを持っています。これは何故かというと、基本的に経済は時間と共に成長を続けているはずなので、その成長に連動して、各企業の利益や株価もじわじわ増えていくことが関係しています。

※当然例外はあります


このように背後の要因がわかっているような場合は、経済成長を示すような指標を使うことで株価のトレンドなどを推定することが可能です。

しかし、当然何かトレンドはありそうだけど、背後の要因が何か検討もつかないなんてこともあり得ますよね。

でも私たちは時系列解析を行う以上、確実にトレンドに関係しそうな情報を1つ持っているわけです。それが

時間

です。


そこで、(本当はもっと本質的に関係しそうな情報を使うのがベストだが)データに関して何の情報も持ち合わせていないときに、とりあえず時間の推移を軸に、多項式近似モデルを作って、トレンドを推定してやろうというトレンドモデルが存在します。

それが次のようなモデルです。


時点 tの予測したいデータを y_tとおく。その時パラメータ \alpha_0,....\alpha_qを使って次のような q次多項式でトレンドを近似する。

 y_t=\alpha_0+\alpha_1 t+\alpha_2 t^2+...+\alpha_q t^q


当然、完全にこの式にピッタリフィットするはずがないので、確率的な誤差 \epsilon_tも与えておきます。

 y_t=\alpha_0+\alpha_1 t+\alpha_2 t^2+...+\alpha_q t^q+\epsilon_t


ちなみに、先ほどの気象庁のグラフのトレンドはこれの q=1を利用しています。1次関数が右上がりになっていましたよね。


簡単そう

なんだ!よく見たらただの線形回帰じゃないか!簡単そうですね!!と思うかもしれませんが、確かに q=1なら線形回帰ですが、 q≧2ではそう簡単にいかないことに注意してください。


線形回帰分析の仮定として説明変数間の無相関仮定があったはずです。しかし、 t t^3ってどう考えても相関ありますよね。

そこで、先ほどの式を無相関な説明変数が並ぶ形に書き換える必要が生じます。


無相関な関係

そこで、次のような条件を満たす \phi_{iT}(t)に説明変数を書き換えるという操作を行います。

 \sum_{t=1}^{T}\phi_{iT}(t)\phi_{kT}(t)=0
ただし i≠k, i,k=0,1,....T-1

これは直交条件と呼ばれていて、要は説明変数間はこの仮定を満たす必要があると思ってください。

 \phi_{kT}(t) tを使って表すために、次の多項式で表現することにします。
 \phi_{kT}(t)=t^k+X_{k-1}t^{k-1}+....+C_1 t+C_0

この C_?を求めることが出来れば、説明変数の書き換えを行えますね。



ここで、直交条件が成り立つということは、次の条件が成り立つことがわかりますか?
 \sum_{t=1}^{T}\phi_{kT}(t)t^i=0
ただし i≠k, i=0,1,....k-1

要は先ほどの式に放り込んでみると、 k以外の tの何とか乗を掛けて全部足せば0になるという形にならねばならないことがわかります。

よって、先ほどの関係式
 \phi_{kT}(t)=t^k+X_{k-1}t^{k-1}+....+C_1 t+C_0

に対して両辺に \sum_{t=1}^T t^iを掛けてやると
ただし i≠k, i=0,1,....k-1



次のようになりますよね。

 C_0 \sum_{t=1}^T t^i+C_1 \sum_{t=1}^T t^{i+1}+....+C_{k-1} \sum_{t=1}^T t^{i+k-1}=-\sum_{t=1}^T t^{i+k}
ただし i≠k, i=0,1,....k-1

何かゴツゴツしていますが、まず k=1とおきます。すると i=0となるので式は次のようになります。

 TC_0=-\sum_{t=1}^T t

よって C_0=-\frac{T+1}{2}だとわかりますよね。

次に k=2を考えると C_0がわかっているので C_1が求まります。以下同様に繰り返せば全ての C_?が求まりますよね。

このもとまった C_?を活用して、


 \phi_{1T}(t),....\phi_{qT}(t)を用意し、


 y_t=\alpha_0+\alpha_1 t+\alpha_2 t^2+...+\alpha_q t^q=\gamma_0+\gamma_1  \phi_{1T}(t)+.....+\gamma_q  \phi_{qT}(t)

という問題に書き換えることが出来ました!というわけです。これなら線形回帰を行うことが出来ます。

Rで実装

このトレンドモデル、正直かなり古いモデルなので恐らくRのパッケージにはありません。そこで今の手順をそのままコードに直してみました。

###値の設定、tは時間,degreeは多項式の次数
###ここはデータに合わせて変更する
t=1:30
degree=3
###
#expl_matに変換した説明変数を行列形式で突っ込む(tと次数の分だけ増える)
expl_mat=matrix(,length(t),degree)
for(tt in t){
	
	k=1:degree
	phi=c()
	Coef=c()

	i=(k-1)
	for(kk in k){
		ii=i[kk]
		ti_mat=matrix(,length(t),kk+1)
		for(iii in ii:(ii+kk)){
			ti_mat[,which(ii:(ii+kk)==iii)]=t^iii
		}
		ti_seq=colSums(ti_mat)
		if(length(ti_seq)==2){
			Coef[1]=-(length(t)+1)/2
		}
		else{
			mti_seq=ti_seq[-((length(ti_seq)-1):length(ti_seq))]
			Coef[kk]=(-ti_seq[length(ti_seq)]-sum(Coef*mti_seq))/ti_seq[length(ti_seq)-1]
		}
		phi[kk]=sum(c(1,rev(Coef))*(tt^rev(seq(0,kk,1))))
	}
	expl_mat[tt,]=phi
}


力作!笑

さて、一応合っているか確認してみましょう。もし、変換が正しければ次数さえ真のデータとあっていれば変換前と変換後で値が完全一致するはずです。

#真のモデルが3次多項式のデータを作成
y=0.3+0.5*t+0.5*t^2+0.5*t^3

##間省略、先ほどのコードにdegree=3を突っ込みexpl_matを作る
##浮動小数点の関係で小数点以下までは一致しないので丸め込み(round)して同じ値かどうか確認

> round(expl_mat%*%coef(lm(y~expl_mat))[2:4]+coef(lm(y~expl_mat))[1])==round(y)
      [,1]
 [1,] TRUE
 [2,] TRUE
 [3,] TRUE
 [4,] TRUE
 [5,] TRUE
 [6,] TRUE
 [7,] TRUE
 [8,] TRUE
 [9,] TRUE
[10,] TRUE
[11,] TRUE
[12,] TRUE
[13,] TRUE
[14,] TRUE
[15,] TRUE
[16,] TRUE
[17,] TRUE
[18,] TRUE
[19,] TRUE
[20,] TRUE
[21,] TRUE
[22,] TRUE
[23,] TRUE
[24,] TRUE
[25,] TRUE
[26,] TRUE
[27,] TRUE
[28,] TRUE
[29,] TRUE
[30,] TRUE

というわけで、正しいコードを書くことが出来ました。
これで簡単に多項式トレンドを考えることが出来ますね。


多項式トレンドの使い方

まず、あまり次数を増やすとフィットはしますが、解釈が難しくなるので、次数は小さい方が望ましいです。
最も解釈しやすいモデルが1次式のため、気象庁ページも1次式を採用しています。

普通、次数を決める際は複数の次数で回帰を行ってみてその結果で決めます。その辺りは今回は省略しますが、仮説検定を行う方法や、AICを使う方法、stepwise法等色々あります。



ということで、時間だけを使った多項式トレンドモデルの説明をしました。次回また別の時系列について説明しようと思います。

価格競争は悪手中の悪手

よく、「他社より安く」なんて話を聞きますが、特殊な状況でもない限り基本的に価格競争は行うべきではないと言われます。


今回はその話をします。


スポンサーリンク


基本設定

簡単な状況を考えてみます。
商品Aを作るのに300円かかるとします。
これを900円で売ることで、今600円の利益を出しているとします。

競合の設定

ここで、急に競合が現れ、商品Aと全く同じ商品Bを売り始めたとします。
この商品Bを作るのにも300円かかります。
これを900円で売ることで、今600円の利益を出し始めました。

消費者目線

消費者的には商品Aでも商品Bでもどちらでもいいので、現状より安いものを購入したがるとします。

全く同じではなくとも消費者目線からしたら「別にどっち買っても良い」と思える商品なんていっぱいありますよね。


そこでぱっと思いつくのは「商品Bより安く売ってやろう」みたいな戦略です。


価格競争の発生

標的顧客も同じで、市場の取り合いをしているような状況で、商品のクオリティや宣伝ではなく価格で勝負しようと考え、競合もそれに乗っかることで価格競争が発生します。
f:id:bananarian:20181010160227p:plain


互いに譲らず価格競争の結果、ほとんど利益が出ない価格まで落ちてしまいました。
しかも、結局価格競争を行う前の方が利益が高いですね。



価格競争に陥ると理論上このような結果になってしまうので、価格競争は悪手だと言われるわけですね。


まあ実際には流通チャネルや固定ファンの存在等様々な変動要因がありますから、価格の違いだけで購入者0人になるなんて状況はまず無いわけですが、少なくとも価格競争で理論上の結果と似た状況に陥ることは容易に想像できると思います。

中学で習う需要供給曲線に対する誤解が世の中に浸透しすぎて辛い

この記事を書こうと思ったのは、下の記事を読んだからです。

中学校で習った「右下がりの需要曲線」は現実には存在しない――価格と需要量の真実 | 日刊SPA!


この記事の言い分はざっくり言うと次の通りです。

①中学校で習う需要曲線(直線)は、机上の空論である。そもそも需要曲線とは下のような関係を表すものであった。
f:id:bananarian:20181012173428j:plain
(この図は元記事からの引用。)




②机上の空論であると述べる根拠は、実データに照らしてみると明らかである。そのデータも示してみた。
f:id:bananarian:20181012173536j:plain
(この図は元記事からの引用。)


③図からも明らかなように、価格が安いからと言って需要量が増えるわけじゃない。よって、理論はあくまで理論であって現実にはそぐわない。




ちょっと経済学を齧った人であれば、この記事がおかしなことを言っていることは明らかなわけですが、
記事を書いている人の経歴が何やら強そうなので、

「あれー?自分が間違っているのだろうか??」

と思ってしまう人も多いかなと思ったので、どこがおかしいかを記事にしておきます。



このデータは需給の交点を集めただけ

まず、いくらでも文句のつけようはあるわけですが、
仮にこのPOSデータが市場の状態を十分に反映しているとしましょう。
※実際は反映してないわけですが、そこは後述


ここで、需要と供給の関係の仕組みを再確認しておきます。

「「市場において、商品の価格と供給量は需要曲線と供給曲線によって決定される」」


ということでした。つまり、こういうこと
f:id:bananarian:20181012180136p:plain

これをそのまま信用してやれば、世の中の商品の価格と供給は交点で決まるわけなので、

市場で成立した価格と供給の組に関する実データは、市場の背後にある需要曲線と供給曲線の交点であるということになりますね。


故に、先ほどの記事のPOSデータの背後には次のような状況があるわけです。
f:id:bananarian:20181012181531p:plain
(先ほどの記事から引用した図に加工を施した図)


当然ですが、需要曲線も供給曲線も経済状況に応じて変化します。そして、実データとして現れた価格と供給の組は交点だけです。

よって、100日間のデータをそのまま散布図に書いただけでは、上のような背景から、需要曲線にはなりません


だから、このデータはそもそも需要曲線を表現したデータではないので、価格と需要の関係が成り立つはずもないわけです。



そもそもデータもおかしい

このデータは記事によれば「東京にある百貨店系列の食品スーパー」のPOSデータです。

一方、経済学の需給曲線に関する一般的な考え方は「市場全体においての」需給関係です。

市場全体を考えることで成り立つ話を、「東京」にある「スーパー」の売り上げだけを使って考えている点が非常に怪しい分析です。


普通、均衡価格を考えるのであればある地域の1個のスーパーではなく
せめてある地域全体の価格と供給の組だとか、日本の市場における価格と供給の組だとかを考えないとバイアスが大きすぎます。



需要曲線は消費者の潜在的な需要に関する曲線

需要曲線は、それぞれ個々の消費者が「この価格なら買う」「この価格なら買わない」と考えた選択意識の集まりでしかありません。

もし、データを取ってきて散布図のような形で需要曲線を描きたいなら、
条件を極力同じに揃えた上でアンケート調査を実施しないとわかりません。


需給曲線を推計する場合

今回のような、市場で成立した価格と供給の組を使って需要曲線や供給曲線を推定したい場合は、

こんな簡単に散布図を打つだけで見つかるものではなく、

同時方程式モデル

を使います。


同時方程式モデルの記事もいつか書こうとは思いますが、とりあえずはググったら出てきた参考URLをのせて済ませておきます。
https://www-cc.gakushuin.ac.jp/~20130021/ecmr/chapter8.pdf


とにかく、需要曲線はこんな局所的な規模で、時間も異なるようなPOSデータをプロットしただけで引けるような簡単なものではないのです。

この辺の統計学的な話は非常に面白い話が多いので、近々記事にしようかなと思っています。

果たして経済学者は無能なのか?

 

こんにちは。最近統計学・投資記事の更新が滞ってしまって、読者の方に申し訳ない限りです。あと3日ほどで東京遠征(?)から帰ってくるのでそうしたら平常運転していきますね。

 

というわけで今回も軽めの記事を書こうと思うのですが、題材は

 

「果たして経済学者は無能なのか?」

 

スポンサーリンク

 

 

経済学者無能説

昨日電車でサラリーマン風の男性二人が

 

「経済学者とかいうのは本当にポンコツだ。あいつらの行う経済予測は、まるでアテにならないし、彼らに従っても全く景気は改善しない。」

 

なんて話をしていまして、経済学部の端くれである僕は、まだまだ勉強足らずで本当にポンコツなわけですが、それでも経済理論・実証研究や、経済学者の方々には良い印象を持っていて、反論したくてしょうがなくなったわけです。

 

そこでちょっと記事にしておこうと思います。

 

 

 

 

そもそも予測とは何か

あくまで私の考えですが、予測未来予知を一緒くたにするべきではないと思います。

これは経済理論に限らず、例えば地震予測や統計学の分野でもそうだとは思いますが、

私が考える予測は

 

不確実な未来に対して、適当な意味合いで尤もらしい方法を選択する指針

 

であると考えます。

 

どういうことかというと、未来は結局何が起こるか分からない、つまりリスク(分散)が大きい状況であるという前提のもとで、確率的にマシな選択を取るための指針を探そうというのが私の考える予測です。

 

つまり、もしかしたらとても低い確率で起こるかもしれない大災害や、大恐慌の起こる確率を限りなくゼロにする方法を模索するわけではなく、平常状態であれば平均的に

マシな方法を模索しようというわけです。

 

 

一方で私の考える未来予知は、

 

未来に起こる数々の事象がほぼ確定的にわかるため、事前に策を講じて最悪の状況を確率1で回避することのできる能力

 

であり、こちらの未来予知は中国やインドの秘境に潜んでいそうな仙人やら何やらに任せておけばいいわけで、経済学や統計学等の仕事ではないと私は思います。

 

 

 

しかし景気は良くならない

一方で、このような批判もあるかと思います。

 

「未来予知が出来ないことはわかったが、国民が暮らしやすい経済環境、つまり景気や雇用が安定している状況さえ作れていないではないか」

 

確かに一回不況に陥ってしまえば中々脱することは出来ないし、あちらを立てればこちらが立たないという経済環境であることには違いないと思うわけですが、これについても私は、

 

批判すべきは果たして経済学者なのか??

 

と一旦立ち止まって考えていただきたいのです。

 

私が知る限りでの経済学者の仕事は次の通りです。

 

・経済理論・実証を通して経済に関する分析を行う

・大学や書籍にて経済学的な考え方の普及につとめる

・経済理論を元に、政治家に対して提案を行う

 

 

経済学者は経済に関する分析を行い、非経済学者に働きかけを行うだけで、国民の経済動向を握っているのは経済学者ではなくないですか??

 

何が言いたいかというと、例えば国民のためを第一に考えた政策提案を経済学者が政治家に行ったとして、その政策提案が政治家にとって得の無いものであれば結局採用されないわけで、全てを握っているのは政治家なのでは?と思うわけです。

 

実際のところどうなっているかは、社会経験に乏しい私からはわかりませんが、そのような仕組みである以上、

 

 

政策提案を行う経済学者は政治家に重用された者のみのはずで、重用されるということは、政治家にとって得な提案を出来るから重用されているはずで、ということは、政治家を介している以上、政治家にとって得な提案の集合の中から、政策提案がなされるはずなので、真に国民のためを考えた政策は提案されるわけがないではないか

 

と言いたいわけです。

 

「いやいや、国民のためを考えた政策でないと民主主義である以上、以降その政策提案を行った政治家は選挙に当選しなくなるわけだから、そんなことはしないだろう。」

 

という意見もあるかもしれませんが、経済学に精通している国民がほぼいない昨今において、適切な政策提案ではないと批判的に見ることのできる国民は果たして多数派でしょうか。

 

私は少なくともこと日本において、そんな目利きは多くないと思います。

 

特に、不確実性が多い経済状況で、例えば次の選挙に勝つために、

 

「一時的には爆発的に景気回復するけど、長期的に見ると国民経済にとって不利益となるような政策を打とう」

 

なんてことを考えることも出来るわけです。

 

そうすると、一時的に爆発的に景気回復したという短期の実績をもって、その政治家は国民に囃し立てられて次も当選します。長期的に見ると国民のことを全く考えていない政策をとったはずなのにです。

 

 

まとめ

以上、何が言いたいかというと、経済学者の仕事はあくまで分析と提案であって、その分析が実際の経済に活かされるかどうかは、現状の仕組みでは分からないと言わざるを得ないのでは?ということと、経済学者の行う分析は予知ではなく予測なので、マシな提案を行うにすぎないのでは?ということです。

 

ここで、それならば経済学者なんていらないじゃん。という意見は軽率かなと思います。

 

現状の経済がこの程度で収まっているのは、経済学者が現状できうる限りの最もマシな提案をしているからかもしれないわけです。