如何从Prophet中提取季节性趋势

7

我一直在使用Facebook的Prophet,到目前为止它已经产生了一些很好的结果。

查看文档和谷歌搜索后,似乎没有一种自动提取模型中季节性趋势作为dataframe或dict的方法,例如:

weekly_trends = { 1 : monday_trend, 2 : tuesday_trend, ... , 7 : sunday_trend } 

yearly_trends = { 1 : day_1_trend, 2 : day_2_trend, ... , 365 : day_365_trend } 

目前我可以通过更加手动的方式提取这些内容,但我想知道是否有更优雅的方法?


你更手动的方式是什么? - Rick
仅通过对整个日历年进行过滤,为我提供一张将日子编号映射到相应季节组件的地图。然后对每个星期进行相同的操作,只需选择一年中的第一个完整星期,然后我就有了将日子编号映射到每周组件的地图。 - Matt
3个回答

9

训练模型数据框包含所有季节性、趋势和假期信息。- 看一下它的列。以下是在Python中查看其内容的方法:

m = Prophet()
m.fit(ts)
future = m.make_future_dataframe()
forecast = m.predict(future)
print(forecast['weekly'])

从该系列中选择任意7天,即可确定每个工作日的附加周调整比例。年度季节性也是如此。

谢谢你的回答,这基本上就是我现在正在做的,但它并不像我希望的那样优雅,也许他们将来会修复这个问题。 - Matt
抱歉,我错过了您对OP的评论。 - Alexandr Matsenov

1
您可以在模型拟合期间指定每日、每周和每年的季节性。
    m = Prophet(changepoint_prior_scale=0.01, weekly_seasonality=False, holidays=holidays, interval_width=0.90, yearly_seasonality=True, mcmc_samples=300)
    m.add_seasonality(name='weekly', period=7, fourier_order=3)
    m.add_seasonality(name='monthly', period=30.5, fourier_order=8)
    m.fit(X)

1
这并不实际允许您提取季节性值,它只是使用这些季节性组件进行建模。我对优雅地提取出这些组件感兴趣,而不是对建模本身感兴趣。 - Matt

0

在拟合模型时,Prophet将保存一个包含季节性的OrderedDict

您可以使用 m.seasonalities进行检索。

例如:

m = Prophet()
m.fit(ts)
print(m.seasonalities)

将输出类似于这样的内容:

{
  "yearly": {
    "period": 365.25,
    "fourier_order": 10,
    "prior_scale": 10,
    "mode": "additive",
    "condition_name": null
  },
  "weekly": {
    "period": 7,
    "fourier_order": 3,
    "prior_scale": 10,
    "mode": "additive",
    "condition_name": null
  }
}

然后您可以迭代键(年度、每周、每日),并获取期间数量或其他有用信息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接