バックグラウンド
私はネットワークオペレーションセンターで働いており、コンピューターシステムとそのパフォーマンスを監視しています。監視する重要な指標の1つは、現在サーバーに接続している訪問者数と顧客数です。それを可視化するために、Opsチームは時系列データなどのメトリックを収集し、グラフを描画します。Graphiteはそれを可能にします。突然のドロップ(大部分)やその他の変更が発生した場合にチームに通知するアラートシステムを構築するために使用する非常に豊富なAPIを備えています。ここでは、平均値に基づいて静的なしきい値を設定しましたが、日中と週中の負荷が異なるため(季節性要因)、あまりうまく機能しません(多くの誤検知があります)。
次のようになります。
実際のデータ(1つのメトリックの例、15分の時間範囲。最初の数字はユーザー数、2番目はタイムスタンプ):
[{"target": "metric_name", "datapoints": [[175562.0, 1431803460], [176125.0, 1431803520], [176125.0, 1431803580], [175710.0, 1431803640], [175710.0, 1431803700], [175733.0, 1431803760], [175733.0, 1431803820], [175839.0, 1431803880], [175839.0, 1431803940], [175245.0, 1431804000], [175217.0, 1431804060], [175629.0, 1431804120], [175104.0, 1431804180], [175104.0, 1431804240], [175505.0, 1431804300]]}]
私が達成しようとしていること
最近のデータポイントを受信し、それらを過去の平均値と比較し、突然の変更またはドロップがあった場合にアラートを送信するPythonスクリプトを作成しました。季節性のため、「静的」しきい値はうまく機能せず、スクリプトは誤検知アラートを生成します。アラートアルゴリズムをより正確に改善し、アラートのしきい値を絶えず調整することなく機能するようにしたいと考えています。
必要なアドバイスと発見したこと
グーグルで私は、異常検出のための機械学習アルゴリズム(監視なしアルゴリズム)を探していると考えました。さらに調査を行った結果、それらは非常に多く、どれが私の場合に当てはまるかを理解することは非常に困難です。数学の知識が限られているため、洗練された学術論文を読むことができず、この分野の初心者にとって簡単なものを探しています。
私はPythonが好きで、Rに少し精通しているので、これらの言語の例を見て喜んでいます。問題を解決するのに役立つ良い本や記事をお勧めします。あなたの時間をありがとう、そのような長い説明のために私を許します
便利なリンク
同様の質問:
外部リソース:
auto.arima
、Rの優れたforecast
パッケージの機能を使用して、継続的な定期的な予測を構築することでアラートを設定することでした(jstatsoft.org/v27/i03/paperを参照)。level
パラメータを調整することにより、信頼レベルを調整できますdata.model <- auto.arima(data.zoo, ic = c("bic")); data.prediction.warningLimits <- forecast(data.model, h=1, level=0.99)
。