如何使用 tsibble 和 fable 指定服务时间的间隔或频率?

Hei*_*N3r 6 r time-series forecasting tsibble fable-r

我想预测在服务时间内进入商店的顾客数量。我有每小时的数据

  • 星期一到星期五
  • 8:00 至 18:00

因此,我认为我的时间序列实际上是有规律的,但在某种意义上是非典型的,因为我每天有 10 个小时每周有 5 天

我可以通过将非服务时间设置为零来对这个常规的 24/7 时间序列进行建模,但我发现这样做效率低下而且也不正确,因为时间并没有丢失。相反,它们并不存在。

使用旧的ts框架我能够明确指定

myTS <- ts(x, frequency = 10)
Run Code Online (Sandbox Code Playgroud)

然而,在新的tsibble/fable框架内这是不可能的。它检测每小时的数据,预计每天 24 小时,而不是 10 小时。每个后续函数都会提醒我隐含的时间间隙。手动覆盖interval-Attribute 有效:

> attr(ts, "interval") <- new_interval(hour = 10)
> has_gaps(ts)
# A tibble: 1 x 1
.gaps
<lgl>
1 FALSE
Run Code Online (Sandbox Code Playgroud)

但对建模没有影响:

model(ts,
      snaive = SNAIVE(customers ~ lag("week")))
Run Code Online (Sandbox Code Playgroud)

我仍然收到相同的错误消息:

snaive [1] 遇到 1 个错误。数据包含隐式时间间隙。您应该检查数据并tsibble::fill_gaps()根据需要使用将隐式间隙转换为显式缺失值。

任何帮助,将不胜感激。

小智 2

这个问题实际上对应于这个gh问题。据我所知,没有 R 包允许用户构建自定义计划,例如指定某些日内和日期。有几个软件包提供了一些特定的日历(例如营业日期),但没有一个提供设置日内的解决方案。Tsibble 将获得calendar当这样的软件包可用时,但目前不支持这一点。

正如您所说,这是每小时的数据。因此,数据间隔应为 1 小时,而不是 10 小时。不过,ts() frequency是季节性时期,每天10个小时,用于建模。