4. Evaluation & Analysis : 예측 정확도 분석

NUGU OIL·2021년 1월 24일
0

개발일지

목록 보기
7/9

교차 검증을 통한 성능의 측정

예측 알고리즘의 overfitting을 막고 모델의 변동성을 줄이기 위해서는 교차 검증이 필요하다. 일반적으로 교차 검증을 하기 위해서는 아래와 같은 순서를 따른다.

1) 데이터를 training set과 test set으로 나눈다.

2) 모델을 테스트 한 후 테스트 성능을 기록한다.

3) 교차 검증의 매 단계마다 다른 파티션으로 위의 작업을 수행

4) 매 단계의 테스트 성능을 평균 계산을 통해 최종 성능 도출

fbprophet 라이브러리에서는 사용자의 편의를 위해 이러한 교차 검증의 과정을 자동으로 실행해 주는 함수(cross_validation)를 제공한다.

이를 위해서 우리는 과거의 데이터(우리가 컴퓨터에게 준 데이터)에서 컷오프 포인트를 선택하고, 각각의 컷오프 포인트에 대해서만 데이터를 사용하여 모델을 학습시키는 방법으로 수행된다. 그런 다음 예측 값을 실제 값과 비교한다.

이 교차 검증 절차는 cross_validation 함수를 사용하여 다양한 과거 cutoff 지점에 대해 자동으로 수행될 수 있다. cross_validation 함수의 결과값은 각각 시뮬레이션된 예측 날짜와 컷오프 날짜에 대해 실제 값 y와 샘플 외 예측 값 yhat를 갖는 데이터 프레임이다.

아래는 설명을 돕기 위한 그래프 예시이다.

←———> : training data(initial) ←———> : test data(horizon) cutoff point는 initial 과 horizon을 구분해 주는 날짜

특히 예측은 컷오프와 컷오프+지평선 사이(파란색으로 칠해진 지점)에 관측된 모든 지점에서 이루어진다.이제 이 dataframe은 yhat과 y사이의 error를 계산하는 데 사용된다.

앞서 설명한 바를 토대로 한 cross_validation 함수를 이용한 교차검증의 과정이다. (단, 'initial'을 설정할 때는 계절성, 및 주기를 모두 포함 할 수 있을 정도로 충분히 길어야 한다.) 우리는 initial을 60주로 주었고, 이를 통해 예측할 미래는 20주로 주었다.

from fbprophet.diagnostics import cross_validation
df_cv = cross_validation(model, initial='60 w', period='10 w', horizon = '20 w')
df_cv[['ds','yhat','y','cutoff']].head()

performance_metrics 패키지를 사용하여 성능 예측에 대한 유용한 통계(mse, rmse, mae, mape, mdape, coverage)를 계산할 수 있다.

from fbprophet.diagnostics import performance_metrics
df_p = performance_metrics(df_cv)
df_p.head()

MSE(mean squared error) 평균제곱오차

RMSE(root mean squared error) 평균 제곱근 오차

MAE(mean absolute error) 평균 절대 오차

MAPE(mean absolute percent error) 평균 절대 비율 오차

MDAPE(median absolute percent error) 중앙 절대 비율 오차

'plot_cross_validation_metric'은 앞서 'performance_metrics'를 통해 도출해 낸 여러 유용한 통계들(MSE, RMSE, MAE, MAPE, MDAPE)에 대해 시각화할 수 있다.

다음은 RMSE(평균 제곱근 오차)와 MAPE(평균 절대 비율 오차)를 그래프로 나타낸 것이다.

from fbprophet.plot import plot_cross_validation_metric
fig = plot_cross_validation_metric(df_cv, metric='rmse')

RMSE - 평균 제곱근 오차

MAPE - 평균 절대 비율 오차

우리 팀은 유가 정보의 예측을 위해 Prophet 라이브러리를 사용한 바 있다. 아래 사진은 다음은 우리가 오피넷에서 받아온 2015년 11월 첫째주부터 2020년 6월 첫째 주까지의 유가 데이터이다.

우리가 비교할 구간은 2020년 6월 둘째주부터 2020년 7월 첫째 주로, 왼쪽에는 우리가 도출해낸 예측 결과이며 오른쪽은 실제 가격이다.

예측된 유가


실제 유가

엑셀을 이용하여 실제 유가와 예측한 유가의 오차율을 구하였다.

오차율 = (|실제 값-측정값|) / (실제 값) * 100


오차율 4개의 평균을 구한 결과 실제 유가와 예측한 유가와의 오차율은 다음과 같다.

profile
SKT텔레콤 NUGU Speaker를 활용한 실시간으로 업데이트되는 가장 싼 주유소 정보를 제공하는 서비스

0개의 댓글

관련 채용 정보