Порядок предварительной обработки, избегание утечек и метрики

Вопрос или проблема

У меня есть набор данных с ~40k записей и 16 столбцами (включая целевой) и я хочу понять правильный процесс всего процессаData Science.

Вот что я сделал:

  1. Провел EDA, в результате чего я удалил два столбца, так как они были сосредоточены вокруг одного значения
  2. После этого я заменил выбросы в числовых столбцах границами, основанными на расчетах IQR
  3. Закодировал целевой столбец (“нет” -> 0, “да” -> 1) с использованием LabelEncoder (по предложению документации sklearn)
  4. Закодировал остальные категориальные столбцы с помощью LeaveOneOutEncoder
  5. Провел оверсэмплинг с использованием SMOTETomek, так как соотношение значений целевой переменной было огромным; это привело к добавлению ~17k записей, всего 56k
  6. Разбил данные с использованием train_test_split
  7. Моделирование (RandomForestClassifier достиг идеальных == 1 баллов по метрикам точности, прецизионности, полноты и F1Score)

Вот где у меня возникают вопросы:

  1. Правильно ли я выполнил разбивку данных в нужный момент? У меня есть некоторые сомнения, основанные на учебнике kaggle по утечке данных:

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

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

  1. Правильно ли я выполнил оверсэмплинг в нужный момент?
  2. Является ли оценка 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.

Другие замечания:

    1. удаление признаков, основываясь только на EDA, затруднительно, так как вы можете удалить важную информацию.
    1. замена выбросов не является необходимой, если вы собираетесь использовать деревья моделей.
    1. & 4) ваш подход кажется правильным.
    1. первый подход к решению потенциального дисбаланса — ничего не делать и посмотреть, есть ли какие-либо проблемы. SMOTE может быть очень сложен в использовании, особенно для объяснения того, что делает ваша модель. Сначала попробуйте без него.
    1. в общем, выполняйте разделение как можно раньше.
    1. идеальная оценка может указывать на какую-то проблему. Проверьте, какие оценки получают другие люди. Если оценка держится, это обычно означает, что где-то есть более простая модель, постарайтесь ее найти.

Также, говоря в общем, вы можете захотеть поделиться своим блокнотом (здесь и на Kaggle) и спросить на Kaggle.

Ответ или решение

Порядок предварительной обработки данных, избежание утечек и выбор метрик

Когда речь идет о подготовке данных для анализа и моделирования, важно строго следовать установленной процедуре, чтобы избежать возможных утечек информации и обеспечить репрезентативность выборок. Рассмотрим ваш процесс и ответим на поднятые вопросы, используя структуру FOREST: Факты, Объяснения, Рекомендации, Примеры, Советы и Подобные ситуации.

Факты

Ваша работа с набором данных, который содержит 40,000 записей и 16 столбцов, включает в себя несколько ключевых этапов:

  1. Исследовательский анализ данных (EDA)
  2. Удаление ненужных признаков
  3. Обработка аномалий в числовых данных
  4. Кодирование целевой переменной и категориальных признаков
  5. Борьба с несбалансированностью классов через методы увеличения выборки
  6. Разделение данных на обучающую и тестовую выборки
  7. Моделирование с использованием RandomForestClassifier

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

Объяснения

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

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

  3. Оценка качества модели: Если ваши метрики показывают идеальный результат (1.0) на тестовой выборке, это может свидетельствовать о переобучении модели. Убедитесь, что модель действительно обобщает информацию, а не просто запоминает тренировочные данные.

Рекомендации

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

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

  • Проверяйте процесс обработки: Проверяйте, как изменение параметров предварительной обработки влияет на метрики, особенно в случае с SMOTETomek и кодированием.

Примеры

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

Советы

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

  • При работе с баласом классов начните с анализа базовых метрик, чтобы понять, действительно ли балансирование необходимо.

Подобные ситуации

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

Заключение

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

Оцените материал
Добавить комментарий

Капча загружается...