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

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

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

Работа с пропущенными значениями

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

Есть 3 важных вида пропущенных значений:

MCAR (отсутствует совершенно случайно)

MAR (отсутствует наугад)

МНАР (отсутствует не случайно)

Недостаточно методов, чтобы окончательно определить, являются ли данные mcar, mar или mnar. Здесь уже есть вопрос — https://stats.stackexchange.com/questions/462507/how-to-decide-whether-missing-values-are-mar-mcar-or-mnar

Но вы можете сделать некоторую визуализацию, чтобы предположить, что это mcar, mar или mnar. Я не буду подробно рассказывать об этом, но не стесняйтесь исследовать это.

Вы можете использовать библиотеку Missingno Python, чтобы получить визуальное представление об отсутствующих значениях в ваших столбцах/функциях данных.

Методы, обычно используемые для работы с пропущенными значениями -

Удаление — может быть вариантом, когда пропущенных значений немного.

Simple Imputer — Вы можете вменить пропущенные значения со средним значением, медианой, модой. Обычно медиана предпочтительнее среднего, если в наших данных много выбросов.

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

Ex — заполнение последним значением (bfill) или следующим значением (bfill)

В дополнение к этому, вы также можете интерполировать линейным методом.

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

Проверьте https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.interpolate.html для получения более подробной информации.

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

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

Обнаружение выбросов

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

Выбросы могут быть одномерными или многомерными.

Одномерный

Чтобы справиться с одномерными выбросами, вы можете использовать методы фильтрации данных, используя среднее значение, стандартное отклонение. Мы также можем использовать iqr

Вы можете отфильтровать все значения за пределами mean-3*std , mean +3*std

Или вы можете использовать среднее-1,5 * iqr, среднее + 1,5 * iqr и удалить все значения за пределами этого диапазона.

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

Многовариантность

Чтобы справиться с многовариантными выбросами, вы можете использовать такие методы, как dbscan, Isolation forest, lof (коэффициент локального выброса).

Чтобы визуализировать многомерные выбросы, мы можем использовать методы уменьшения размерности, такие как pca.

Dbscan — это алгоритм кластеризации на основе плотности. Здесь мы можем установить гиперпараметры epsilon и min_samples. Важно не устанавливать эпсилон слишком низко. Это может привести к ошибочному обнаружению большинства наших данных как выбросов.

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

фактор локального выброса (lof ) вычисляет локальные плотности, и точки, которые отклоняются по отношению к соседям, считаются выбросами

Я наблюдал в блокнотах kaggle — добавление функции только для обозначения отсутствия. По сути, вы добавляете дополнительный столбец со значениями (1, 0), чтобы узнать, отсутствовала ли функция ранее в исходном наборе данных. Заполнение пропущенных значений может привести к смещению модели, поэтому использование этого метода может уменьшить эффект смещения.

Заключение

В следующей части мы обсудим методы проектирования и выбора функций. Перед построением любой модели мл важно провести тщательный анализ данных. Я не думаю, что то, что я написал, исчерпывающе. Я не включал код, потому что chatgpt может помочь :D. Моя цель состоит в том, чтобы охватить необходимые шаги, которые инженеры мл должны пройти, прежде чем отправлять данные в модель машинного обучения для обучения. Если есть очень важные вещи, которые я упускаю, укажите это в комментариях. Я тоже учусь :)

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