Библиотека с открытым исходным кодом Sweetviz — это путь

Устали тратить «слишком много времени» на исследование данных перед обучением моделей машинного обучения?

Ищете более быстрый способ понять проблемы с данными и шаблоны, прежде чем погрузиться в увлекательную часть обучения вашей модели машинного обучения?

Хотите узнать, как лучше обучать модели машинного обучения, находя и устраняя проблемы в ваших данных?

Вы попали в нужное место.

В этой статье вы узнаете, как проводить исследование данных со скоростью света.

Давайте рассмотрим практический пример и код, который вы можете найти в этом репозитории GitHub.

Проблема

Вам необходимо генерировать обучающие данные в начале каждого реального проекта машинного обучения.

Как правило, вы получаете доступ к базе данных типа SQL и пишете длинный запрос, который извлекает данные из нескольких таблиц, объединяет их и объединяет в окончательный обучающий набор. Набор данных содержит набор функций и целевую метрику, которую вы хотите предсказать.

Проблемы с созданием обучающих наборов данных?
Если вы застряли на этом этапе, я рекомендую вам прочитать мою предыдущую статью о лучших методах создания наборов данных с использованием SQL и Питон👇🏼



Получив эти данные, вы очень захотите обучить свою первую модель машинного обучения.

И это БОЛЬШАЯ ошибка.

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

Но зачем мне исследование данных?

Потому что самый эффективный способ улучшить свои результаты — НЕ пробовать более сложные модели или настраивать гиперпараметры (реальный ML! = Kaggle).

Вместо этого вы должны сосредоточиться на повышении качества ваших данных. И вы делаете это с помощью исследования данных.

Когда вы исследуете набор данных, вы хотите обратить особое внимание на:

  • Ошибки данных. Есть ли какие-то странные вещи, которые могут указывать на ошибку в данных?
  • Отсутствуют данные. Каков процент пропущенных наблюдений для каждой функции?
  • Утечка данных. Есть ли функции, которые выглядят чрезвычайно предсказуемо и «слишком хороши, чтобы быть правдой»?

Тогда вопрос…

Есть ли быстрый способ изучения набора данных?

Да, есть.

Это называется Sweetviz, библиотека с открытым исходным кодом, в которую вы влюбитесь.

Давайте рассмотрим практический пример и скрипт Python, который я разработал для своих проектов машинного обучения.

Весь исходный код, который я представляю, общедоступен в этом репозитории GitHub. Не стесняйтесь использовать его в своем следующем проекте машинного обучения.

Пример

Давайте представим, что вы работаете специалистом по данным в телекоммуникационной компании (она же Telco).

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

Чтобы смягчить это, маркетинговая команда приходит к вам с идеей:

"Можете ли вы разработать модель для прогнозирования оттока клиентов?"

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

Это звучит как план.

Шаг 1. Генерация обучающих данных

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

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

  • Churn = "Yes" означает, что клиент ушел.
  • Churn = "No" означает, что клиент не ушел.

Функции, которые вы извлекли из БД, следующие:

Вдобавок к этим сырым функциям вы создаете несколько других, таких как month, dayOfMonth, dayOfWeek или hour, чтобы зафиксировать временные закономерности в коэффициентах оттока.

В общем, это полный набор функций (сырые + разработанные), которые вы в конечном итоге получите в свое распоряжение:

Поддавшись искушению перейти к моделированию, вы (мудро) выделили время, чтобы поближе взглянуть на набор данных.

Шаг 2. Исследование данных

Теперь, когда у вас есть данные, вы готовы их изучить.

Для этого вы используете скрипт eda.py, который вы можете найти в моем репозитории GitHub. Он использует Sweetviz, библиотеку с открытым исходным кодом, которая генерирует отчеты об исследовании данных за считанные секунды.

Чтобы исследовать набор данных, вы просто вызываете этот файл из командной строки, передавая в качестве параметров:

  • набор данных, который вы хотите изучить, v1.csv
  • имя целевой переменной, Churn
$ python eda.py --file v1.csv --target Churn

Через несколько секунд функция Sweetvizanalyze() создаст для вас красивый HTML-отчет.

Проблема №1. Ошибки данных

Если вы посмотрите на временные объекты dayOfWeek, month, dayOfMonth и hour, вы увидите, что они имеют очень несбалансированное распределение.

Например, dayOfWeek равно 1 (что означает вторник) для более чем 90 % наблюдений.

Вам это кажется странным, поэтому вы идете и спрашиваете Марка, инженера данных в команде.

«Привет, Марк! Как это возможно, что почти 90 % наших событий оттока происходят во вторник?

На что он отвечает:

«Должно быть ошибка в поле churndate. Мне пришлось повторно обработать таблицу пару недель назад, и я думаю, что, должно быть, я перезаписал фактическую дату оттока датой обновления записи в таблице».

И это именно то, что здесь происходит. Если вы посмотрите на другие временные функции, вы быстро поймете, что Марк перезаписал 90% daterecords 1 февраля 2022 года.

Вы обнаружили ошибку в данных, которую можно исправить, и это поможет вам построить более надежную модель. Хорошая работа!

Проблема №2. Недостающие данные

В реальных наборах данных могут отсутствовать данные. Иногда вы ничего не можете сделать, чтобы исправить это. Однако часто отсутствующие данные могут быть устранены вверх по течению вашим другом инженером данных Марком.

Из отчета Sweetviz ясно видно, что tenure имеет сильную отрицательную корреляцию с Churn. Отлично, это означает, что tenure — функция прогнозирования.

Единственная загвоздка в том, что 20% образцов не имеют tenure.

Если вы используете данные как есть для обучения своей модели, вам необходимо:

  • Вмените эти 20% пропущенных значений, используя, например, выборочную медиану.
  • или просто исключите эти 20% клиентов из наших обучающих данных.

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

«Есть ли у нас tenure данные обо всех наших клиентах? Я спрашиваю, потому что в обучающем наборе для проекта прогнозирования оттока у меня много отсутствующих данных».

Марк удивленно смотрит на тебя и говорит:

«У нас есть tenure данные обо всех наших клиентах. Бьюсь об заклад, в SQL-запросе, который вы написали для создания обучающих данных, есть ошибка».

И получается, что Марк прав на 100%.

Вы исправляете запрос, и процент отсутствующих значений tenure становится равным 0. Супер.

Проблема №3. Утечка данных

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

Например, activity — это категориальный признак с двумя возможными значениями:

  • activity = "active" означает, что клиент использовал свой телефон за 2 недели до показателя оттока.
  • activity = "inactive" иначе.

Если вы посмотрите на отчет Sweetviz, вы увидите, что он сильно коррелирует с Churn. В частности, все пользователи, которые были active, не ушли… Это слишком хорошо, чтобы быть правдой 🤨

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

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

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

Утечки данных создают модели машинного обучения, которые, кажется, работают впечатляюще хорошо, когда вы их обучаете, но с треском терпят неудачу, когда вы их развертываете.

Завершение

Исследование данных — единственный способ обнаружить 3 БОЛЬШИХ блокировщика в ваших проектах машинного обучения:

  • Ошибки данных
  • Недостающие данные
  • Утечка данных

Не стесняйтесь использовать сценарий, которым я поделился в этом посте, и сэкономьте время (и головную боль) в своем следующем проекте машинного обучения.

Вы можете найти весь код в этом репозитории.

🔔 Автор не имеет никакого отношения к Sweetviz 🔔

Хочешь поддержать меня?

Вы любите читать и узнавать о машинном обучении в реальном мире, науке о данных и фрилансе?

Получите неограниченный доступ ко всему контенту, который я публикую на Medium, и поддержите меня.

👉🏽 Станьте участником сегодня, используя мою реферальную ссылку.



👉🏽 Подпишитесь на рассылку datamachines.

👉🏽 Следуйте за мной в Medium, Twitter и LinkedIn.

Хорошего дня 🤗

Пау