时间序列-异常检测(Anomaly Detection)(一):时间序列的特征工程

一. 介绍

异常检测(Anomaly detection)是目前时序数据分析最成熟的应用之一,定义是从正常的时间序列中识别不正常的事件或行为的过程。

有效的异常检测被广泛用于现实世界的很多领域,例如量化交易,网络安全检测、自动驾驶汽车和大型工业设备的日常维护。

以在轨航天器为例,由于航天器昂贵且系统复杂,未能检测到危险可能会导致严重甚至无法弥补的损害。异常随时可能发展为严重故障,因此准确及时的异常检测可以提醒航天工程师今早采取措施。

1、异常类型

在这里插入图片描述

2、异常检测方法

1)直接检测:针对点异常,直接定位离群点,也称离群值检测。

2)间接检测:上下文或集合异常先转化成点异常,然后再求解。

3)时间跨度检测: ARIMA, 回归模型,LSTM等,核心思想就是模型学习一段历史数据,然后预测, 通过比对真实值与预测值的偏差来判断是否为异常。预测类算法在股市交易、量化金融领域有着广泛应用,有时间打算另开个坑。这里也推荐一本书:

《信用评价与股市预测模型研究及应用:统计学、神经网络与支持向量机方法》-- 庞素琳

4)序列跨度检测:许多传感器应用程序产生的时间序列通常彼此紧密相关。例如,在一个传感器上的鸟叫通常也会被附近的传感器记录下来。在这种情况下,经常可以使用一个序列来预测另一个序列。与此类预期预测的偏差可以报告为异常值,如隐式马尔科夫链HMM等。

二、时间序列的特征工程

1、非数值型变量处理方法(非数值型变量:categorical,text,mixed data)

极值分析和统计算法依赖于统计量化,例如均值或者标准差,对于非数值型变量,这些统计量化将不再有意义;但通过一些改变我们就能非数值型变量转化成数值型变量。

1.1 分布概率转化

就是变量不再默认服从特定分布(如高斯),而需要单独根据具体数据集定义概率分布(按比例),并按乘积方式与数 值变量组合以创建单个多元分布。

1.2 线性转化

One-hot码二进制转换,一个值对应一个种类,但容易维度爆炸,且无法体现不同类别的不同权重。可以通过将每列除以其标准偏差(deviation)来进行归一化。

潜在语义分析(Latent Semantic Analysis)

1.3 基于相似度量的转化

  • 基于数据的统计邻域计算相似度,比如文本变量中“红色”和“橙色”比“红色”和“蓝色”更相近,但要求人为区分属性值之间的语义关系。
  • 邻域相似度计算:https://patents.google.com/patent/CN104680179A/zh

2、特征工程构造思路

常见的时间序列特征构造思路:
在这里插入图片描述

2.1 统计特征

在这里插入图片描述

  • max、min、interval
  • avg、median
  • variance、偏度、峰度
  • 同比、环比
  • 重复值

2.2 拟合特征

  • 移动平均算法
  • 带权重的移动平均算法
  • 1/2/3次指数移动平均算法
  • SVD算法
  • 线性拟合
  • 自回归:AR/MA/ARMA/ARIMA/卡尔曼滤波器

2.3 时域特征

  • 自相关,偏相关系数
  • 差分
  • 赫斯特指数
  • 趋势、周期
  • 噪声

2.4 频域特征

  • 小波分析特征(大象流/老鼠流):小波变换系数、变换波峰数、变换均值
  • 傅里叶变换偏度、峰度、方差、系数等

3、特征选择的方法

3.1 相关度(筛除无关特征)

相关度(Correlation)挑选的方法的基本的思想是:通常离群点是那些违反了正常数据依赖关系下模型的点,而无关的特征是不能用来单独建模的,反而会影响模型准确性。因此,我们首先可以通过回归模型利用其他特征来预测某一个特征,如果均方根误差RMSE很大,说明这个特征和其他特征相关度非常低,应该被剔除。

方法:将所有的特征标准化,然后分别利用其他的特征来预测第k(k=1…N)个特征,得到均方根误差RMSE_k = √(E((θ ̂-θ)^2 ))如果RMSE_k 大于1,则预测误差大于特征的方差,此时这个第k特征应当剔除。我们也可以用这种方法,通过给予权重来衡量特征的重要性。通常,第 k 特征的权重为max{ 0,1-RMSE_k }。

3.2 PCA 主成分分析:(筛除多重共线性特征)

去除平均值->计算协方差矩阵->计算协方差矩阵的特征值和特征向量->将特征值从大到小排序->保留最大的N个特征值以及它们的特征向量

3.3 树模型输出特征重要性排序(有监督场景)

作为单个决策树模型,在模型建立时实际上是寻找到某个特征合适的分割点。这个信息可以作为衡量所有特征重要性的一个指标。

基本思路如下:如果一个特征被选为分割点的次数越多,那么这个特征的重要性就越强。这个理念可以被推广到集成算法中,只要将每棵树的特征重要性进行简单的平均即可。
在这里插入图片描述




参考资料:
时间序列异常检测(一)—— 算法综述

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
时间序列异常点检测是指通过对时间序列数据进行分析,识别出其中的异常点,即与正常数据波动规律有显著差异的数据点。对于时间序列异常点检测任务,Python提供了多种库和算法。 一种常用的Python库是`statsmodels`,它是一个强大的统计分析库,可以用于时间序列的建模和分析。其中的`outliers_influence`模块提供了许多用于异常点检测的统计方法和函数,例如`OLSInfluence`类可以通过计算残差、杠杆值和学生化残差等指标来检测异常点。 另一个常用的Python库是`pyculiarity`,它是基于R语言遗留的`anomalize`库开发的,用于时间序列异常检测和异常值替换。`pyculiarity`包含了一系列的异常检测算法,例如`esd_test`可以基于指数平滑分解(Exponential Smoothing Decomposition)检测异常点。 此外,还有一些用于时间序列异常点检测的专用库,如`anomaly_detection`和`pyod`。`anomaly_detection`库提供了多种统计和机器学习方法,如基于均值和标准差的Z分数法、基于百分位数的箱线图法和基于自动编码器的深度学习方法等。`pyod`库是一个专门用于异常检测的库,提供了多种经典和先进的异常检测算法,包括基于聚类的LOF算法、基于距离的KNN算法和基于孤立森林(Isolation Forest)的算法等。 总之,Python提供了多种用于时间序列异常点检测的库和算法,可以根据具体需求选择合适的方法进行异常点检测和分析。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值