【问题标题】:forecasting multiples products data [closed]预测倍数产品数据[关闭]
【发布时间】:2017-08-08 17:01:13
【问题描述】:

我想预测接下来的 5 个订单以及每个订单中 3 个产品的数量。

我是使用rtimeseries 的初学者,我看到了使用arima 的示例,但它们仅用于测量一件事,而不是像我的示例中那样测量多个产品。

我应该使用 arima 吗? 我该怎么办?

对不起,我的英语不好。提前谢谢你。

dateordrer,product1,product2,product3
12/01/2012,2565,3254,635
25/01/2012,2270,3254,670
01/03/2012,2000,785,0
05/05/2012,300,3254,750
26/06/2012,3340,0,540
30/06/2012,0,3254,0
21/06/2012,3360,3356,830
01/07/2012,2470,3456,884
03/07/2012,3680,3554,944
05/07/2012,2817,3854,0
09/07/2012,4210,4254,32
09/08/2012,0,3254,1108
13/09/2012,4560,5210,952
25/09/2012,4452,4256,1143
31/09/2012,5090,5469,199
25/11/2012,5100,5569,0
10/12/2012,5440,5789,1323
11/12/2012,5528,5426,1350

【问题讨论】:

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


    【解决方案1】:

    你的问题很笼统,所以只能笼统地回答。此外,这个问题更多地与预测理论有关,而不是 R。 我会给你两个指示让你开始......

    1. 您似乎需要进行一些预处理,即:您的时间间隔是多少?你的基本时间单位是什么? (周?月?)。您应该根据该时间单位聚合数据。对于这些类型的操作,您可以使用 tidyrlubridate 包。这是我整理后的数据集示例:

      data.raw <- read_csv("data1.csv") %>%
                  mutate(date.re = as.POSIXct(dateordrer, format = "%d/%m/%Y"))
      complete.dates <- range(data.raw$date.re)
      dates.seq <- seq(complete.dates[1], complete.dates[2], by = "month")
      

      系列

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

    看起来像这样:

            sale.month  sale.year   product1    product2    product3
            1           2012        4835        6508        1305
            2           2012        0           0           0
            3           2012        2000        785         0
            4           2012        0           0           0
            etc...
    

    看到第 2 个月和第 4 个月您没有数据(最初),因此它们显示为 0。 请注意,预处理不能掉以轻心,我使用月份作为基本单位,但这可能与您的目标不正确或相关。您甚至可以在继续之后对其进行修改,并尝试查看不同的聚合是否会产生更好的结果。

    1. 只有在预处理之后才能转向预测。如果三个产品是独立的,则可以独立预测(例如使用 Arima / Holt-Winters / 任何其他模型 * 3 次)。但是,您拥有三个可能相互关联的产品这一事实将我们引向分层时间序列(包hts)。当各种产品之间存在统计关系时,此包中的函数hts() 能够最佳拟合预测模型。例如,当某种产品与另一种产品(补充产品)一起购买时,或者当您缺货并导致另一种产品(替代产品)时。

    由于对于如此广泛的主题而言,这远非自成一体,因此您最好的下一个举措是查看以下在线书籍:

    Forecasting: principles and practice

    海德曼和阿萨纳索普洛斯。当我开始使用时间序列时,我阅读了它。这是一本非常好的书。具体来说,对于多个时间序列,您应该涵盖以下章节:

    9.4 Forecasting hierarchical or grouped time series

    确保您还阅读了该书的第 7 章(在移至 9.4 之前)。

    【讨论】:

    • 非常感谢您的帮助,当我尝试执行 dates.seq
    • 我需要一个可重现的示例来解决此错误,因为在前面的示例中,我的代码可以正常工作。从外观上看,您在seq 命令中使用的日期格式可能有问题。
    • 非常感谢。问题解决了,我只是有一个日期 31/09/2012,它从未真正存在过,所以我更改了它
    猜你喜欢
    • 1970-01-01
    • 2012-12-23
    • 1970-01-01
    • 1970-01-01
    • 2014-04-22
    • 2012-12-15
    • 1970-01-01
    • 1970-01-01
    • 2020-10-01
    相关资源
    最近更新 更多