Heim >Technologie-Peripheriegeräte >KI >Anomalieerkennungsproblem basierend auf Zeitreihen
Zeitreihenbasierte Anomalieerkennungsprobleme erfordern spezifische Codebeispiele
Zeitreihendaten sind Daten, die in einer bestimmten Reihenfolge über die Zeit aufgezeichnet werden, z. B. Aktienkurse, Temperaturänderungen, Verkehrsfluss usw. In praktischen Anwendungen ist die Anomalieerkennung von Zeitreihendaten von großer Bedeutung. Ein Ausreißer kann ein Extremwert sein, der nicht mit normalen Daten übereinstimmt, Rauschen, fehlerhafte Daten oder ein unerwartetes Ereignis in einer bestimmten Situation. Die Anomalieerkennung kann uns helfen, diese Anomalien zu entdecken und geeignete Maßnahmen zu ergreifen.
Es gibt viele häufig verwendete Methoden für Anomalieerkennungsprobleme in Zeitreihen, darunter statistische Methoden, Methoden des maschinellen Lernens und Methoden des tiefen Lernens. In diesem Artikel werden zwei Algorithmen zur Erkennung von Zeitreihenanomalien vorgestellt, die auf statistischen Methoden und Methoden des maschinellen Lernens basieren, und entsprechende Codebeispiele bereitgestellt.
1. Algorithmus zur Anomalieerkennung basierend auf statistischen Methoden
1.1 Mittelwert-Varianz-Methode
Die Mittelwert-Varianz-Methode ist eine der einfachsten Methoden zur Anomalieerkennung. Die Grundidee besteht darin, anhand des Mittelwerts und der Varianz von Zeitreihendaten zu bestimmen, ob Anomalien vorliegen. Wenn die Abweichung eines Datenpunkts vom Mittelwert einen bestimmten Schwellenwert überschreitet (z. B. das Dreifache der Standardabweichung), wird dies als Anomalie beurteilt.
Das Folgende ist ein Codebeispiel, das Python verwendet, um die Mittelwert-Varianz-Methode zur Erkennung von Zeitreihenanomalien zu implementieren:
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)
Laufende Ergebnisse:
Abnormaler Datenindex: [5]
1.2 Box-Plot-Methode
Der Box-Plot Die Methode ist eine weitere häufig verwendete Methode zur Anomalieerkennung. Es ermittelt Ausreißer anhand der Quartile der Daten (oberes und unteres Quartil, Median). Basierend auf dem Median (Q2) und den oberen und unteren Quartilen (Q1, Q3) können die oberen und unteren Grenzen berechnet werden. Wenn der Datenpunkt diese Grenze überschreitet, wird er als Anomalie beurteilt.
Das Folgende ist ein Codebeispiel für die Verwendung von Python zur Implementierung der Boxplot-Methode zur Erkennung von Zeitreihenanomalien:
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)
Laufende Ergebnisse:
Abnormaler Datenindex: [5]
2. Anomalieerkennungsalgorithmus basierend auf Methoden des maschinellen Lernens
2.1 Isolation Forest-Algorithmus
Der Isolation Forest-Algorithmus ist eine Methode zur Anomalieerkennung, die auf unbeaufsichtigtem Lernen basiert. Es verwendet die Segmentierungsmethode von Entscheidungsbäumen, um die Anomalie von Datenpunkten zu bestimmen. Der Isolationswaldalgorithmus geht davon aus, dass Ausreißer eine geringere Dichte im Merkmalsraum aufweisen, sodass beim Erstellen eines Entscheidungsbaums die Pfadlänge der Ausreißer kürzer ist.
Das Folgende ist ein Codebeispiel, bei dem Python verwendet wird, um den Isolationswaldalgorithmus zur Erkennung von Zeitreihenanomalien zu implementieren:
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)
Laufende Ergebnisse:
Abnormaler Datenindex: [5]
2.2 Zeitreihenzerlegungsmethode
Zeitreihenzerlegungsmethode ist eine Methode zur Erkennung von Anomalien, die auf herkömmlichen statistischen Methoden basiert. Sie zerlegt Zeitreihendaten in drei Teile: Trend, Saisonalität und Residuen und bestimmt abnormale Punkte durch Analyse der Residuen.
Das Folgende ist ein Codebeispiel, bei dem Python verwendet wird, um eine Zeitreihenzerlegungsmethode zur Erkennung von Zeitreihenanomalien zu implementieren:
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)
Laufende Ergebnisse:
Abnormaler Datenindex: [1, 5]
Schlussfolgerung
Das Problem der Anomalieerkennung basiert zu Zeitreihen ist eine sehr wichtige und praktische Frage. In diesem Artikel werden zwei häufig verwendete Anomalieerkennungsmethoden vorgestellt, darunter die Mean-Varianz-Methode und die Boxplot-Methode, die auf statistischen Methoden basieren, sowie der Isolationswaldalgorithmus und die Zeitreihenzerlegungsmethode, die auf Methoden des maschinellen Lernens basieren. Anhand der obigen Codebeispiele können Leser verstehen, wie man mit Python diese Algorithmen implementiert und sie zur Anomalieerkennung auf tatsächliche Zeitreihendaten anwendet. Ich hoffe, dass dieser Artikel den Lesern bei der Erkennung von Zeitreihenanomalien hilfreich sein wird.
Das obige ist der detaillierte Inhalt vonAnomalieerkennungsproblem basierend auf Zeitreihen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!