Поделиться через


Руководство по визуализации аномалий c помощью пакетного обнаружения (однопараметрического) и Power BI

Внимание

Начиная с 20 сентября 2023 г. вы не сможете создавать новые Детектор аномалий ресурсы. Служба Детектор аномалий отменяется 1 октября 2026 года.

В этом учебнике показано, как найти аномалии в наборе данных временных рядов в пакетном режиме. В Power BI Desktop в файле Excel подготовьте данные для API Детектора аномалий и визуализируйте статистические аномалии в нем.

Из этого руководства вы узнаете, как выполнять следующие задачи:

  • Импорт и преобразование набора данных временных рядов в Power BI Desktop.
  • Интеграция Power BI Desktop с API Детектора аномалий для пакетного обнаружения аномалий.
  • Визуализация аномалий, которые находятся в данных, включая ожидаемые и видимые значения, а также границы обнаружения аномалий.

Необходимые компоненты

  • Подписка Azure
  • Microsoft Power BI Desktop предоставляется бесплатно.
  • Файл Excel (XLSX) содержит точки данных временных рядов.
  • После получения подписки Azure создайте ресурс Детектор аномалий в портал Azure, чтобы получить ключ и конечную точку.
    • Для подключения приложения к API "Детектор аномалий" потребуется ключ и конечная точка из созданного ресурса. Вы сделаете это позже в этом кратком руководстве.

Примечание.

Для лучших результатов при использовании API "Детектор аномалий", данные временных рядов в формате JSON должны включать:

  • точки данных, разделенные одним и тем же интервалом, при этом не более 10 % ожидаемого числа отсутствующих точек;
  • по крайней мере 12 точек данных, если данные не имеют четкого шаблона;
  • по крайней мере 4 экземпляра шаблона, если данные имеют четкий шаблон.

Загрузка и форматирование данных временных рядов

Чтобы начать работу, откройте Power BI Desktop и загрузите данные временных рядов, которые вы скачали при выполнении предварительных требований. Этот файл Excel содержит ряд пар меток времени в формате UTC и значений.

Примечание.

Power BI использует данные из разнообразных источников, например из CSV-файлов, баз данных SQL, хранилища BLOB-объектов Azure и других.

В главном окне Power BI Desktop выберите ленту Главная. В группе внешних данных ленты откройте раскрывающееся меню "Получить данные" и выберите Excel.

Изображение кнопки

В появившемся диалоговом окне перейдите в папку, в которую вы скачали пример файла XLSX, и выберите его. После появления диалогового окна "Навигатор" выберите "Лист1" и "Изменить".

Изображение экрана

Power BI преобразует отметки времени в первом столбце в тип данных Date/Time. Эти метки времени должны быть преобразованы в текст для отправки в API Детектора аномалий. Если редактор Power Query не открывается автоматически, выберите "Изменить запросы " на домашней вкладке.

Выберите ленту преобразования в Редактор Power Query. В группе Любой столбец откройте раскрывающееся меню Тип данных: и выберите Текстовый.

Изображение раскрывающегося списка типа данных

Когда вы получите уведомление об изменении типа столбца, нажмите кнопку "Заменить текущий". Затем нажмите кнопку "Закрыть" и "Применить" на ленте "Главная".

Создание функции для отправки данных и форматирования ответа

Чтобы отформатировать и отправить файл данных в API Детектора аномалий, вы можете вызвать запрос к созданной ранее таблице. В Редактор Power Query на ленте "Главная" откройте раскрывающееся меню "Новый источник" и выберите "Пустой запрос".

Убедитесь, что выбран новый запрос, а затем выберите Расширенный редактор.

Изображение экрана

В Расширенном редакторе используйте следующий фрагмент кода Power Query M для извлечения столбцов из таблицы и отправки их в API. Запрос создаст таблицу на основе ответа JSON и вернет ее. Замените переменную apiKey на допустимый ключ 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 в разделе "Введите параметр" и выберите "Вызвать".

Изображение функции вызова

Внимание

Обязательно удалите ключ из кода, когда завершите работу, и ни в коем случае не публикуйте его в открытом доступе. Для рабочей среды используйте безопасный способ хранения и доступа к учетным данным, например Azure Key Vault. Дополнительные сведения см. в статье по безопасности служб ИИ Azure.

Конфиденциальность источника данных и аутентификация

Примечание.

Ознакомьтесь с политиками своей организации в отношении конфиденциальности данных и доступа к ним. Дополнительные сведения см. в статье об уровнях конфиденциальности Power BI Desktop.

При попытке выполнить запрос может появиться предупреждающее сообщение, так как в запросе используется внешний источник данных.

Изображение, демонстрирующее предупреждение в Power BI

Чтобы устранить эту проблему, выберите "Файл" и "Параметры" и "Параметры". Затем выберите "Параметры". Под пунктом Текущий файл выберите Конфиденциальность и Игнорировать уровни конфиденциальности для возможного улучшения производительности.

Кроме того, может появиться сообщение с предложением указать способ подключения к API.

Изображение, демонстрирующее запрос для указания учетных данных для доступа

Чтобы устранить эту проблему, выберите "Изменить учетные данные" в сообщении. Когда появится диалоговое окно, выберите Анонимно для анонимного подключения к API. В этом случае выберите Подключиться.

После этого нажмите кнопку "Закрыть" и " Применить" на ленте "Главная ", чтобы применить изменения.

Визуализация ответа API Детектора аномалий

На главном экране Power BI начните использовать созданные ранее запросы для визуализации данных. Сначала выберите в разделе Визуализации тип График. Затем добавьте на ось графика метку времени из вызванной функции. Щелкните значение правой кнопкой мыши и выберите Метка времени.

Щелкните значение метки времени правой кнопкой мыши

Добавьте следующие поля из раздела Вызванная функция в поле Значения графика. Создайте график, используя параметры в приведенном ниже снимке экрана.

  • Значение
  • UpperMargins
  • LowerMargins
  • ExpectedValues

Изображение параметров диаграммы

После добавления полей выберите диаграмму и измените его размер, чтобы отобразить все точки данных. График будет выглядеть примерно так, как на снимке экрана ниже:

Изображение визуализации диаграммы

Отображение точек данных с аномалиями

В правой части окна Power BI под областью FIELDS щелкните правой кнопкой мыши значение в запросе вызываемой функции и выберите "Создать быструю меру".

Изображение экрана новой быстрой меры

На появившемся экране выберите Отфильтрованное значение в качестве вычисления. В поле Базовое значение выберите значение Sum of Value. Затем перетащите значение IsAnomaly из полей Вызванная функция в поле Фильтр. В раскрывающемся меню Фильтр выберите значение True.

Второе изображение экрана новой быстрой меры

После нажатия кнопки "ОК" в нижней части списка полей появится Value for True поле. Щелкните его правой кнопкой мыши и переименуйте на Аномалии. Добавьте его в значения графика. Затем выберите средство Формат и задайте для оси X тип Категориальный.

Изображение формата оси X

Примените цвета к диаграмме, выбрав инструмент "Формат " и "Цвета данных". График должен выглядеть примерно следующим образом:

Изображение конечной диаграммы