Присоединяйтесь к сообществу SIG TFX-Addons и помогите сделать TFX еще лучше!

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

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

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

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

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

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

Обзор

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

  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, но она, как ожидается, будет отсутствовать при обслуживании. Это может быть выражено:

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

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

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

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

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

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

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

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

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

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

Обзор

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Потерянная информация

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

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

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

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

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

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

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

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

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

Ярлыки с недействительными ярлыками

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

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