1

我之前使用 Prophet 来预测单个指标,但现在我需要预测到 2022 年,使用大约 3 年的历史数据并包括多个组。我宁愿不要为每种可能性创建 1000 多个预测,所以希望我可以在 Prophet 中做到这一点。

我已经阅读了 Stackoverflow 上的几个适用于单个组的解决方案,但我有 3 个不同的组要预测。

下面我创建了一个示例表,其中虚拟 Y 数据显示了数据的格式:(注意:可以并且将会是零值,但如果它会对输出产生负面影响,我可以排除它们)

ds 成立 类别 渠道 是的
2020-01-01 中学 静止的 直接的 27
2020-01-01 中学 静止的 付费搜索 31
2020-01-01 中学 艺术 直接的 47
2020-01-01 中学 艺术 付费搜索 0
2020-01-01 大学 静止的 直接的 60
2020-01-01 大学 静止的 付费搜索 35
2020-01-01 大学 艺术 直接的 54
2020-01-01 大学 艺术 付费搜索 15
2020-01-02 中学 静止的 直接的 27
2020-01-02 中学 静止的 付费搜索 31
2020-01-02 中学 艺术 直接的 47
2020-01-02 中学 艺术 付费搜索 0
2020-01-02 大学 静止的 直接的 60
2020-01-02 大学 静止的 付费搜索 35
2020-01-02 大学 艺术 直接的 54
2020-01-02 大学 艺术 付费搜索 15
2020-01-03 中学 静止的 直接的 27
2020-01-03 中学 静止的 付费搜索 31
2020-01-03 中学 艺术 直接的 47
2020-01-03 中学 艺术 付费搜索 0
2020-01-03 大学 静止的 直接的 60
2020-01-03 大学 静止的 付费搜索 35
2020-01-03 大学 艺术 直接的 54
2020-01-03 大学 艺术 付费搜索 15
... ... ... ... ...

以下代码适用于单个组,但我想将其扩展为包括所有组。

d1 <- df %>%
  nest(-establishment) %>%
  mutate(m = map(data, prophet)) %>%
  mutate(future = map(m, make_future_dataframe, period = 730)) %>%
  mutate(forecast = map2(m, future, predict))

d <- d1 %>%
  unnest(forecast) %>%
  select(ds, establishmentShortcut, yhat)

如果有人可以推荐解决方案,我将不胜感激。

4

1 回答 1

1

这就是 fable 包的设计目的。有一个用于处理先知模型的寓言扩展名为fable.prophet. 这是一个使用与您的数据相同的结构的示例。

library(fable.prophet)
library(dplyr)
library(tibble)
library(tsibble)

df <- tibble(
    ds = rep(seq(as.Date("2020-01-01"), by="1 day", length=50), rep(8,50)),
    establishment = rep(rep(c("High School","College"), c(4,4)), 50),
    category = rep(rep(c("Stationery","Arts"), c(2,2)), 100),
    channel = rep(c("Direct","Paid Search"), 200),
    y = sample(0:100, 400, replace=TRUE)
  ) %>%
  as_tsibble(index=ds, key=c("establishment","category","channel"))

fc <- df %>%
  model(
    prophet = prophet(y),
  ) %>%
  forecast(h=10)

reprex 包(v2.0.1)于 2021-08-07 创建

您可以更换包装prophet()中的任何其他型号。fable有关详细信息,请参阅https://otexts.com/fpp3/

于 2021-08-07T01:16:35.693 回答