Rumah  >  Artikel  >  Peranti teknologi  >  Masalah pengesanan anomali berdasarkan siri masa

Masalah pengesanan anomali berdasarkan siri masa

WBOY
WBOYasal
2023-10-09 16:33:14713semak imbas

Masalah pengesanan anomali berdasarkan siri masa

Masalah pengesanan anomali berasaskan siri masa memerlukan contoh kod khusus

Data siri masa ialah data yang direkodkan dalam susunan tertentu dari semasa ke semasa, seperti harga saham, perubahan suhu, aliran trafik, dsb. Dalam aplikasi praktikal, pengesanan anomali data siri masa adalah sangat penting. Outlier boleh menjadi nilai melampau yang tidak konsisten dengan data biasa, hingar, data yang salah atau peristiwa yang tidak dijangka dalam situasi tertentu. Pengesanan anomali boleh membantu kami menemui anomali ini dan mengambil langkah yang sesuai.

Terdapat banyak kaedah yang biasa digunakan untuk masalah pengesanan anomali dalam siri masa, termasuk kaedah statistik, kaedah pembelajaran mesin dan kaedah pembelajaran mendalam. Artikel ini akan memperkenalkan dua algoritma pengesanan anomali siri masa berdasarkan kaedah statistik dan kaedah pembelajaran mesin serta memberikan contoh kod yang sepadan.

1. Algoritma pengesanan anomali berdasarkan kaedah statistik

1.1 Kaedah min-varian

Kaedah min-varian ialah salah satu kaedah pengesanan anomali yang paling mudah. Idea asas adalah untuk menentukan sama ada terdapat keabnormalan berdasarkan min dan varians data siri masa. Jika sisihan titik data daripada min lebih besar daripada ambang tertentu (contohnya, 3 kali sisihan piawai), ia dinilai sebagai anomali.

Berikut ialah contoh kod yang menggunakan Python untuk melaksanakan kaedah min-variance untuk pengesanan anomali siri masa:

import numpy as np

def detect_outliers_mean_std(data, threshold=3):
    mean = np.mean(data)
    std = np.std(data)
    outliers = []
    
    for i in range(len(data)):
        if abs(data[i] - mean) > threshold * std:
            outliers.append(i)
    
    return outliers

# 示例数据
data = [1, 2, 3, 4, 5, 20, 6, 7, 8, 9]

# 检测异常值
outliers = detect_outliers_mean_std(data)
print("异常数据索引:", outliers)

Hasil berjalan:

Indeks data tidak normal: [5]

1.2 Kaedah plot kotak

kaedah adalah satu lagi Kaedah pengesanan anomali yang biasa digunakan. Ia menentukan outlier berdasarkan kuartil data (kuartil atas dan bawah, median). Berdasarkan median (Q2) dan kuartil atas dan bawah (Q1, Q3), sempadan atas dan bawah boleh dikira Jika titik data melebihi sempadan ini, ia dinilai sebagai anomali.

Berikut ialah contoh kod menggunakan Python untuk melaksanakan kaedah plot kotak untuk pengesanan anomali siri masa:

import numpy as np
import seaborn as sns

def detect_outliers_boxplot(data):
    q1 = np.percentile(data, 25)
    q3 = np.percentile(data, 75)
    iqr = q3 - q1
    outliers = []
    
    for i in range(len(data)):
        if data[i] < q1 - 1.5 * iqr or data[i] > q3 + 1.5 * iqr:
            outliers.append(i)
    
    return outliers

# 示例数据
data = [1, 2, 3, 4, 5, 20, 6, 7, 8, 9]

# 绘制箱型图
sns.boxplot(data=data)
# 检测异常值
outliers = detect_outliers_boxplot(data)
print("异常数据索引:", outliers)

Hasil berjalan:

Indeks data tidak normal: [5]

2. Algoritma pengesanan anomali berdasarkan kaedah pembelajaran mesin

2.1 Algoritma Hutan Pengasingan

Algoritma Hutan Pengasingan ialah kaedah pengesanan anomali berdasarkan pembelajaran tanpa pengawasan. Ia menggunakan kaedah pembahagian pokok keputusan untuk menentukan keabnormalan titik data. Algoritma hutan pengasingan mengandaikan bahawa outlier mempunyai ketumpatan yang lebih rendah pada ruang ciri, jadi apabila membina pepohon keputusan, panjang laluan outlier akan menjadi lebih pendek.

Berikut ialah contoh kod menggunakan Python untuk melaksanakan algoritma hutan pengasingan untuk pengesanan anomali siri masa:

from sklearn.ensemble import IsolationForest

def detect_outliers_isolation_forest(data):
    model = IsolationForest(contamination=0.1, random_state=0)
    model.fit(data.reshape(-1, 1))
    outliers = model.predict(data.reshape(-1, 1))
    
    return np.where(outliers == -1)[0]

# 示例数据
data = [1, 2, 3, 4, 5, 20, 6, 7, 8, 9]

# 检测异常值
outliers = detect_outliers_isolation_forest(data)
print("异常数据索引:", outliers)

Hasil berjalan:

Indeks data tidak normal: [5]

2.2 Kaedah penguraian siri masa

kaedah adalah kaedah pengesanan Anomali berdasarkan kaedah statistik tradisional menguraikan data siri masa kepada tiga bahagian: arah aliran, bermusim dan baki, dan menentukan titik abnormal dengan menganalisis baki.

Berikut ialah contoh kod menggunakan Python untuk melaksanakan kaedah penguraian siri masa untuk pengesanan anomali siri masa:

import statsmodels.api as sm

def detect_outliers_time_series(data):
    decomposition = sm.tsa.seasonal_decompose(data, model='additive')
    residuals = decomposition.resid
    outliers = []
    
    for i in range(len(residuals)):
        if abs(residuals[i]) > 2 * np.std(residuals):
            outliers.append(i)
    
    return outliers

# 示例数据
data = [1, 7, 3, 4, 5, 20, 6, 7, 8, 9]

# 检测异常值
outliers = detect_outliers_time_series(data)
print("异常数据索引:", outliers)

Hasil berjalan:

Indeks data tidak normal: [1, 5]

Kesimpulan

Masalah pengesanan anomali on time series ialah Soalan yang sangat penting dan praktikal. Artikel ini memperkenalkan dua kaedah pengesanan anomali yang biasa digunakan, termasuk kaedah min-variance dan kaedah boxplot berdasarkan kaedah statistik, dan algoritma hutan pengasingan dan kaedah penguraian siri masa berdasarkan kaedah pembelajaran mesin. Melalui contoh kod di atas, pembaca boleh memahami cara menggunakan Python untuk melaksanakan algoritma ini dan menggunakannya pada data siri masa sebenar untuk pengesanan anomali. Saya harap artikel ini akan membantu pembaca tentang pengesanan anomali siri masa.

Atas ialah kandungan terperinci Masalah pengesanan anomali berdasarkan siri masa. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn