Из-за утечки данных может возникнуть неприятная ситуация: во время обучения модель выдаст нереалистично высокие показатели эффективности, а в реальных условиях будет работать совсем не так. Проще говоря, во время обучения модель запомнила информацию, к которой у неё не должно было быть доступа, и из-за этого метрики эффективности получились искусственно завышенными.
Представьте, что вы готовитесь к экзамену по математике. Вы решаете много задач, чтобы получше натренироваться. И тут выясняете, что вопросы к экзамену случайно выложили в интернет. У вас есть доступ к этой критически важной информации и возможность всё решить. То есть вы начинаете учиться на датасете, который, по идее, должен был попасть к вам только на экзамене, и таким образом вы «запоминаете» паттерны. Результат? Вы вызубрили задачи «тестового датасета» и получили нереалистично высокую оценку за эту часть экзамена, но когда речь заходит о выполнении реальных задач… лучше даже не говорить, что будет.
Утечка информации о целевой переменной
Распознать утечку информации о целевой переменной — дело непростое. Представьте себе: вы создаёте модель, которая предсказывает, отменят ли клиенты ежемесячную подписку на ваш сервис, то есть их отток. На первый взгляд не кажется проблемой включение в модель «количества звонков клиента в службу поддержки». Ведь можно считать, что много звонков свидетельствует о высокой вероятности оттока клиентов.
Но при пристальном рассмотрении выясняется, что «количество звонков в службу поддержки» — это следствие, а не причина ухода. Клиенты, которые уже решили отказаться от сервиса, просто звонят уладить оставшиеся вопросы, прежде чем окончательно отписаться. Так что эта информация будет недоступна на тот момент, когда нужно спрогнозировать, уйдёт клиент или нет. Иными словами, она известна нам только по клиентам, которые уже решили уйти.
Если в состав признаков попадёт целевая переменная или любые прокси-метрики, которые можно прямо или косвенно извлечь из неё, это может привести к утечке данных.
Контаминация обучающих и тестовых данных и утечка данных во время предварительной обработки
Такое происходит, когда одни и те же этапы предварительной обработки данных применяются и к обучающему, и к тестовому датасетам. Например, возьмём этапы предварительной обработки: нормализацию признаков, оценку недостающих данных и удаление исключений. Здесь нужно убедиться, что мы не используем тестовый датасет для «обучения», как показано ниже.
scaler = StandardScaler()
scaler.fit(X_train)
scaler.transform(X_train)
scaler.transform(X_test)Мы заранее разделяем датасет на учебный и тестовый, чтобы можно было тренироваться только на обучающем датасете. Обратите внимание, что не нужно тренировать модель на целом датасете, включающем и обучающую, и тестовую выборку. Это приведёт к утечке данных, ведь модель будет тренироваться на данных, которую ей не нужно было показывать. Иными словами, тестовый датасете неизвестен ей на момент прогнозирования.
Тренируйте модель на обучающих данных, выполняйте преобразования и с обучающими, и с тестовыми данными.
Последствия утечки данных
Модель показывает чрезвычайно высокую эффективность при обучении, а тестовый датасет даёт крайне низкие результаты — знакомая ситуация? Возможно, всё дело в утечке данных. Здесь ключевые слова это «чрезмерное обучение» и «неспособность генерализации». Модель натренировалась на шуме и нерелевантной информации, что привело к низкой эффективности при работе с реальным тестовым датасетом.
В конечном счёте из-за неточной оценки модели вы получаете ненадёжные прогнозы. Это бессмысленная трата ресурсов!
@machinelearning_interview