Loading [MathJax]/jax/output/CommonHTML/jax.js
본문 바로가기

SAS

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

평활법에 의한 시계열

이동평균평활법

1. 단순이동평균법 (simple moving average method)

더보기
  • 정의
    - 수평적 시계열에 적용(수평적 시계열: 시간의 경과에 따라 평균 수준이 변하지 않는 시계열)
    - 가장 최근의 m-기간 동안 자료들의 단순평균으로 다음 값을 예측하는 방법

  • 예측식
    Fn+1=1m(Zn+Zn1++Znm+1)=1mnt=nm+1Zi=MAn
    Zn: n시점에서의 실제값
    Fn+1: 시점 n에서 추정한 n+1시점 예측값

2. 선형이동평균법 (linear moving method)

더보기
  • 정의
    - 선형 추세성을 갖는 시계열에 적용
    - 이중이동평균을 이용하여 현재 시점이 n인 경우 n+l 시점의 값을 예측하는 방법
      (이중이동평균(MA'): 원계열의 이동평균을 다시 이동평균한 것)

  • 예측식
    Fn+1=an+bnl=(2MAnMAn)+1m1(MAnMAn)l
    MAn: 이동평균
    MAn: 이중이동평균 = 1m(MAn+MAn1++MAnm+1)

지수평활법

1. 단순지수평활법 (simple exponential smooting method)

더보기
  • 정의
    -  단순이동평균법과 같이 수평적 시계열자료에 적용되는 방법
    -  단순이동평균법의 단점을 보완하고자 최근의 자료들에 대해 더 많은 가중값을 부여하는 방법

  • 예측식
    Fn+1=αZn+(1α)F(n1)+1orSMn=αZn+(1α)SMn1
    α: 평활 상수(smoothing constant), 0과 1사이의 값
    SMn: 시점 n에서의 평활 값  =  SMn=αZn+α(1α)Zn1+α(1α)2Zn2+

2. 선형지수평활법 (linear exponential smoothing method): 추세성을 갖는 시계열 예측을 위한 지수평활법

(1) 브라운의 선형지수평활법 (Brown's linear exponential smoothing method)

더보기
  • 정의: 지수평활값과 이중지수평활값을 이용하여 미래의 값을 예측하는 방법
  • 예측식
    Fn+1=an+bnl=2SMnSMn+α1α(SMnSMn)l

    Fn+1: 시점 n+l에 대한 예측값
    SMn: 지수평활값  =  αZn+(1α)SMn1
    SMn: 이중지수평활값  =  αSMn+(1α)SMn1

(2) 홀트의 선형지수평활법 (Holt's linear exponential smoothing method))

더보기
  • 정의
    -  지수평활값과 이중지수평활값을 이용하지 않는다는 점을 제외하면 브라운 방법과 유사
    -  추세를 먼저 추정한 후 이를 이용하여 예측하는 방법

  • 예측식
    Fn+1=SMn+Tnl
    SMn=αZn+(1α)(SMn1+Tn1)
    Tn=β(SMnSMn1)+(1α)Tn1

    SMn: 자료의 평활
    Tn: 추세의 평활

(3) 이차지수평활법(quadratic exponential smoothing): 시계열이 이차곡선 형태의 추세를 갖는 경우 적용하는 예측방법


계절지수평활법

1. 윈터스의 승법적 계절지수평활법 (Winters's multiplicative seasonal exponential smoothing method)

더보기
  • 정의
    -  홀트의 선형지수평활법을 확장시킨 방법
    -  관측된 시계열이 선형추세성과 승법적 계절변동을 나타낼 때 사용하는 방법
       (승법적 계절변동: 시계열의 진폭이 점차적으로 증가 혹은 감소하는 경우)
  • 예측식
    Fn+1=(an+bnl)Sn+lLl=1,2,,L
    an=αZnSnL+(1α)(an1+bn1)   :   수평성분
    bn=β(anan1)+(1β)bn1   :   추세성분
    Sn=γZnan+(1γ)SnL   :   계절성분

    L: 계절성의 길이
    Sn: 계절 인자
    α,β,γ: 평활 상수

2. 원터스의 가법적 계절지수평활법 (Winters's additive seasonal exponential smoothing method)

더보기
  • 정의
    -  관측된 시계열이 선형추세성과 가법적 계절변동을 나타낼 때 사용하는 방법
       (가법적 계절변동: 시계열의 계절적 진폭이 시간의 흐름에 따라 일정한 경우)

  • 예측식
    Fn+1=an+bnl+Sn+lLl=1,2,,L
    an=α(ZnSnL)+(1α)(an1+bn1)   :   수평성분
    bn=β(anan1)+(1β)bn1   :   추세성분
    Sn=γ(Znan)+(1γ)SnL   :   계절성분

    L: 계절성의 길이
    Sn: 계절 인자
    α,β,γ: 평활 상수

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

 

반응형