Obliczanie dokładności prognozy


9

Używamy STL (implementacja R) do prognozowania danych szeregów czasowych.

Codziennie przeprowadzamy codzienne prognozy. Chcielibyśmy porównać wartości prognozowane z wartościami rzeczywistymi i zidentyfikować średnie odchylenie. Na przykład uruchomiliśmy prognozę na jutro i otrzymaliśmy punkty prognozy, chcielibyśmy porównać te punkty prognozy z rzeczywistymi danymi, które otrzymamy jutro. Zdaję sobie sprawę, że wartości prognoz i rzeczywiste dane mogą się nie zgadzać przez większość czasu, dlatego jest to jeden z powodów, dla których chcielibyśmy śledzić, jak dokładni jesteśmy każdego dnia.

Teraz próbujemy ustalić, jakie jest najlepsze podejście do rozwiązania tego problemu? wszelkie wskazówki dotyczące pomocy będą mile widziane.

Spojrzałem na pytanie o dokładność pomiaru prognozy , ale wydaje się, że jest to związane z porównywaniem modeli, a nie z obliczaniem dokładności z rzeczywistymi wartościami.

Patrzyłem na implementację funkcji dokładności w R , ale myliłem się z dwoma pytaniami:

1) Czy będzie działać na danych rzeczywistych a danych prognozowanych, ponieważ większość samouczka mówi „dane testowe” a „dane prognozowane”

2) Wydaje się, że funkcją dokładności jest tablica wartości, a nie% odchylenia.


1
Aby uzyskać świetną odpowiedź, musisz zadać właściwe pytanie - a to może być frustrujące. Każdy chce rządzić światem, a to wymaga wiedzy. Gdybym miał doskonałą wiedzę na temat jutrzejszych akcji, ale miałbym ją dzisiaj, mógłbym zarobić mnóstwo pieniędzy / władzy / okazji / chwały / itp. Gdybym patrzył na twój problem, chciałbym zobaczyć histogram (lub eCDF) błędu predykcyjnego. Chciałbym „zakłócić” dane wejściowe prognozy i spojrzeć na ich średnią i zmienność oraz porównać błąd z tymi. Musisz zrozumieć swój błąd, aby go naprawić.
EngrStudent

1
Dla niewtajemniczonych czym jest STL?
shadowtalker,

@EngrStudent: „Musisz zrozumieć swój błąd, aby go naprawić” - w tym oświadczeniu mamy dwie części. Próbuję znaleźć możliwe podejścia do pierwszej części. Metodologia, którą wybiorę, pomoże mi w wyborze strategii dla części 2.
kosa,

1
Oznacza to nie to samo, co zachowanie systemu. Odchylenie standardowe nie jest tym samym, co zachowanie systemu. Te dwie miary to statystyki podsumowujące zmierzone zachowanie systemu. Błąd nie jest dokładnością. Błąd nie jest niepewnością. Te dwie miary to statystyki podsumowujące dla błędu analogicznego do średniej i odchylenia standardowego. Podobnie jak istnieje wiele nieskończoności miar zachowań systemu, istnieje wiele nieskończoności miar zachowań błędów. Jaka jest twoja rubryka jak zmierzyć dobry sposób myślenia o błędzie?
EngrStudent

1
@Nambari - witamy w świecie „mądrych”. Początkiem wiedzy jest wiedzieć, że nic nie wiesz - być studentem. Staram się zawsze uczyć sam i staram się być poprawiany przez każdego, kto mówi prawdę. Jeśli grasz za pomocą narzędzia Eureqa i wypróbujesz odpowiednie przykładowe dane, zarówno każdą ogólną formę „wyrażenia docelowego”, jak i każdą „miarę błędów”, zaczniesz znać tę głęboką, głęboką rzecz. Nie mam dobrej odpowiedzi. L'Hospital (alias L'Hopital) sformułował pierwsze wyrażenie najmniej kwadratowe w 1696 roku. Dobry początek to przypadek użycia - w którym przychodzi umysł. Co to jest?
EngrStudent

Odpowiedzi:


13

Istnieje wiele różnych sposobów pomiaru dokładności prognozy, a accuracy()funkcja z pakietu prognozy dla R generuje kilka z nich. Z twojego komentarza na temat „% odchylenia” brzmi, jakbyś chciał zastosować średni bezwzględny błąd procentowy, który jest jednym z mierników zapewnionych przez accuracy(). Poniżej omówiono najczęstsze miary dokładności prognoz . Możesz zastanowić się, czy MAPE jest najbardziej odpowiednią miarą dla twojego problemu, czy też jedna z pozostałych miar jest lepsza.

Ta accuracy()funkcja działa na rzeczywistych danych. „Dane testowe” to dane, które nie zostały wykorzystane do zbudowania prognoz. Czasami są one dostępne, ale nie są używane podczas obliczania prognoz (klasyczny podział danych na zestawy szkoleniowe i testowe). W innych sytuacjach wszystkie dostępne dane są wykorzystywane do obliczania prognoz, a następnie musisz poczekać, aż pojawią się pewne przyszłe obserwacje, które można wykorzystać jako dane testowe.

Więc jeśli fjest wektorem prognoz i xjest wektorem obserwacji odpowiadającym tym samym czasom, to

accuracy(f,x)

zrobi co chcesz.


„Miary oparte na błędach procentowych mają tę wadę, że są nieskończone lub niezdefiniowane, jeśli yi = 0 dla dowolnego i w danym okresie, i mają ekstremalne wartości, gdy jakiekolwiek yi jest bliskie zeru.” Myślę, że będzie to problem w moim przypadku, ponieważ wiele rzeczywistych przypadków może być ZEROWANYCH. Myślę, że oblicz MAE i zmień liczbę wyników na „procent”. Czy ma sens?
kosa

Jakoś moja notatka z podziękowaniami minęła, naprawdę dziękuję za poświęcony czas Dr Hyndman!
kosa

2

Po pierwsze, wyjaśnijmy, że istnieją pojęcia dokładności i precyzji. Dokładność zwykle wiąże się z błędem, tj. Systematycznym odchylaniem prognozy od rzeczywistych. Precyzja zwykle wiąże się z wariancją błędów prognozy. Coś takiego:ZAdodourzadoy=mi(fa)-y vs. P.rmidojasjaon=V.zar[fa-y]. Kiedy więc wspomniałeś o „dokładności” w swoim poście, wiedziałeś o tym rozróżnieniu?

Po drugie, istnieją zintegrowane miary jakości prognozy, takie jak M.S.fami=1nja=1n(faja-yja)2), gdzie faja i yjasą prognozy i aktualności. Istnieją statystyki dla tego pomiaru, takie jak test Chow dla stałości parametrów.


Dziękuję za odpowiedź! Tak, w tej chwili nie martwię się o precyzję. Chcę tylko poznać dokładność, „odchylenie prognozy od rzeczywistych”. Nie martwię się o uruchomienie kilku modeli, obliczenie błędów prognoz i wybranie najlepszego modelu. Moim jedynym celem jest ustalenie odchylenia między wartościami rzeczywistymi a prognozowanymi. Nasz model jest tutaj stały. Niezależnie od tego, czy nasz model jest dobry czy zły dla zestawu danych, potrzebujemy tylko liczby odchyleń. To pytanie nie jest związane z wyborem modelu dostrajania parametrów (lub). Mam nadzieję, że teraz jestem czysty. Daj mi znać, jeśli czegoś brakuje.
kosa

@Nambari, jeśli potrzebujesz „liczby odchyleń”, dlaczego nie użyjesz liczby odchyleń? Wykonaj pętlę nad przewidywaniami, porównaj je z rzeczywistymi wartościami i policz liczbę przypadków, w których przewidywania różnią się od rzeczywistych wartości.
Rzym.

2

Robiłem to w R, oto mój kod dla moich danych zarówno dla danych w próbie, jak i poza próbką:

#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")

mam nadzieję, że to trochę pomoże. jeśli chcesz mój pełny kod, który kiedyś uruchamiałem, zapytaj, ponieważ jest to bardzo proste


1

Krótka odpowiedź: aby ocenić jakość swoich prognoz, użyj dokładnie tej samej miary, którą zastosowałeś podczas szkolenia (dopasowania) swojego modelu.

Długa odpowiedź:

Aby wybrać miarę dokładności swoich prognoz, najpierw musisz wiedzieć, jak interpretujesz swoje prognozy. Innymi słowy, co tak naprawdę podajesz jako „prognozę”? Czy to średnia wartość? Mediana? Najbardziej prawdopodobna wartość? Odpowiedź na to pytanie będzie jednoznacznie identyfikować miarę dokładności prognozy. Jeśli przewidujesz średnią, musisz użyć pierwiastka odchylenia średniej kwadratowej jako miary dokładności prognozy. Jeśli przewidujesz medianę, musisz zastosować średnie bezwzględne odchylenie jako miarę dokładności.

Opowiem trochę o tym punkcie. Załóżmy, że dokonujesz prognozy / prognozy na jutro. Załóżmy również, że dla każdej wartości, którą możesz zaobserwować jutro, masz odpowiednie prawdopodobieństwo, że zostanie zaobserwowane. Na przykład wiesz, że możesz zaobserwować 1 z prawdopodobieństwem 0,03, 2 z prawdopodobieństwem 0,07, 3 z prawdopodobieństwem 0,11 i tak dalej. Mamy więc rozkład prawdopodobieństwa dla różnych wartości. Mając ten rozkład, możesz obliczyć różne właściwości i podać je jako „prognozy”. Możesz obliczyć średnią i podać ją jako prognozę na jutro. Alternatywnie możesz użyć mediany jako prognozy. Możesz także znaleźć najbardziej prawdopodobną wartość i podać ją jako prognozę na jutro.

Jeśli użyjesz wartości średniej jako prognozy, to pytanie „jak zmierzyć dokładność mojej prognozy” musi zostać zastąpione przez „jaka jest miara dokładności średniej”, a odpowiedź brzmi: „odchylenie średniej kwadratowej średniej między rzeczywiste wartości i prognozy ". Jeśli używasz mediany jako prognozy, musisz użyć średniego bezwzględnego odchylenia.

Może się zdarzyć, że nie wiesz, czy używasz mediany, wredności czy czegoś innego. Aby dowiedzieć się, czego faktycznie używasz jako prognozy, musisz wiedzieć, jaką miarę starasz się zminimalizować podczas treningu. Jeśli spróbujesz znaleźć parametry modelu, które minimalizują odchylenie średniej kwadratowej odchylenia między przewidywaniami a wartościami docelowymi na podstawie danych treningowych, twoje przewidywania należy traktować jako średnie. Jeśli zminimalizujesz odchylenia bezwzględne, trenujesz swój model, aby zapewnić mediany i tak dalej.

DODANY

Chciałbym podkreślić jedną rzecz. Jak wspomniałem powyżej, ważne jest zachowanie tej samej miary dokładności w „dopasowaniu” i w „przewidywaniu”. Ponadto chciałbym powiedzieć, że masz absolutną swobodę w wyborze swoich środków. Nie ma „lepszych” ani „gorszych” miar. Miarę należy ustalić na podstawie sposobu, w jaki Ty (lub Twój klient) korzystasz z Twoich prognoz. Na przykład może być bardzo ważne (dla ciebie lub twojego klienta), aby mieć dokładne dopasowanie, a jeśli go nie masz, nie odgrywa żadnej roli, jeśli różnica między rzeczywistą a przewidywaną wartością jest duża lub mała. W innych przypadkach różnica ta odgrywa pewną rolę. Różnica 1 jest lepsza niż różnica 2. W niektórych przypadkach różnica 2 jest 2 razy gorsza niż różnica 1. W innych przypadkach różnica równa 2 jest 100 razy gorsza niż różnica równa 1. Możesz również wyobrazić sobie przypadki egzotyczne, w których musisz wygenerować wartość inną niż obserwacje. Tak więc miarą jakości generowanych liczb może być cokolwiek chcesz, w zależności od tego, czego potrzebujesz. Ważne jest, aby używać tej samej miary do treningu (dopasowania) i oceny prognoz.


(Związane z twoim komentarzem do innej odpowiedzi) W większości przypadków przewidywania różnią się od rzeczywistych wartości, nie sądzę, aby w żadnym przypadku udało nam się uzyskać idealne dopasowanie. Podejście, które zasugerowałeś, może nie być idealne, ponieważ otrzymamy 100%. Ale myślę, aby uzyskać różnicę między faktycznym a przewidywanym procentem, który jest niczym innym jak MAPE. Sprawa, którą się zajmujemy, ma bardzo duże szanse na uzyskanie rzeczywistej ZERO bardzo często, z powodu okoliczności, w których to przypadku MAPE może nie być najlepszą opcją, ponieważ procent będzie NIESKOŃCZONY. Tu utknąłem.
kosa

Wiem, że MAPE jest zasadniczo tym, czego chcę, ale mój zestaw danych ma ten niefortunny przypadek, w którym PRAWDZIWE wartości w szeregu mogą być ZEROWANE bardzo często.
kosa
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.