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

Проблема утечки данных

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

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

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

Если ее не обнаружить, утечка данных может привести к проблемам, в том числе:

  • Завышенная производительность модели в лаборатории и
  • Низкая производительность при развертывании с реальными данными.

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

6 способов предотвратить утечку данных

  1. Понимание набора данных
  2. Набор данных очистки от дубликатов
  3. Выбор функций с учетом целевой корреляции переменных и временного порядка
  4. Разделение набора данных на группы обучения, проверки и тестирования
  5. Нормализация после разделения, НО до перекрестной проверки
  6. Оценка производительности модели со здоровым скептицизмом

1. Понимание набора данных

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

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

2. Очистка набора данных от дубликатов

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

3. Выбор функций с учетом целевой корреляции переменных и временного порядка.

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

Учет корреляции целевой переменной

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

Принимая во внимание временное упорядочение

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

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

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

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

Дополнительные сведения о предотвращении утечки данных при работе с данными временных рядов: Утечка данных, часть I:« Думаете, у вас есть отличная модель машинного обучения? Рафаэля Пьера? Подумай еще раз ». А для более подробного объяснения временного порядка ознакомьтесь с работой Девина Сони Утечка данных в машинном обучении.

4. Разделение набора данных на обучающие, проверочные и тестовые группы.

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

После разделения не выполняйте исследовательский анализ данных на проверочных и тестовых наборах - только на обучающем наборе! Любые дополнительные функции или обновления модели, полученные в результате анализа проверок или наборов тестов, являются случаями утечки данных.

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

5. Нормализация после разделения, НО до перекрестной проверки

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

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

Однако, если вы планируете использовать перекрестную проверку поиска по сетке для гипер-настройки параметров, масштабирование набора поездов приведет к утечке данных, если оно будет выполнено до перекрестной проверки, поскольку перекрестная проверка дополнительно разделяет набор поездов на дополнительные наборы поездов и тестов. Рекомендуется использовать конвейер с GridSearchCV для более подходящего масштабирования данных с помощью препроцессоров данных, таких как Standard Scaler. Ниже я привел снимок экрана с кодом, который использует конвейер для соответствующего масштабирования данных при использовании GridSearchCV.

6. Оценка эффективности модели со здоровым скептицизмом

И последнее, но не менее важное: при оценке производительности модели важно проявлять здоровый скептицизм.

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

Рассмотрите используемый алгоритм машинного обучения

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

Сравнить с базовым уровнем

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

Рационализируйте важность функций

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

Использовать несколько показателей

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

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

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

Тестируйте с новыми наборами валидации

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