Проверка данных Tensorflow не выявляет аномалии в числовых характеристиках

Я тестировал Tensorflow Data Validation (версия 0.22.0) для использования в моих текущих конвейерах машинного обучения и заметил, что в числовых функциях нет никаких аномалий. Например,

> import pandas as pd  
> import pyarrow 
> import tensorflow as tf 
> import apache_beam as beam 
> import apache_beam.io.iobase 
> import tensorflow_data_validation as tfdv 
> print('TFDV version: {}'.format(tfdv.version.__version__))
> 
> train_df = pd.DataFrame({
>     'FeatA' : ['A'] * 1000,
>     'FeatB' : ['B'] * 1000,
>     'FeatC' : [10] * 1000,
>     'FeatD' : [50.2] * 1000 })
> 
> eval_df = pd.DataFrame({
>     'FeatA' : ['A1'] * 1000,
>     'FeatB' : ['B1'] * 1000,
>     'FeatC' : [4] * 1000,
>     'FeatD' : [200.43] * 1000 })
> 
> train_stats  = tfdv.generate_statistics_from_dataframe(train_df)
> schema = tfdv.infer_schema(statistics = train_stats) 
> eval_stats = tfdv.generate_statistics_from_dataframe(eval_df) 
> anomalies = tfdv.validate_statistics(statistics = eval_stats, schema = schema)
> tfdv.display_anomalies(anomalies)

Аномалии были обнаружены только в FeatA и FeatB, которые являются категориальными. Но в FeatC и FeatD TFDV ничего не обнаруживает.

Результат показан на этом изображении

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

Кто-нибудь знает, как заставить TFDV работать с числовыми функциями?

3 ответа

Нам нужно использовать компаратор перекоса jensen_shannon_divergence для числовых характеристик и infinity_norm для категориальных характеристик.

tfdv.get_feature (schema_updated,'SALES').skew_comparator.jensen_shannon_divergence.threshold = 0.001

skew_anomalies = tfdv.validate_statistics(statistics=new_dataset_stats, schema=schema, serve_statistics =old_dataset_stats)display_anomalies(skew_anomalies)

Обычно tfdv не определяет домены для числовых значений, теперь у вас есть 3 возможных решения:

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

2- Добавьте int_domain (float_domain для FeatD) к своим функциям и определите желаемый минимум и максимум

3- Только для функций типа int вы можете установить int_domain.is_categorical в True, а затем использовать компаратор смещения / перекоса. Вы сможете обнаружить новые значения в пределах верхнего значения k.

Как объяснил @durga, TFDV добавил новую функцию, которая позволяет нам обнаруживать перекос для числовых функций. Укажите порог jensen_shannon_divergence вместо порога infinity_norm в skew_comparator.

Пример:

      tfdv.get_feature(schema, 'total_actions').skew_comparator.jensen_shannon_divergence.threshold = 0.01

Если вы хотите проверить максимальный и минимальный диапазон значений, вам необходимо вручную установить встроенный FloatDomain/ IntDomainв Feature. Он не генерируется автоматически с помощью infer_schema():

Пример:

      tfdv.get_feature(schema, 'total_actions').int_domain.name = 'total_actions'
tfdv.get_feature(schema, 'total_actions').int_domain.min = 0
tfdv.get_feature(schema, 'total_actions').int_domain.max = 1400
Другие вопросы по тегам