Tensorflow:在时间序列预测中预测增长因子

时间:2018-08-01 22:13:46

标签: python tensorflow machine-learning deep-learning tensorflow-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年黑色星期五的形状预测得很好,也不会像我们直观地期望的那样高。

enter image description here

话虽如此,我很高兴向模型添加任何建议,这样它也可以正确预测增长因素,而不仅仅是趋势。

1 个答案:

答案 0 :(得分:0)

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

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

更笼统地说,我会推荐除了tensorflow以外的其他工具来进行时间序列预测,例如Facebook Prophet或Statsmodels程序包。

我会进一步建议您不要使用Python,而要使用R中提供的一些预测软件包。