【问题标题】:understanding fbprophet cross_validation了解 fbprophet cross_validation
【发布时间】:2021-11-22 18:31:27
【问题描述】:

我能够执行交叉验证来评估模型的准确性,但我无法理解输出。

我有 687 行,我想根据我的所有数据训练模型,以获得可能的最佳预测并测量该模型的准确性。据我了解,fbprophet 不需要分成训练集和测试集。

对于交叉验证,我将初始设置为 500 天(模型在进行预测之前要学习的天数?),范围设置为 20(每次剪切后要预测的天数。),以及周期设置为 10(因为我读到这应该是地平线的一半)。

from fbprophet.diagnostics import cross_validation
df_cv = cross_validation(m, initial='500 days', period='10 days', horizon = '20 days')
df_cv.head()

Output cross_validation

from fbprophet.diagnostics import performance_metrics
df_p = performance_metrics(df_cv)
df_p

Output performance metrics

我有 17 个截止点,每个截止点有 20 个预测。输出 2 代表什么?因为我有 19 条线(从地平线 2 到地平线 20)。

我在性能指标方面遇到问题,具体覆盖范围是多少?这些值是多少,因为所有 17 个预测的平均绝对误差不应该相同,对吧?

【问题讨论】:

    标签: python performance-testing cross-validation facebook-prophet


    【解决方案1】:

    正如Prophet documentation 中所述,对于交叉验证,您有 3 个参数:

    • initial – 训练周期长度(模型的训练集大小)
    • period – 截止日期之间的间隔。截止点用于切割历史数据,并且对于每个交叉验证,仅使用截止点的数据拟合模型。您可以将其视为训练期的班次大小
    • 地平线 - 预测周期长度

    默认情况下,初始训练周期设置为视野的三倍,并且每半个视野进行一次截断。初始周期应该足够长,以捕捉模型的所有组成部分,尤其是季节性。

    拥有df_cv = cross_validation(m, initial='500 days', period='10 days', horizon = '20 days'),交叉验证将执行以下步骤:

    1. 在初始阶段(1-500 天)拟合模型
    2. 未来预测(500-520 天)
    3. 从时间序列开始截断 period-length 天数(10 天,相当于将训练周期移动 10 天)
    4. 在初始大小的训练数据上拟合模型,但从截止(10-510 天)开始
    5. 未来预测(510-530 天)

    ... 以此类推,直到我们到达时间序列的末尾。在您的情况下,它是 17 次迭代。

    在附加的Output cross_validation中可以看到:

    • ds – 预测日期
    • yhat – 预测值
    • yhat_lower & yhat_upper - 不确定区间
    • y - 实际值
    • cutoff – 截止日期

    输出性能指标中,您可以查看对未来 X 天所做预测的指标值。例如,在第一行(地平线 = 2 天)中,您可以看到未来 2 天的预测指标。

    覆盖率是指趋势和观察噪声中的不确定区间(yhat_lower 和 yhat_upper 估计值)。

    【讨论】:

      猜你喜欢
      • 2021-06-22
      • 2019-03-16
      • 1970-01-01
      • 1970-01-01
      • 2016-04-02
      • 2019-08-09
      • 1970-01-01
      • 2019-01-10
      • 2019-03-24
      相关资源
      最近更新 更多