异常检测是识别数据集中显著偏离规范的数据点或模式的过程。时间序列是在一段时间内收集的数据点的集合。时间序列数据中的异常检测可能在包括制造业、医疗保健和金融在内的各个行业中有所帮助。时间序列数据中的异常检测可以使用无监督学习方法(如聚类、PCA(主成分分析)和自动编码器)来完成。
什么是异常检测算法?
异常检测是识别数据集中偏离预期模式的数据点的过程。许多应用,包括欺诈检测、入侵检测和故障检测,经常使用异常检测技术。异常检测的目的是找到可能指向潜在危险、问题或机会的不常见或非常罕见的事件。
自动编码器算法是一种无监督深度学习算法,可用于时间序列数据中的异常检测。自动编码器是一个神经网络,它通过首先将输入数据压缩为低维表示,然后将其扩展回其原始维度来学习重建其输入数据。自动编码器可以在典型的时间序列数据上被训练以学习用于异常识别的数据的压缩版本。然后可以使用原始数据和重建数据之间的重建误差来计算异常分数。异常是具有相当大的重建误差的数据点。
时间序列数据与异常检测
在时间序列数据的情况下,异常检测算法尤其重要,因为它们可以帮助我们发现数据中的奇怪模式,而这些模式仅仅通过查看原始数据并不明显。时间序列数据中的异常可能表现为值的突然增加或减少、奇怪的模式或意外的季节性。时间序列数据是跨时间观察的集合。
- 时间序列数据可用于教导异常检测算法(诸如自动编码器)如何表示典型模式。然后,这些算法可以利用该表示来发现异常。该方法可以通过在常规时间序列数据上训练自动编码器来学习数据的压缩版本。然后可以使用原始数据和重建数据之间的重建误差来计算异常分数。异常是具有相当大的重建误差的数据点。
- 异常检测算法可以应用于时间序列数据以找到可能指向危险、问题或机会的奇数模式。例如,在预测性维护的上下文中,时间序列异常可以指向预期的设备故障,其可以在其导致大量停机时间或安全问题之前被修复。时间序列数据中的异常可能会揭示市场走势或财务预测模式,这些模式可能会被资本化。
导入库和数据集
Python库使我们非常容易地处理数据,并通过一行代码执行典型和复杂的任务。
- Pandas -此库有助于以2D阵列格式加载数据帧,并具有多种功能,可一次性执行分析任务。
- Numpy - Numpy数组非常快,可以在很短的时间内执行大型计算。
- Matplotlib/Seaborn -这个库用于绘制可视化。
- Sklearn -此模块包含多个具有预实现功能的库,以执行从数据预处理到模型开发和评估的任务。
- TensorFlow -这是一个用于机器学习和人工智能的开源库,提供了一系列功能,可以通过单行代码实现复杂的功能。
import pandas as pd
import tensorflow as tf
from keras.layers import Input, Dense
from keras.models import Model
from sklearn.metrics import precision_recall_fscore_support
import matplotlib.pyplot as plt
在这一步中,我们导入使用自动编码器实现异常检测算法所需的库。我们导入pandas用于阅读和操作数据集,导入TensorFlow和Keras用于构建自动编码器模型,导入scikit-learn用于计算精度、召回率和F1得分。
data = pd.read_csv(
'https://raw.githubusercontent.com/numenta'
'/NAB/master/data/realKnownCause/ambient'
'_temperature_system_failure.csv')
# Exclude datetime column
data_values = data.drop('timestamp',
axis