【はじめての Databricks】金融取引データから異常検知 #3 Anomaly Detector

はじめに

Databricks の Notebook から Azure Anomaly Detector の API を叩いて結果を可視化するところまでを行います。

連絡目次

  1. 導入/環境設定
  2. Collaborative Notebook でデータ可視化
  3. Anomaly Detector をデータ探索ツールとして使ってみる → 本稿
  4. 1つ目のモデル構築 (データの偏り 未考慮)
  5. 2つ目のモデル構築 (データの偏り 考慮)

Anomaly Detector とは

Anomaly Detector はマネージド型AIサービスとして提供されている Azure Cognitive Services の一つです。

  • 時系列データセットから異常検出
  • 教師なし学習
  • 異常に対する感度を微調整可能
  • APIでアプリケーションへ組み込み可能
  • データ型や欠損値に対する制約がちょっと厳しい

予測結果の可視化一例
image.png
X軸が時間、Y軸が数値。青の実線が投入したデータ。
解析の結果異常ではないと判定されたエリアが水色、異常値と判定されたデータは赤でプロットされている。

本連載の主題である異常検知モデルには利用していませんが、時系列データの特徴をさっと把握したいときに使えるかも、入力/出力ともにシンプルなので Detabricks の可視化機能と相性いいかも、ということで試してみました。

テストデータ生成

Anomaly Detector に投入する Body データは以下を満たす必要があります。

  • UTC 形式のタイムスタンプ (カラム名 = timestamp)
  • 数値 (異常検出対象。カラム名 = value)

今回は前記事で周期性を明確に見られた区間を抜粋し、 Step が前者、トランザクション数が後者になるようにデータを成型、テストデータとしました。

テストデータを棒グラフにしてみます。数値の吹き出しがある箇所でトランザクションの少ないことはすぐ分かりますが、他にも特筆すべきポイントがあるかもしれません。

result image.png

環境変数設定

まず Anomaly Detector のリソースを作成します。 (こちらの記事が参考になります)

エンドポイント URL と API Key を取得したら、クラスタの環境変数に追加しておきます。(Notebook に平打ちするのはセキュリティ上よろしくない)

2020-08-26_19h18_03.png
2020-08-26_19h19_51.png

関数定義

パラメータや実行関数を定義します。

実行・結果可視化

API にデータを投げ、元のデータフレームと結合します。

isAnomaly (予測結果。1=異常、0=通常) に絞ってグラフ化します。吹き出しの出ている箇所は目視では気が付きませんでしたが、確かに別の日の同じ時間に比べるとトランザクション数が低いように思われます。

result image.png

plot option
image.png

まとめ

私たちはグラフにするとなんとなく分かったような気になってしまう傾向があります。Anonaly Detector は先入観なしに時系列データを見てみたい時に便利かもしれませんね。次回は実際に決定木を用いてモデルを構築します。お楽しみに!

参考リンク

Anomaly Detector 公式トップページ
Anomaly Detector API の使用に関するベスト プラクティス
Cognitive Service: Anomaly Detector APIを試す
クイック スタート:Anomaly Detector REST API および Python を使用し、時系列データ内の異常を検出する