チュートリアル: バッチ検出と Power BI (一変量) を使用して異常を視覚化する

重要

2023 年 9 月 20 日以降は、新しい Anomaly Detector リソースを作成できなくなります。 Anomaly Detector サービスは、2026 年 10 月 1 日に廃止されます。

このチュートリアルを使用して、時系列データ セット内の異常をバッチとして検出します。 Power BI Desktop を使用して、Excel ファイルを取得し、Anomaly Detector API のデータを準備して、全体を通しての統計的異常を視覚化します。

このチュートリアルで学習する内容は次のとおりです。

  • Power BI Desktop を使用して時系列データ セットをインポートして変換する
  • バッチの異常検出のために Power BI Desktop を Anomaly Detector API と統合する
  • 予期された値と確認された値を含み、データ内で見つかった異常と、異常検出の境界を視覚化します。

前提条件

  • Azure サブスクリプション
  • Microsoft Power BI Desktop (無料で利用可能)。
  • 時系列データ ポイントを含む Excel ファイル (.xlsx)。
  • Azure サブスクリプションを入手したら、Azure portal で Anomaly Detector リソースを作成し 、キーとエンドポイントを取得します。
    • 対象のアプリケーションを Anomaly Detector API に接続するには、作成したリソースのキーとエンドポイントが必要です。 この作業は、このクイックスタートの中で後から行います。

Note

Anomaly Detector API を使用したときに最善の結果を得るには、JSON 形式の時系列のデータに以下の項目を含める必要があります。

  • 同じ間隔で区切られたデータ ポイント。予測されるポイント数の 10% しか失われません。
  • データに明確な季節性パターンがない場合、少なくとも 12 のデータ ポイント。
  • データに明確な季節性パターンがある場合、少なくとも 4 つのパターン オカレンス。

時系列データを読み込んで書式を設定する

開始するには、Power BI Desktop を開き、前提条件からダウンロードした時系列データを読み込みます。 この Excel ファイルには、一連の協定世界時 (UTC) タイムスタンプと値のペアが含まれています。

Note

Power BI では、.csv ファイル、SQL データベース、Azure BLOB ストレージなど、さまざまなソースのデータを使用できます。

Power BI Desktop のメイン ウィンドウで、 [ホーム] リボンを選択します。 リボンの [外部データ] グループで、[データの取得] ドロップダウン メニューを開き、[Excel] を選択します。

An image of the

ダイアログ ボックスが表示されたら、サンプルの .xlsx ファイルをダウンロードしたフォルダーに移動し、このファイルを選択します。 [ナビゲーター] ダイアログが表示されたら、[Sheet1] を選択してから [編集] を選択します。

An image of the data source

Power BI は、最初の列のタイムスタンプを Date/Time データ型に変換します。 Anomaly Detector API に送信するためには、これらのタイムスタンプをテキストに変換する必要があります。 Power Query エディターが自動的に開かない場合は、ホーム タブで [クエリの編集] を選択します。

Power Query エディターで [変換] リボンを選択します。 [任意の列] グループで [データ型:] ドロップダウン メニューを開き、 [テキスト] を選択します。

An image of the data type drop down

列の型の変更について通知されたら、[現在のものを置換] を選択します。 その後、[ホーム] リボンの [閉じて適用] または [適用] を選択します。

データを作成して応答の書式を設定するための関数を作成する

データ ファイルの書式を設定して Anomaly Detector API に送信するために、上記で作成したテーブルに対するクエリを呼び出すことができます。 Power Query エディターの [ホーム] リボンから、[新しいソース] ドロップダウン メニューを開いて、[空のクエリ] を選択します。

新しいクエリが選択されていることを確認してから、[詳細エディター] を選択します。

An image of the

詳細エディター内で、次の Power Query M スニペットを使用して、テーブルから列を抽出して API に送信します。 その後、クエリにより JSON 応答からテーブルが作成されて返されます。 apiKey 変数を有効な Anomaly Detector API キーに置き換え、endpoint をエンドポイントに置き換えます。 詳細エディターにクエリを入力したら、[完了] を選択します。

(table as table) => let

    apikey      = "[Placeholder: Your Anomaly Detector resource access key]",
    endpoint    = "[Placeholder: Your Anomaly Detector resource endpoint]/anomalydetector/v1.0/timeseries/entire/detect",
    inputTable = Table.TransformColumnTypes(table,{{"Timestamp", type text},{"Value", type number}}),
    jsontext    = Text.FromBinary(Json.FromValue(inputTable)),
    jsonbody    = "{ ""Granularity"": ""daily"", ""Sensitivity"": 95, ""Series"": "& jsontext &" }",
    bytesbody   = Text.ToBinary(jsonbody),
    headers     = [#"Content-Type" = "application/json", #"Ocp-Apim-Subscription-Key" = apikey],
    bytesresp   = Web.Contents(endpoint, [Headers=headers, Content=bytesbody, ManualStatusHandling={400}]),
    jsonresp    = Json.Document(bytesresp),

    respTable = Table.FromColumns({

                     Table.Column(inputTable, "Timestamp")
                     ,Table.Column(inputTable, "Value")
                     , Record.Field(jsonresp, "IsAnomaly") as list
                     , Record.Field(jsonresp, "ExpectedValues") as list
                     , Record.Field(jsonresp, "UpperMargins")as list
                     , Record.Field(jsonresp, "LowerMargins") as list
                     , Record.Field(jsonresp, "IsPositiveAnomaly") as list
                     , Record.Field(jsonresp, "IsNegativeAnomaly") as list

                  }, {"Timestamp", "Value", "IsAnomaly", "ExpectedValues", "UpperMargin", "LowerMargin", "IsPositiveAnomaly", "IsNegativeAnomaly"}
               ),

    respTable1 = Table.AddColumn(respTable , "UpperMargins", (row) => row[ExpectedValues] + row[UpperMargin]),
    respTable2 = Table.AddColumn(respTable1 , "LowerMargins", (row) => row[ExpectedValues] -  row[LowerMargin]),
    respTable3 = Table.RemoveColumns(respTable2, "UpperMargin"),
    respTable4 = Table.RemoveColumns(respTable3, "LowerMargin"),

    results = Table.TransformColumnTypes(

                respTable4,
                {{"Timestamp", type datetime}, {"Value", type number}, {"IsAnomaly", type logical}, {"IsPositiveAnomaly", type logical}, {"IsNegativeAnomaly", type logical},
                 {"ExpectedValues", type number}, {"UpperMargins", type number}, {"LowerMargins", type number}}
              )

 in results

[パラメーターの入力] の下にある Sheet1 を選択してデータ シートでクエリを呼び出して、[呼び出し] を選択します。

An image of the invoke function

重要

終わったらコードからキーを削除し、公開しないよう注意してください。 運用環境では、Azure Key Vault などの資格情報を格納してアクセスする安全な方法を使用します。 詳細については、Azure AI サービスのセキュリティに関する記事を参照してください。

データ ソースのプライバシーと認証

Note

データのプライバシーとアクセスのための組織のポリシーに注意してください。 詳細については、Power BI Desktop のプライバシー レベルに関するページを参照してください。

クエリは外部データ ソースを利用するため、実行しようとすると警告メッセージが表示されることがあります。

An image showing a warning created by Power BI

これを解決するには、[ファイル] をクリックしてから、[オプションと設定] を選択します。 次に、[オプション] を選択します。 [現在のファイル][プライバシー] を選択して、 [プライバシー レベルを無視し、可能であればパフォーマンスを向上させる] を選択します。

さらに、API に接続する方法を指定するよう求めるメッセージが表示されることもあります。

An image showing a request to specify access credentials

これを解決するには、メッセージ内の [資格情報を編集] を選択します。 ダイアログ ボックスが表示されたら、 [匿名] を選択して API に匿名で接続します。 次に、 [接続](Connect) を選択します。

その後、[ホーム] リボンの [閉じて適用] を選択して、変更内容を適用します。

Anomaly Detector API 応答を視覚化する

Power BI のメイン画面で、上で作成したクエリの使用を開始して、データを視覚化します。 まず、 [視覚化][折れ線グラフ] を選択します。 次に、呼び出された関数から折れ線グラフの [軸] へのタイムスタンプを追加します。 これを右クリックし、 [タイムスタンプ] を選択します。

Right-clicking the Timestamp value

次に、 [呼び出された関数] の以下のフィールドを、グラフの [値] フィールドに追加します。 下のスクリーンショットを使用すると、グラフの作成に役立ちます。

  • UpperMargins
  • LowerMargins
  • ExpectedValues

An image of the chart settings

フィールドを追加したら、グラフを選択し、すべてのデータ ポイントが表示されるようにサイズを変更します。 次のようなスクリーンショットのようなグラフが表示されます。

An image of the chart visualization

異常データ ポイントを表示する

Power BI ウィンドウの右側にある [フィールド] ウィンドウの [Invoked Function query] (呼び出された関数のクエリ)[値] を右クリックし、[新しいクイック メジャー] を選択します。

An image of the new quick measure screen

表示される画面で、計算として [フィルターされた値] を選択します。 [基準値]Sum of Value に設定します。 次に、 [呼び出された関数] フィールドの IsAnomaly[フィルター] までドラッグします。 [フィルター] ドロップダウン メニューから True を選択します。

A second image of the new quick measure screen

[OK] を選択すると、フィールドの一覧の下部に Value for True フィールドが表示されます。 これを右クリックして、名前を「異常」に変更します。 これをグラフの [値] に追加します。 次に、 [形式] ツールを選択し、X 軸の種類を [カテゴリ別] に設定します。

An image of the format x axis

[形式] ツールで [データの色] を選択して、グラフに色を適用します。 次のようなグラフが表示されます。

An image of the final chart