如何训练模型从多维时间序列中预测 30 分钟前的事件

数据挖掘 机器学习 Python 预测建模 时间序列 scikit-学习
2021-09-22 02:30:22

我所在领域的专家能够在事件发生前 30 分钟预测事件的可能性(黄色的二进制尖峰)这里的频率是 1 秒,这个视图代表了几个小时的数据,我用黑色圈出了应该是“恶意”模式的地方维度之间存在相互作用,因此不能单独研究维度(或者可以吗?)

在此处输入图像描述

我正在尝试使用 Scikit Learn构建一个有监督的 ML 模型,该模型学习正常的节奏,并检测症状何时可能导致尖峰我不知道该走哪个方向。我尝试过异常检测,但它只适用于现场检测,而不是事先检测。

我如何在这些事件之前检测到“恶意”模式(将它们作为目标变量)?

我欢迎任何关于哪些算法或数据处理管道可能有帮助的建议,谢谢 :)

2个回答

这是一个有趣的问题。这是一个时间序列,您希望从该时间序列中识别某个事件的触发器。所以这是一个二分类问题。根据来自指定窗口的信息,是否会出现尖峰?是还是不是。

第一步是设置您的数据库。您将拥有一组实例(可能有一些重叠,但为避免偏差,最好将它们独立绘制),然后对于每个实例,人类需要标记是否有尖峰或没有长钉。

然后,您需要确定要用于时间序列分析的时间窗口。你已经这样做了,并决定 30 分钟是一个好的开始。

现在,您在 30 分钟窗口中有 6 个波形,您可以从中提取数据以获取有关您的分类的信息。您可以使用原始数据样本作为您的特征,但这是太多的特征,会导致糟糕的结果。因此,您需要一些特征提取降维、技术。

有上百万种方法可以从这些波形中提取数据。首先,问问自己,作为一个人类,这些其他波形应该有哪些迹象表明会出现尖峰。例如,在地震数据中,如果您在邻近城镇的波形中看到搅动,那么您应该期望很快会在您的城镇中看到搅动。

一般来说,我喜欢从我的波形中提取所有基本统计数据。获取平均值、标准差、波动指数等。获取您认为可能有帮助的任何内容。检查这些统计信息如何与您的标签相关联。相关性越高,它们可能越好。然后有一些非常好的技术可以从您的时间序列中提取时间和频率信息。研究包络模式分解经验模式分解我在一些时间序列数据上成功地使用了经验模态分解,得到的结果比我预期的要好得多。

现在,即使您减少了功能空间,您也可以做得更好!您可以应用一些降维技术(例如PCALDA)来获得可能更好地代表您的数据的低维空间。这可能会有所帮助,但不能保证。

现在,您有一个小数据集,其中包含弗兰肯斯坦混合物的实例,它代表了 30 分钟窗口内的 6 个波形。现在你已经准备好选择你的分类器了。您将需要一个二进制分类算法,幸运的是这是最常见的。有很多可供选择。如何选择?


你有多少实例?

#一世ns一个nCes>100*#Fe一个res?

然后你就可以使用深度学习技术了,比如神经网络一维卷积神经网络堆叠自动编码器等等……

比那个少!!!! 你应该坚持浅薄的方法。查看内核支持向量机随机森林、k-最近邻等。


常见的误解:如果您正确选择了特征,浅层方法可以并且将比深度学习技术表现更好特征提取是机器学习架构中最重要的方面。


我想使用异常检测!

这也可行,并且有一些很好的技术可以做到这一点。然而,异常检测的本质是学习名义情况的分布。因此,您将为您的算法提供数据集中没有导致峰值的所有实例。然后,您的算法将能够识别新实例何时与此名义分布有显着差异,并将其标记为异常。这意味着在您的上下文中会出现峰值。

查看:

您还可以使用更基本的异常检测技术,例如广义似然比检验。但是,这有点老派。

您需要进行特征提取或特征工程,以在您的训练数据中创建变量,以“捕捉”您装箱的那些模式,然后让目标变量显示“发现恶意”或“未发现恶意”

举一个非常简单的例子:预测是否会下雨。如果 1. 突然多云和 2. 气压下降,您可以在接下来的 30 分钟内提出一个相当好的降雨预测器,每 30 分钟检查一次。