Évaluation des performances de prédiction de séries chronologiques

9

J'ai un modèle dynamique de Naive Bayes formé sur quelques variables temporelles. La sortie du modèle est la prédiction de P(Event) @ t+1, estimée à chacun t.

L'intrigue de P(Event)versus timeest indiquée dans la figure ci-dessous. Dans cette figure, la ligne noire représente P(Event)comme prévu par mon modèle; la ligne rouge horizontale représente la probabilité antérieure que l'événement se produise; et les lignes verticales en pointillés représentent les (cinq) événements survenus sur la série chronologique.

Idéalement, je souhaite voir le P(Event)pic prévu avant d'observer les événements et rester proche de zéro lorsqu'il n'y a aucune perspective d'événement.

P (événement) en fonction du graphique temporel

Je veux pouvoir signaler la performance de mon modèle (la ligne noire) pour prédire les événements. Un candidat évident pour comparer mon modèle est la probabilité d'événement antérieure (la ligne rouge) qui, si elle est utilisée comme prédicteur, prédirait la même valeur de probabilité pour tous t.

Quelle est la meilleure méthode formelle pour réaliser cette comparaison?

PS: J'utilise actuellement le score (intuitif) tel que codé ci-dessous, où un score global plus bas indique de meilleures performances de prédiction. J'ai trouvé qu'il est en fait assez difficile de battre le précédent avec ce score:

# 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
la source
Pensez-vous que vous pourriez imposer une fonction de perte significative? Existe-t-il un moyen de dire combien vous gagnez / perdez en devinant correctement / incorrectement?
James
J'y ai pensé, mais je ne veux pas inventer une fonction de perte arbitraire que je puisse modifier pour obtenir des performances faibles ou élevées comme je le souhaite.
Zhubarb

Réponses:

1

Vous pouvez créer une courbe ROC. Pour une valeur donnée de p comprise entre 0 et 1, vous prédisez que l'événement va se produire si la probabilité prédite est supérieure à p. Ensuite, vous calculez TPR et FPR qui vous donne un seul point sur la courbe ROC. En faisant varier p entre zéro et un, vous obtenez la courbe entière. Par exemple, pour p <0,005, le prédicteur basé sur les précédents dira toujours que l'événement se produira à tout moment.

Pour en savoir plus, voir:

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

James
la source
Juste pour ajouter que l'AUC est disponible comme statistique récapitulative pour ces courbes.
conjectures