Skip to content

Commit e3d73ab

Browse files
authored
Merge pull request #13 from Youngsun-Lee-DS/main
chapter 4 update
2 parents b177c60 + 4de36ac commit e3d73ab

File tree

62 files changed

+2561
-114
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

62 files changed

+2561
-114
lines changed

04-time-series-features.Rmd

Lines changed: 144 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,144 @@
1+
# 시계열의 특징 {#chap4}
2+
3+
`feats`패키지에는 **FE**atures **A**nd **S**tatistics from **T**ime **S**eries를
4+
computing하는 함수들이 있다.
5+
우리는 이미 시계열의 특징 몇가지를 앞에서 살펴보았다.
6+
예를 들면, autocorrelations(자기상관)이 시계열의 특징으로 제시되었다.
7+
8+
## 몇가지 간단한 통계
9+
10+
features() 함수를 통해 평균, 최소값, 최댓값을 계산할 수 있다.
11+
12+
### 평균
13+
14+
예를 들어, tourism 데이터(분기별 호주 여행객수)를 사용하여 **mean**으로 모든 시계열의 평균을 계산할 수 있다.
15+
16+
```{r}
17+
tourism %>%
18+
janitor::clean_names() %>%
19+
features(trips, list(mean = mean)) %>%
20+
arrange(mean)
21+
```
22+
South Australia 주에 있는 캥거루 섬을 방문한 평균 방문객 수가 가장 적었다는 것을 알 수 있다.
23+
24+
### 사분위수
25+
26+
**quantile**을 통해 최소값, 제1사분위수, 중위수, 제3사분위수, 최대값을 계산할 수 있다.
27+
28+
```{r}
29+
tourism %>%
30+
janitor::clean_names() %>%
31+
features(trips, quantile)
32+
```
33+
0%는 최소값을 의미하고, 100%는 최대값을 의미한다.
34+
35+
### ETC
36+
37+
list()를 통해 평균과 최소값, 제1사분위수, 중위수, 제3사분위수, 최대값을 한번에 계산할 수 있다.
38+
39+
```{r}
40+
tourism %>%
41+
janitor::clean_names() %>%
42+
features(trips, list(avg = mean, quantile))
43+
```
44+
45+
## ACF
46+
47+
자기 상관(Autocorrelation)을 앞서 1장에서 배웠다.
48+
49+
### feat_acf
50+
자기 상관은 feat_acf를 이용하여 ACF에 관한 정보를 얻을 수 있다.
51+
52+
* acf1: 시계열 데이터의 1차 자기상관계수
53+
54+
* acf10: 1~10차 자기상관계수 제곱합
55+
56+
* diff1_acf1: 1차 차분 시계열의 1차 자기상관계수
57+
58+
* diff1_acf10: 1차 차분 시계열의 1~10차 자기상관계수 제곱합
59+
60+
* diff2_acf1: 2차 차분 시계열의 1차 자기상관계수
61+
62+
* diff2_acf10: 2차 차분 시계열의 1~10차 자기상관계수 제곱합
63+
64+
* season_acf1: 첫번째 계절 시차에서의 자기상관계수
65+
66+
```{r}
67+
tourism %>%
68+
janitor::clean_names() %>%
69+
features(trips, feat_acf)
70+
```
71+
tourism 데이터(분기별 호주 여행객수)는 분기별 데이터이기 때문에 위 결과에서 season_acf1은 시차 4에서의 자기상관계수값을 의미한다.
72+
73+
## STL
74+
75+
STL분해는 3장에서도 언급되었다.
76+
STL은 Seasonal and Trend decomposition using Loess의 줄임말로 robust한 시계열 분해 방법에 해당된다.
77+
78+
시계열 분해는 추세요소$T_{t}$, 계절요소$S_{t}$, 관측치 $y_{t}$에서 추세요소와 계절 요소를 뺀 나머지 부분인 $R_{t}$로 나누어 볼 수 있었다.
79+
80+
\[
81+
y_{t}=T_{t}+S_{t}+R_{t}
82+
\]
83+
84+
강한 추세를 가진 데이터의 경우, 계절 조덩된 데이터가 $R_{t}$보다 더 큰 변동을 가져야 한다.
85+
그러므로 $\frac{var(R_{t})}{var(T_{t}+R_{t})}$는 상대적으로 작아진다.
86+
추세의 강도는 아래와 같이 정의되며, 0과 1사이의 값을 가진다.
87+
88+
\[
89+
F_{t}=max(0,1-\frac{var(R_{t})}{var(T_{t}+R_{t})})
90+
\]
91+
92+
계절성의 강도는 아래와 같이 정의된다.
93+
94+
\[
95+
F_{s}=max(0,1-\frac{var(R_{t})}{var(S_{t}+R_{t})})
96+
\]
97+
98+
### feat_stl
99+
feat_stl을 이용하여 STL 분해 요소를 얻을 수 있다.
100+
추세와 계절성의 강도와 함께 아래와 같은 값들도 얻을 수 있다.
101+
102+
* seasonal_peak_year: 계절성이 가장 큰 시점
103+
104+
* seasonal_trough_year: 계절성이 가장 작은 시점
105+
106+
* spikiness: $R_{t}$의 분산
107+
108+
* linearity: $T_{t}$(추세요소)의 선형성
109+
110+
* curvature: $T_{t}$(추세요소)의 곡률
111+
112+
* stl_e_acf1: 추세요소$T_{t}$와 계절요소$S_{t}$를 제외한 나머지 계열들의 1차 자기상관계수
113+
114+
* stl_e_acf10: 추세요소$T_{t}$와 계절요소$S_{t}$를 제외한 나머지 계열들의 1~10차 자기상관계수 제곱합
115+
116+
```{r}
117+
tourism %>%
118+
janitor::clean_names() %>%
119+
features(trips, feat_stl)
120+
```
121+
122+
위의 결과를 x축은 트렌드한 정도를, y축은 계절적인 정도를 표현해서 아래와 같이 시각화할 수 있다.
123+
```{r}
124+
tourism %>%
125+
janitor::clean_names() %>%
126+
features(trips, feat_stl) %>%
127+
ggplot(aes(x = trend_strength, y = seasonal_strength_year,
128+
col = purpose)) +
129+
geom_point() +
130+
facet_wrap(vars(state))
131+
```
132+
휴가를 목적으로 하는 관광이 계절성의 강도가 가장 큰 것을 보여준다.
133+
134+
```{r}
135+
tourism %>%
136+
features(Trips, feat_stl) %>%
137+
filter(seasonal_strength_year == max(seasonal_strength_year)) %>%
138+
left_join(tourism, by = c("State", "Region", "Purpose")) %>%
139+
ggplot(aes(x = Quarter, y = Trips)) +
140+
geom_line() +
141+
facet_grid(vars(State, Region, Purpose))
142+
```
143+
144+

_bookdown.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,5 +19,6 @@ rmd_files: ["index.Rmd",
1919
"01-intro-to-tsibble.Rmd",
2020
"02-timeseries-decomposition.Rmd",
2121
"03-time-series-decomposition.Rmd",
22+
"04-time-series-features.Rmd",
2223
"05-the-forecasters-toolbox.Rmd",
2324
"references.Rmd"]
-608 KB
-546 KB
-139 KB
-165 KB
-170 KB
-129 KB
-141 KB
-36.3 KB

0 commit comments

Comments
 (0)