重要
2023 年 9 月 20 日から、新しい Anomaly Detector リソースを作成することはできません。 Anomaly Detector サービスは、2026 年 10 月 1 日に廃止されます。
オープンソースの
このチュートリアルを使用して、時系列データ セット内の異常をバッチとして検出します。 Power BIデスクトップを使用すると、Excel ファイルを取得し、Azure AI Anomaly Detectorのデータを準備し、その全体で統計的な異常を視覚化します。
このチュートリアルで学習する内容は次のとおりです。
- Power BI Desktop を使用して時系列データ セットをインポートおよび変換する
- Power BI Desktop とバッチ異常検出のAzure AI Anomaly Detectorを統合する
- 予期された値と確認された値を含み、データ内で見つかった異常と、異常検出の境界を視覚化します。
前提条件
- Azure サブスクリプション
- Microsoft Power BI デスクトップ、無料でご利用いただけます。
- 時系列データ ポイントを含む Excel ファイル (.xlsx)。
- Azure サブスクリプションを取得したら、Azure ポータルに Anomaly Detector リソース を作成して、キーとエンドポイントを取得します。
- アプリケーションをAzure AI Anomaly Detectorに接続するには、作成するリソースのキーとエンドポイントが必要です。 この作業は、このクイックスタートの中で後から行います。
注
最良の結果を得るために、Azure AI Anomaly Detector を利用する場合は、JSON 形式の時系列データに次の要素を含めてください。
- 同じ間隔で区切られたデータ ポイント。予測されるポイント数の 10% しか失われません。
- データに明確な季節性パターンがない場合、少なくとも 12 のデータ ポイント。
- データに明確な季節性パターンがある場合、少なくとも 4 つのパターン オカレンス。
時系列データを読み込んで書式を設定する
開始するには、Power BI Desktop を開き、前提条件からダウンロードした時系列データを読み込みます。 この Excel ファイルには、一連の協定世界時 (UTC) タイムスタンプと値のペアが含まれています。
注
Power BIでは、.csv ファイル、SQL データベース、Azure BLOB ストレージなど、さまざまなソースからのデータを使用できます。
メイン Power BI デスクトップ ウィンドウで、Home リボンを選択します。 リボンの External data グループで、Get Data ドロップダウン メニューを開き、Excel を選択します。
ダイアログ ボックスが表示されたら、サンプルの .xlsx ファイルをダウンロードしたフォルダーに移動し、このファイルを選択します。 [ナビゲーター] ダイアログが表示されたら、[Sheet1] を選択してから [編集] を選択します。
Power BIは、最初の列のタイムスタンプを Date/Time データ型に変換します。 Azure AI Anomaly Detectorに送信するには、これらのタイムスタンプをテキストに変換する必要があります。 Power Query エディターが自動的に開かない場合は、[ホーム] タブで Edit Queries を選択します。
Power Query エディターで Transform リボンを選択します。 [任意の列] グループで [データ型:] ドロップダウン メニューを開き、[テキスト] を選択します。
列の型の変更について通知されたら、[現在のものを置換] を選択します。 その後、[ホーム] リボンの [閉じて適用] または [適用] を選択します。
データを作成して応答の書式を設定するための関数を作成する
データ ファイルを書式設定してAzure AI Anomaly Detectorに送信するには、上記で作成したテーブルに対してクエリを呼び出します。 Power Query エディターで、Home リボンから New Source ドロップダウン メニューを開き、 Blank Query を選択します。
新しいクエリが選択されていることを確認し、詳細エディターを選択します。
詳細エディター内で、次の Power Query M スニペットを使用してテーブルから列を抽出し、API に送信します。 その後、クエリにより JSON 応答からテーブルが作成されて返されます。
apiKey 変数を有効なAzure AI Anomaly Detector キーに置き換え、endpointをエンドポイントに置き換えます。 詳細エディターにクエリを入力したら、Done を選択します。
(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 の下にある を選択してデータ シートでクエリを呼び出して、[呼び出し] を選択します。
重要
終わったらコードからキーを削除し、公開しないよう注意してください。 運用環境では、
データ ソースのプライバシーと認証
注
データのプライバシーとアクセスのための組織のポリシーに注意してください。 詳細については、「Power BI デスクトップのプライバシー レベル」を参照してください。
クエリは外部データ ソースを利用するため、実行しようとすると警告メッセージが表示されることがあります。
これを解決するには、[ファイル] をクリックしてから、[オプションと設定] を選択します。 次に、[オプション] を選択します。 [現在のファイル] で [プライバシー] を選択して、[プライバシー レベルを無視し、可能であればパフォーマンスを向上させる] を選択します。
さらに、API に接続する方法を指定するよう求めるメッセージが表示されることもあります。
これを解決するには、メッセージ内の [資格情報を編集] を選択します。 ダイアログ ボックスが表示されたら、[匿名] を選択して API に匿名で接続します。 次に、[接続]\(Connect\) を選択します。
その後、[ホーム] リボンの [閉じて適用] を選択して、変更内容を適用します。
Azure AI Anomaly Detector応答を視覚化する
メインのPower BI画面で、上記で作成したクエリを使用してデータを視覚化します。 まず、[視覚化] で [折れ線グラフ] を選択します。 次に、呼び出された関数から折れ線グラフの [軸] へのタイムスタンプを追加します。 これを右クリックし、[タイムスタンプ] を選択します。
次に、[呼び出された関数] の以下のフィールドを、グラフの [値] フィールドに追加します。 下のスクリーンショットを使用すると、グラフの作成に役立ちます。
- 値
- UpperMargins
- ロワーマージン
- 期待値
フィールドを追加したら、グラフを選択し、すべてのデータ ポイントが表示されるようにサイズを変更します。 次のようなスクリーンショットのようなグラフが表示されます。
異常データ ポイントを表示する
Power BI ウィンドウの右側にある
表示される画面で、計算として [フィルターされた値] を選択します。
[基準値] を Sum of Value に設定します。 次に、IsAnomaly フィールドの を [フィルター] までドラッグします。
True ドロップダウン メニューから を選択します。
[OK] を選択すると、フィールドの一覧の下部に Value for True フィールドが表示されます。 これを右クリックして、名前を「異常」に変更します。 これをグラフの [値] に追加します。 次に、[形式] ツールを選択し、X 軸の種類を [カテゴリ別] に設定します。
[形式] ツールで [データの色] を選択して、グラフに色を適用します。 次のようなグラフが表示されます。