Кодирование до и после разделения на обучающую и тестовую выборки?

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

Я новичок в ML и работаю с набором данных, содержащим много категориальных переменных с высокой кардинальностью.

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

Могу я узнать, почему это делается?

Почему мы не можем применять кодирование даже до разделения на тренировочную и тестовую выборки?

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

Какую разницу это вносит?

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

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

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

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

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

Если используются методы кодирования, такие как кодирование с использованием One-Hot Encoding (OHE) или Label Encoding, они должны выполняться до разделения, так как они не зависят от распределения набора данных. Если используется целевое кодирование или кодирование на основе среднего (которые зависят от целевых меток), оно должно выполняться после разделения, чтобы избежать утечки данных.

.

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

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

Теория

Основной концепт, который нужно учитывать при обработке данных, включая кодирование, — это предотвращение утечки данных (data leakage). Утечка данных возникает, когда информация из тестового набора данных неосознанно используется во время тренировки модели. Это искажает оценку модели, так как она "подглядывает" в тестовые данные, что делает итоговую модель менее надежной для развертывания в реальном мире.

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

В общем случае, если кодирование выполняется до разделения на тренировочный и тестовый наборы, это может привести к утечке данных, так как кодировщик "узнает" о распределении данных исходя из всех данных вместе, включая тестовый набор. Кодировщики, такие как label encoding или one-hot encoding, могут вскрыть ограничения, если категоризация выполняется после разделения, поскольку они не зависят от распределения целевой переменной.

Пример

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

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

Применение

Когда приходит время кодировать данные, следуйте строгому процессу машинного обучения:

  1. Разделение данных: Разделите свой набор данных на тренировочный и тестовый (или валидационный) набор перед любой серьезной обработкой данных. Это гарантирует, что никаких данных из тестового набора не будет использоваться в процессе обучения модели, позволяя объективно оценивать ее производительность.

  2. Кодирование после разделения: Примените кодирование только к тренировочному набору, создав карту или модель кодировщика. Затем используйте эту карту для преобразования тестового набора. Это позволяет обеспечить, что трансформации, выполненные с тренировочными данными, никак не зависят от тестовых данных.

  3. Выбор метода кодирования: Выбирайте кодировочные методы в зависимости от целей и характеристик данных. Для высокоразмерных категорий часто лучше подходят методы, такие как target encoding, но важно помнить о рисках утечки данных.

Заключение

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

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

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

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

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