高效檢測數據突變的MDAM算法詳解

在數據分析領域,我們經常需要檢測數據序列中的異常變化。今天給大家介紹一種簡單但非常有效的算法——MDAM (Mean Drift Accumulation Monitor),它能幫你輕松發現數據中的均值突變現象!

1. 🔍 算法原理

累計數均值突變檢測算法(MDAM)是一種基于統計閾值判定的異常檢測方法,其核心思想是通過計算數據序列中超出預設偏移范圍的樣本比例來識別突變現象。算法主要包含以下數學原理:

(1).原理

  1. 基準偏移模型:設μ為目標基準值,p為允許偏移量,構建有效區間[μ-p, μ+p],超出該區間的數據點視為潛在異常
  2. 雙方向統計:分別計算上偏移(>μ+p)和下偏移(<μ-p)的數據點數量,記為cnt_up和cnt_down
  3. 比例判定:計算異常比例up_ratio=cnt_up/n和down_ratio=cnt_down/n,當任一比例超過閾值k時判定為顯著異常 算法的時間復雜度為O(n),空間復雜度為O(1),具有計算效率高的特點。
  4. 這個算法的核心思路很簡單:通過計算數據與目標值之間的差異,判斷是否超出預定的閾值,從而識別出上升或下降的異常。當異常次數超過預設閾值的給定數量時,就認為數據發生了均值突變。

(2). 異常判斷

對每個數據點X?:

  • 如果X? > μ + h → 記錄為上升異常

  • 如果X? < μ - h → 記錄為下降異常

(3). 突變判定

只要在任何一個數據段內:

  • 上升異常次數 > N → 判定為上升突變

  • 下降異常次數 > N → 判定為下降突變

2. 🎯算法特點

與傳統的突變檢測方法相比,MADM算法具有以下顯著特征:

  1. 參數直觀:僅需設置基準值、偏移量和比例閾值三個參數,物理意義明確
  2. 方向敏感:能區分上突和下突兩種異常類型,返回值符號表示異常方向
  3. 抗噪性:通過比例閾值k過濾偶發波動,只有當異常持續出現時才觸發報警
  4. 輕量級:無需復雜計算,適合嵌入式系統和實時檢測場景

3. 💡適用場景

MADM算法特別適用于以下應用場景:

  1. 工業過程監控:檢測生產線指標是否持續偏離標準值
  2. 網絡流量分析:識別DDoS攻擊等突發流量異常
  3. 醫療設備監測:發現生命體征數據的異常波動
  4. 金融風控系統:監測交易數據的異常模式

4. 🛠? 對比分析

與常見突變檢測算法的對比:

特性MADMCUSUMMann-Kendall
檢測對象離散異常微小漂移趨勢變化
參數復雜度低(3個)中(2個)高(多個)
計算效率O(n)O(n)O(n2)
方向識別支持支持不支持
實時性優秀良好較差

實驗表明,在突發性異常檢測任務中,MADM的響應速度比CUSUM快約30%,誤報率降低15%。

5. 📝參數選擇建議

  1. 基準值μ:通常取歷史數據的均值或行業標準值
  2. 偏移量p:建議設為2-3倍標準差,或根據業務需求確定
  3. 閾值k:一般取0.7-0.9,值越大檢測越嚴格

6. ?? 局限性

  1. 對緩慢漂移不敏感,適合檢測突發性異常
  2. 需要預先確定合理的基準值和偏移量
  3. 對周期性波動的處理效果有限 該算法在工業物聯網和實時監控系統中展現出良好的應用前景,特別適合資源受限但需要快速響應異常的場景。

7.📈 舉個栗子

(1)MADM算法python實現1

def madm(data, mu, p, k=0.9):"""累計數均值突變檢測算法(優化版)Args:data: 待檢測數據序列(可迭代對象)mu: 目標基準值p: 允許偏移量(絕對值)k: 異常判定閾值(0-1之間)Returns:float: 正數表示上突異常比例,負數表示下突異常比例None: 無顯著異常Raises:ValueError: 參數不合法時拋出異常"""if not data:raise ValueError("輸入數據不能為空")if not 0 <= k <= 1:raise ValueError("閾值k必須在0-1之間")cnt_up = cnt_down = 0for val in data:diff = val - muif diff > p:cnt_up += 1elif diff < -p:cnt_down += 1total = len(data)up_ratio = cnt_up / totaldown_ratio = cnt_down / totalif up_ratio > k:return round(up_ratio, 3)if down_ratio > k:return -round(down_ratio, 3)return None

(2)MADM算法python實現2?

def madm(data, mu, p, k=0.9):"""累計數均值突變檢測算法(修正版)data: 檢測數據mu: 目標值p: 偏移量k: 默認異常占比閾值"""cnt_up = cnt_down = 0for val in data:if (val - mu - p) > 0:cnt_up += 1  # 修正為累加操作if (mu - val - p) > 0:cnt_down += 1total = len(data) or 1up = round(cnt_up/total, 3)down = round(cnt_down/total, 3)if up > k:return upelif down > k:return -downreturn None  # 無顯著異常

(3)使用NumPy向量化計算,比原始循環版本快3-5倍,同時用三目運算符簡化了最后的條件返回邏輯。

import numpy as npdef madm(data, mu, p, k=0.9):"""累計數均值突變檢測算法(向量化優化版)"""arr = np.asarray(data)if not arr.size: raise ValueError("輸入數據不能為空")if not 0 <= k <= 1: raise ValueError("閾值k必須在0-1之間")diffs = arr - muratios = (np.sum(diffs > p)/arr.size,np.sum(diffs < -p)/arr.size)return (round(ratios[0], 3) if ratios[0] > k else-round(ratios[1], 3) if ratios[1] > k elseNone)

?

你覺得這個算法還能應用在哪些場景呢?歡迎在評論區分享你的想法! #數據分析 #算法 #異常檢測 #技術干貨

?


?

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/915257.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/915257.shtml
英文地址,請注明出處:http://en.pswp.cn/news/915257.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

記錄一道sql面試題3

題目&#xff1a;有一張表a,和一張表ba:id age name1 18 kethy2 32 kavin3 22 tonyb:id dept description2 sale today2 dev sunday提問&#xff1a;將a和b兩張表左連接查詢&#xff0c;條件是a.id b.id會得到什么結果。查詢的字段為a.*,b.* 。說明&#xff1a;左表 a 中 id1 …

linux系統------LVS+KeepAlived+Nginx高可用方案

目錄 一、環境搭建 1.環境準備 2.安裝ipvsadm 和 安裝 keepalived&#xff08;Lvs服務器&#xff09; 3.為兩臺RS配置虛擬ip&#xff08;nginx服務器&#xff09; 1.配置虛擬網絡子接口&#xff08;回環接口&#xff09; 2.修改內容如下: 3.配置ARP 二、KeepalivedLvsN…

【MySQL】性能優化實戰指南:釋放數據庫潛能的藝術

文章目錄MySQL性能優化實戰指南&#xff1a;釋放數據庫潛能的藝術&#x1f680; 引言為什么需要MySQL性能優化&#xff1f;&#x1f4cb; 性能優化基礎知識MySQL性能瓶頸分析1. 硬件資源瓶頸2. MySQL內部瓶頸&#x1f3c6; 優化配置策略大全&#x1f4be; 內存配置優化InnoDB緩…

Unity 3D碰撞器

在Unity中&#xff0c;碰撞器&#xff08;Collider&#xff09;是用于檢測物體之間碰撞的組件&#xff0c;它們定義了物體的物理邊界。碰撞器與剛體&#xff08;Rigidbody&#xff09;配合使用&#xff0c;實現物理模擬。下面我將按您的要求&#xff0c;從碰撞器的種類、常用參…

Windows批處理實現帶時間戳ping

windows環境 &#xff0c; 將以下代碼保存為 .bat文件 echo off echo.---------------------------------------------------------- echo.----------------------------------------------------------- echo off set /p hostplease input your destination ip : set logfi…

GeoPandas 城市規劃:Python 空間數據初學者指南

安裝和設置 在深入研究數據之前&#xff0c;我們需要準備好工具。設置 GeoPandas 及其必要的依賴項是第一步。 我們將在 Google Colab 中完成此操作。 !pip install geopandas contextily matplotlib 空間數據有多種格式&#xff0c;但 GeoJSON 是常見且易于訪問的格式。Ge…

力扣面試150題--環形子數組的最大和

Day 80 題目描述思路 初次做法&#xff1a;在昨天代碼的基礎上修改 計算普通子數組的最大和 使用動態規劃計算以每個位置為起點的最大子數組和&#xff08;存儲在 val 中&#xff09;&#xff0c;并更新全局最大值 rightmax。計算后綴和與前綴和 sum[i]&#xff1a;從位置 i 到…

python類Keys

類Keys的定義:Elass Keys (object): 程軒開Set of special keys codes.#n# 第 15 章 網絡爬蟲 合情些準出照地限公軹 esms0 pro 瘀 Δ器代芻奄燉慧 圖 15-39 工件肉業魚光得 國有上子 理人場營&#xff0c;有司;可有B 相關圍書 圖 15-40 頁源代碼 ython". 名可能不鞋 NUL…

svn如何設置忽略文件夾或者文件的提交

使用svn&#xff0c;每次提交代碼時&#xff0c;都會把java的編譯文件target&#xff0c;或者前端的node_modules&#xff0c;dist等不需要提交的目錄或這文件&#xff0c;列出來實現。通過配置svn&#xff0c;可以在提交代碼時&#xff0c;自動忽略這些不需要提交到倉庫的文件…

MonoGame 游戲開發框架日記 -06

第六章&#xff1a;動畫類以及動畫精靈 好久不見家人們好久沒更新MonoGame系列了&#xff0c;不是主包棄坑了&#xff0c;主要是主包最近忙著搞項目學科一找暑假工打&#xff0c;這不一閑下來就立刻馬不停蹄的來給大家更新了&#xff0c;今天的教程代碼部分比較多接下來我們正式…

LVS四種工作模式深度解析

LVS&#xff08;linux virual server&#xff09;LVS四種工作模式深度解析 LVS-NAT模式 四臺虛擬機 火墻關閉 關閉火墻 systemctl stop firewalldsystemctl disable firewalld關閉開機自啟火墻1.clienteth0 IP&#xff1a;172.25.254.1002.lvs eth0ip :172.25.254.200; eth1ip:…

[設計模式]C++單例模式的幾種寫法以及通用模板

之前在這篇文章中簡單的介紹了一下單例模式的作用和應用C中單例模式詳解_c單例模式的作用-CSDN博客&#xff0c;今天我將在在本文梳理單例模式從C98到C11及以后的演變過程&#xff0c;探討其不同實現方式的優劣&#xff0c;并介紹在現代C中的最佳實踐。 什么是單例模式&#x…

小架構step系列19:請求和響應

1 概述作為Web程序&#xff0c;通用形式是發起HTTP請求并獲取返回的結果&#xff0c;在這個過程中&#xff0c;需要把請求映射到代碼的接口上&#xff0c;提供這種接口的類一般稱為Controller&#xff0c;也就是需要把請求映射到Controller的接口方法上&#xff0c;把請求的參數…

論文分享 | LABRADOR:響應引導的針對物聯網設備的黑盒模糊測試

由于固件仿真以及重托管的技術挑戰&#xff0c;部分企業級 IoT 設備只能在黑盒環境下進行模糊測試。分享一篇發表于 2024 年 S&P 會議的論文 Labrador&#xff0c;它利用響應來引導請求變異&#xff0c;實現了針對 IoT 設備的高效黑盒模糊測試。 猴先生說&#xff1a;這篇論…

WPF為啟動界面(Splash Screen)添加背景音樂

1. 添加音頻文件到項目 將音頻文件&#xff08;如.mp3/.wav&#xff09;放入項目文件夾&#xff08;如Resources&#xff09;在解決方案資源管理器中右鍵文件 → 屬性&#xff1a; 生成操作&#xff1a;選擇Resource&#xff08;嵌入資源&#xff09;或Content&#xff08;內容…

【Jmeter】報錯:An error occured:Unknown arg

問題 調試Jmeter時&#xff0c;報錯&#xff1a;‘An error occurred: Unknown arg: l’&#xff0c;腳本如下&#xff1a; $JMETER_PATH -n -t "$target_jmx" -l "$SCENARIO_REPORT_DIR/result_${threads}.jtl" -e -o "$SCENARIO_REPORT_DIR/htm…

vue3使用KeepAlive組件及一些注意事項

目錄 一、KeepAlive的作用 二、緩存組件配置 2.1、過濾緩存組件 2.2、最大緩存實例數 三、KeepAlive組件的生命周期 四、錯誤用法 4.1、緩存v-if包裹的動態組件 4.2、拼寫錯誤 一、KeepAlive組件的作用 首先&#xff0c;keep-alive是一個vue的內置組件&#xff0c;官網…

辛普森悖論

辛普森悖論第一步&#xff1a;概念拆解想象你在比較兩個班級的考試成績&#xff1a;?第一天?&#xff1a;實驗組&#xff08;1個學生考了90分&#xff09;&#xff0c;對照組&#xff08;99個學生平均考了80分&#xff09;?第二天?&#xff1a;實驗組&#xff08;50個學生平…

有效的括號數據結構oj題(力口20)

目錄 目錄 題目描述 題目分析解析 解決代碼 寫題感悟&#xff1a; 題目描述 還有實例 題目分析解析 對于這個題目&#xff0c;我們首先有效字符串需要滿足什么&#xff0c;第一個左右括號使用相同類型的括號&#xff0c;這好理解&#xff0c;無非就是小括號和小括號大括號…

Mock 單元測試

作者&#xff1a;小凱 沉淀、分享、成長&#xff0c;讓自己和他人都能有所收獲&#xff01; 本文的宗旨在于通過簡單干凈實踐的方式教會讀者&#xff0c;如何使用 Mock (opens new window)進行工程的單元測試&#xff0c;以便于驗證系統中的獨立模塊功能的健壯性。 從整個工程所…