Вменение до или после разделения на поезд и тест?


18

У меня есть набор данных с N ~ 5000 и около 1/2 отсутствует по крайней мере по одной важной переменной. Основным аналитическим методом будет пропорциональный риск Кокса.

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

Должен ли я разделять данные и затем вменять отдельно, или вменять, а затем делить?

Если это имеет значение, я буду использовать PROC MIв SAS.


2
50% пропущенных значений для важной переменной? Тьфу. Вместо вменения, почему бы не создать категорию «Отсутствующие» для переменной?
RobertF

Ни в одной переменной не хватает 50%, но около 50% отсутствует хотя бы в одной. Кроме того, они являются непрерывными, поэтому «отсутствие» может испортить ситуацию.
Питер Флом - Восстановить Монику

Ах. Я нервничаю, используя вменение. Интересно о преимуществах наличия непрерывной переменной с вмененными значениями 50% по сравнению с преобразованием продолж. переменная или категориальная с категорией «отсутствует» плюс достаточно ячеек, чтобы зафиксировать поведение не пропущенных значений?
RobertF

Я не люблю биннинг непрерывных переменных.
Питер Флом - Восстановить Монику

Ответы:


20

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

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

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

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


Когда вы говорите «вы делаете это одинаково для обоих наборов», вы имеете в виду: «использовать один и тот же метод для расчета отсутствующих данных в тестовом наборе, но НЕ одни и те же данные»?
Тимвиз

@colorlace Используйте аналогию прошлого / будущего. Вы использовали тренировочный набор в прошлом и ввели некоторые значения. Теперь вы получаете набор тестов в будущем и хотите вменить некоторые из его значений; по-видимому, вы будете использовать тот же метод, что и раньше, применяемый к данным испытаний (хотя вы можете свободно включать то, что вы узнали из данных тренировок)
Генри,

Если вы «можете свободно использовать то, что вы узнали из обучающих данных», то чем это отличается от просто не расщепления перед вменением.
Timwiz

1
@colorlace: именно этот последний момент и есть то, что я говорю: ничего, что вы делаете с тренировочными данными, не следует информировать с помощью тестовых данных (аналогия заключается в том, что будущее не должно влиять на прошлое), но что вы делаете с тестовыми данными могут быть получены из данных тренировок (аналогия в том, что вы можете использовать прошлое, чтобы помочь предсказать будущее)
Генри

1
@colorlace - если вы используете тестовые данные для воздействия на тренировочные данные, то тестовые данные используются для построения вашей модели, поэтому они перестают быть тестовыми данными и не дают объективного теста вашей модели. Вы рискуете переобучением, и это было препятствием для того, чтобы вы сначала разделили данные испытаний
Генри,

1

Я думаю, тебе лучше разделиться, прежде чем делать вменение. Например, вы можете вменять пропущенные значения в среднее значение столбца. В этом случае, если вы сначала вмените набор данных Train + valid, а затем разделите его, то вы использовали набор данных проверки до того, как построили свою модель, и именно так возникает проблема утечки данных.

Но вы можете спросить, если я вменю после разделения, это может быть слишком утомительно, когда мне нужно сделать перекрестную проверку. Для этого я предлагаю использовать конвейер sklearn. Это действительно упрощает ваш код и снижает вероятность ошибки. Смотрите Трубопровод


0

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

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

Я думаю, что набор кареток в r очень полезен в этой обстановке. В частности, я обнаружил, что этот пост чрезвычайно полезен https://topepo.github.io/caret/model-training-and-tuning.html

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.