3.2 時系列の成分

もしも加法分解を仮定するならば、以下のように書くことができます。 \[ y_{t} = S_{t} + T_{t} + R_t \] ここで\(y_{t}\)はデータ、\(S_{t}\)が季節成分、\(T_{t}\)がトレンド・循環成分、そして\(R_t\)が残余成分で、いずれも\(t\)時点の値です。替わって、乗法分解ならば、以下のように書けます。 \[ y_{t} = S_{t} \times T_{t} \times R_t \]

季節性の変動幅あるいはトレンド・循環周りの変動が、時系列の水準によってあまり変わらないならば、加法分解が適しています。季節パターンの変動やトレンド・循環周りの変動の大きさが時系列の水準に比例しているならば、乗法分解の方が適しています。経済時系列データでは、乗法分解が一般的です。

乗法分解の替わりに、まず時系列の変動幅が期間を通してあまり変わらなくなるまでデータを変換し、それから加法分解を適用することもできます。対数変換してから加法分解することは、乗法分解するのと同じことです。なぜなら、 \[ y_{t} = S_{t} \times T_{t} \times R_t \quad\text{と}\quad \log y_{t} = \log S_{t} + \log T_{t} + \log R_t\quad\text{は同値} \] なのですから。

米国小売業の就業者数

本章では後に\(S_{t}\)\(T_{t}\)\(R_{t}\)の成分を得るいくつかの手法を見ていきますが、その前に事例を見ておきましょう。以下では、図3.5に示す小売業の就業者数を成分分解します。これは1990年以降の全米の小売業就業者数を月次単位で集計した千人単位のデータです。

us_retail_employment <- us_employment %>%
  filter(year(Month) >= 1990, Title == "Retail Trade") %>%
  select(-Series_ID)
autoplot(us_retail_employment, Employed) +
  labs(y = "人 (千)",
       title = "米国小売業の就業者数")
米国小売業の就業者数

図 3.5: 米国小売業の就業者数

成分分解の考え方を示すため、3.6節で議論するSTL 分解法を使います。

dcmp <- us_retail_employment %>%
  model(stl = STL(Employed))
components(dcmp)
#> # A dable: 357 x 7 [1M]
#> # Key:     .model [1]
#> # :        Employed = trend + season_year + remainder
#>    .model    Month Employed  trend season_year remainder season_adjust
#>    <chr>     <mth>    <dbl>  <dbl>       <dbl>     <dbl>         <dbl>
#>  1 stl    1990 Jan   13256. 13288.      -33.0      0.836        13289.
#>  2 stl    1990 Feb   12966. 13269.     -258.     -44.6          13224.
#>  3 stl    1990 Mar   12938. 13250.     -290.     -22.1          13228.
#>  4 stl    1990 Apr   13012. 13231.     -220.       1.05         13232.
#>  5 stl    1990 May   13108. 13211.     -114.      11.3          13223.
#>  6 stl    1990 Jun   13183. 13192.      -24.3     15.5          13207.
#>  7 stl    1990 Jul   13170. 13172.      -23.2     21.6          13193.
#>  8 stl    1990 Aug   13160. 13151.       -9.52    17.8          13169.
#>  9 stl    1990 Sep   13113. 13131.      -39.5     22.0          13153.
#> 10 stl    1990 Oct   13185. 13110.       61.6     13.2          13124.
#> # ℹ 347 more rows

上記出力はSTL分解の成分を示しています。元データが左から3列目(Employed列)に、その右3列が推計された成分です。この出力を”dable”、または分解表と言います。表の見出しにあるように、データEmployedは加法的に成分分解されています。

3.6に示すように、trend列(トレンド・循環成分\(T_t\))は時系列の全体的な動きを捉え、季節性やランダムな変動は無視します。

components(dcmp) %>%
  as_tsibble() %>%
  autoplot(Employed, colour="gray") +
  geom_line(aes(y=trend), colour = "#D55E00") +
  labs(
    y = "人 (千)",
    title = "米国小売業の就業者数"
  )
米国小売業の就業者数: トレンド・循環成分(オレンジ色)と元データ(灰色)

図 3.6: 米国小売業の就業者数: トレンド・循環成分(オレンジ色)と元データ(灰色)

3.7に示すように、autoplot()を使って全ての成分を1つの図にプロットできます。

components(dcmp) %>% autoplot()
米国小売業の就業者数(一番上)と、その3つの加法成分

図 3.7: 米国小売業の就業者数(一番上)と、その3つの加法成分

3つの成分は下の3つのパネルにそれぞれ示されています。これらの成分を足し上げると一番上のパネルの元データを再構築できます。季節成分が経時変化していることに注意してください。連続する2年ではパターンは似ていますが、離れた年では季節パターンは違っています。残余成分は一番下のパネルに示されていますが、これは元データから季節成分とトレンド・循環成分を差し引いた残りです。

各パネル左の灰色の棒は、各成分のスケールを比較可能にするためのものです。灰色の棒は同じ幅を表していますが、各プロットでスケールが異なるので違った長さになっています。一番下のパネルの灰色の棒が長いのは、残余成分の変動が元データの変動と比べて小さいからです。下の3つのパネルを、それぞれの灰色の棒の長さが元データのパネルのものと同じになるように縦方向に縮小すれば、4つのパネルのスケールは同じになります。

季節調整値

元データから季節成分を取り除くと、「季節調整」値になります。季節調整値は、加法分解では\(y_{t}-S_{t}\)で、乗法分解では\(y_{t}/S_{t}\)で得られます。

3.8は就業者数の季節調整値です。

components(dcmp) %>%
  as_tsibble() %>%
  autoplot(Employed, colour = "gray") +
  geom_line(aes(y=season_adjust), colour = "#0072B2") +
  labs(y = "人 (千)",
       title = "米国小売業の就業者数")
米国小売業の就業者数: 季節調整値(青色)と元データ(灰色).

図 3.8: 米国小売業の就業者数: 季節調整値(青色)と元データ(灰色).

季節性による変動に関心がないのなら、季節調整値が有益です。例えば、月次の失業データは季節調整されているのが普通です。季節変動よりも、底流にある経済状態による変動を目立たせるためです。学校の卒業生が職探しを始めることによる失業増は季節変動ですが、景気後退による失業増は非季節性です。失業データを研究するほとんどの経済アナリストは、季節変動よりも非季節性の変動に興味があります。結果として、雇用関連データ(や、その他多くの経済データ)は季節調整済みであることが普通になっています。

季節調整値は、トレンド・循環成分だけでなく、残余成分も含んでいます。ですから、「平滑」ではありません。季節調整値から「下降局面」や「上昇局面」を言うのは誤解を招きます。時系列の転換点を探して方向性の変化を解釈するのが目的なら、季節調整値よりもトレンド・循環成分を使う方が良いでしょう。