如何告诉先知不要预测负值

Posted

技术标签:

【中文标题】如何告诉先知不要预测负值【英文标题】:How to tell prophet to not forecast negative values 【发布时间】:2018-01-27 21:58:16 【问题描述】:

在 R 中使用 facebooks 'Prophet' 包进行预测。想知道是否有办法使用它,使其不会预测负值?

谢谢!

【问题讨论】:

我不具体了解 Prophet,但通常使用时间序列建模,如果您有一个下限为 0 的连续度量,您可以在建模之前对其进行转换 - 例如,记录它 - - 对转换后的序列进行建模,生成预测,然后将这些预测反向转换为原始比例。 我删除了 [prophet] 标签 - 该标签与 Facebook Prophet 无关。 【参考方案1】:

在 Prophet 中,您可以通过将列绑定到示例数据框和转发日期列表来设置上限和下限,但这只会绑定分解模型的趋势部分。

要真正将所有最终估计值保持在 0 以上,您可以:

    相应地调整您的地板(通常不推荐)或 在拟合模型之前记录所有数据的日志,然后使用predictive_samples 查看您的后验分布。然后,您需要使用 exp() 将其转换回原始单位。

【讨论】:

【参考方案2】:

现在,R 中的prophet 提供了一个上限和下限,它告诉先知不要限制下限和上限。 floor 是最小值,cap 是最大值。

您可以参考此链接了解先知。

https://facebookincubator.github.io/prophet/docs/saturating_forecasts.html

【讨论】:

没找到那个参数@chunjin 有没有prophet(df, floor=0)之类的方式? 以下示例:#R 预测 【参考方案3】:

这在文档in this page中有解释。

简而言之,您应该使用“逻辑”而非“线性”增长。您必须设置上限(逻辑上可能的最大值),并且可以设置下限(如果不设置,则默认为零)。

假设您在 df 中有您的数据(带有日期的 ds 列和带有值的 y 列)。

你需要为过去和未来设定一个上限

(我正在使用文档中包含的 8.5 示例数字......该值每天都会发生变化,这显然应该设置为对您的情况有意义的东西)

您可以(但您不需要)设置最低值。

df$cap <- 8.5
m <- prophet(df, growth = 'logistic')
future <- make_future_dataframe(m, periods = 1826)
future$cap <- 8.5
#future$floor <- 1.5
fcst <- predict(m, future)
plot(m, fcst)

【讨论】:

以上是关于如何告诉先知不要预测负值的主要内容,如果未能解决你的问题,请参考以下文章

在 Spark 中使用 Pandas udf 与 Facebook 先知进行预测

Python Scikit-learn MultiOutput Regression - 在预测数值时强制执行下限

如何预测股票分析--长短期记忆网络(LSTM)

Prophet在R语言中进行时间序列数据预测

当 Scikit 线性模型返回负值时?

世界杯足彩怎么买划算?机器学习AI告诉你答案(含预测)