【问题标题】:Applying different time series models (ARIMA, HOLT-WINTER) on the basis of MAPE在 MAPE 的基础上应用不同的时间序列模型(ARIMA、HOLT-WINTER)
【发布时间】:2016-07-09 13:20:08
【问题描述】:

我有一个时间序列对象calc_visit_ts我想为每个模型应用基于 MAPE 值的最佳拟合时间序列模型。 我面临的问题是 MAPE 值 HOLT-WINTER 乘法模型无法以与另一个相同的方式计算模型(因为与 summary(visit_model_Hw_M) 相比,它给了我不同的 MAPE 值)。

#### AUTO-ARIMA
visit_model_Arima <- auto.arima(calc_visit_ts)
# summary(visit_model_Arima)

#### HOLT-WINTER ADDITIVE
visit_model_Hw_A <- hw(calc_visit_ts,h=monthly_prediction,seasonal = "additive")
# summary(visit_model_Hw_A)

#### HOLT-WINTER MULTIPLICATIVE
visit_model_Hw_M <- hw(calc_visit_ts,h=monthly_prediction,seasonal = "multiplicative")
# summary(visit_model_Hw_M)


#### Calculating MAPE on models for best suit
model_Mape<- c( MAPE_model(visit_model_Arima)
                ,MAPE_model(visit_model_Hw_A))
                #,MAPE_model(visit_model_Hw_M))  this is not accurate

model_Mape=na.omit(model_Mape)
token<-which(min(model_Mape)==model_Mape)

if(length(token)>0)
{
  if(token==1)
    {visit_model<-visit_model_Arima
  }else if(token==2)
    {visit_model<-visit_model_Hw_A
  }else if(token==3)
    {visit_model<-visit_model_Hw_M
  }else 
  {
    ##EXCEPTION HANDLING  
  }
}

summary(visit_model)

这是我用来在模型上执行 MAPE 计算的函数 -

MAPE_model <- function(visit_model) {
 #CHECK FOR ZERO CONDIITION  if(visit_model$x!=0)
 mape = mean(abs(visit_model$residuals)/visit_model$x)
 return(mape)
}
时间序列的

数据 -

calc_visit_ts
     Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
2012          35  53  65  60  64  49  63  55  59  66
2013  62  54  77  67  84  62  82  65  59  67  60  67
2014  73  75  55  76  93  96  89  76  88  65  83  82
2015  76  72  75  94  91  83  72  73  80  83  81  81
2016  97  91  90  80 101  98  

dput(calc_visit_ts)
structure(c(35, 53, 65, 60, 64, 49, 63, 55, 59, 66, 62, 54, 77, 
67, 84, 62, 82, 65, 59, 67, 60, 67, 73, 75, 55, 76, 93, 96, 89, 
76, 88, 65, 83, 82, 76, 72, 75, 94, 91, 83, 72, 73, 80, 83, 81, 
81, 97, 91, 90, 80, 101, 98), .Tsp = c(2012.16666666667, 2016.41666666667, 
12), class = "ts")

准确表达我的意思-

Holt-Winter 加性图

Holt-Winter 乘法图

问题summary(visit_model_Hw_M)MAPE = 9.075097MAPE_model(visit_model_Hw_M) 给出0.001273087,因为乘法模型拟合曲线(数据点),因此使用visit_model_Hw_M$residuals 不是计算 MAPE 的合适方法(因为函数试图拟合曲线)。

有没有办法从摘要本身获取 HOLT-WINTER 乘法的 MAPE 值?或者一种正确估计 HOLT-WINTER 乘法模型的 MAPE 值的方法?

【问题讨论】:

  • 请使用dput提供数据对象或使用内置数据重新构建问题,以便您拥有MCVE stackoverflow.com/help/mcve
  • 添加了数据。抱歉有点赶时间。
  • 谢谢!不用担心。顺便说一句,如果您使用dput,那么我们可以将其复制到我们的 R 会话中,即dput(calc_visit_ts)。有时我们可以从剪贴板加载数据,但在缺少这样的数据点时就不行了。

标签: r time-series forecasting holtwinters


【解决方案1】:

经过深思熟虑的数据和反复试验,我发现 ARIMAHolt-Winter 模型的 MAPE 计算方式不同 -

MAPE_model <- function(visit_model,model_type) {
 if(model_type == "ARIMA")
  mape = mean(abs(visit_model$residuals)/visit_model$x)
 if(model_type == "HW")
  mape = mean(abs(visit_model$x - visit_model$fitted)/visit_model$x)
 else
  mape = -1  #Something
 return(mape)
}

虽然visit_model$x - visit_model$fitted 符号在规范上等同于ARIMAHolt-Winter(additive) 中的visit_model$residuals,但Holt-Winter(multiplicative) 模型中的情况并非如此。因此,model_type 的区别

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-13
    • 1970-01-01
    • 2013-05-01
    • 2021-12-05
    • 2011-05-01
    • 1970-01-01
    • 2016-06-27
    • 1970-01-01
    相关资源
    最近更新 更多