生成 hts 对象的分层预测问题

Hierarchical Forecasting problem generating the hts object

您好,我想按照 Hyndman Forecasting 书中第 10 章中的描述进行分层预测:https://otexts.com/fpp2/

我的问题是,为了生成这种类型的预测(特别是自下而上的方法),我需要生成一个 hts 对象,它是一个矩阵。例如:

如果我有这样的数据框: Image of example of dataframe prior to hts object

我需要将它转换成这样的矩阵: Image of Matrix that I need 对于这个矩阵,每一行都是一个时间单位(可能是天、月等)。

我的问题是我的数据框是这样的: Image of Problem with dataframe

一栏是日期,另一栏是我需要预测销售额的类别。问题是这样的:对于 supermarket=4、id_product=187 和 id_label=a,系统在第 21 天和第 23 天记录了移动,但在第 22 天没有任何反应,这意味着我需要 sales=0在那一天,或者换句话说,像这样的一行: Image of Row missing

如何生成创建 hts 对象所需的矩阵,以 0 创建缺失的行? (我有数千行缺失,所以手工完成将是一场噩梦)

这是制作可重现示例的示例:

date=c("2019-03-22","2019-03-23","2019-04-24","2019-03-25")
id_supermarket=c(4,4,2,2)
id_product=c(187,187,189,190)
id_label=c("a","a","c","d")
sales=c(21,22,23,24)

df=as.data.frame(cbind(date,id_supermarket,id_product,id_label,sales))

提前致谢。

我建议您使用 fable 包而不是 hts。它更新且更易于使用。这是您的数据示例。

图书馆(tsibble) 图书馆(寓言)

# Create tsibble
df <- tibble(
  date = lubridate::ymd(c("2019-03-22", "2019-03-23", "2019-03-24", "2019-03-25")),
  id_supermarket = as.character(c(4, 4, 2, 2)),
  id_product = c(187, 187, 189, 190),
  id_label = c("a", "a", "c", "d"),
  sales = c(21, 22, 23, 24)
) %>%
  as_tsibble(index = date, key = c(id_supermarket, id_product, id_label)) %>%
  fill_gaps(.full = TRUE)

# Forecast with reconciliation
fc <- df %>%
  aggregate_key(id_supermarket * id_label, sales = sum(sales, na.rm = TRUE)) %>%
  model(
    arima = ARIMA(sales)
  ) %>%
  reconcile(
    arima = min_trace(arima)
  ) %>%
  forecast(h = "5 days")

fc
#> # A fable: 45 x 6 [1D]
#> # Key:     id_supermarket, id_label, .model [9]
#>    id_supermarket id_label .model date       sales .distribution
#>    <chr>          <chr>    <chr>  <date>     <dbl> <dist>       
#>  1 2              c        arima  2019-03-26  5.82 N(5.8, 44)   
#>  2 2              c        arima  2019-03-27  5.82 N(5.8, 44)   
#>  3 2              c        arima  2019-03-28  5.82 N(5.8, 44)   
#>  4 2              c        arima  2019-03-29  5.82 N(5.8, 44)   
#>  5 2              c        arima  2019-03-30  5.82 N(5.8, 44)   
#>  6 2              d        arima  2019-03-26  6.34 N(6.3, 46)   
#>  7 2              d        arima  2019-03-27  6.34 N(6.3, 46)   
#>  8 2              d        arima  2019-03-28  6.34 N(6.3, 46)   
#>  9 2              d        arima  2019-03-29  6.34 N(6.3, 46)   
#> 10 2              d        arima  2019-03-30  6.34 N(6.3, 46)   
#> # … with 35 more rows

reprex package (v0.3.0)

于 2020-02-01 创建