売上げを気温で回帰してみる
あたまだし
掲題の件、最近出たわかりやすいデータ分析の入門書、
において
- 売上げ v.s. 気温
として回帰分析をしていたケースがあった。これが時系列データに対するやってはいけない回帰、すなわち、みせかけの回帰に相当するケースではないか?という話を久保先生としていた。
@teramonagi ときどき時系列データ解析を一般化状態空間モデル(GSSM)でごちゃごちゃ解析していて,あまり進捗はしてないのですが…まあ,わりと簡単な場合なら,GSSMで乱歩なのか直線まわりの正規乱数なのかは区別がつけられそうです…そこから先の「売上~気温」はまだですが…
— 久保拓弥 (@KuboBook) 2015, 11月 1
ここでは、これを簡単なモデルのシミュレーションを通じてチェックしてみたい。
売上げ(平均値が正の正規分布)を気温(平均回帰過程)で回帰してみる
簡単のため、
- 売上げ: 各年度(日にちだと思ってもよい)の売上げが、正規分布に従って生成される(企業の売上はある程度の見込み売り上げ(平均)とそれに対する不確実性(標準偏差)からなると仮定)
- 気温: ある平均値(20度辺り)をうろつく平均回帰過程、特にここではオルンシュタイン=ウーレンベック過程 - Wikipediaを仮定
としてモデリングする。コードはかつてないほどの殴り書き&モデルパラメータは適当。
kに対するforループが上記の過程に従う1パスのモンテカルロシミュレーションに対応し、それを何回も繰り返して、回帰して、気温に対する回帰係数のp値の分布を見てみる。
size_step <- 100 sigma <- 5 dt <- 0.1 theta <- 1 mu <- 25 p_value <- numeric(10^3) for(k in 1:10^3) { temp <- rep(mu, size_step+1) for(i in seq_len(size_step)) { temp[i+1] <- temp[i] - theta*(temp[i] - mu)*dt + sigma*sqrt(dt)*rnorm(1) } sale <- rnorm(size_step+1, mean=20, sd=8) summary(lm(sale~temp)) p_value[k] <- coef(summary(lm(sale~temp)))[2,4] } hist(p_value)
ほぼ一様な分布だ。さらに、 p値が5%を下回る割合を計算すると
> sum(p_value<0.05)/10^3 [1] 0.05
となったので、p値の割合(信頼度としての意味合いとしてのp値) としてもよさそうだ。
売上げ(平均回帰過程)を気温(平均回帰過程)で回帰してみる
業種によってはそうなのかもしれないが、売り上げ自体が平均回帰的な会社もあるかもしれない。そんなケースもあるはずだと思って同様の計算をしてみる。
size_step <- 100 sigma <- 5 dt <- 0.1 theta <- 1 mu_x <- 25 mu_y <- 35 p_value <- numeric(10^3) for(k in 1:10^3) { x <- rep(mu_x, size_step+1) y <- rep(mu_y, size_step+1) for(i in seq_len(size_step)) { x[i+1] <- x[i] - theta*(x[i] - mu_x)*dt + sigma*sqrt(dt)*rnorm(1) y[i+1] <- y[i] - theta*(y[i] - mu_y)*dt + sigma*sqrt(dt)*rnorm(1) } p_value[k] <- coef(summary(lm(y~x)))[2,4] } hist(p_value, 100)
・・・明らかに有意となるケースが量産されている、これはやっちゃだめなやつだ!!!
> sum(p_value<0.05)/10^3 [1] 0.507
見せかけの回帰の例
さらにちなみに、ダメなケース(ランダムウォーク同士の回帰、みせかけの回帰)だと、シードを固定しなくても、2〜3回も下記コードをまわせば即"みせかけの回帰"として有意な結果(xの回帰係数が有意)を作ることができる。
x <- cumsum(rnorm(100)) y <- cumsum(rnorm(100))
例えば以下で、xの係数が有意となっているが、これは明らかにみせかけの回帰の例だ。
> summary(lm(y~x)) Call: lm(formula = y ~ x) Residuals: Min 1Q Median 3Q Max -6.3241 -2.2174 0.0802 2.5778 5.8766 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 4.53328 0.67048 6.761 9.94e-10 *** x -0.28741 0.05257 -5.467 3.48e-07 *** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 Residual standard error: 3.052 on 98 degrees of freedom Multiple R-squared: 0.2337, Adjusted R-squared: 0.2259 F-statistic: 29.89 on 1 and 98 DF, p-value: 3.484e-07
まとめ
解析的に計算している論文(Phillips(1986))だとランダムウォーク(正規分布を累積していくもの)同士の回帰がダメだと主張していたはずなので、それに該当しないケースはOK,あるいは個別に考えて対応となるのだろうか。
ここでは
- 1: 正規分布 v.s. 平均回帰過程
- 2: 平均回帰過程 v.s. 平均回帰過程
で回帰したが、2のケースは明らかにみせかけの回帰であると疑ってもよさそうだ。なので、過程(確率過程)に対するノイズが正規分布の累積(ランダムウォーク)になってる過程同士の回帰がまずそうだといえそうだ。
特に今回の売上のケースはよくよく考えると平均回帰過程でモデリングするのは筋が悪く、1のように単純に"ある想定される売り上げの水準からちょっとずれる"というような考え方をベースに持ってくるべきかなと*1。
もっと簡単にいうと、気温の過程は平均回帰過程であるとした上では、売り上げをどうモデリングするか”が肝っぽい。
ってかんじだ。1のケースが見せかけの回帰に相当するんで、イケイケなべんちゃー(売り上げが前期比で130%UP(上記,数値に相当)!)みたいな会社だと、1がよさそうですが、その会社さんだとみせかけの回帰出せると思ってて、「あのイケイケベンチャーの売上は・・・なんと気温に依存していた!」みたいな話になるんでねーかな、みせかけだけど。
*1:数式で考えると売上げに対するノイズ(バラツキ)が次の期の売上へと影響を与える形になるので筋が悪いなって