Проверка данных 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