Вопрос или проблема
У меня есть набор данных с ~40k записей и 16 столбцами (включая целевой) и я хочу понять правильный процесс всего процессаData Science.
Вот что я сделал:
- Провел EDA, в результате чего я удалил два столбца, так как они были сосредоточены вокруг одного значения
- После этого я заменил выбросы в числовых столбцах границами, основанными на расчетах IQR
- Закодировал целевой столбец (“нет” -> 0, “да” -> 1) с использованием LabelEncoder (по предложению документации sklearn)
- Закодировал остальные категориальные столбцы с помощью LeaveOneOutEncoder
- Провел оверсэмплинг с использованием SMOTETomek, так как соотношение значений целевой переменной было огромным; это привело к добавлению ~17k записей, всего 56k
- Разбил данные с использованием train_test_split
- Моделирование (RandomForestClassifier достиг идеальных == 1 баллов по метрикам точности, прецизионности, полноты и F1Score)
Вот где у меня возникают вопросы:
- Правильно ли я выполнил разбивку данных в нужный момент? У меня есть некоторые сомнения, основанные на учебнике kaggle по утечке данных:
Например, представьте, что вы выполняете предварительную обработку (например, настраиваете импутер для пропущенных значений) перед вызовом train_test_split(). Каков конечный результат? Ваша модель может получить хорошие оценки валидации, что дает вам большую уверенность в ней, но будет плохо работать, когда вы развернете ее для принятия решений.
На мой взгляд, данные валидации и данные, используемые в производстве, проходят через тот же процесс предварительной обработки, что и обучающие данные. Это не значит, что мы пропускаем грязные наборы данных через рабочие сервисы; sklearn и другие библиотеки поднимут несколько исключений.
- Правильно ли я выполнил оверсэмплинг в нужный момент?
- Является ли оценка 1 по метрикам (на X_test) хорошим знаком? XGBoost достигал оценок ~0.9, SVM ~0.73, LogisticRegression ~0.8. Я боюсь, что что-то пошло не так из-за упомянутого учебника Kaggle, хотя оценки на Kaggle достигали аналогичных значений ~0.8/0.9.
Имейте в виду, что я использую данные из одного CSV файла и работаю с двумя датафреймами (X_train, X_test). Я понимаю, что существует различие между валидационными и тестовыми наборами.
ИЗМЕНЕНИЕ: Я провел эксперимент, в котором после загрузки набора данных в датафрейм я разделил CSV на два набора (соотношение 7:3). Я выполнил все вышеуказанные шаги на большем наборе, что дало аналогичную производительность, как и раньше. После этого я применил все (кроме SMOTETomek) шаги к меньшему набору (все параметры кодировщиков, моделей, выбросов и т.д. остались неизменными после первоначального обучения на большом наборе). Результаты заключаются в том, что производительность моделей не снизилась.
Разделение должно выполняться в начале, если вы хотите избежать какой-либо формы утечки. Как есть, у вас нет столько утечек, кроме SMOTE и, возможно, обрезки IQR.
Другие замечания:
-
- удаление признаков, основываясь только на EDA, затруднительно, так как вы можете удалить важную информацию.
-
- замена выбросов не является необходимой, если вы собираетесь использовать деревья моделей.
-
- & 4) ваш подход кажется правильным.
-
- первый подход к решению потенциального дисбаланса — ничего не делать и посмотреть, есть ли какие-либо проблемы. SMOTE может быть очень сложен в использовании, особенно для объяснения того, что делает ваша модель. Сначала попробуйте без него.
-
- в общем, выполняйте разделение как можно раньше.
-
- идеальная оценка может указывать на какую-то проблему. Проверьте, какие оценки получают другие люди. Если оценка держится, это обычно означает, что где-то есть более простая модель, постарайтесь ее найти.
Также, говоря в общем, вы можете захотеть поделиться своим блокнотом (здесь и на Kaggle) и спросить на Kaggle.
Ответ или решение
Порядок предварительной обработки данных, избежание утечек и выбор метрик
Когда речь идет о подготовке данных для анализа и моделирования, важно строго следовать установленной процедуре, чтобы избежать возможных утечек информации и обеспечить репрезентативность выборок. Рассмотрим ваш процесс и ответим на поднятые вопросы, используя структуру FOREST: Факты, Объяснения, Рекомендации, Примеры, Советы и Подобные ситуации.
Факты
Ваша работа с набором данных, который содержит 40,000 записей и 16 столбцов, включает в себя несколько ключевых этапов:
- Исследовательский анализ данных (EDA)
- Удаление ненужных признаков
- Обработка аномалий в числовых данных
- Кодирование целевой переменной и категориальных признаков
- Борьба с несбалансированностью классов через методы увеличения выборки
- Разделение данных на обучающую и тестовую выборки
- Моделирование с использованием RandomForestClassifier
Несмотря на то, что ваш подход выглядит последовательным, давайте проанализируем каждую часть более подробно.
Объяснения
-
Порядок разделения данных: Вы правильно упомянули о риске утечек. В идеале процедуру подготовки данных следует начинать с разделения на обучающую и тестовую выборки. Это позволяет избежать того, чтобы информация из тестового набора перетекала в обучающий, что может искажать результаты валидации. Убедитесь, что любые шаги по обработке пропусков, масштабированию или кодированию применяются отдельно к обучающей и тестовой выборкам.
-
Обработка несбалансированности классов: Подход с использованием SMOTETomek, применяемый после разделения данных, может вызвать утечку, так как он использует информацию из тестовой выборки для формирования новых образцов. Лучше применять его только на обучающих данных.
-
Оценка качества модели: Если ваши метрики показывают идеальный результат (1.0) на тестовой выборке, это может свидетельствовать о переобучении модели. Убедитесь, что модель действительно обобщает информацию, а не просто запоминает тренировочные данные.
Рекомендации
-
Пересмотрите порядок шагов: Разделяйте данные в самом начале, а затем выполняйте все предварительные обработки на обучающей выборке. Применяйте те же параметры для тестового набора, чтобы предотвратить утечки.
-
Экспериментируйте с простыми моделями: Рассмотрите возможность использоваия простых моделей для проверки того, действительно ли ваша сложная модель использует значащие паттерны или просто переобучается.
-
Проверяйте процесс обработки: Проверяйте, как изменение параметров предварительной обработки влияет на метрики, особенно в случае с SMOTETomek и кодированием.
Примеры
Ваш эксперимент, в котором вы разделили данные сначала, а затем выполнили все шаги на одной из выборок, подтверждает, что процесс кодирования и очистки работает. Однако важно помнить о том, что лишь простая модель может служить надежным ориентиром в оценке метрик.
Советы
-
Не удаляйте признаки без тщательной проверки их важности. Используйте методы, такие как анализ важности признаков или регрессионный анализ, перед тем как принимать решение.
-
При работе с баласом классов начните с анализа базовых метрик, чтобы понять, действительно ли балансирование необходимо.
Подобные ситуации
В аналогичных случаях, когда происходит утечка данных, часто результаты оказываются искажены из-за того, что модель обучается на информации, которую в реальных условиях она не сможет использовать.
Заключение
Подводя итог, ключевым аспектом в вашем процессе является правильный порядок предварительной обработки данных и избежание утечек. Следуя рекомендованным стандартам, вы сможете значительно повысить качество своей модели и обеспечить ее надежность в реальных сценариях.