Проверка распределения данных с помощью GX
Анализ распределения данных - важнейший аспект управления качеством данных, направленный на понимание распределения данных и их характеристик в конкретном наборе данных. Распределение данных - важнейший показатель качества и надежности Ваших данных. К его ключевым аспектам относятся:
- Статистическая достоверность: Многие статистические анализы и модели машинного обучения предполагают определенное распределение данных. Любые отклонения от ожидаемых распределений могут сделать эти модели данных недействительными;
- Обнаружение аномалий: Даже самые минимальные изменения в распределении данных могут свидетельствовать об аномалиях или фактах мошенничества, что может исказить результаты анализа или ухудшить работу модели данных;
- Согласованность данных: Последовательное распределение данных во времени обеспечивает значимость и точность сравнений и тенденций.
- Контроль качества: Мониторинг распределения данных помогает поддерживать целостность данных, выявляя их искажение, системные ошибки или любые изменения в процессах сбора данных.
Используя Great Expectations (GX) для анализа и проверки распределений данных, организации могут гарантировать, что их наборы данных сохраняют ожидаемые характеристики. В этой статье Вы узнаете о том, как использовать GX для эффективного управления и проверки распространения данных, что поможет поддерживать высокое качество наборов данных и повысит надежность Ваших выводов, основанных на них.
Необходимые условия
Предполагается, что Вы уже знакомы с компонентами и рабочими процессами GX.
Предварительный обзор данных
В примерах, приведенных в этой статье, используется набор данных о транзакциях клиентов из базы данных Postgres.
|
transa ction_id |
custo mer_id |
purchas e_amount |
purchas e_date |
product _category |
produc t_rating |
retur n_date |
|---|---|---|---|---|---|---|
|
1001 |
501 |
250.00 |
2024-01-15 |
Electronics |
4.5 |
2024-01-30 |
|
1002 |
502 |
40.00 |
2024-01-15 |
Books |
4.2 |
null |
|
1003 |
503 |
1200.00 |
2024-01-16 |
Electronics |
4.8 |
null |
|
1004 |
504 |
80.00 |
2024-01-16 |
Clothing |
3.9 |
2024-02-01 |
|
1005 |
505 |
3500.00 |
2024-01-17 |
Electronics |
4.6 |
2024-02-10 |
В этом наборе данных purchase_amount представляет собой сумму, потраченную покупателями на покупку товаров, относящихся к различных категориях. Анализ распределения purchase_amount и других числовых столбцов позволяет лучше понять поведение покупателей и обнаружить даже самые мельчайшие аномалии.
Ожидания распределения данных
GX предлагает коллекцию ожиданий, используемых для проверки распределения данных. Эти ожидания можно добавить через пользовательский интерфейс GX Cloud или с помощью библиотеки GX Core Python.
Доступность ожиданий распределения
ExpectColumnKLDivergenceToBeLessThan и ExpectColumnQuantileValuesToBeBetween могут быть добавлены в развертывание GX Cloud. В настоящее время их необходимо добавлять с помощью GX API, а не через пользовательский интерфейс GX Cloud.
Expect column KL divergence to be less than
Сравнивает распределение указанного столбца с эталонным распределением, используя метрику дивергенции Куллбэка-Лейблера (KL). дивергенция KL измеряет разницу между двумя распределениями вероятностей.
Пример: это ожидание проверяет, не находится ли расхождение KL ниже заданного порога, что позволяет оценить сходство между фактическим и ожидаемым распределением данных.
gxe.ExpectColumnKLDivergenceToBeLessThan(
column="purchase_amount",
partition_object={
"bins": [0, 1000, 2000, 3000, 4000],
"weights": [0.5, 0.15, 0.2, 0.15],
},
threshold=0.1,
)
Expect column value z-scores to be less than
Проверяет, чтобы Z-баллы (количество стандартных отклонений от среднего) всех значений были ниже порогового значения.
Пример: Полезно для выявления аномальных точек данных, которые могут вызваны трудностями с вводом данных или необычными транзакциями.
gxe.ExpectColumnValueZScoresToBeLessThan( column="purchase_amount", threshold=3, double_sided=True )
Expect column values to be between
Делает так, чтобы все значения в столбце находились между заданным минимальным и максимальным значениями.
Пример: необходимо для ограничения числовых значений в допустимых диапазонах, например, для того, чтобы рейтинги товаров или суммы покупок находились в разумных пределах.
gxe.ExpectColumnValuesToBeBetween( column="product_rating", min_value=1, max_value=5, )
Сводная статистика на уровне столбцов ожидания 
GX предоставляет группу ожиданий для проверки того, что сводная статистика столбца находится в ожидаемых диапазонах. В таблице ниже перечислены ожидания, доступные в этой категории.
|
Сводная статистика столбца |
Название ожидания |
Вид в галерее ожиданий |
|---|---|---|
|
Minimum |
Expect column min to be between |
ExpectColumnMinToBeBetween |
|
Maximum |
Expect column max to be between |
ExpectColumnMaxToBeBetween |
|
Mean |
Expect column mean to be between |
ExpectColumnMeanToBeBetween |
|
Median |
Expect column median to be between |
ExpectColumnMedianToBeBetween |
|
Sum |
Expect column sum to be between |
ExpectColumnSumToBeBetween |
|
Standard deviation |
Expect column stdev to be between |
ExpectColumnStdevToBeBetween |
|
Quantile values |
Expect column quantile values to be between |
ExpectColumnQuantileValuesToBeBetween |
ExpectColumnMinToBeBetween, ExpectColumnMaxToBeBetween, ExpectColumnMeanToBeBetween, ExpectColumnMedianToBeBetween, ExpectColumnSumToBeBetween, и ExpectColumnStdevToBeBetween придерживаются той же схемы использования и аргументов. Чтобы определить ожидаемый диапазон для столбца и суммарную статистику, введите имя столбца вместе с min_value и max_value для определения нижней и верхней границ ожидаемого диапазона значений соответственно.
Например, если мы используем ExpectColumnMeanToBeBetween на Python:
gxe.ExpectColumnMeanToBeBetween(
column="purchase_amount", min_value=50, max_value=1000
)
Чтобы использовать ExpectColumnQuantileValuesToBeBetween Expectation, укажите quantiles и value_ranges в качестве аргументов.
gxe.ExpectColumnQuantileValuesToBeBetween(
column="purchase_amount",
quantile_ranges={
"quantiles": [0.5, 0.9],
"value_ranges": [[50, 200], [500, 2000]],
},
)
Подсказки GX по распределению ожиданий:
- Для того, чтобы разрешить допустимые отклонения в Ваших данных, используйте параметр mostly;
- ExpectColumnValuesToBeBetween часто путают с ExpectColumnMinToBeBetween и ExpectColumnMaxToBeBetween. ExpectColumnValuesToBeBetween используется для того, чтобы определить минимальное или максимальное значение, которое используется для проверки каждого значения в столбце. ExpectColumnMinToBeBetween и ExpectColumnMaxToBeBetween используются для того, чтобы определить диапазон, который используется для проверки общего минимального или максимального значения столбца.
Не полагайтесь только на одно единственное ожидание распределения. Комбинируйте их, поскольку они проверяют различные аспекты, такие как центр (ExpectColumnMeanToBeBetween), разброс (ExpectColumnQuantileValuesToBeBetween) и форма (ExpectColumnKLDivergenceToBeLessThan) распределения. Комплексное использование нескольких ожиданий дает более полную картину.
Пример: проверка распределения значений столбца
Цель: Используя коллекцию распределений Expectations и GX Cloud или GX Core, проверьте распределение столбца purchase_amount.
- GX Cloud
Используйте пользовательский интерфейс GX Cloud для того, чтобы выполнить следующие шаги:
- Создайте Postgres Data Asset для таблицы distribution_purchases, используя строку подключения:
postgresql+psycopg2://try_gx:try_gx@postgres.workshops.greatexpectations.io/gx_learn_data_quality
- Добавьте ожидание Expect column mean to be between в только что созданный актив данных:
- Столбец: purchase_amount
- Min Value: 1250
- Max Value: 1500
- Добавьте ожидание Expect column median to be between
- Cтолбец: purchase_amount
- Min Value: 1000
- Max Value: 1250
- Добавьте ожидание Expect column value z-scores to be less than
- Column: purchase_amount
- Threshold: 2
- Mostly: 90%
- Нажмите кнопку Validate для того, чтобы проверить данные о закупках на соответствие ожиданиям распределения.
- Нажмите кнопку Validate.
- Просмотрите результаты проверки.
Результат: All Expectations pass.
- GX Core
Запустите процесс GX Core.
import great_expectations as gx
import great_expectations.expectations as gxe
# Create Data Context.
context = gx.get_context()
# Connect to data.
# Create Data Source, Data Asset, Batch Definition, and Batch.
CONNECTION_STRING = "postgresql+psycopg2://try_gx:try_gx@postgres.workshops.greatexpectations.io/gx_learn_data_quality"
data_source = context.data_sources.add_postgres(
"postgres database", connection_string=CONNECTION_STRING
)
data_asset = data_source.add_table_asset(
name="purchases", table_name="distribution_purchases"
)
batch_definition = data_asset.add_batch_definition_whole_table("batch definition")
batch = batch_definition.get_batch()
# Create an Expectation Suite containing distribution Expectations.
expectation_suite = context.suites.add(
gx.core.expectation_suite.ExpectationSuite(name="purchase amount expectation suite")
)
purchase_amount_distribution_expectation = gxe.ExpectColumnKLDivergenceToBeLessThan(
column="purchase_amount",
partition_object={
"bins": [0, 500, 1000, 1500, 2000, 2500, 3000, 3500, 4000],
"weights": [0.3, 0.2, 0.05, 0.1, 0.2, 0.0, 0.05, 0.1],
},
threshold=0.1,
)
purchase_amount_mean_expectation = gxe.ExpectColumnMeanToBeBetween(
column="purchase_amount", min_value=1250, max_value=1500
)
purchase_amount_median_expectation = gxe.ExpectColumnMedianToBeBetween(
column="purchase_amount", min_value=1000, max_value=1250
)
expectation_suite.add_expectation(purchase_amount_distribution_expectation)
expectation_suite.add_expectation(purchase_amount_mean_expectation)
expectation_suite.add_expectation(purchase_amount_median_expectation)
# Validate Batch using Expectation.
validation_result = batch.validate(expectation_suite)
# Print the validation results.
print(f"Expectation Suite passed: {validation_result['success']}\n")
for result in validation_result["results"]:
expectation_type = result["expectation_config"]["type"]
expectation_passed = result["success"]
print(f"{expectation_type}: {expectation_passed}")
Результат:
Expectation Suite passed: True expect_column_kl_divergence_to_be_less_than: True expect_column_mean_to_be_between: True expect_column_median_to_be_between: True
Решение GX: GX обеспечивает ожидаемые результаты в GX Cloud или GX Core, которые позволяют проверять различные аспекты распределения, включая форму, центр и распространение.
Сценарии
Обнаружение аномалий распределения
Контекст: Внезапные скачки или падения значений могут свидетельствовать об ошибках ввода данных, проблемах с пайплайном или других возможных неполадках в системе. Мониторинг распределения данных помогает обнаружить такие аномалии на ранней стадии.
Решение GX:
Используйте ExpectColumnValuesToBeBetween и ExpectColumnMeanToBeBetween для того, чтобы убедиться, что значения находятся в ожидаемых диапазонах, а среднее значение остается неизменным. Используйте ExpectColumnValueZScoresToBeLessThan для того, чтобы убедиться, что данные сохраняют ожидаемое отношение к среднему значению распределения.
Мониторинг дрейфа данных в исходных данных модели
Контекст: Модели машинного обучения предполагают, что распределение входных данных остается неизменным с течением времени. Дрейф данных может ухудшить производительность модели и является ключевым фактором при определении частоты переобучения модели.
Решение GX: Используйте ExpectColumnKLDivergenceToBeLessThan для сравнения текущего распределения данных с эталонным распределением и обнаружения дрейфа данных.
Обеспечение согласованности данных временных рядов 
Контекст: Для данных временных рядов, таких как ежедневные продажи, последовательность распределения во времени имеет большое значение. Оно необходимо для более точного прогнозирования и анализа данных.
Решение GX: Используйте ExpectColumnQuantileValuesToBeBetween для того, чтобы проверить, что квантили данных остаются в пределах ожидаемых диапазонов.
Наиболее распространенные ошибки, допускаемые при анализе распределения данных: 
- Предположение о статичности распределений: Распределения данных часто меняются со временем из-за сезонности, тенденций или изменений в сборе данных. Очень важно обновлять эталонные распределения и ожидания на регулярной основе для того, чтобы отразить текущее состояние данных.
- Игнорирование проблем с качеством данных: Ошибки при вводе данных или пропущенные значения могут значительно исказить распределение данных. Всесторонняя проверка качества данных, включая обработку отсутствующих данных, является важным авспектом анализа данных и проверки распределения.
- Игнорирование мультимодальных распределений: Некоторые наборы данных могут иметь несколько пиков, что требует применения соответствующих методов и ожиданий, способных работать с мультимодальными распределениями. Игнорирование мультимодальности может привести к неточной интерпретации данных.
- Пренебрежение изменениями во времени: Распределения могут меняться со временем в силу сезонного характера или долгосрочных тенденций. Внедрение анализа, основанного на времени, наряду с проверкой в момент времени, имеет решающее значение для понимания и адаптации к изменяющимся распределениям данных.
- Недостаточный размер выборки: Небольшие размеры выборки могут неточно отражать истинное распределение данных. Важно убедиться в том, чтобы размер выборки был достаточно велик для того, чтобы отразить основное распределение и избежать неверных выводов на основе ограниченных данных.
Дальнейшие действия
Эффективное управление и проверка распространения данных необходимы для обеспечения их целостности и надежности. Чтобы развить эффективные стратегии управления данными, упоминаемые в этой статье, необходимо сделать следующее:
- Интегрируйте проверки распределения в пайплайны: Встраивайте ожидания, ориентированные на распределение, в конвейеры данных, чтобы автоматизировать мониторинг данных и быстро обнаруживать любые аномалии;
- Используйте исторические данные: Используйте исторические данные для определения базовых распределений и регулярно обновляйте их для того, чтобы учесть все долгосрочные тенденции и сезонность;
- Сочетайте разные аспекты проверки качества данных: Сочетайте различные аспекты управления качеством данных, такие как объем, пропуски и типы данных;
- Визуализация изменений в распределении: Внедряйте специальные инструменты, позволяющие визуализировать распределение данных во времени.
- Сотрудничайте с разными командами: Работайте с учеными, аналитиками и экспертами в области данных для того, чтобы правильно интерпретировать любые изменения в распределении и соответствующим образом корректировать ожидания.
Последовательное использование этих методов и расширение процессов проверки поможет Вам укрепить целостность данных и повысить точность моделей. Обязательно прочитайте и другие статьи, посвященные качеству данных, - с их помощью Вы узнаете о тонкостях эффективной интеграции различных аспектов качества данных в различные рабочие процессы.




