이게 쫌 헷갈렸는데 그냥 쉽게 deep learning pre-trained transfer training fine tuning.
다 담겨있다. 끝.
data mindex; infile 'D:\UOS_2021_2\time_analysis\SAS_codes\data\mindex.txt'; input mindex @@; date=intnx('month','1jan86'd,_n_-1); format date monyy.; run;
proc forecast data=mindex interval=month method=expo out=out1 outest=est1 weight=0.89 trend=1 lead=6 outfull outresid; id date; var mindex; run;
https://documentation.sas.com/doc/en/etscdc/14.2/etsug/etsug_forecast_syntax02.htm
데이터 설정해주고
간격 설정
방법으로는 지수평활법
out은 중간 과정
outest는 설명력 같은거
weight는 지수평활 modelf의 hyper parameter
trend는 1차 지수 평활을 의미
lead는 계산할 예측값의 개수(95% 신뢰구간도 함께 출력)
outfull은 out에서 예측값(모든 시점) 하고 실제값 추가
outresid는 out에서 잔차 추가
둘다 없으면 단순히 예측값(관측이후)만 출력됨
음 ID뭘까요?
proc print data=out1; run; proc print data=est1; run; /* 이렇게 예측하면 어차피 다 같은데? */
proc sgplot data=out1; series x=date y=mindex / group = _type_; where _type_^='RESIDUAL'; refline '01may94'd / axix=x; yaxis values=(0 to 30 by 5); run;
out1의 변수중 TYPE이 교차로 나와 있으니 이를 그리긴 하는 type별로 묶어서 그려라
아 그리고 residual을 그리지 마라
/*오차항들의 자기상관계수*/ data out11; set out1; if _type_='RESIDUAL'; error = mindex; drop mindex; run;
residual만 추출
proc sgplot data=out11; series x= date y=error; refline 0 / axis=y; yaxis values = (-6 to 5 by 1); run;
proc arima data = out11; identify var = error; run;
/*에측 오차가 원래 가정을 잘 따르는지 확인*/ proc univariate data = out11; var error; run; quit;
/*이중지수평활법*/ data stock; infile 'D:\UOS_2021_2\time_analysis\SAS_codes\data\stock.txt'; input stock @@; date = intnx('month','1jan84'd,_n_-1); format date monyy; run;
proc forecast data=stock interval=month method = expo out=out3 outest=est3 weight=0.6 trend=2 lead=6 outfull outresid; id date; var stock; run;
단순히 trend만 바꿔주면 되고 나머지는 같다.
proc print data=out3; run; proc print data=est3; run;
proc sgplot data=out3; series x=date y=stock / group=_type_; where _type_^= 'RESIDUAL'; refline '01jan92'd / axis=x; yaxis values=(100 to 1100 by 100); run;
data out33; set out3; if _type_='RESIDUAL'; error=stock; run; proc sgplot data=out33; series x=date y=error; refline 0 / axis=y ; yaxis values=(-100 to 150 by 50); run;
proc arima data=out33; identify var=error; run; proc univariate data=out33; var error; run;
앞에서는 일정한 주기성이 없을때
즉, 여기서는 주기성(계절성)이 있는경우의 model을 알아본다.
분산이 시간의 흐름에 관계없이 일정한 경우
data pass; infile 'D:\UOS_2021_2\time_analysis\SAS_codes\data\koreapass.txt'; input pass @@; date=intnx('month','1jan81'd,_n_-1); format date monyy.; run;
/** 가법지수평활 **/ proc forecast data=pass interval=month method=addwinters out=out4 outest=est4 weight=0.4 weight=0.1 weight=0.7 lead=12 seasons=12 outfull outresid; id date; var pass; run;
proc print data=est4; run; proc print data=out4; run;
proc sgplot data=out4; series x=date y=pass / group=_type_; where _type_^= 'RESIDUAL'; refline '01jan90'd / axis=x; run;
/*잔차그림*/ data out44; set out4; if _type_='RESIDUAL'; error=pass; run;
proc sgplot data=out44; series x=date y=error; refline 0 / axis=y; run;
proc arima data=out44; identify var=error; run;
proc univariate data=out44; var error; run;
/** 승법지수평활 **/ proc forecast data=pass interval=month method=winters out=out5 outest=est5 weight=0.5 weight=0.1 weight=0.4 lead=12 seasons=12 outfull outresid; id date; var pass; run;
proc print data=est5; run; proc print data=out5; run;
proc sgplot data=out5; series x=date y=pass / group=_type_; where _type_^= 'RESIDUAL'; refline '01jan90'd / axis=x; run;
data out55; set out5; if _type_='RESIDUAL'; error=pass; run; proc sgplot data=out55; series x=date y=error; refline 0 / axis=y; run;
proc arima data=out55; identify var=error; run;
proc univariate data=out55; var error; run;