Ocena wydajności prognozowania szeregów czasowych

9

Mam Dynamiczny Naiwny model Bayesa wyszkolony w zakresie kilku zmiennych czasowych. Dane wyjściowe modelu są prognozami P(Event) @ t+1szacowanymi dla każdego t.

Fabuła P(Event)versus timejest taka, jak podano na poniższym rysunku. Na tym rysunku czarna linia przedstawia P(Event)zgodnie z przewidywaniami mojego modelu; pozioma linia czerwona oznacza uprzedniej prawdopodobieństwo zdarzenia zdarzeń; a kropkowane pionowe linie reprezentują (pięć) zdarzeń w szeregach czasowych.

Idealnie, chciałbym zobaczyć przewidywany P(Event)szczyt przed obserwacją jakichkolwiek zdarzeń i pozostać blisko zera, gdy nie ma żadnych perspektyw na zdarzenie.

Wykres P (zdarzenie) a czas

Chcę móc raportować, jak dobrze mój model (czarna linia) radzi sobie w przewidywaniu zdarzeń. Oczywistym kandydatem do porównania mojego modelu jest wcześniejsze prawdopodobieństwo zdarzenia (czerwona linia), które - jeśli zastosowane jako predyktor - przewidziałoby dla wszystkich tę samą wartość prawdopodobieństwa t.

Jaka jest najlepsza formalna metoda osiągnięcia tego porównania?

PS: Obecnie używam (intuicyjnej) punktacji, jak zakodowano poniżej, gdzie ogólny niższy wynik wskazuje na lepszą wydajność prognozowania. Przekonałem się, że tak trudno jest pokonać przeora z tym wynikiem:

# Get prediction performance
model_score = 0; prior_score=0; 

for t in range(len(timeSeries)):

   if(timeSeries[t]== event):  # event has happened
      cur_model_score = 1- prob_prediction[t]; 
      cur_prior_score = 1 - prior
   else: # no event
      cur_model_score = prob_prediction[t] - 0;
      cur_prior_score = prior - 0;

   model_score = model_score + abs(cur_model_score);
   prior_score = prior_score + abs(cur_prior_score);
Zhubarb
źródło
Czy uważasz, że możesz narzucić znaczącą funkcję straty? Czy istnieje sposób na określenie, ile zyskujesz / tracisz, zgadując poprawnie / niepoprawnie?
James,
Myślałem o tym, ale nie chcę wymyślać funkcji arbitralnej utraty, którą mogę dostosować, aby osiągnąć niską lub wysoką wydajność, jak chcę.
Zhubarb

Odpowiedzi:

1

Możesz utworzyć krzywą ROC. Dla danej wartości p pomiędzy 0 a 1 przewidujesz, że zdarzenie nastąpi, jeśli przewidywane prawdopodobieństwo jest większe niż p. Następnie obliczasz TPR i FPR, co daje ci jeden punkt na krzywej ROC. Zmieniając p od zera do jednego, otrzymujesz całą krzywą. Np. Dla p <0,005 predyktor zawsze będzie mówił, że zdarzenie nastąpi przez cały czas.

Aby uzyskać więcej informacji, zobacz:

http://en.wikipedia.org/wiki/Receiver_operating_characteristic

James
źródło
Wystarczy dodać, że AUC jest dostępne jako statystyka podsumowująca dla tych krzywych.
przypuszcza