使用给定的特征集估算 python 中的时间序列数据

Impute time series data in python using given set of features

所以我的数据看起来像:

year, y, x1, x2, x3, x4
2009, 0.5, 0.4, 0.4, 0.9
2013, nan, 0.4, 0.5, 0.8
2020, 0.8, 0.39, 0.51, 0.7

数据是按年计算的,但每年之间的间隔并不一致。 y 的值取决于时间和特征。但在某些情况下,我最需要的是缺少 y 。其他功能也可能会丢失,但大多数情况下它们都在那里。我尝试通过 df.interpolate() 函数输入数据,但对于大多数函数而言,值并不适合区间。我尝试过 ARIMA、LSTM 和其他方法,但它们没有考虑输入特征。我也考虑过使用回归技术,但它们不包含数据的时间序列性质。

那么对于这种情况最好的方法是什么。即

如何根据输入特征估算时间序列值?

您是否考虑过混合基于特征和基于时间的方法?例如,您可以在非缺失值上训练线性回归并获得用于预测缺失值的特征系数,然后 simple/weighted 移动 average/ARIMA/LSTM 等时间分量。然后为它们的结果分配权重,以得出来自特征和时间序列的预测。

如果您使用的是 TensorFlow,我相信这个示例非常接近您要查找的内容。它展示了如何在你的神经网络中包含多个特征。我认为您要查找的部分是多变量单步模型:

https://www.tensorflow.org/tutorials/structured_data/time_series#part_2_forecast_a_multivariate_time_series

有趣的问题,你的问题没有规则或好的答案...

您似乎想预测从 t+1 开始的 t+n 个点,其中 t 是您的最后一个已知点。

如果是这样,您需要:

  • 调整你的数据: 为了预测 t+1 一个连续的时间序列 似乎您的数据没有定期间隔。 因此,有一种称为 Croston 的方法可以帮助处理间歇性数据。简单的话,您可以对数据进行分组以减少长 0 数据点(和未知特征)。 Pandas 提供了一个很好的方法来重新采样(?)您的数据帧以创建规则间隔的时间序列数据(该方法称为重新采样)

删除未知的目标值(y with nans)很重要。 但是这样做你会丢失一些重要的信息, 因此,一种方法是创建两个模型。 一种用于数据插补以填充未知值 y。 第二个用于预测 y 的未来值。

第一个模型可以表示为自动编码器,其中特征表示当前时间。 换句话说,给定 n 个特征预测 y。其中 n 和 y 是从同一时间 t 获得的(同一行)。

第二个模型可以预测未来(forecasting),因此在输入缺失的y值后,预测未来t+n,其中n存在{1 -> +inf}。

另一个处理缺失值的好方法是创建三个模型而不是两个。

首先是上面提到的数据插补

填充缺失的目标值后,使用新矩阵输入第二个自动编码器。

使用第二个 AE 的隐藏状态作为第三个模型的输入,这样你可能会有缺失值,并且 AE 可以使用最好的预测未来来获得这些值的压缩表示。

最佳架构因问题而异。 例如,在您的情况下,您可以删除缺失的目标值并获得良好的最终模型。

一个必要的调整是输入缺失的特征值,但我会在添加一些噪音之前尝试缺失值。如果需要,您可以添加滚动的平均值、中值、最小值或最大值 window(使用滚动方法 pandas)。

您可以将此问题作为回归问题使用引导函数创建目标。添加一个变量,用于标识目标变量有多少 [periods_ahead]。然后使用 periods_ahead 作为回归模型的输入特征。这里的缺点是您还需要添加滞后特征或创建时间差(目标转换)以手动使目标静止,而不是依赖时间序列算法。