Качество данных с Evidently
Введение
Датасеты — то, на чем держится весь 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.
Готово! Теперь можно смотреть, что у нас есть в этом отчете.
Общие метрики датасета
Информация о данных по каждой колонке
Как видно из графиков и таблиц выше, количество уникальных значений фичи bathrooms, а также максимальное значение bedrooms увеличились.
Пропуски в данных
Корреляции
Data drift
Ранее мы рассказывали про частный случай Data drift — Covariance Shift.
Напомним, Data drift — это изменение статистических свойств данных. Например, если в будущем люди будут строить больше ванных комнат — свойства данных изменятся. Это может привести к тому, что качество моделей станет хуже. У Evidently есть очень полезная статья о разных видах drift’ов.
Метрики модели
Звонок от лида
Внезапно нам позвонил тимлид, чтобы напомнить: данные нужно проверить и на корректность. В прошлый раз были квартиры с тысячей этажей, что повлияло на результаты далеко не в лучшую сторону. Делать нечего, нужно проверять 😎
Хорошо, что для этого в 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.
В Evidently очень много видов тестов — тесты для медианы, среднего, других статистических метрик, более сложные тесты. Посмотреть весь список можно здесь.
Вместо заключения
Сегодняшний рабочий день подошел к концу, и благодаря Evidently мы смогли очень быстро построить отчет с полезной информацией. Ей мы обязательно поделимся завтра: обрадуем на дейлике наших коллег и расскажем, что новых данных меньше, они несильно отличаются от старых, еще и модель работает на них хорошо, а количество пропусков практически не изменилось.
А на следующем квартальном планировании мы будем продвигать идею добавления тестов из Evidently в процесс поставки данных!
Но это все потом — сейчас пора отдохнуть 😇