【问题标题】:Tensorflow: predict grow factor in a time series forecastTensorflow:预测时间序列预测中的增长因子
【发布时间】:2018-08-01 22:13:46
【问题描述】:

我正在开发一个应用程序,以使用 Canned Estimator tf.estimator.DNNRegressor 预测我的电子商务网站上未来的每小时在线订单(时间序列问题)

    estimator = tf.estimator.DNNRegressor(
        feature_columns=my_feature_columns,
        hidden_units=hidden_units, 
        model_dir=model_dir, 
        optimizer=tf.train.ProximalAdagradOptimizer(learning_rate=0.01,
                                                l1_regularization_strength=0.001))

我使用的功能几乎都基于日期和时间。例如,我的训练数据中的csv 文件如下所示

year,month,day,weekday,isweekend,hr,weeknum,yearday,orders
2018,7,16,2,0,0,29,197,193
2018,7,16,2,0,1,29,197,131
2018,7,16,2,0,2,29,197,77
2018,7,16,2,0,3,29,197,59
.....

其中订单列是模型的目标。

到目前为止,我得到的模型运行良好,但是当我对黑色星期五这样的高需求日进行预测时,它预测不足。例如,在下图中,我们可以看到对今年 2018 年黑色星期五的预测(虚线)没有我们直观预期的那么高,尽管它很好地预测了形状。

话虽如此,如果有任何建议可以添加到我的模型中,我将不胜感激,这样它也可以正确预测增长因素,而不仅仅是趋势。

【问题讨论】:

    标签: python tensorflow machine-learning deep-learning tensorflow-estimator


    【解决方案1】:

    这是一个时间序列问题,因此您最好使用tf.contrib.timeseries.ARRegressor(专为时间序列构建的神经网络)或tf.contrib.timeseries.StructuralEnsembleRegressor(时间序列状态空间模型 - which)而不是通用神经网络。

    两个模型都采用 exogenous_feature_columns 参数,您可以使用 0 填充正常日期,使用 1 填充黑色星期五等活动日期。这将解决您预测不足的问题,因为否则模型会将这些峰值视为异常值(即使使用通用神经网络您也可以这样做 - 使用时间序列特定函数进行编码更容易)。

    总的来说,我会推荐除 tensorflow 之外的其他工具用于时间序列预测,例如 Facebook Prophet 或 Statsmodels 包。

    我会更进一步,建议您根本不要使用 Python,而是考虑使用 R 中可用的一些预测包。

    【讨论】:

    • 谢谢亚历克斯。事实上,我对你的最后一句话很感兴趣。我对 Python 感到有些紧张(只是一种意见),如果可能的话,我想了解更多关于为什么您根本不建议使用 Python。
    • @zeellos “我对 Python 感到有些紧张” --- 就编程语言而言,我实际上更喜欢 Python 而不是 R。这只是 R 中可用于时间序列分析的工具的数量比 Python 中可用的更成熟和广泛。
    • @zeellos- 我在所有时间序列建模中都使用 R,并且一些同行建议通过 Keras/Tensorflow 研究 RNN。我想知道你在 Keras/TF 中使用 Python 与 Prophet 相比有什么经验?我在网上没有发现两者之间的比较,并且正在寻找有关两者比较的更多信息。
    猜你喜欢
    • 2020-10-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-03
    • 2020-04-30
    • 1970-01-01
    • 1970-01-01
    • 2020-10-05
    相关资源
    最近更新 更多