我正在开发使用罐装估算器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年黑色星期五的形状预测得很好,也不会像我们直观地期望的那样高。
话虽如此,我很高兴向模型添加任何建议,这样它也可以正确预测增长因素,而不仅仅是趋势。
答案 0 :(得分:0)
这是一个时间序列问题,因此与一般神经网络相比,最好使用tf.contrib.timeseries.ARRegressor
(专门为时间序列构建的神经网络)或tf.contrib.timeseries.StructuralEnsembleRegressor
(时间序列状态空间模型-which)网络。
两个模型都采用exogenous_feature_columns参数,对于正常日期,您可以使用0填充,对于正常日期,如黑色星期五,则可以使用1填充。这样可以解决您的预测不足的问题,因为否则该模型会将这些峰值视为异常值(即使使用通用神经网络,您也可以执行此操作-使用时间序列特定的函数进行编码更容易)。
更笼统地说,我会推荐除了tensorflow以外的其他工具来进行时间序列预测,例如Facebook Prophet或Statsmodels程序包。
我会进一步建议您不要使用Python,而要使用R中提供的一些预测软件包。