评估时间序列预测性能


9

我有一个在几个时间变量上训练过的动态朴素贝叶斯模型。模型的输出是P(Event) @ t+1每个的预测t

P(Event)vs 的曲线time如下图所示。在此图中,黑线代表P(Event)我的模型所预测的;的水平红线表示事件发生的先验概率; 和垂直虚线表示在时间序列中的(5个)的事件发生。

理想情况下,我希望P(Event)在观察任何事件之前先看到预测的峰值,并且在没有事件发生的希望时保持接近零。

P(事件)与时间图

我希望能够报告模型(黑线)在预测事件发生方面的表现。与我的模型进行比较的一个明显的候选对象是事件的先验概率(红线),如果将其用作预测因子,则将为所有对象预测相同的概率值t

实现这种比较的最佳形式方法是什么?

PS:我目前正在按照以下代码使用(直观)评分,其中总体评分较低表明预测性能更好。我发现用这个评分实际上很难超越以前的评分:

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

您认为您可以施加有意义的损失函数吗?有没有办法说出您通过正确/错误地猜测而获得/损失了多少?
詹姆斯

我想到了这一点,但是我不想发明一个任意损失函数,可以根据需要调整该函数以实现低或高性能。
朱巴卜2014年

Answers:


1

您可以创建ROC曲线。对于介于0和1之间的给定p值,您可以预测,如果预测的概率大于p,则事件将发生。然后,您可以计算TPR和FPR,从而在ROC曲线上得到一个点。通过在零和一之间改变p,您可以获得整个曲线。例如,对于p <0.005,基于先验的预测器将始终说该事件将始终发生。

有关更多信息,请参见:

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


只是要补充一点,AUC可用作这些曲线的摘要统计量。
猜想
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.