R:通过列组应用 Holt Winters 来预测时间序列

     2023-03-25     90

关键词:

【中文标题】R:通过列组应用 Holt Winters 来预测时间序列【英文标题】:R: applying Holt Winters by group of columns to forecast time series 【发布时间】:2017-06-02 10:57:30 【问题描述】:

我有一个频率 = 7 的时间序列数据,如下所示:

combo_1_daily_mini <-   read.table(header=TRUE, text="
region_1    region_2    region_3    date    incidents
USA CA  San Francisco   1/1/15  37
USA CA  San Francisco   1/2/15  30
USA CA  San Francisco   1/3/15  31
USA CA  San Francisco   1/4/15  33
USA CA  San Francisco   1/5/15  28
USA CA  San Francisco   1/6/15  33
USA CA  San Francisco   1/7/15  39
USA PA  Pittsburg   1/1/15  38
USA PA  Pittsburg   1/2/15  35
USA PA  Pittsburg   1/3/15  37
USA PA  Pittsburg   1/4/15  33
USA PA  Pittsburg   1/5/15  30
USA PA  Pittsburg   1/6/15  33
USA PA  Pittsburg   1/7/15  25
Greece  Macedonia   Skopje  1/1/15  29
Greece  Macedonia   Skopje  1/2/15  37
Greece  Macedonia   Skopje  1/3/15  28
Greece  Macedonia   Skopje  1/4/15  38
Greece  Macedonia   Skopje  1/5/15  27
Greece  Macedonia   Skopje  1/6/15  38
Greece  Macedonia   Skopje  1/7/15  39
Italy   Trentino    Trento  1/1/15  35
Italy   Trentino    Trento  1/2/15  31
Italy   Trentino    Trento  1/3/15  34
Italy   Trentino    Trento  1/4/15  34
Italy   Trentino    Trento  1/5/15  26
Italy   Trentino    Trento  1/6/15  33
Italy   Trentino    Trento  1/7/15  27
", sep = "\t")

dput(trst,  control = "all")
structure(list(region_1 = structure(c(3L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L), .Label = c("Greece", "Italy", "USA"), class = "factor"), 
region_2 = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 3L, 3L, 
3L, 3L, 3L, 3L, 3L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 4L, 4L, 4L, 
4L, 4L, 4L, 4L), .Label = c("CA", "Macedonia", "PA", "Trentino"
), class = "factor"), region_3 = structure(c(2L, 2L, 2L, 
2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 4L, 4L), .Label = c("Pittsburg", 
"San Francisco", "Skopje", "Trento"), class = "factor"), 
date = structure(c(1L, 2L, 3L, 4L, 5L, 6L, 7L, 1L, 2L, 3L, 
4L, 5L, 6L, 7L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 1L, 2L, 3L, 4L, 
5L, 6L, 7L), .Label = c("1/1/15", "1/2/15", "1/3/15", "1/4/15", 
"1/5/15", "1/6/15", "1/7/15"), class = "factor"), incidents = c(37L, 
30L, 31L, 33L, 28L, 33L, 39L, 38L, 35L, 37L, 33L, 30L, 33L, 
25L, 29L, 37L, 28L, 38L, 27L, 38L, 39L, 35L, 31L, 34L, 34L, 
26L, 33L, 27L)), .Names = c("region_1", "region_2", "region_3", 
"date", "incidents"), class = "data.frame", row.names = c(NA, 
-28L))

region_1,region_2,region_3 的每一组都有自己的季节性和趋势。

我正在尝试根据历史数据预测未来一周的事件数量。我有 32 个不同国家从 2015 年 1 月 1 日到 2015 年 6 月 30 日的 6 个月历史数据。每个国家都有很多 region_2 和 region_3。我总共有 32,356 个独特的 region_1、region_2、region_3 时间序列。

我有 2 个问题/问题:

    问题 - 我面临的问题是,当我在 by() 函数中应用 Holt Winters 时,我收到了警告,但我无法理解它们。对理解它们的任何帮助都非常有帮助

以下是我的代码:

ts_fun <- function(x)
  ts_y <- ts(x, frequency = 7)


hw_fun <- function(x)
    ts_y <- ts_fun(x)
    ts_h <- HoltWinters(ts_y) 
 

combo_1_daily_mini$region_1 <- as.factor(combo_1_daily_mini$region_1)
combo_1_daily_mini$region_2 <- as.factor(combo_1_daily_mini$region_2)
combo_1_daily_mini$region_3 <- as.factor(combo_1_daily_mini$region_3)

combo_1_ts <- by(combo_1_daily_mini,list(combo_1_daily_mini$region_1,
                                     combo_1_daily_mini$region_2, 
                                     combo_1_daily_mini$region_3
                                     ),ts_fun)

combo_1_hw <- by(combo_1_daily_mini,list(combo_1_daily_mini$region_1,
                                     combo_1_daily_mini$region_2, 
                                     combo_1_daily_mini$region_3
                                     ),hw_fun)

警告信息:

1: In HoltWinters(ts_y) :
 optimization difficulties: ERROR: ABNORMAL_TERMINATION_IN_LNSRCH
2: In HoltWinters(ts_y) :
 optimization difficulties: ERROR: ABNORMAL_TERMINATION_IN_LNSRCH
3: In HoltWinters(ts_y) :
 optimization difficulties: ERROR: ABNORMAL_TERMINATION_IN_LNSRCH
4: In HoltWinters(ts_y) :
 optimization difficulties: ERROR: ABNORMAL_TERMINATION_IN_LNSRCH

    问题 - 我通过多列应用函数的方式是否正确?有没有更好的办法?我基本上希望通过 region_1、region_2、region_3 获得下周的预测数字。我打算为此使用以下代码:

    nw_forecast

我可以应用 Holt Winters 函数,并且还可以在我按每个 region_1、region_2、region_3 组合创建时间序列数据时进行预测。此方法不可行,因为我的数据集中有 32,356 个唯一组合。

任何帮助表示赞赏 谢谢

【问题讨论】:

我建议您考虑通过dput 发布样本数据的输出;我尝试通过使用read.delim(pipe(“pbpaste”))sep 作为制表符或空格来阅读它,但事实证明它很麻烦。 @Konrad,您现在可以检查一下是否可以阅读。谢谢! 如果您查看this discussion,它提供了有关如何通过 SO 共享数据的有用建议。 @Konrad - 更新了数据。感谢您的链接! @r2evans - 添加了 dput。希望这会有所帮助... :( 【参考方案1】:

您可以看看 Hyndman 组的 tsibble package 和 fable fable:

library(tsibble)
library(fable)
combo_1_daily_mini %>%
  mutate(date = lubridate::mdy(date)) %>% 
  as_tsibble(index = date, key = c('region_1', 'region_2', 'region_3')) -> combo_1_daily_mini

combo_1_daily_mini %>% 
  model(
    ets = ETS(box_cox(incidents, 0.3))) %>%
  forecast %>% 
  autoplot(combo_1_daily_mini)

【讨论】:

在 Python 中使用 Holt-Winters 进行预测

】在Python中使用Holt-Winters进行预测【英文标题】:UsingHolt-WintersforforecastinginPython【发布时间】:2011-08-1712:49:03【问题描述】:我一直在尝试使用thisimplementationoftheHolt-Wintersalgorithm在Python中进行时间序列预测,但遇到了障碍......基... 查看详情

无法使用 statsmodels 库实现 Holt-Winters 方法

】无法使用statsmodels库实现Holt-Winters方法【英文标题】:UnabletoimplementHolt-WintersMethodusingstatsmodelslibrary【发布时间】:2018-10-2501:08:57【问题描述】:我每天都有一个月的数据。它每天捕获cpuutilization数据。我想产生一些预测结果。... 查看详情

holt-winters模型原理分析

Holt-Winters模型原理分析及代码实现(python)from:https://blog.csdn.net/u010665216/article/details/78051192引言最近实验室老师让我去预测景区内代步车辆的投放量,于是乎,本着“一心一意地输出年富力强的劳动力”这份初心,我就屁颠屁颠... 查看详情

基于holt-winters方法对资源进行预测(代码片段)

文章目录  Holt-Winters方法是一种时间序列分析和预报方法。该方法对含有线性趋势和周期波动的非平稳序列适用,利用指数平滑法(EMA)让模型参数不断适应非平稳序列的变化,并对未来趋势进行短期预报。现... 查看详情

时间序列挖掘-预测算法-三次指数平滑法(holt-winters)——三次指数平滑算法可以很好的保存时间序列数据的趋势和季节性信息

...的走势,三次指数平滑(Triple/ThreeOrderExponentialSmoothing,Holt-Winters)算法可以很好的进行时间序列的预测。 时间序列数据一般 查看详情

holt-winters模型原理分析及代码实现(python)(代码片段)

...”这份初心,我就屁颠屁颠地去找资料,然后发现了Holt-Winters模型,感觉这个模型可以有,于是就去研究一番,并总结成这篇博客了。原理分析移动平均(Thesimplemovingaverage(SMA))直观上,最简单的平滑时间序列的方法是实现一个... 查看详情

时间序列hw

....cnblogs.com/sylvanas2012/p/4328861.html写得特别好,推荐阅读Holt-Winters: 三阶指数平滑 Holt-Winters的思想是把数据分解成三个成分:平均水平(level),趋势(trend),周期性(seasonality)。R里面一个简单的函数stl就可以把原始数... 查看详情

r语言时间序列(timeseries)分析实战:霍尔特指数holt‘s平滑法预测

R语言时间序列(timeseries)分析实战:霍尔特指数Holt\'s平滑法预测目录 查看详情

推荐收藏基于趋势和季节性的时间序列预测实战(代码片段)

...这些模式对时间序列进行分解。最后使用一个被称为Holt-Winters季节方法的预 查看详情

r语言时间序列应用(decomposeholt-winters初步)

对于明显的周期性时间序列,可以使用decompose函数对数据进行分解成季节部分、趋势部分、随机部分三种。decompose函数有两种type,即“additive”以及“multiplicative”两种,还有一个fliter选项,表示是否加入线性滤波,一般fliter选... 查看详情

如何在 Python 中拟合 Holt Winter 的模型并预测未来的结果?

】如何在Python中拟合HoltWinter的模型并预测未来的结果?【英文标题】:HowtofitHoltWinter’smodelandforecastfutureoutcomesinPython?【发布时间】:2021-12-0500:56:09【问题描述】:我有一个包含4年销售额的数据集,并试图预测未来五年的销售额... 查看详情

时间序列预测 - ARIMA/ARIMAX 与 R 中的每日数据

】时间序列预测-ARIMA/ARIMAX与R中的每日数据【英文标题】:Timeseriesforecast-ARIMA/ARIMAXwithdailydatainR【发布时间】:2019-08-1017:46:36【问题描述】:entercodehere我正在做一个项目来分析和预测客户销售和收入的时间序列。为了准确性,我... 查看详情

使用 r 将布尔列组合成 1

】使用r将布尔列组合成1【英文标题】:Combiningbooleancolumnsinto1usingr【发布时间】:2020-05-0114:00:41【问题描述】:我有一个看起来像这样的数据集:X0.501_0.499.1X0.400_0.600X0.400_0.600.1X1.OctanolX1.PropanolX2.ButanolX2.propanolX1.isobutanol1-39.91-63.62... 查看详情

r语言实战回归

...解释变量,可以描述两者的关系,也可以生成一个等式,通过解释变量来预测响应变量。回归分析的各种变体回归类型用途简单线性用一个量化的解释变量预测一个量化的响应变量多项式用一个量化的解释变量预测一个量 查看详情

是否可以通过 vba 按钮启动闪亮的应用程序?

】是否可以通过vba按钮启动闪亮的应用程序?【英文标题】:Isitpossibletostartshinyappsviavba-button?【发布时间】:2022-01-0320:38:14【问题描述】:由于我的一个客户想要使用完全自动化的excel/tm1解决方案来处理集成的R预测程序,我正... 查看详情

sklearn:应用相同的缩放来训练和预测管道

...】:2018-05-0318:43:37【问题描述】:我正在编写一个函数,通过k折交叉验证选择最佳模型。在函数内部,我有一个管道缩放数据寻找决策树回归器的最佳参数那我想用模型来预测一些目标值。为此,我必须应用在网格搜索期间应... 查看详情

r语言编写自定义函数评估回归模型预测变量的相对重要性(relativeimportance)通过在所有可能的子模型中添加一个预测变量而获得的r方的平均增加评估预测变量的重要度并通过点图可视化

R语言编写自定义函数、评估回归模型预测变量的相对重要性(Relativeimportance)、通过在所有可能的子模型中添加一个预测变量而获得的R方的平均增加、来评估预测变量的重要程度、并通过点图可视化特征重要度 目录 查看详情

如何通过遍历行来预测数据框中的每一行?

】如何通过遍历行来预测数据框中的每一行?【英文标题】:howcanIpredictforeachrowinthedataframebyiteratingthroughtherows?【发布时间】:2021-07-2419:57:15【问题描述】:我构建了一个BERT模型,现在我有了一个块,可以很好地对文本列中的每... 查看详情