Проверка данных TensorFlow: проверка и анализ ваших данных

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

Есть много причин для анализа и преобразования ваших данных:

  • Чтобы найти проблемы в ваших данных. Общие проблемы включают в себя:
    • Отсутствующие данные, например объекты с пустыми значениями.
    • Метки рассматриваются как функции, поэтому ваша модель может увидеть правильный ответ во время обучения.
    • Функции со значениями за пределами ожидаемого диапазона.
    • Аномалии данных.
    • Передача обученной модели имеет предварительную обработку, которая не соответствует обучающим данным.
  • Разрабатывать более эффективные наборы функций. Например, вы можете определить:
    • Особенности информативности.
    • Избыточные функции.
    • Функции, которые настолько сильно различаются по масштабу, что могут замедлить обучение.
    • Особенности с небольшим количеством уникальной прогностической информации или без нее.

Инструменты TFX могут помочь найти ошибки в данных и помочь в разработке функций.

Проверка данных TensorFlow

Обзор

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

  1. Выполняйте проверки достоверности, сравнивая статистику данных со схемой, кодифицирующей ожидания пользователя.
  2. Обнаружьте перекос в обучении, сравнивая примеры в обучении и обслуживании данных.
  3. Обнаружьте дрейф данных, просматривая серию данных.

Мы независимо документируем каждую из этих функций:

Проверка примера на основе схемы

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

Проверка данных Tensorflow обычно вызывается несколько раз в контексте конвейера TFX: (i) для каждого разделения, полученного из ExampleGen, (ii) для всех предварительно преобразованных данных, используемых Transform, и (iii) для всех данных после преобразования, созданных с помощью Трансформировать. При вызове в контексте Transform (ii-iii) параметры статистики и ограничения на основе схемы могут быть установлены путем определения stats_options_updater_fn . Это особенно полезно при проверке неструктурированных данных (например, текстовых объектов). См. код пользователя для примера.

Расширенные возможности схемы

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

Разреженные функции

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


WeightedCategories = [('CategoryA', 0.3), ('CategoryX', 0.7)]
будет закодирован с использованием отдельных признаков для индекса и значения:

WeightedCategoriesIndex = ['CategoryA', 'CategoryX']
WeightedCategoriesValue = [0.3, 0.7]
с ограничением, что валентность признака индекса и значения должна совпадать для всех примеров. Это ограничение можно сделать явным в схеме, определив sparse_feature:

sparse_feature {
  name: 'WeightedCategories'
  index_feature { name: 'WeightedCategoriesIndex' }
  value_feature { name: 'WeightedCategoriesValue' }
}
.

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

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

Среды схемы

По умолчанию проверки предполагают, что все примеры в конвейере придерживаются одной схемы. В некоторых случаях необходимо внести небольшие изменения в схему, например, функции, используемые в качестве меток, требуются во время обучения (и должны быть проверены), но отсутствуют во время обслуживания. Для выражения таких требований можно использовать среды, в частности, default_environment() , in_environment() , not_in_environment() .

Например, предположим, что функция с названием "LABEL" необходима для обучения, но ее не будет показываться. Это может быть выражено:

  • Определите две разные среды в схеме: ["ОБСЛУЖИВАНИЕ", "ОБУЧЕНИЕ"] и свяжите "ЭТИКЕТКУ" только со средой "ОБУЧЕНИЕ".
  • Свяжите данные обучения со средой «ОБУЧЕНИЕ», а данные обслуживания со средой «ОБСЛУЖИВАНИЕ».
Генерация схемы

Схема входных данных указывается как экземпляр TensorFlow Schema .

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

TFDV включает infer_schema() для автоматического создания схемы. Например:

schema = tfdv.infer_schema(statistics=train_stats)
tfdv.display_schema(schema=schema)

Это запускает автоматическую генерацию схемы на основе следующих правил:

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

  • В противном случае проверка данных TensorFlow проверяет доступную статистику данных и вычисляет подходящую схему для данных.

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

Обнаружение перекоса в обучении

Обзор

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

Пример сценария

См. Руководство по началу работы с TensorFlow Data Validation для получения информации о настройке обнаружения перекосов при обучении.

Обнаружение дрейфа

Обнаружение дрейфа поддерживается между последовательными интервалами данных (т. е. между интервалом N и интервалом N+1), например, между разными днями обучающих данных. Мы выражаем дрейф в терминах L-бесконечного расстояния для категориальных признаков и аппроксимируем дивергенцию Дженсена-Шеннона для числовых признаков. Вы можете установить пороговое расстояние, чтобы получать предупреждения, когда дрейф превышает допустимое значение. Установка правильного расстояния обычно представляет собой повторяющийся процесс, требующий знаний предметной области и экспериментов.

Информацию о настройке обнаружения дрейфа см. в руководстве по началу работы с TensorFlow Data Validation .

Использование визуализаций для проверки ваших данных

Проверка данных TensorFlow предоставляет инструменты для визуализации распределения значений функций. Изучив эти дистрибутивы в блокноте Jupyter с помощью Facets , вы сможете выявить распространенные проблемы с данными.

Статистика функций

Выявление подозрительных дистрибутивов

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

Несбалансированные данные

Несбалансированный признак – это признак, у которого преобладает одно значение. Несбалансированные функции могут возникать естественным образом, но если функция всегда имеет одно и то же значение, у вас может быть ошибка данных. Чтобы обнаружить несбалансированные функции в Обзоре фасетов, выберите «Неоднородность» в раскрывающемся списке «Сортировать по».

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

Визуализация несбалансированных данных

Равномерно распределенные данные

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

Чтобы обнаружить равномерно распределенные объекты в Обзоре фасетов, выберите «Неравномерность» в раскрывающемся списке «Сортировать по» и установите флажок «Обратный порядок»:

Гистограмма однородных данных

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

Линейный график: кумулятивное распределение однородных данных

Ошибки, которые могут создавать равномерно распределенные данные

Вот некоторые распространенные ошибки, которые могут создавать равномерно распределенные данные:

  • Использование строк для представления нестроковых типов данных, таких как даты. Например, у вас будет много уникальных значений для функции даты и времени с такими представлениями, как «2017-03-01-11-45-03». Уникальные значения будут распределены равномерно.

  • Включение индексов, таких как «номер строки», в качестве функций. Здесь снова у вас много уникальных значений.

Отсутствуют данные

Чтобы проверить, полностью ли отсутствуют значения функции:

  1. Выберите «Сумма отсутствует/ноль» в раскрывающемся списке «Сортировать по».
  2. Установите флажок «Обратный порядок».
  3. Посмотрите на столбец «отсутствует», чтобы увидеть процент экземпляров с отсутствующими значениями для функции.

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

  1. Выберите «Длина списка значений» в раскрывающемся меню «Диаграмма для отображения» справа.

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

Отображение обзора фасетов с функцией со списками значений функций нулевой длины

Большие различия в масштабе между функциями

Если ваши функции сильно различаются по масштабу, у модели могут возникнуть трудности с обучением. Например, если некоторые функции варьируются от 0 до 1, а другие от 0 до 1 000 000 000, у вас большая разница в масштабе. Сравните столбцы «max» и «min» по функциям, чтобы найти сильно различающиеся масштабы.

Рассмотрите возможность нормализации значений функций, чтобы уменьшить эти широкие различия.

Ярлыки с недопустимыми ярлыками

Оценщики TensorFlow имеют ограничения на тип данных, которые они принимают в качестве меток. Например, бинарные классификаторы обычно работают только с метками {0, 1}.

Просмотрите значения меток в обзоре фасетов и убедитесь, что они соответствуют требованиям Estimators .