首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >确定最佳预测模型

确定最佳预测模型
EN

Stack Overflow用户
提问于 2014-06-07 15:18:37
回答 1查看 132关注 0票数 0

我试图预测一些时间序列数据,我已经使用了三种不同类型的模型来预测。现在,我已经记下了每个系列的模型的性能,这是一个独特的标识。数据格式如下:

代码语言:javascript
复制
ID MAPE_Model_Residual MAPE_Validation_Residual Diff_Residual
1    8355_0_32167            83.26487                 77.86192    5.40295030
2    8355_0_32168            93.44941                 93.51703    0.06761914
3    8355_0_32169            93.46655                 93.52344    0.05688714
4 8355_3936_32170            88.94154                 84.96923    3.97231385
5 8355_3937_32170            74.37984                 83.19228    8.81243847
6 8355_3940_32170            74.06081                 52.38760   21.67321223

  MAPE_Model_Fitted MAPE_Validation_Fitted Diff_Fitted MAPE_Model_Arima MAPE_Validation_Arima
          81.87216               74.91174  6.96041639         83.96876              80.19690
          93.36049               93.33518  0.02530898         92.93121              90.73525
         93.37859               93.33369  0.04489972         92.91448              90.74218
         88.24597               85.42486  2.82111289         88.69834              83.08940
          74.43546               83.19509  8.75962941         73.69333              74.74214
6          73.77239               52.97098 20.80140874         75.56103              63.57248

  Diff_Arima
   3.771864
   2.195963
   2.172300
   5.608939
   1.048811
  11.988552

模型的精度、交叉验证精度和差异有三种模型.我想确定一个与唯一的id对应的模型,它具有最高的精度和最低的差值。就像一个小例子

代码语言:javascript
复制
Model1                Model2           Model3

M1_2 M1_diff M2_1 M2_2 M2_diff M3_1 M3_2 M3_diff

A 55.2 60.8  5.6    66.7  69.8  3.1     58.5 60.3  1.8

B 56.8 55.4  1.4    62.8  63.9  1.1   65.7 69.8  4.1

C 52.3 54.3  2.0    53.8  55.9  1.1   56.7 57.9  1.2

我必须找出哪种型号1,2,3最适合A,B,C。标准是Mi_1和Mi_2最高,Mi_diff最低。就像id B一样,它可能是第二种模式。我不能想出任何通用的算法来做这件事。数据相当大,几乎有1000个唯一的ids,而且不可能是唯一的,我在想,可能有一些简单的解决方案,我没有得到。有人能帮忙吗?我用R来计算。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-07 16:14:55

您可以计算一个score函数,它将三个值组合在一起,然后选择最大分数的模型(通过id)。由于您的所有值都是正的,所以作为一个得分函数,我将采用以下一个:

代码语言:javascript
复制
 score = product(acc_1,acc_2)/diff

在此,我将如何进行:

首先,我以长格式重新塑造数据(更容易通过(id,model )进行):

代码语言:javascript
复制
library(plyr)
library(reshape2)
melted  <- melt(dat)
melted$model <- sub('_.*','',melted$variable)
head(melted)
# id variable value model
# 1  A     M1_1  55.2    M1
# 2  B     M1_1  56.8    M1
# 3  C     M1_1  52.3    M1
# 4  A     M1_2  60.8    M1
# 5  B     M1_2  55.4    M1
# 6  C     M1_2  54.3    M1

然后,对于每个(id,模型),我计算分数:

代码语言:javascript
复制
ddply(melted,.(id,model),summarise,
      score = prod(value[!grepl('diff',variable)])/ value[grepl('diff',variable)])


# id model     score
# 1  A    M1  599.3143
# 2  A    M2 1501.8258
# 3  A    M3 1959.7500
# 4  B    M1 2247.6571
# 5  B    M2 3648.1091
# 6  B    M3 1118.5024
# 7  C    M1 1419.9450
# 8  C    M2 2734.0182
# 9  C    M3 2735.7750

最后,对于每个id,我选择了使分数最大化的模型:

代码语言:javascript
复制
ddply(scored,.(id),summarise,model = model[which.max(score)])

#   id model
# 1  A    M3
# 2  B    M2
# 3  C    M3
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24098657

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档