无滑动窗口的时间序列预测

数据挖掘 Python 喀拉斯 rnn
2022-02-28 07:04:57

我收集了一个每天重复的过程的历史日志文件,每天大致相同。我想要一个神经网络,从日常流程开始的那一刻起,就可以估计整个流程最终完成的时间。随着日常流程的进展,估计应该变得更加准确,并尽快收敛于实际完成时间。对预测有一定程度的信心也会很有用。

日常流程是主要是串行子流程的集合。主要是串行的,因为某些子流程对结束时间没有影响(关键路径与非)。数据中还隐藏着其他模式。周末比工作日花费更长的时间。在现实世界中,也许其他人也是如此。数据中存在少量噪声,子流程持续时间可能会受到完全外部因素的影响。尽管可能存在长期趋势,但某一天的表现与第二天的预期相关性很小/没有预期。

我在一个简单的 RNN 上取得了一些成功,但结果一直没有给人留下深刻印象,即使在尝试了很多超参数之后也是如此。迄今为止,最好的结果来自单热编码和“交叉连接”,以将每天扩展到多个样本并将它们填充到相同的最大尺寸......

Xsample1.1 = [Event1, ]              Y = EventN
Xsample1.2 = [Event1, Event2, ]      Y = EventN
Xsample1.N = [Event1, ..., EventN ]  Y = EventN

我已经将工作日编码为一个热门变量,并将日期时间标准化为预处理中的一个通用日期。

我找到的所有示例都是用于预测接下来的 N 个样本,向前滑动,而不是固定端样本。我正在使用 ipython3、pandas 和 keras,并且我使用一些简单的逻辑生成了一个测试群体,我希望 NN 能够轻松处理。每个文件的 YHat 是最后一个日期时间。.debug 文件捕获了预测应该如何演变,但该信息无法从训练数据中获得,因此未在 NN 中使用。

这是一个时间序列还是回归问题,我应该使用什么类型的 NN 以及我应该如何构建输入数据以获得最佳结果。

2个回答

用循环神经网络实现这一点并不难。我的建议与您已经建议的很接近,但我不会在不同的时间点采样,而是在所有时间步长上广播您的目标。如果总共有 N 个时间步,并且我们想在步 t=1 到 t=N-1 上进行预测,我们的 X 是一个形状为 [N-1, k] 的矩阵,其中 k 为特征数。Y 是一个形状为 [N-1] 的序列,所有值都等于 EventN。

这类似于您实际想要实现的目标,即在每个时间步您想要预测最终值。您的损失函数将在所有时间步长上计算并随着时间反向传播。您可能希望将函数作为时间步长的函数来衡量,也许以后的预测或多或少很重要,您需要对此进行一些分析。另一个建议是在你的特征中明确添加一些时间特征,这可能有助于网络。

N 有多大?如果它不是一个巨大的数字(如果它很大你需要使用 NN 和在线学习来获得相同的结果而不需要反转矩阵),那么使用简单的线性回归和线性代数怎么样?

简而言之,每个阶段你都会有 N 个模型,当新事件到来时,你会重新评估你的模型

如果您将使用线性代数,您只需要估计投影矩阵(该矩阵的每一行都是您在步骤 k [1:N] 上的事件链):

P=A(ATA)1AT