【问题标题】:Prophet forecast, high MSE先知预测,高 MSE
【发布时间】:2017-08-02 12:13:21
【问题描述】:

我在月度数据中使用先知(facebook 包)来预测汽车销量。 GAM 似乎忽略(不适合)所有更高的值(见图)。 与 ARIMA 模型相比,这给了我一个非常高的 MSE

enter image description here

df <- data.frame(ds = seq(as.Date('1993-01-01'), as.Date('2017-06-01'),by = 'm'), y)
attach(df)
m <- prophet(df,weekly.seasonality = F, yearly.seasonality = T, seasonality.prior.scale = 12)
future <- make_future_dataframe(m, periods = 12, freq = 'm')
forecast <- predict(m, future)
tail(forecast[c('ds', 'yhat', 'yhat_lower', 'yhat_upper')])
plot(m, forecast)

【问题讨论】:

    标签: time-series gam


    【解决方案1】:

    @alien_plutone,

    您需要减少时间序列值 (y) 的可变性,即汽车销售价值。大多数时间序列模型需要固定的时间序列值 (y)。我建议在应用先知模型之前对时间序列值使用对数转换。例如,引入以下代码行以使时间序列静止。

    注意:

    对数变换以使时间序列值 (y) 保持平稳。大多数时间序列模型要求输入值(时间序列)是固定的。如果时间序列的趋势和季节性随时间保持稳定,则称该时间序列是平稳的。

    df['y'] &lt;- np.log(df['y'])

    例如根据您的代码:

    df <- data.frame(ds = seq(as.Date('1993-01-01'), as.Date('2017-06-01'),by = 'm'), y)
    df['y'] <- np.log(df['y'])
    m <- prophet(df,weekly.seasonality = F, yearly.seasonality = T, seasonality.prior.scale = 12)
    future <- make_future_dataframe(m, periods = 12, freq = 'm')
    forecast <- predict(m, future)
    tail(forecast[c('ds', 'yhat', 'yhat_lower', 'yhat_upper')])
    plot(m, forecast) 
    

    如果此答案有助于您降低 MSE,请告诉我。请使用 exp 函数将预测值恢复到原始比例。

    非平稳时间序列

    Click here to see plot of a non-stationary series

    平稳时间序列

    Click here to see plot of a Stationary series

    【讨论】:

    • 你是对的。但是一旦我得到对数值,模型的表现就非常好。这合理吗?
    • 是的,易于减少可变性。
    猜你喜欢
    • 2021-10-11
    • 2018-08-21
    • 2018-01-27
    • 2018-09-26
    • 2020-11-12
    • 2018-11-06
    • 1970-01-01
    • 1970-01-01
    • 2019-07-16
    相关资源
    最近更新 更多