为数据挖掘/预测建模输入预处理时间序列数据

机器算法验证 时间序列 数据挖掘 预测模型
2022-03-20 06:50:26

有哪些方法可以准备/预处理时间序列数据以将序列数据用作预测模型(分类或回归)中的预测变量?具体来说,有哪些方法可以考虑

  • 从数据中获取最有用的预测信号?
  • 降低序列的维数

作为一个具体的例子,我有 90 天的期末余额数据(支票账户中的存款金额)。我想使用该数据来预测帐户所有者是否会在接下来的 2 周内关闭它(我有一个指标表明这种情况是否会在系列结束后 2 周发生)。

添加:

在查看了回复后,我想我正在寻找常用技术的列表。

  • 当然有 Matt Krause 所写的功能创建(每个客户余额系列在所有这些方法中都被单独处理):每天或每周系列值的差异和百分比变化之类的事情。有滑动窗口聚合,如每周平均值、最小值、最大值和标准变化。还有增加和减少的数量,余额变化的指标(绝对或一定大小的相对)。
  • 我考虑过为每个系列拟合线性或多项式回归,并使用模型中的系数作为预测变量。
  • 我想知道的其他事情是为每个平衡系列计算最大滞后数的自动相关性,并将这些值用作预测变量。
  • 将时间序列聚类为相对较少的值,并使用聚类成员的指标作为预测变量(例如使用动态时间扭曲距离和层次聚类)。

还有其他人吗?

  • 例如傅里叶变换在这里工作吗?我可能会发布一个关于它们的单独问题。
2个回答

我同意 user765195 所说的:这里没有灵丹妙药可以解决您的所有问题。您必须根据您的领域知识提出可能有用的功能。我从来没有在银行工作过,所以对这些建议持保留态度,但是怎么样

  • “波动性”当我更换银行时,我倾向于在关闭旧账户之前使用新账户一段时间,因为工资单/经常性费用需要一段时间才能转移。也许余额的方差(或较短时间窗口内的方差变化)会捕捉到这一点?

  • 交易规模采用每日余额的导数可以让您了解(净)每日交易。也许人们在关闭他们的账户(例如,在别处建立一个新账户)之前进行了异常大的提款。

如果我是你,我会先列出一长串可能的功能。将您的数据分成测试集、开发集和训练集。在训练+开发集上测试新功能,看看有什么用。就个人而言,我会把它们都扔进去,看看首先会发生什么。有很多特征选择算法,从脑死但穷举(尝试所有可能的组合!)到投影追踪或爬山,这对于大数据集可能更容易处理。

然后,一旦您确定了一个模型,就可以使用以前未触及的测试数据来评估它的性能。

这完全取决于您在完成数据预处理后如何计划进行预测。例如,如果您希望对时间序列进行连续观察yt与先前的测量呈线性相关:

yt=β0+β1yt1+

那么你最好选择线性变换。或者,如果您希望连续测量彼此相乘:

yt=η0yt1η1

然后一个对数变换(和随后的线性模型)将完成这一点,因为

log(yt)=log(η0)+η1log(yt1)+

您可以研究各种转换,看看哪一种提供了最好的预测能力。但是,“最佳预测器”将取决于您对预测准确性的衡量。

关于降维,您的示例似乎只涉及 2 个变量 - 降维通常是指您拥有大量预测变量并希望以有原则的方式降低数量的情况。如果您有这种情况,您可以使用标准技术(例如 PCA)进行降维,这与这是一个时间序列这一事实无关。

如果您的意思是减少时间点的数量,那么唯一可以实现此目的的转换类型将是时间点的平均值(例如,根据每日数据计算每周平均值)。除非拟合每周数据比拟合每日数据要容易得多(例如,对于降雨数据,预测一周内的平均降雨量比预测日降雨量值)。