当前位置: 首页 > article >正文

工业大数据分析算法实战-day16

文章目录

  • day16
    • 通用时序特征
    • 典型征兆特征
      • 毛刺检测特征
      • 单调趋势模式
      • 平稳过程的漂移检测
      • 多点位不一致
      • 超界
      • 变点检测
      • 一维曲线平滑与分区
      • 二维形状分析
      • 持续某种状态
    • 工业时序分析问题
      • 短时序分类特殊情况
      • 长时序分类问题
      • 不同类型问题的转换

day16

今天是第16天,昨日重点是在工业分析场景下遇到的数据预处理的方法,今日继续接着阐述工业分析中的典型处理数据的方法

通用时序特征

时序特征是时序分类等算法的基础,时序分类的前提是不同类别的时序在某种特征上(例如:原始数值、趋势、方差、均值)上存在显著差异,特征量的显著性评估和选择可以通过统计学习算法的手段,但特征量的提取更多还需要依赖数据类型、业务知识和当前问题的特点。常见的时序统计指标有:

峰值、峰-峰值、均值、均方根、方差、标准差、偏度、峰度、高阶矩、过零率、Willison幅值、正负斜率改变率、波峰因数、脉冲因数、裕度因数、波形因数、间隙因素、熵

典型征兆特征

毛刺检测特征

时序数据受到外部干扰,出现毛刺形状的异常点,不同于单点噪声,毛刺可能存在一定的宽度,如果时序存在趋势特征,可以采用STL方法进行时序分解,消除趋势分量后再采用IQR准则方法找出异常点

单调趋势模式

工业时序存在的上升和下降趋势通常表示工况发生了变化或者存在异常,一般有以下两种常见办法:

  • 拟合判断法:通过线性拟合的显著度判断是否存在趋势,根据斜率判断趋势的方向和大小。该方法能准确判断数据的单调趋势,但是对动荡的数据判断可能不准确,且需要用户定义斜率的阈值

  • Cox-Stuart趋势检验法:该方法通过比较数据中前后两段的差异,来判断是否存在趋势。具体做法是:

    1. 将时间序列数据按时间顺序排列:假设有一组时间序列数据 x1,x2,…,xnx_1, x_2, …, x_nx1,x2,…,xn。

    2. 分段比较:将这个数据分为两部分:

      • 第一部分是前半段:x1,x2,…,xn//2x_1, x_2, …, x_{n//2}x1,x2,…,xn//2
      • 第二部分是后半段:xn//2+1,xn//2+2,…,xnx_{n//2+1}, x_{n//2+2}, …, x_nxn//2+1,xn//2+2,…,xn

      然后,针对每一对数据点 (xi,xn−i+1)(x_i, x_{n-i+1})(xi,xn−i+1) (前半段的元素与后半段的元素一一对应)进行比较,看是否存在上升或下降的趋势。

    3. 构建符号序列:对于每一对数据点:

      • 如果 xi<xn−i+1x_i < x_{n-i+1}xi<xn−i+1,表示趋势上升,记作“+”;
      • 如果 xi>xn−i+1x_i > x_{n-i+1}xi>xn−i+1,表示趋势下降,记作“-”;
      • 如果 xi=xn−i+1x_i = x_{n-i+1}xi=xn−i+1,表示没有趋势,记作“0”。
    4. 计算统计量:统计上升和下降符号的数量,得到统计量。如果上升和下降符号数量的差异很大,说明时间序列可能存在单调趋势;如果差异不大,说明没有明显趋势。

    5. 判断趋势显著性:通过计算统计量和相应的临界值来判断趋势是否显著。如果统计量落在拒绝域内,说明时间序列有显著的单调趋势;如果在接受域内,说明没有显著趋势。

    6. 举例:假设有一组时间序列数据如下: x=[3,4,5,6,7,8,9,10,11]x = [3, 4, 5, 6, 7, 8, 9, 10, 11]x=[3,4,5,6,7,8,9,10,11]

      首先将其分为两部分: 前半段:[3, 4, 5, 6] 后半段:[8, 9, 10, 11],然后进行比较:

      • x1=3 与 x8=8显然 3<8,表示上升,记为“+”;
      • x2=4 与 x7=9,4<9,记为“+”;
      • x3=5 与 x6=10,5<10,记为“+”;
      • x4=6 与 x5=11,6<11,记为“+”。

      得到符号序列:[“+”, “+”, “+”, “+”] 这个序列全部是“+”,表明数据具有单调上升趋势。

平稳过程的漂移检测

对于平稳过程的研判,简单处理办法包括基于阈值报警或者SPC模型,但这些模型容易受到毛刺等干扰信号影响,存在大量虚假告警,而且很多故障时逐渐发展的过程,基于这些简单包解规则通常没有提前性,只有在故障非常严重,甚至是在故障之后,这些简单规则才能报警。

另外一种方法是序贯概率比检验(SPRT):序贯概率比检验的核心思想是:通过计算当前数据流的“似然比”,在实时数据采集的过程中逐步判定一个假设是否成立。具体来说,它用于判断一个系统是否从正常状态(假设1)转变为故障状态(假设2),或者反之。

假设我们有一组来自过程的时间序列数据,这些数据通常可以用某种概率模型(如正态分布、泊松分布等)来描述。SPR很适合应用于这样的情况下,监控是否有故障发生。

  1. 设定假设

    • 零假设(H0):过程处于正常状态。
    • 备择假设(H1):过程发生故障或偏离正常状态。
  2. 选择显著性水平和界限

    • 选择两个界限值:一个上界(A)和一个下界(B)。这两个界限决定了什么时候停止测试并作出决策。
      • A:当似然比超过上界时,接受备择假设 H1,认为故障发生。
      • B:当似然比低于下界时,接受零假设 H0,认为系统处于正常状态。
      • 在这两个界限之间,继续进行检验,直到一个界限被触发。
  3. 计算似然比

    • 对于每一组新的数据,计算“似然比”(Likelihood Ratio)。简单来说,似然比是当前数据在两种假设下的概率之比:

      image-20241226192929456

    • 如果似然比超过上界(A),则说明数据支持备择假设 H1(故障发生),此时可以报警。

    • 如果似然比低于下界(B),则说明数据支持零假设 H0(系统正常),继续观察。

  4. 序贯过程

    • 每获取一组新的数据,就重新计算似然比,判断是否超过界限。
    • 这个过程是“序贯的”,即数据不断到来时,模型可以实时更新判断。
  5. 举例:假设你在监控一个机器的运行状态,机器通常是平稳的。你希望通过SPR来检测是否发生故障。

    • 设定假设

      • 零假设 H0:机器正常,运行状态符合某个已知的分布(如正常工作时的温度变化范围)。
      • 备择假设 H1:机器发生故障,温度变化超过正常范围。
    • 选择界限

      • 你设置上界 A=10,下界 B=1。这意味着:如果似然比大于10,就认为故障发生(报警)。如果似然比小于1,就认为机器运行正常。如果在1和10之间,就继续观察,不做决策。
    • 计算似然比

      • 假设机器正常时,温度波动符合某个统计分布,你可以根据数据计算出每一组新数据在正常和故障两种状态下的概率。
      • 比如,当前观察到的温度数据的似然比为7,这表示当前数据支持正常状态,但不足以报警。
      • 如果下一个数据的似然比为12,超过了上界10,就会触发报警,提示机器可能发生故障。

多点位不一致

多点位不一致是指同种工况下的设备应该是一致的监测点位数据:

  • 数值的一致性(原始数据、特征量)的一致性可以使用ANOVA分析(组内差异与组内方差的对比)。
  • 时序形状不一致可以采用时序距离函数分析
  • 函数关系的不一致通常先建立回归模型(将一些量作为目标量,另外量作为因变量,采用参数化或参数化模型拟合),然后再预测残差序列上进行不一致的研判。
  • 当然也可以从机理层面分析下不一致的来源

超界

  • 静态超界:实现全局统计分布检测超过正常范围的异常点,常用方法为:规定阈值、IQR准则、方差标准倍数,但这周无法应对局部动态变化
  • 动态超界:通过局部加权回归拟合数据来估计局部分布区间,Loess是一种用于局部回归分析的非参数方法,根据该加权进行拟合,估计每个点拟合平均值和置信区间

image-20241226194335725

变点检测

在一个序列或过程中,在某个时间点受到系统性因素影响,导致统计特性发生变化,该时间点为变点

  • 基于SDAR的变点检测方法,基本原理如下:
    1. 残差计算:首先,选择一种合适的模型(比如均值模型、回归模型等)来拟合数据序列。然后计算每个数据点的“残差”,即数据点与模型预期值之间的差异。
    2. 计算绝对残差:接下来,对每个时间点的残差取绝对值,得到绝对残差序列。绝对残差反映了数据点与模型的差异程度。
    3. 统计差异:通过比较数据在不同时间段的绝对残差差异,来判断是否出现了变点。如果某个点的绝对残差突增,说明该点可能是变点。
  • 基于PELT的变点检测方法,通过动态规划(Dynamic Programming,DP)来寻找数据序列中的变点,主要包含以下几个步骤:
    1. 损失函数定义: PELT方法通过定义一种损失函数来度量数据在某一分段模型下的拟合质量。例如,常见的损失函数有均方误差(MSE)或对数似然(log-likelihood)。对于每个数据区间,计算该区间内数据的拟合质量。
    2. 动态规划: PELT利用动态规划的思想,通过递归的方式来搜索可能的变点。它从数据序列的第一个点开始,依次考虑每一个点是否可能是一个变点。每次尝试分割数据时,都计算该分割点之前的损失函数值,并记录最优分割点。
    3. 修剪优化: 为了提高效率,PELT算法采用了修剪策略。修剪意味着,算法在搜索过程中会剪掉那些不可能产生最优解的分割点,减少了计算量。这样,可以显著提高变点检测的速度,尤其是在数据量较大的情况下。
    4. 变点识别: 最终,PELT会返回一组变点,这些变点是能够最大化数据拟合质量的切分点。

SDAR方法:适合于相对简单的变点检测问题,计算上较为直观,但可能容易受噪声影响,适用于平稳数据中显著的变点。

PELT方法:更适用于大规模数据的变点检测,尤其是在复杂的数据集或需要高效处理时,PELT的动态规划和修剪优化策略能有效减少计算量,并找到全局最优的变点。

一维曲线平滑与分区

在原始时序进行平滑滤波后,对于特别显著的差异,可通过与参考曲线的差异,根据统计分布过滤掉大的离群点。对于离群点可以使用DBSCAN等基于密度的算法消除

二维形状分析

不同形状对于不同的工况,通常是先滤波,再采用不变性度量指标,例如Hu矩,计算形状的不相似度

持续某种状态

很多专家经验中,常常有“持续上升、持续下降”等,这样逻辑有如下3种方法

  • 理想的研判:对时序数据差分,根据正负符号和持续时间做研判。持续上升要求差分必须为正,并且时间长度大于一定的阈值,这种要求较为严格

  • 近似的研判:转换前面讨论为单调趋势模式,允许在整体趋势下有部分波动

  • 严格的研判:指很多时候允许中间有一些小的波动

工业时序分析问题

工业应用上,时序数据分析存在以下特点:

  • 变量间关系存在部分先验知识,可由定性的因果图或静态/动态方程刻画,为分析建模提供了部分输入
  • 存在外生变量的影响,比如临时的未被记录的操作、设备本身的状态,所以数据和模型都必须要从业务场景的角度去审视,提高思考的全面性
  • 标记数据缺乏或不完备,数据类别严重不均衡
  • 时序数据经常存在着中断

常见的时序监督学习问题如下:

image-20241226201843175

基础的时序结构处理方法如下,在多尺度、多变量、时序依赖度等维度上,也有不少常用算法组合策略,例如,用Wavelet提取多尺度的时空特征,然后采用PCA/CNN做特征降维或提取;利用SOM/RBM进行子空间提取,然后在用CNN等分类算法进行建模。

  • 隐含状态及其转移规律的提取:采用ARIMA、HMM、状态方程、LSTM等算法
  • 获取典型形态:Shapelet、SAX等方法
  • 频域特征/时域特征:采用FFT、Wavelet等算法
  • 结构简化:Sparse FFT、Sparse PCA、SOM、RBM等

短时序分类特殊情况

思路通常是采用时序再表征/时序聚类/特征提取的方式,将原始时序转换为特征向量,然后再采用通用的分类算法进行建模,但其中存在一些特殊情况如下:

时序数据长度不一致:

  • 原始数据强行截断,通常采取掐头去尾的启发式策略
  • 通过特征提取,将其转换为等长的特征向量
  • 在聚类中,允许不同长度时间相似度的评价算法(比如DTW)进行聚类,后面利用聚类信息进行分析

降维

  • 变量间降维采用PCA
  • 记录间降维可以用聚类(提取典型变化)

长时序分类问题

长时序分类一般做法有3种

  • 经过滑动窗口,特征提取后,变成独立同分布数据集,转换为经典分类问题
  • 将一个长序列通过滑动窗口切分成若干个短时序记录,转换为短时序分类问题
  • 建立刻画时序结构的模型(如HMM、状态空间、LSTM等),在时序模型的参数空间/预测结果上,进行分类

不同类型问题的转换

异常判断看起来是一个天然的分类模型,但很多时候也可以通过回归模型去解决

  • 利用回归模型构建预测模型,判断真实值和预测值的残差和趋势,研判是否正常
  • 根据训练数据集的失效时间点,构建每个时间点的失效风险函数,训练一个失效风险概率的回归模型,预测每个时间的失效概率,根据失效风险概率的数据和趋势做异常检测研判
  • 操作参数优化问题,当目标明显存在簇集分布,可以使用聚类,这样问题就转换为了分类问题。

http://www.kler.cn/a/453428.html

相关文章:

  • Linux内核 -- UIO (User-space I/O) 简介与使用笔记
  • 数学建模助力干细胞研究,配体纳米簇如何影响干细胞命运
  • 【唐叔学算法】第19天:交换排序-冒泡排序与快速排序的深度解析及Java实现
  • 关于埃斯顿机器人文件导出或者系统日志导出
  • FFmpeg在python里推流被处理过的视频流
  • ant design 学习记录 type PrefixType = keyof typeof MOCK_DATA;
  • 天池工业蒸汽量预测教程
  • FTT变换Matlab代码解释及应用场景
  • go window安装protoc protoc生成protobuf文件
  • vue关闭eslint校验及开启debugger
  • 【jenkins插件】
  • Java 集合使用注意事项总结
  • PYNQ2.7镜像直接升级成3.0以支持XCV(Xilinx Virtual Cable)
  • 代码随想录-笔记-其八
  • Jenkins 任意文件读取(CVE-2024-23897)修复及复现
  • 【Vue3学习】使用ref调用子组件的方法,实现子组件的显示与隐藏
  • HarmonyOS NEXT 实战之元服务:静态案例效果---歌单推荐
  • 如何在 Linux 上使用 Rsync 同步本地和远程目录
  • 机器学习之pandas
  • 多功能jquery图片预览放大镜插件
  • 【C++动态规划】1105. 填充书架|2104
  • Unity功能模块一对话系统(1)前置准备
  • 08-排序
  • 题目解析与Python实现:D. Lizards and Basements 2
  • 【golang】map遍历注意事项
  • JVM【Java虚拟机】基础知识(五)