실습 · 연습문제 2개
AR(p) 적합과 재귀 예측 ar-forecast
평균이 0인 정상 시계열 에 자기회귀 모델 AR()
를 맞추고, 그 모델로 앞으로 시점을 예측한다. 두 함수를 완성한다.
fit_ar(x, p): 최소제곱으로 를 추정해 shape(p,)배열로 반환한다. 절편은 쓰지 않는다. 회귀에 쓰는 행은 이고, 행 의 특징은 , 목표는 다.forecast_ar(x, phi, h): 마지막 관측 까지 보고 를 shape(h,)로 반환한다. 미래의 잡음 기댓값은 0이므로, 아직 관측하지 않은 값 자리에는 앞에서 만든 예측값을 넣는다(재귀 예측).
테스트는 시뮬레이션한 AR(2)에서 계수를 되찾는지, 손으로 계산한 재귀 예측과 같은지, AR(1)의 시점 예측이 인지, 그리고 예측이 horizon이 길어질수록 평균 0으로 수렴하는지 확인한다.
힌트: lag 행렬은 np.column_stack([x[p - k: len(x) - k] for k in range(1, p + 1)])로 만들 수 있다.
rolling-origin 평가와 horizon별 오차 rolling-origin
rolling-origin 평가(backtesting)는 예측 원점(origin)을 시간 순서대로 옮겨 가며, 원점마다 그 시점까지의 데이터만 예측기에 주고 앞으로 시점을 예측해 실제 값과 비교한다. 두 함수를 완성한다.
rolling_origin_errors(y, forecaster, initial, horizon, step=1)- 원점 는
initial - 1부터 시작해step씩 늘어나며,len(y) - 1인 동안 계속한다(0부터 세는 인덱스). 즉 첫 원점에서 예측기는y[:initial]을 본다. - 원점마다
forecaster(y[: o + 1])를 호출한다. 예측기는 shape(horizon,)의 예측 를 반환한다. - 오차
예측 - 실제를 원점마다 한 행으로 모아 shape(원점 수, horizon)배열을 반환한다.
- 원점 는
horizon_rmse(errors): 열(horizon)마다 RMSE를 계산해 shape(horizon,)으로 반환한다.
예측기에는 원점 이후의 값을 절대 넘기지 않는다. 테스트는 원점의 개수와 위치, 예측기가 받는 데이터의 길이, persistence 예측기(마지막 값을 반복)에서 손으로 계산한 오차, 그리고 random walk에서 persistence의 horizon별 RMSE가 대략 에 비례해 커지는지를 확인한다.