예측 정확도 계산


9

시계열 데이터 예측에 STL (R 구현)을 사용하고 있습니다.

매일 우리는 매일 예측을 실행합니다. 예측 값을 실제 값과 비교하고 평균 편차를 식별하려고합니다. 예를 들어 내일에 대한 예측을 실행하고 예측 지점을 확보 한 후이 예측 지점을 내일 얻을 실제 데이터와 비교하려고합니다. 예측 값과 실제 데이터가 대부분 일치하지 않을 수 있다는 것을 알고 있습니다. 이것이 우리가 매일 얼마나 정확한지 추적하려는 이유 중 하나입니다.

이제 우리는이 문제를 해결하는 가장 좋은 방법이 무엇인지 확인하려고 노력하고 있습니까? 모든 도움을 주시면 감사하겠습니다.

예측 정확도 질문 측정을 보았지만 정확도를 실제 값으로 계산하는 대신 모델을 비교하는 것과 관련이있는 것 같습니다.

R의 정확도 함수 구현을 살펴 보았지만 두 가지 질문과 혼동되었습니다.

1) 대부분의 학습서에서 "테스트 데이터"와 "예측 데이터"라고 말하는 실제 데이터와 예측 데이터에 대해 작동합니까?

2) 정확도 기능은 편차의 %가 아닌 값의 배열입니다.


1
좋은 답변을 얻으려면 올바른 질문을해야합니다. 모두가 세상을 지배하기를 원하며 그것은 예견이 필요합니다. 내일 주식에 대한 완벽한 지식이 있었지만 오늘 가지고 있다면 막대한 돈 / 힘 / 기회 / 영광 / 등을 만들 수 있습니다. 문제를보고 있다면 예측 오류의 히스토그램 (또는 eCDF)을보고 싶습니다. 예측의 입력을 "지터"하고 평균과 변동을보고 오류를 이들과 비교하려고합니다. 수정하려면 오류를 이해해야합니다.
EngrStudent

1
시작되지 않은 사람들에게 STL이란 무엇입니까?
shadowtalker

@EngrStudent : "오류를 수정하려면 오류를 이해해야합니다"-이 문장 자체에는 두 부분이 있습니다. 첫 번째 섹션 자체에 가능한 접근 방식을 찾으려고합니다. 내가 선택한 방법론은 2 부 전략을 선택하는 데 도움이 될 것이다.
kosa

1
평균은 시스템의 동작 방식과 다릅니다. 표준 편차는 시스템의 동작 방식과 동일하지 않으며 측정 된 시스템 동작에 대한 요약 통계입니다. 오류는 정확성이 아닙니다. 오류는 불확실성이 아닙니다. 이 두 측정 값은 평균 및 표준 편차와 유사한 오류에 대한 요약 통계입니다. 시스템 행동 측정의 많은 무한대가있는 것처럼 오류 행동 측정의 많은 무한대가 있습니다. 당신의 루 브릭은 무엇입니까? 오류에 대해 생각하는 좋은 방법을 어떻게 측정합니까?
EngrStudent

1
@ 난 바리- "현명한"세계에 오신 것을 환영합니다. 지식의 시작은 당신이 아무것도 모른다는 것을 아는 것입니다-학생이 되십시오. 나는 항상 나 자신을 배우려고 노력하고 진실을 말하는 사람이 바로 고칠 수 있도록 노력합니다. Eureqa 도구를 사용하여 모든 일반 형태의 "대상 표현"과 모든 "오류 메트릭"모두에 대해 적절한 샘플 데이터를 사용하면이 깊은 것을 알기 시작할 것입니다. 좋은 대답이 없습니다. L' Hospital (일명 L' Hopital)은 1696 년에 가장 작은 제곱 표현을 공식화했습니다. 좋은 시작은 유스 케이스입니다. 마음이 들어오는 곳입니다. 그게 뭐죠?
EngrStudent

답변:


13

예측 정확도를 측정하는 방법에는 여러 가지가 있으며 accuracy()R 출력에 대한 예측 패키지 의 기능 중 몇 가지가 있습니다. "편차의 %"에 대한 귀하의 의견에 따르면에서 제공하는 측정 중 하나 인 평균 절대 백분율 오류를 사용하려는 것 같습니다 accuracy(). 예측 정확도의 가장 일반적인 측정 방법은 여기에서 설명합니다 . MAPE가 문제에 가장 적합한 방법인지 또는 다른 방법 중 하나가 더 나은지 생각하고 싶을 수도 있습니다.

accuracy()기능은 실제 데이터에서 작동합니다. "테스트 데이터"는 예측을 구성하는 데 사용되지 않은 데이터입니다. 때로는 예측이 계산 될 때 사용 가능하지만 사용되지 않는 경우도 있습니다 (전통적인 데이터를 교육 및 테스트 세트로 분할). 다른 상황에서는 사용 가능한 모든 데이터를 사용하여 예측을 계산 한 다음 테스트 데이터로 사용할 미래의 관측치가있을 때까지 기다려야합니다.

따라서 f예측 x벡터이고 같은 시간에 해당하는 관측 벡터 인 경우

accuracy(f,x)

당신이 원하는 것을 할 것입니다.


"백분율 오차에 기초한 측정은 관심 기간 중 임의의 i에 대해 yi가 0이면 무한하거나 정의되지 않은 단점이 있으며, 임의의 yi가 0에 가까울 때 극한의 값을 갖는다"고 말했다. 실제로 많은 사례가 ZERO 일 수 있기 때문에 이것이 내 경우에는 문제가 될 것이라고 생각합니다. MAE를 계산하고 결과 수를 "백분율"로 변경하려고합니다. 말이 되나요?
kosa

어떻게 든 내 고맙다는 메모를 보내 주셔서 감사합니다. 시간을 내 주셔서 감사합니다. Hyndman!
kosa

2

먼저, 정확성과 정밀성의 개념이 있음을 분명히하자. 정확도는 일반적으로 편차, 즉 실제와 예측의 체계적인 편차와 관련이 있습니다. 정밀도는 일반적으로 예측 오차의 분산과 관련이 있습니다. 이 같은:아르 자형와이=이자형(에프)와이 vs. 아르 자형이자형나는에스나는영형=V아르 자형[에프와이]. 따라서 게시물에서 "정확도"를 언급 할 때 차이점을 알고 있습니까?

둘째, 다음과 같은 예측 품질 측정 방법이 통합되어 있습니다. 미디엄에스에프이자형=1나는=1(에프나는와이나는)2, 어디 에프나는와이나는예측과 실제입니다. 매개 변수 불변성에 대한 Chow 테스트와 같은이 측정에 대한 통계가 있습니다.


답변 주셔서 감사합니다! 예, 지금은 정밀도에 대해 걱정하지 않습니다. "실제와 예측의 편차"정확도를 알고 싶습니다. 몇 가지 모델을 실행하여 예측 오류를 계산하고 최상의 모델을 선택하는 것에 대해 걱정하지 않습니다. 내 유일한 목표는 실제 값과 예측 값의 편차를 찾는 것입니다. 우리의 모델은 여기서 일정합니다. 모델이 데이터 세트에 좋든 나쁘 든 상관없이 편차 수만 필요합니다. 이 질문은 파라미터 미세 조정 (또는) 모델 선택과 관련이 없습니다. 나는 지금 분명해지기를 바랍니다. 빠진 것이 있으면 알려주세요.
kosa

@Nambari, "편차 수"가 필요한 경우 왜 편차 수를 사용하지 않습니까? 예측을 반복하여 실제 값과 비교하고 예측이 실제 값과 다른 경우의 수를 계산하십시오.
로마

2

나는 R에서 이것을하고있다. 샘플 및 샘플 외부 데이터에 대한 내 데이터 코드는 다음과 같습니다.

#accuracy testing for out-of-sample sample#

M<-#data#
deltaT<-#set observations per year,1/4 for quarterly, 1/12 for monthly
horiz<-#set amount of forecasts required
startY<-c(#,#) #set start date
N<-head(M,-horiz)
Nu<-log(Nu)
Nu<-ts(Nu,deltat=deltaT,start=startY)

#Run your forecasting method#
##My forecasting method is arima##

N<-#data#
N<-ts(N,deltat=deltaT,start=startY)
N<-tail(N,horiz)
fitted<-ts(append(fitted(Arimab), fArimab$mean[1]), deltat=deltaT, start = startY) #where Arimab is the ARIMA model and fArimab<-forecast(Arimab, h=horiz*2, simulate= TRUE, fan=TRUE)
N<-log(N)
fitted<-head(fitted,length(N))
error<-N-fitted
percenterror<-100*error/N
plus<-N+fitted
rmse<-function(error)
  sqrt(mean(error^2))
mae<-function(error)
  mean(abs(error))
mape<-function(percenterror)
  mean(abs(percenterror))
smape<-function(error,plus)
  mean(200*abs(error)/(plus))
mse<-function(error)
  mean(error^2)
me<-function(error)
  mean(error)
mpe<-function(percenterror)
  mean(percenterror)
accuracy<-matrix(c("rmse","mae","mape","smape","mse","me","mpe",(round(rmse(error),digits=3)),(round(mae(error),digits=3)),(round(mape(percenterror),digits=3)),(round(smape(error,plus),digits=3)),(round(mse(error),digits=3)),(round(me(error),digits=3)),(round(mpe(percenterror),digits=3))),ncol=2,byrow=FALSE)
View(accuracy,title="Accuracy of ARIMA out sample")

#Accuracy testing for the in sample

M<-#data#
deltaT<-#set observations per year,1/4 for quarterly, 1/12 for monthly
horiz<-#set amount of forecasts required
startY<-c(#,#) #set start date
Nu<-log(Nu)
Nu<-ts(Nu,deltat=deltaT,start=startY)
#run your forecasting method#
fitted<-ts(append(fitted(Arimab), fArimab$mean[1]), deltat=deltaT, start = startY)
N<-exp(Nu)
fitted<-exp(fitted)
fitted<-head(fitted,length(N))
error<-N-fitted
percenterror<-100*error/N
plus<-N+fitted
rmse<-function(error)
  sqrt(mean(error^2))
mae<-function(error)
  mean(abs(error))
mape<-function(percenterror)
  mean(abs(percenterror))
smape<-function(error,plus)
  mean(200*abs(error)/(plus))
mse<-function(error)
  mean(error^2)
me<-function(error)
  mean(error)
mpe<-function(percenterror)
  mean(percenterror)
accuracy<-matrix(c("rmse","mae","mape","smape","mse","me","mpe",(round(rmse(error),digits=3)),(round(mae(error),digits=3)),(round(mape(percenterror),digits=3)),(round(smape(error,plus),digits=3)),(round(mse(error),digits=3)),(round(me(error),digits=3)),(round(mpe(percenterror),digits=3))),ncol=2,byrow=FALSE)
View(accuracy,title="Accuracy of ARIMA in sample")

이것이 조금 도움이되기를 바랍니다. 내 전체 코드를 원한다면 이것을 실행하는 데 사용하십시오. 이것은 매우 기본이므로 요청하십시오.


1

짧은 대답 : 예측의 품질을 평가하려면 모델의 훈련 (피팅)에 사용한 것과 정확히 동일한 척도를 사용하십시오.

긴 대답 :

예측 정확도에 대한 측정 값을 선택하려면 먼저 예측을 해석하는 방법을 알아야합니다. 다시 말해, 실제로 "예측"으로 무엇을 제공합니까? 그것은 가치를 의미 하는가? 중앙값? 가장 가능성있는 가치? 이 질문에 대한 답은 예측 정확도의 측정 값을 고유하게 식별합니다. 평균을 예측하는 경우 근사 평균 제곱 편차를 예측 정확도의 척도로 사용해야합니다. 중앙값을 예측하는 경우 평균 절대 편차를 정확도 측정 값으로 사용해야합니다.

이 시점에서 조금 자세히 설명하겠습니다. 내일에 대한 예측 / 예측을 가정합니다. 또한 내일 관찰 할 수있는 모든 값에 대해 해당 확률을 관찰해야한다고 가정하겠습니다. 예를 들어 확률이 0.03 인 1, 확률이 0.07 인 2, 확률이 0.11 인 3 등을 관찰 할 수 있습니다. 따라서 다른 값에 대한 확률 분포가 있습니다. 이 분포를 사용하면 다른 속성을 계산하여 "예측"으로 제공 할 수 있습니다. 평균을 계산하여 내일의 예측으로 제공 할 수 있습니다. 또는 중간 값을 예측으로 사용할 수 있습니다. 또한 가장 가능성있는 가치를 찾아 내일의 예측으로 제시 할 수 있습니다.

평균값을 예측으로 사용하는 경우 "내 예측의 정확도를 측정하는 방법"이라는 질문이 "평균의 정확도를 측정하는 방법"으로 바뀌어야하며 그 대답은 "평균의 평균 제곱 편차"입니다. 실제 가치와 예측 ". 중앙값을 예측으로 사용하는 경우 평균 절대 편차를 사용해야합니다.

중간 값이나 의미 또는 다른 것을 사용하는지 모르는 것일 수 있습니다. 실제로 예측으로 사용하는 것을 찾으려면 훈련에서 최소화하려는 측정 값을 알아야합니다. 예측과 훈련 데이터의 목표 값 사이의 제곱 평균 제곱 편차를 최소화하는 모형의 모수를 찾으려면 예측을 평균으로 처리해야합니다. 절대 편차를 최소화하는 경우 중앙값 등을 제공하도록 모델을 훈련시킵니다.

추가

한 가지만 강조하고 싶습니다. 위에서 언급했듯이 "적합"과 "예측"에서 동일한 정확도를 유지하는 것이 중요합니다. 그 외에도 나는 당신이 당신의 측정 값을 선택할 때 절대적으로 자유 롭다고 말하고 싶습니다. "더 나은"또는 "더 나쁜"조치는 없습니다. 측정 값은 사용자 (또는 클라이언트)가 예측을 사용하는 방식에 따라 결정되어야합니다. 예를 들어, 정확하게 일치하는 것이 매우 중요 할 수 있으며 (실제로 일치하지 않는 경우 실제 값과 예측 값의 차이가 크거나 작은 경우) 아무런 역할을하지 않습니다. 다른 경우에는이 차이가 중요한 역할을합니다. 1의 차이는 2의 차이보다 낫습니다. 경우에 따라 2의 차이는 1의 차이보다 2 배 더 나쁩니다. 다른 경우에는 2와 같은 차이가 1과 같은 차이보다 100 배 더 나쁩니다. 관측치와 다른 값을 생성해야하는 이국적인 경우도 상상할 수 있습니다. 따라서 생성하는 숫자의 품질 측정은 필요한 것에 따라 원하는대로 할 수 있습니다. 중요한 것은 훈련 (적합)과 예측 평가에 동일한 척도를 사용하는 것입니다.


(다른 답변에 대한 귀하의 의견과 관련이 있습니다) 대부분의 경우 예측은 실제 값과 다르므로 어떤 경우에도 우리는 완벽하게 맞을 수 있다고 생각하지 않습니다. 따라서 귀하가 제안한 접근법은 100 %를 얻으므로 이상적이지 않을 수 있습니다. 그러나 내가 생각하는 것은 실제와 예측의 백분율 차이를 얻는 것입니다. 우리가 취급하는 사례는 상황에 따라 ZERO를 실제로 얻을 확률이 매우 높으며,이 경우 비율이 INFINITY이므로 MAPE가 최선의 선택이 아닐 수 있습니다. 여기가 내가 붙어있는 곳입니다.
kosa

MAPE가 내가 원하는 원칙이라는 것을 알고 있지만 내 데이터 세트에는 일련의 REAL 값이 매우 자주 제로가 될 수있는 불행한 경우가 있습니다.
kosa
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.