ホームページ > 記事 > テクノロジー周辺機器 > 時系列に基づく異常検出問題
時系列に基づく異常検出の問題には、特定のコード例が必要です
時系列データとは、株価、気温の変化、時間の経過とともに特定の順序で記録されるデータです。交通の流れなど実際のアプリケーションでは、時系列データの異常検出は非常に重要です。外れ値は、通常のデータ、ノイズ、誤ったデータ、または特定の状況における予期せぬイベントと一致しない極端な値である可能性があります。異常検出は、これらの異常を発見し、適切な措置を講じるのに役立ちます。
時系列での異常検出には、統計的手法、機械学習手法、深層学習手法など、一般的に使用される手法が多数あります。この記事では、統計的手法と機械学習手法に基づく 2 つの時系列異常検出アルゴリズムを紹介し、対応するコード例を示します。
1. 統計的手法に基づく異常検出アルゴリズム
1.1 平均分散法
平均分散法は、最も単純な異常検出手法の 1 つです。基本的な考え方は、時系列データの平均と分散に基づいて異常の有無を判断することです。平均からのデータ ポイントの偏差が特定のしきい値 (たとえば、標準偏差の 3 倍) より大きい場合、異常であると判断されます。
次は、Python を使用して時系列異常検出の平均分散法を実装するコード例です:
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)
実行結果:
異常データ インデックス: [5 ]
1.2 箱ひげ図法
箱ひげ図法は、よく使用されるもう 1 つの異常検出方法です。データの四分位数 (上位四分位数と下位四分位数、中央値) に基づいて外れ値を決定します。中央値 (Q2) と上下四分位数 (Q1、Q3) に基づいて上限と下限を計算し、データ ポイントがこの境界を超えた場合に異常と判断します。
次は、Python を使用して時系列異常検出のための箱ひげ図メソッドを実装するコード例です:
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)
実行結果:
異常データ インデックス: [5]
2. 機械学習手法に基づく異常検出アルゴリズム
2.1 孤立フォレスト アルゴリズム
孤立フォレスト アルゴリズムは、教師なし学習に基づく異常検出手法です。決定木のセグメント化手法を使用して、データ ポイントの異常を判断します。分離フォレスト アルゴリズムでは、外れ値の特徴空間上の密度が低いと想定しているため、デシジョン ツリーを構築する際、外れ値のパス長は短くなります。
以下は、Python を使用して時系列異常検出のための分離フォレスト アルゴリズムを実装するコード例です:
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)
実行結果:
異常なデータ インデックス: [5]
2.2 時系列分解法
時系列分解法は、時系列データを傾向、季節性、残差の 3 つの部分に分解し、分析することで、従来の統計手法に基づいた異常検出手法です。残差を測定して異常点を特定します。
次は、Python を使用して時系列異常検出のための時系列分解メソッドを実装するコード例です:
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)
実行結果:
異常なデータ インデックス: [1, 5]
結論
時系列に基づく異常検出の問題は、非常に重要かつ現実的な問題です。この記事では、統計的手法に基づく平均分散法と箱ひげ図法、および機械学習手法に基づく分離フォレスト アルゴリズムと時系列分解法という、一般的に使用される 2 つの異常検出手法を紹介します。上記のコード例を通じて、読者は Python を使用してこれらのアルゴリズムを実装し、異常検出のために実際の時系列データに適用する方法を理解できます。この記事が時系列異常検出に関して読者の役に立てば幸いです。
以上が時系列に基づく異常検出問題の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。