使用tbats预测每周数据

时间:2017-03-21 15:30:53

标签: r plot time-series data-mining forecasting

所以这是我的数据data 数据从2016年7月26日开始,到2017年3月10日结束 那2个问题: 它是否正确 ?使用tbats?每周季节性? 我还希望预测的数据看起来像初始数据,但如图所示,这不是我的情况我该怎么做? 这就是我所拥有的,这里也是代码

enter image description here

我执行了这些命令,最后使用tbts预测

来获取
      data.raw=read.csv(file=file.choose(),header=TRUE,sep=";",row.names=NULL)%>%
      mutate(date.re = as.POSIXct(date, format = "%d/%m/%Y"))
      complete.dates <- range(data.raw$date.re)
      dates.seq <- seq(complete.dates[1], complete.dates[2], by = "week")
      series <- data.frame(sale.week = week(dates.seq),sale.month =    month(dates.seq), sale.year = year(dates.seq))

      data.post <- data.raw %>%
      mutate(sale.week = week(date.re),sale.month = month(date.re),  sale.year = year(date.re)) %>%
      select(Quantite, sale.week,sale.month, sale.year) %>%
      group_by(sale.week,sale.month, sale.year) %>%
       summarize_all(funs(sum(.))) %>%
      right_join(series) %>%
      replace_na(list(Quantite = 0))

      data2=data.post[,4]
      sensor <- ts(data2,frequency=52)
      fit <- tbats(sensor)
      fc <- forecast(fit)
      plot(fc)

提前谢谢

1 个答案:

答案 0 :(得分:0)

您正确拟合并正确预测。但是,您正在错误地指定季节性。

为了达到每周季节性,你很可能想要使用

removeQueueNames

要理解这一点,你可以阅读它here.但基本上归结为你在同一天再次下降之前有多少次观察。因此,如果您每周有7天的数据,那么您的频率应为7.如果您每周只有5天的数据,那么您的频率应为5。

tbats的一个好处是你可以有两个季节性时期。您可以尝试以下方式指定每周和每年的季节性:

sensor <- ts(data2,frequency=7)

另一种选择是使用ARIMA。您只能使用ARIMA的一个季节性时期。你想要每周使用一次。使用ARIMA还允许您包括假期等指标,您可能会看到异常大或小的销售额。如果您希望它们与正常趋势不同,您也可以在假期前的几天使用指标。

我已经做了一些每周季节性活动并且使用ARIMA运气最好主要是因为你可以包括其他协变量。

您可能需要考虑的其他事项是检查异常值。您可以使用library(forecast) sensor <- msts(data2, seasonal.periods=c(7,365.25)) 包中的tsoutliers()执行此操作。而且,有时您可以通过转换数据获得更好的结果。所以也要考虑一下。

有关详细信息,您可能需要阅读一些关于时间序列的内容。 This is an excellent book with many examples in R.