Обнаружение смещения данных в наборах данных (предварительная версия)

ОБЛАСТЬ ПРИМЕНЕНИЯ:Пакет SDK для Python для ML Azure версии 1

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

С помощью мониторов наборов данных Машинного обучения Azure (предварительная версия) можно выполнить следующее:

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

Набор данных Машинное обучение Azure используется для создания монитора. Набор данных должен включать столбец метки времени (timestamp).

Метрики смещения данных можно просмотреть с помощью пакета SDK для Python или в Студии машинного обучения Azure. Прочие метрики и сведения доступны на ресурсе Azure Application Insights, связанном с рабочим пространством Машинного обучения Azure.

Важно!

В настоящее время обнаружение смещения данных в наборах данных предоставляется в виде общедоступной предварительной версии. Предварительная версия предоставляется без соглашения об уровне обслуживания и не рекомендована для производственных рабочих нагрузок. Некоторые функции могут не поддерживаться или их возможности могут быть ограничены. Дополнительные сведения см. в статье Дополнительные условия использования Предварительных версий Microsoft Azure.

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

Для создания и работы с мониторами набора данных необходимо следующее:

Что такое смещение данных?

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

Причины смещения данных включают следующие:

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

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

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

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

Мониторы набора данных

Мониторы набора данных обеспечивают:

  • обнаружение и оповещение о смещении в новых данных в наборе данных;
  • анализ исторических данных для смещения;
  • профилирование новых данных с течением времени.

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

Пользовательские оповещения можно настроить с помощью Azure Application Insights во всех метриках, создаваемых монитором. Мониторы наборов данных можно использовать для быстрого поиска проблем с данными и для сокращения времени отладки проблем за счет выявления вероятных причин.

Концептуально существует три основных сценария настройки мониторов набора данных в Машинном обучении Azure.

Сценарий Description
Мониторинг рабочих данных модели на предмет отклонения от данных обучения Результаты из этого сценария можно интерпретировать как прокси-мониторинг точности модели, поскольку точность модели снижается при отслеживании смещения данных обучения.
Мониторинг набора данных временных рядов на предмет смещения относительно предыдущего периода времени. Этот сценарий является более общим и может использоваться для мониторинга наборов данных, предшествующих формированию модели или следующих за ним. Целевой набор данных должен содержать столбец отметки времени. Контрольным набором данных может служить любой табличный набор данных с признаками, аналогичными целевому набору данных.
Анализ прошлых данных. Этот сценарий можно использовать для изучения исторических данных и выработки информированных решений о параметрах мониторов набора данных.

Мониторы наборов данных опираются на следующие службы Azure.

Служба Azure Description
Набор данных В смещении используются наборы данных Машинного обучения Azure для получения данных обучения и сравнения данных для обучения модели. Создание профиля данных используется для выработки некоторых метрик, включаемых в отчеты, таких как минимум, максимум, уникальные значения и число уникальных значений.
конвейер и вычисления Машинное обучение Azure Задание вычисления смещения размещается в конвейере Машинное обучение Azure. Это задание активируется по требованию или по расписанию для выполнения в вычислении, настроенном в момент создания монитора смещения.
Application Insights. Смещение выдает в Application Insights метрики, принадлежащие рабочей области машинного обучения.
Хранилище BLOB-объектов Azure Смещение создает метрики в формате JSON в хранилище BLOB-объектов Azure.

Контрольные и целевые наборы данных

Вы отслеживаете Машинное обучение Azure наборы данных для смещения данных. При создании монитора набора данных вы ссылаетесь на следующие элементы:

  • Контрольный набор данных — обычно это обучающий набор данных для модели.
  • Целевой набор данных — обычно это входные данные модели, которые сравниваются с базовым набором данных по ходу времени. Эта возможность сравнения означает, что в целевом наборе данных должен быть задан столбец отметки времени.

Монитор сравнивает базовые и целевые наборы данных.

Создание целевого набора данных

Для целевого набора данных необходимо определить набор признаков timeseries, задавая столбец отметки времени либо из столбца данных, либо из виртуального столбца, образуемого на основе шаблона путей к файлам. Создайте набор данных с меткой времени с помощью пакета SDK для Python или Студии машинного обучения Azure. Необходимо указать столбец, представляющий "отметку времени" (timestamp), чтобы добавить признак timeseries в набор данных. Если данные разделены по структуре папок, содержащей информацию о времени, например "{гггг/ММ/дд}", создайте виртуальный столбец с помощью параметра шаблона пути и задайте для него значение "метка времени раздела", чтобы использовать функции API временных рядов.

ОБЛАСТЬ ПРИМЕНЕНИЯ:Пакет SDK для Python для ML Azure версии 1

МетодDataset класса with_timestamp_columns() определяет столбец метки времени для набора данных.

from azureml.core import Workspace, Dataset, Datastore

# get workspace object
ws = Workspace.from_config()

# get datastore object
dstore = Datastore.get(ws, 'your datastore name')

# specify datastore paths
dstore_paths = [(dstore, 'weather/*/*/*/*/data.parquet')]

# specify partition format
partition_format = 'weather/{state}/{date:yyyy/MM/dd}/data.parquet'

# create the Tabular dataset with 'state' and 'date' as virtual columns
dset = Dataset.Tabular.from_parquet_files(path=dstore_paths, partition_format=partition_format)

# assign the timestamp attribute to a real or virtual column in the dataset
dset = dset.with_timestamp_columns('date')

# register the dataset as the target dataset
dset = dset.register(ws, 'target')

Совет

Полный пример использования признака timeseries в наборе данных см. в примере записной книжки или в документации по пакету SDK для наборов данных.

Создание монитора набора данных

Создание монитора набора данных для обнаружения и оповещения о смещении данных в новом наборе данных. Используйте либо пакет SDK для Python, либо Студия машинного обучения Azure.

Как описано далее, монитор набора данных выполняется с заданной частотой (ежедневно, еженедельно, ежемесячно) интервалами. Он анализирует новые данные, доступные в целевом наборе данных с момента последнего запуска. В некоторых случаях такой анализ последних данных может быть недостаточно:

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

Функция обратной заполнения выполняет задание обратной заполнения для указанного диапазона дат начала и окончания. Задание обратной заполнения заполняет ожидаемые отсутствующие точки данных в наборе данных, как способ обеспечения точности и полноты данных.

ОБЛАСТЬ ПРИМЕНЕНИЯ:Пакет SDK для Python для ML Azure версии 1

Полные сведения см. в справочной документации по пакету SDK для Python.

Следующий пример показывает, как создать монитор набора данных с помощью пакета Python SDK

from azureml.core import Workspace, Dataset
from azureml.datadrift import DataDriftDetector
from datetime import datetime

# get the workspace object
ws = Workspace.from_config()

# get the target dataset
target = Dataset.get_by_name(ws, 'target')

# set the baseline dataset
baseline = target.time_before(datetime(2019, 2, 1))

# set up feature list
features = ['latitude', 'longitude', 'elevation', 'windAngle', 'windSpeed', 'temperature', 'snowDepth', 'stationName', 'countryOrRegion']

# set up data drift detector
monitor = DataDriftDetector.create_from_datasets(ws, 'drift-monitor', baseline, target,
                                                      compute_target='cpu-cluster',
                                                      frequency='Week',
                                                      feature_list=None,
                                                      drift_threshold=.6,
                                                      latency=24)

# get data drift detector by name
monitor = DataDriftDetector.get_by_name(ws, 'drift-monitor')

# update data drift detector
monitor = monitor.update(feature_list=features)

# run a backfill for January through May
backfill1 = monitor.backfill(datetime(2019, 1, 1), datetime(2019, 5, 1))

# run a backfill for May through today
backfill1 = monitor.backfill(datetime(2019, 5, 1), datetime.today())

# disable the pipeline schedule for the data drift detector
monitor = monitor.disable_schedule()

# enable the pipeline schedule for the data drift detector
monitor = monitor.enable_schedule()

Совет

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

Общие сведения о результатах смещения данных

В этом разделе показаны результаты мониторинга набора данных, приведенные на странице Наборы данных / Мониторы набора данных в Студии Azure. Вы можете обновить параметры и проанализировать существующие данные за определенный период времени на этой странице.

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

Drift overview

Метрическая Description
Величина смещения данных Процентная доля смещения между контрольным и целевым наборами данных с течением времени. Этот процент от 0 до 100, 0 указывает идентичные наборы данных и 100 указывает, что модель смещения данных Машинное обучение Azure может полностью определить два набора данных отдельно. Предполагается наличие шума в выражении измеренного точного процентного значения, который зависит от того, какие методы машинного обучения используются для выработки значения этой величины.
Наиболее смещенные признаки Отображает признаки из набора данных, которые подверглись наибольшему смещению, и поэтому вносят наибольший вклад в метрику величины смещения. Из-за ковариации основное распределение функции не обязательно должно измениться, чтобы иметь относительно высокую важность признаков.
Threshold Величина смещения данных за пределами заданного порогового значения активирует оповещения. Настройте пороговое значение в параметрах монитора.

Тренд величины смещения

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

Drift magnitude trend

Величина смещения по признакам

В этом разделе содержатся аналитические сведения об изменении распределения выбранной функции и других статистических данных с течением времени.

Целевой набор данных также профилируется по времени. Статистическое расстояние между контрольным распределением каждого признака сравнивается с целевым набором данных, с учетом времени. Концептуально это напоминает величину смещения данных. Однако это статистическое расстояние относится к отдельному признаку, а не ко всем признакам. Кроме того, доступны значения минимума, максимума и среднего.

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

Drift magnitude by features

Эти метрики также можно получить в пакете SDK для Python с помощью вызова метода get_metrics() объекта DataDriftDetector.

Сведения о функции

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

Numeric feature graph and comparison

Метрики на диаграмме зависят от типа признака.

  • Числовые признаки

    Метрическая Description
    Метрика Васерштейна Минимальный объем работы, требуемой для преобразования контрольного распределения в целевое распределение.
    Среднее значение Среднее значение признака.
    Минимальное значение Минимальное значение признака.
    Максимальное значение Максимальное значение признака.
  • Категориальные признаки

    Метрическая Description
    Евклидское расстояние   Вычисляется для столбцов категорий. Евклидово расстояние вычисляется на двух векторах, сформированных из эмпирического распределения одного и того же столбца категорий из двух наборов данных. Значение 0 не указывает на разницу в эмпирических распределениях.  Чем больше это значение отклоняется от 0, тем более смещен данный столбец. Тренды можно рассматривать с помощью графика временных рядов для этой метрики, что может оказаться полезным при обнаружении смещения признака.  
    Уникальные значения Число уникальных значений (кардинальность) признака.

На этой диаграмме выберите одну дату для сравнения распределения признака между целевым объектом и этой датой для отображаемого признака. Применительно к числовым признакам это показывает два распределения вероятностей. Если признак является числовым, отображается линейчатая диаграмма.

Select a date to compare to target

Метрики, оповещения и события

Вы можете запросить метрики в ресурсе Azure Application Insights, связанном с рабочей областью машинного обучения. Пользователь имеет доступ ко всем признакам Application Insights, включая настройку пользовательских правил оповещения и групп действий для запуска таких действий, как отправка сообщений по электронной почте/SMS/Push-уведомлений/голосовых сообщений или Функций Azure. Дополнительные сведения см. в полной документации по Application Insights.

Чтобы приступить к работе, перейдите на портал Azure и выберите страницу Обзор своей рабочей области. Связанный ресурс Application Insights находится в крайнем правом углу:

Azure portal overview

Выберите журналы (аналитика) в разделе "Мониторинг" на левой панели:

Application insights overview

Метрики монитора набора данных хранятся в customMetrics. После настройки монитора набора данных можно написать и выполнить запрос для их просмотра:

Log analytics query

После определения метрик для настройки правил оповещения создайте новое правило оповещения:

New alert rule

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

New action group

Устранение неполадок

Ограничения и известные проблемы для мониторов смещения данных

  • Диапазон времени при анализе исторических данных ограничивается 31 интервалом в параметре частоты монитора.

  • Ограничение в 200 признаков, если не указан список признаков (то есть используются все признаки).

  • Размер среды вычисления должен быть достаточно большим для обработки данных.

  • Убедитесь, что набор данных содержит данные в пределах начальной и конечной даты для данного задания монитора.

  • Мониторы набора данных работают только с наборами данных, содержащими 50 строк или более.

  • Столбцы или признаки в наборе данных подразделяются на категориальные или числовые в зависимости от условий в следующей таблице. Если функция не соответствует этим условиям , например, столбец строки типа с >100 уникальными значениями - функция удаляется из алгоритма смещения данных, но по-прежнему профилируется.

    Тип компонента Тип данных Condition Ограничения
    Категориальный строка Число уникальных значений в признаке меньше 100 и меньше 5% от количества строк. Значение NULL считается собственной категорией.
    числовые; int, float Значения в функции являются числовым типом данных и не соответствуют условию категориальной функции. Признак исключается, если >15% значений равны нулю.
  • Если вы создали монитор смещения данных, но не видите данные на странице мониторов наборов данных в Студия машинного обучения Azure, попробуйте следующее.

    1. Проверьте, правильный ли диапазон дат выбран в верхней части страницы.
    2. На вкладке Мониторы набора данных выберите ссылку эксперимента для проверки состояния задания. Эта ссылка находится на правом краю таблицы.
    3. Если задание завершилось успешно, проверьте журналы драйвера, чтобы увидеть, сколько метрик было создано и имеются ли предупреждения. Найдите журналы драйверов на вкладке "Выходные данные и журналы" после выбора эксперимента.
  • Если функция SDK backfill() не создает ожидаемые выходные данные, может возникнуть проблема с проверкой подлинности. При создании вычислительных ресурсов для передачи в эту функцию не используйте Run.get_context().experiment.workspace.compute_targets. Вместо этого используйте ServicePrincipalAuthentication, как показано ниже, чтобы создать вычисление, передаваемое в эту функцию backfill():

    auth = ServicePrincipalAuthentication(
            tenant_id=tenant_id,
            service_principal_id=app_id,
            service_principal_password=client_secret
            )
    ws = Workspace.get("xxx", auth=auth, subscription_id="xxx", resource_group="xxx")
    compute = ws.compute_targets.get("xxx")
    
  • Сборщик данных модели может занять до 10 минут, чтобы данные прибыли в учетную запись хранения BLOB-объектов. Однако обычно это занимает меньше времени. В скрипте или записной книжке подождите 10 минут, чтобы убедиться, что ячейки ниже успешно выполняются.

    import time
    time.sleep(600)
    

Следующие шаги