평활법에 의한 시계열
이동평균평활법
1. 단순이동평균법 (simple moving average method)
더보기
- 정의
- 수평적 시계열에 적용(수평적 시계열: 시간의 경과에 따라 평균 수준이 변하지 않는 시계열)
- 가장 최근의 m-기간 동안 자료들의 단순평균으로 다음 값을 예측하는 방법 - 예측식
$\begin{align}
F_{n+1} \;&=\; {1 \over m}(Z_{n} + Z_{n-1} + \cdots + Z_{n-m+1}) \\
&=\; {1 \over m} {\sum_{t=n-m+1}^{n}} Z_i \\
&=\; MA_n
\end{align}$
$Z_n$: n시점에서의 실제값
$F_{n+1}$: 시점 n에서 추정한 n+1시점 예측값
2. 선형이동평균법 (linear moving method)
더보기
- 정의
- 선형 추세성을 갖는 시계열에 적용
- 이중이동평균을 이용하여 현재 시점이 n인 경우 n+l 시점의 값을 예측하는 방법
(이중이동평균(MA'): 원계열의 이동평균을 다시 이동평균한 것) - 예측식
$\begin{align}
F_{n+1} \;&=\; a_n \;+\; b_n \cdot l \\
&=\; (2MA_n \;-\; MA_n') \;+\; {1 \over m-1}(MA_n \;-\; MA_n') \cdot l
\end{align}$
$MA_n$: 이동평균
$MA_n'$: 이중이동평균 = ${1 \over m} (MA_{n} + MA_{n-1} + \cdots + MA_{n-m+1})$
지수평활법
1. 단순지수평활법 (simple exponential smooting method)
더보기
- 정의
- 단순이동평균법과 같이 수평적 시계열자료에 적용되는 방법
- 단순이동평균법의 단점을 보완하고자 최근의 자료들에 대해 더 많은 가중값을 부여하는 방법 - 예측식
$\begin{align}
F_{n+1} \;&=\; \alpha Z_n + (1-\alpha) F_{(n-1)+1} \\
or\;\; SM_n \;&=\; \alpha Z_n + (1-\alpha) SM_{n-1} \\
\end{align}$
$\alpha$: 평활 상수(smoothing constant), 0과 1사이의 값
$SM_n$: 시점 n에서의 평활 값 = $SM_n \;=\; \alpha Z_{n} + \alpha(1-\alpha) Z_{n-1} + \alpha(1-\alpha)^2 Z_{n-2} + \cdots$
2. 선형지수평활법 (linear exponential smoothing method): 추세성을 갖는 시계열 예측을 위한 지수평활법
(1) 브라운의 선형지수평활법 (Brown's linear exponential smoothing method)
더보기
- 정의: 지수평활값과 이중지수평활값을 이용하여 미래의 값을 예측하는 방법
- 예측식
$F_{n+1} \;=\; a_n + b_n \cdot l \;=\; 2SM_n - SM_n' + {\alpha \over 1-\alpha}(SM_n - SM_n') \cdot l$
$F_{n+1}$: 시점 n+l에 대한 예측값
$SM_n$: 지수평활값 = $\alpha Z_n + (1-\alpha)SM_{n-1}$
$SM_n'$: 이중지수평활값 = $\alpha SM_n + (1-\alpha)SM_{n-1}'$
(2) 홀트의 선형지수평활법 (Holt's linear exponential smoothing method))
더보기
- 정의
- 지수평활값과 이중지수평활값을 이용하지 않는다는 점을 제외하면 브라운 방법과 유사
- 추세를 먼저 추정한 후 이를 이용하여 예측하는 방법 - 예측식
$F_{n+1} \;=\; SM_n \;+\; T_n \cdot l$
$SM_{n} \;=\; \alpha Z_n \;+\; (1-\alpha)(SM_{n-1} \;+\; T_{n-1})$
$T_{n} \;=\; \beta(SM_n \;-\; SM_{n-1}) \;+\; (1-\alpha)T_{n-1}$
$SM_n$: 자료의 평활
$T_n$: 추세의 평활
(3) 이차지수평활법(quadratic exponential smoothing): 시계열이 이차곡선 형태의 추세를 갖는 경우 적용하는 예측방법
계절지수평활법
1. 윈터스의 승법적 계절지수평활법 (Winters's multiplicative seasonal exponential smoothing method)
더보기
- 정의
- 홀트의 선형지수평활법을 확장시킨 방법
- 관측된 시계열이 선형추세성과 승법적 계절변동을 나타낼 때 사용하는 방법
(승법적 계절변동: 시계열의 진폭이 점차적으로 증가 혹은 감소하는 경우) - 예측식
$F_{n+1} \;=\; (a_n + b_nl)S_{n+l-L} \qquad\quad l= 1,2,\cdots,L$
$a_n \;=\; \alpha {Z_n \over S_{n-L}} + (1-\alpha)(a_{n-1} + b_{n-1})$ : 수평성분
$b_n \;=\; \beta(a_n - a_{n-1}) + (1-\beta)b_{n-1}$ : 추세성분
$S_n \;=\; \gamma{Z_n \over a_n} + (1-\gamma)S_{n-L}$ : 계절성분
$L$: 계절성의 길이
$S_n$: 계절 인자
$\alpha,\; \beta,\; \gamma$: 평활 상수
2. 원터스의 가법적 계절지수평활법 (Winters's additive seasonal exponential smoothing method)
더보기
- 정의
- 관측된 시계열이 선형추세성과 가법적 계절변동을 나타낼 때 사용하는 방법
(가법적 계절변동: 시계열의 계절적 진폭이 시간의 흐름에 따라 일정한 경우) - 예측식
$F_{n+1} \;=\; a_n + b_nl + S_{n+l-L} \qquad\quad l= 1,2,\cdots,L$
$a_n \;=\; \alpha (Z_n - S_{n-L}) + (1-\alpha)(a_{n-1} + b_{n-1})$ : 수평성분
$b_n \;=\; \beta(a_n - a_{n-1}) + (1-\beta)b_{n-1}$ : 추세성분
$S_n \;=\; \gamma(Z_n - a_n) + (1-\gamma)S_{n-L}$ : 계절성분
$L$: 계절성의 길이
$S_n$: 계절 인자
$\alpha,\; \beta,\; \gamma$: 평활 상수
SAS Code (더보기 클릭 ↓)
더보기
/*======================================================================================================*/
/* 선형지수평활법 */
/*======================================================================================================*/
/*===================== 데이터 불러오기 =====================*/
data trade;
infile "/home/시계열/trade index(순상품교역조건지수).csv";
input trade;
date=intnx("month", "01jan01"d, _n_-1);
format date monyy.;
run;
/* - intnx(interval, from, n): interval은 관측주기, from은 시작 지점, n은 지정된 수만큼 증가된 시점이 시간변수의 시작점
- _n_: SAS의 키워드로 데이터 수를 의미, data 단계가 처음 수행되었으면 n=1, _n_-1=0이 됨.
- intcx(interval, from, to): interval은 시간구간, 즉 관측주기, from은 시작지점, to는 종료시점
- 일별 자료 = date. 월별 자료 = monyy. 분기별 자료 = qtr. */
symbol1 i=join cv=black; /* i : join(직선), none(산점도), niddle(바늘모양), spline | cv : 점의 색 */
proc gplot data=trade;
plot trade*date=1;
run;
/*===================== 홀트 선형지수평활법 =====================*/
proc forecast data=trade method=winters trend=2 interval=month weight=0.2
out=TIMES.tout outest=toutest outall;
var trade;
id date;
run;
/* - data: proc forecast를 실행할 시계열자료가 포함된 데이터
- trend: 1(상수 추세), 2(선형적 추세), 3(2차 경향 추세) default는 2
- method
- 단계적 AR: method = stepar,
- 단순지수평활법: method = expo trend = 1
- 브라운 선형지수평활법: method = expo trend = 2
- 홀트 선형지수평활법: method = winters trend = 2
- 승법적 계절수평활법: method = winters trend = 2 season = 12(4) (추세성이 없으면 trend = 1),
- 가법적 계절수평활법: method = addwinters trend = 2 season = 12(4) (추세성이 없으면 trend = 1)
- interval: 시계열 이터의 주기(qtr, month, day)
- weight: expo, winters, addwinters 방법에서의 가중값
- lead: 예측 시점(default=12)
- var: 예측하려는 변수 */
proc print data=tout;
run;
proc print data=toutest;
run;
/* 시각화 */
data tout;
set tout;
if _type_="RESIDUAL" then delete;
run;
symbol1 h=1 l=1 i=join v=none c=black;
symbol2 h=1 l=2 i=join v=none c=black;
proc gplot data=tout;
plot trade*date=_type_/frame;
run;
/*===================== 브라운 선형지수평활법 =====================*/
proc forecast data=trade method=expo trend=2 interval=month weight=0.2
out=tout2 outest=toutest2 outall;
var trade;
id date;
run;
proc print data=tout2;
run;
proc print data=toutest2;
run;
/* 시각화 */
data tout2;
set tout2;
if _type_="RESIDUAL" then delete;
run;
symbol1 h=1 l=1 i=join v=none c=black;
symbol2 h=1 l=2 i=join v=none c=black;
proc gplot data=tout;
plot trade*date=_type_/frame;
run;
/*======================================================================================================*/
/* 계절지수평활법 */
/*======================================================================================================*/
/*===================== 데이터 불러오기 =====================*/
data wattage;
infile "/home/시계열/wattage(전력사용량).csv";
input wattage;
date=intnx("month", "01jan01"d, _n_-1);
format date monyy.;
run;
symbol1 i=join cv=black;
proc gplot data=wattage;
plot wattage*date=1;
run;
/*===================== 가법적 계절지수평활법 =====================*/
proc forecast data=wattage method=addwinters trend=2 interval=month weight=0.2
weight=0.1 weight=0.7 seasons=12 out=wout5 outest=woutest5 outfull outresid;
var wattage;
id date;
run;
proc print data=wout5;
run;
proc print data=woutest5;
run;
/* 시각화 */
data wout5;
set wout5;
if _type_="RESIDUAL" then delete;
run;
symbol1 h=1 l=1 i=join v=none c=black;
symbol2 h=1 l=2 i=join v=none c=black;
proc gplot data=wout5;
plot wattage*date=_type_/frame overlay legend;
run;
/*===================== 승법적 계절지수평활법 =====================*/
proc forecast data=wattage method=winters trend=2 interval=month weight=0.2
weight=0.1 weight=0.7 seasons=12 out=wout6 outest=woutest6 outfull outresid;
var wattage;
id date;
run;
proc print data=wout6;
run;
proc print data=woutest6;
run;
/* 시각화 */
data wout6;
set wout6;
if _type_="RESIDUAL" then delete;
run;
symbol1 h=1 l=1 i=join v=none c=black;
symbol2 h=1 l=2 i=join v=none c=black;
proc gplot data=wout6;
plot wattage*date=_type_/frame overlay legend;
run;
반응형
반응형
'SAS' 카테고리의 다른 글
[내 맘대로 SAS 공부] 범주형(categorical) 변수 처리 (0) | 2023.01.03 |
---|---|
[내 맘대로 SAS 공부] 산점도(scatter plot)과 히스토그램(histogram) (0) | 2023.01.02 |
[내 맘대로 SAS 공부] 간단한 선형 회귀 분석 (0) | 2022.12.30 |