Назад
74

Качество данных с Evidently

74

Введение

Датасеты — то, на чем держится весь DL. Многие компании сохраняют их в тайне и не выкладывают в открытый доступ. Подбор архитектур, лоссов и оптимизаторов не имеет смысла без хороших данных для обучения [Prepare your data, статья DeepSchool].

Итак, в одной из наших статей мы уже рассказывали, что данные — это наше все. Сегодня мы познакомимся с Evidently.ai. Это целая платформа, которая помогает мониторить качество данных и моделей.

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

Один день из жизни DS

Чтобы представить возможности данной библиотеки, мы взяли датасет c ценами на недвижимость и немного изменили его, добавив пропуски. Сам датасет разбили на 2 части: reference, где хранятся данные за 2014 год, и current с новыми данными. На датасете reference мы обучили обычное дерево.

А теперь давайте абстрагируемся от нашего датасета и представим себе такую ситуацию: мы являемся сотрудниками “LTD Real Estate Consulting”, и на дворе — конец 2015 года. Наша задача — отвечать за модель предсказания цены на недвижимость в Сиэтле. У нас уже есть модель, обученная на данных за 2014 год. И вот на дейлике нас обрадовали — наконец-то появились данные за текущий год.

Что нам хочется сделать в первую очередь? Конечно, посмотреть на то, в каком состоянии находятся наши новые данные! Насколько они качественные, много ли в них пропусков, сильно ли они отличаются от предыдущих данных и как наша модель будет вести себя на них.

Давайте обратимся за помощью к Evidently для решения этой задачи! Сначала установим ее с помощью pip install evidently.

Дальше мы хотим как можно быстрее посмотреть на наши данные. Для этого сформируем отчет парой строчек кода.

report = Report(metrics=[DataQualityPreset(), DataDriftPreset(), RegressionQualityMetric()])
report.run(current_data=current_data, reference_data=reference_data)
report.save_html("dash.html")

В этом коде мы создаем объект Report — там перечисляем метрики и пресеты, которые хотим посмотреть. Все указанные в коде метрики уже реализованы в Evidently.

В Evidently метрикой называют блоки в итоговом отчете. Они обычно содержат в себе метрики в классическом понимании этого термина и графики.

Первые две метрики — Preset’ы, или наборы метрик, полезных для конкретной задачи. Например, DataQualityPreset — набор метрик для оценки качества данных, DataDriftPreset — для исследования data drift. А RegressionQualityMetric метрика, которая позволяет оценить качество регрессионной модели.

Некоторые метрики требуют наличия специальных колонок. Например, для использования RegressionQualityMetric в обоих датасетах должны быть колонки target и prediction, где хранятся реальные значения и предсказания.

Затем мы передаем наши данные в этот отчет и сохраняем его в html.

Готово! Теперь можно смотреть, что у нас есть в этом отчете.

Общие метрики датасета

Рисунок 1. DatasetSummaryMetric. Заметим: новых данных у нас намного меньше

Информация о данных по каждой колонке

Рисунок 2. ColumnSummaryMetric для категориальной переменной.
Это изображение имеет пустой атрибут alt; его имя файла - untitled-2024-09-01t013558.760-1024x873.png
Рисунок 3. ColumnSummaryMetric для числовой переменной.

Как видно из графиков и таблиц выше, количество уникальных значений фичи bathrooms, а также максимальное значение bedrooms увеличились.

Пропуски в данных

Рисунок 4. DatasetMissingValuesMetric. Можно посмотреть на общее количество пропусков и для каждой колонки
Рисунок 5. DatasetMissingValuesMetric. Тоже самое, но в виде гистограммы

Корреляции

Рисунок 6. DatasetCorrelationsMetric. Можно выбрать нужный нам вид корреляции. Самое крутое: наводим курсор на один из квадратов в графике и видим значение корреляции!

Data drift

Ранее мы рассказывали про частный случай Data drift — Covariance Shift.

Напомним, Data drift — это изменение статистических свойств данных. Например, если в будущем люди будут строить больше ванных комнат — свойства данных изменятся. Это может привести к тому, что качество моделей станет хуже. У Evidently есть очень полезная статья о разных видах drift’ов.

Рисунок 7. DatasetDriftMetric и DataDriftTable. Заметим: значительного изменения в данных не произошло. Для разных типов переменных используют различные методы, чтобы определить наличие drift

Метрики модели

Рисунок 8. RegressionQualityMetric. Здесь представлены метрики регрессии: ME, MAE и MAPE

Звонок от лида

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

Хорошо, что для этого в Evidently есть механизм тестов!

data_stability = TestSuite(tests=[
    TestColumnValueMax(column_name='bathrooms', lt=20),
])
data_stability.run(reference_data=reference_data, current_data=current_data)
data_stability.save_html('tests.html')

TestColumnValueMax — тест на проверку того, что максимальное значение в датасете удовлетворяет некому условию. В нашем случае оно должно быть меньше 20. В результате мы получаем красивый отчет в виде html.

Рисунок 9. Результат выполнения тестов

В Evidently очень много видов тестов — тесты для медианы, среднего, других статистических метрик, более сложные тесты. Посмотреть весь список можно здесь.

Вместо заключения

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

А на следующем квартальном планировании мы будем продвигать идею добавления тестов из Evidently в процесс поставки данных!

Но это все потом — сейчас пора отдохнуть 😇

Телеграм-канал

DeepSchool

Короткие посты по теории ML/DL, полезные
библиотеки и фреймворки, вопросы с собеседований
и советы, которые помогут в работе

Открыть Телеграм

Увидели ошибку?

Напишите нам в Telegram!