Chapter 17에서는
* residual forecast error와 forecast bias를 포함한 forecast performace의 기본 측정
* MAE(mean absolute error)와 같은 방법을 통한 forecast error calculations
* MAE 및 RMSE와 같은 널리 사용되는 오차 계산 방법
Forecast Error (or Residual Forecast Error)
* forecast error = expected value − predicted value
* 0인 값은 error가 없는 것이다.
* 따라서, 0에서 멀어지는 값일 수록 좋지 않은 값이다.
# calculate forecast error
expected = [0.0, 0.5, 0.0, 0.5, 0.0]
predictions = [0.2, 0.4, 0.1, 0.6, 0.2]
forecast_errors = [expected[i]-predictions[i] for i in range(len(expected))]
print('Forecast Errors: %s' % forecast_errors)
Forecast Errors: [-0.2, 0.09999999999999998, -0.1, -0.09999999999999998, -0.2]
Mean Forecast Error (or Forecast Bias)
* mean forecast error = mean(forecast error)
* 이상적인 평균 예측 오류는 0이디.
* 결과값이 음수이면 과잉 예측이라는 것을 의미한다. 반대로 양수라면, 결핍 예측이다.
# calculate mean forecast error
expected = [0.0, 0.5, 0.0, 0.5, 0.0]
predictions = [0.2, 0.4, 0.1, 0.6, 0.2]
forecast_errors = [expected[i]-predictions[i] for i in range(len(expected))]
bias = sum(forecast_errors) * 1.0/len(expected)
print('Bias: %f' % bias)
Bias: -0.100000
Mean Absolute Error
* mean absolute error = mean(abs(forecast error))
* 평균 오차에서 변형된 것으로, abs()를 통해 값을 양수로 강제한 것이다.
* 값이 클 수록 높은 error를 보인 것이며 0에 가까울 수록 낮은 error이다.
# calculate mean squared error
from sklearn.metrics import mean_squared_error
expected = [0.0, 0.5, 0.0, 0.5, 0.0]
predictions = [0.2, 0.4, 0.1, 0.6, 0.2]
mse = mean_squared_error(expected, predictions)
print('MSE: %f' % mse)
MSE: 0.022000
Root Mean Squared Error
* rmse = root(mean squared error)
* 평균 제곱 오차 점수의 제곱근을 취하여 예측의 원래 단위로 다시 변환 할 수 있다.
# calculate root mean squared error
from sklearn.metrics import mean_squared_error
from math import sqrt
expected = [0.0, 0.5, 0.0, 0.5, 0.0]
predictions = [0.2, 0.4, 0.1, 0.6, 0.2]
mse = mean_squared_error(expected, predictions)
rmse = sqrt(mse)
print('RMSE: %f' % rmse)
RMSE: 0.148324
* 추가적으로 앞에서 배운 moving average smoothing코드에서,
* 예측결과에 대한 위 방법들을 적용해보았다.
# moving average smoothing as a forecast model
from math import sqrt
from pandas import read_csv
from numpy import mean
from sklearn.metrics import mean_squared_error
from sklearn.metrics import mean_absolute_error
from matplotlib import pyplot
series = read_csv('daily-total-female-births.csv', header=0, index_col=0, parse_dates=True,
squeeze=True)
# prepare situation
X = series.values # dataset의 value
window = 3
history = [X[i] for i in range(window)]
test = [X[i] for i in range(window, len(X))]
predictions = list()
# walk forward over time steps in test
for t in range(len(test)):
length = len(history)
yhat = mean([history[i] for i in range(length-window,length)]) #history에 대한 moving average window=3인 경우의 formula
obs = test[t]
predictions.append(yhat)
history.append(obs)
#print('predicted=%f, expected=%f' % (yhat, obs))
expected = test
mae = mean_absolute_error(expected, predictions)
mse = mean_squared_error(expected, predictions)
rmse = sqrt(mse)
print(mae,mse,rmse)
6.2826887661141795 61.37906691221608 7.834479364464245
'Study > time series forecasting with python' 카테고리의 다른 글
Chapter 16. Backtest Forecast Model (0) | 2021.07.21 |
---|---|
Chapter 15. Stationarity in Time Series Data (0) | 2021.07.21 |
Chapter 14. Use and Remove Seasonality (0) | 2021.07.21 |
Chapter 13. Use and Remove Trends (0) | 2021.07.21 |
Chapter 12. Decompose Time Series Data (0) | 2021.07.12 |