본문 바로가기

SAS

[내 맘대로 SAS 공부] 시계열 - 평활법

반응형

평활법에 의한 시계열

이동평균평활법

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$: 평활 상수

trade index(순상품교역조건지수).csv
0.00MB
wattage(전력사용량).csv
0.00MB

 

 

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;
반응형

 

반응형