В машинном обучении под утечкой данных понимают ситуацию, когда один или несколько входных признаков, использующихся в процессе обучения модели, оказываются недоступными при ее практическом применении. Результатом утечки данных является ухудшение точности модели относительно ее оценки, полученной на тестовых данных. Эту проблему достаточно сложно обнаружить, поэтому борьба с утечкой данных является актуальной задачей машинного обучения.
Утечку данных (data leakage) называют одной из десяти основных проблем машинного обучения. В узком смысле это ситуация, когда при построении ML-моделей используется информация, недоступная на этапе их практического применения. Несмотря на то, что проблема утечки данных способна существенно испортить жизнь аналитикам и бизнесменам, ее изучению уделяется недостаточно внимания.
Проблема усугубляется тем, что на практике она трудно формализуема, что не позволяет выработать какие-либо строго обоснованные и общие подходы для борьбы с ней. В большинстве случаев, обнаружение утечки и выработка методов противодействия опираются на знание данных, рассмотрение каждого конкретного случая и здравый смысл.
Следствием утечки является завышенная оценка качества ML-модели на этапе ее обучения относительно качества, которое она покажет в процессе практического использования на реальных данных. В результате модель, которая оценивалась как достаточно качественная по итогам обучения, на практике окажется плохо работающей или даже совершенно недееспособной.
Утечку данных следует рассматривать как сложное, многоаспектное явление. Можно выделить несколько ее типов:
Это основной тип утечки. Он связан с тем, что признаки обучающего набора данных, доступные на этапе построения модели, оказываются недоступными при её эксплуатации. Этому в наибольшей степени подвержены данные, формируемые во внешнем окружении, доступность которых не зависит от самой организации. Однако, если такие данные игнорировать, потенциально ценная информация из внешнего окружения останется неиспользуемой при обучении модели, что снизит ее качество.
Известно, что жизненный цикл любой ML-модели включает как минимум два этапа: обучение (training) и предсказание (prediction). В процессе обучения выполняется настройка параметров модели с использованием обучающего множества по определенному алгоритму. На этапе предсказания модель формирует (предсказывает) значения целевой переменной для новых наблюдений, которые не использовались в процессе обучения.
Пусть, например, модель обучается на наборе данных, в котором присутствует признак «Возраст клиента». Очевидно, что это важная информация с точки зрения предсказания кредитоспособности заемщика в кредитном скоринге или уровня лояльности клиента в маркетинге. Но может случится так, что в режиме предсказания данные о возрасте новых клиентов окажутся недоступными. В результате информация, используемая в процессе обучения, не сможет быть применена при практической эксплуатации модели. Это и называется утечкой данных.
Утечку признаков можно проиллюстрировать с помощью следующего рисунка.
Пусть обучающий набор данных содержит пять входных переменных x_1,x_2,...,x_5 и одну целевую Y . После окончания этапа обучения модель должна «научиться» с некоторой приемлемой точностью реализовывать функцию
Y=f(x_1,x_2,x_3,x_4,x_5).
Допустим, что при вводе модели в эксплуатацию произошла утечка данных, а именно признака x_5. В результате вместо функции f модель будет реализовывать некоторую другую функцию f′, причем заранее не известно какую. Но она точно будет отличаться от f и формировать результат Y′, отличный от того, какой был бы получен если бы все значения признаков были доступны.
Ожидаемым результатом утечки будет снижение точности предсказания модели на практических данных относительно точности предсказания на обучающих и тестовых (где «утекшая» переменная присутствует). Причины данного явления интуитивно понятны: при предсказании используется меньше информации, чем при обучении.
Данный вид утечек связан с непреднамеренным или ошибочным использованием информации о целевой переменной, которая не будет доступна по завершении процесса обучения.
Тривиальный случай — включение целевой переменной в обучающий набор в качестве входного признака. При этом получается, что функция, которую модель должна «научиться» воспроизводить, явно задана на обучающей выборке и не будет доступна вне ее. Это все равно, что делать выводы типа «в дождливые дни идет дождь». Такую функцию часто называют «give-away function», от англ. give-away — непреднамеренное раскрытие тайны.
Как известно, обучающий набор данных в случае обучения с учителем состоит из двух векторов: входного, который содержит набор значений входных признаков (независимых переменных), и целевого, содержащего значения зависимых переменных, которые должна выдавать модель, если бы была обучена. Затем целевые значения сравниваются с теми, которые модель сформировала фактически, и полученная выходная ошибка используется для коррекции параметров модели по заданному алгоритму обучения.
Обозначим X как входной вектор, а Y — выходной. Тогда обучающий пример можно представить в виде кортежа:
⟨X(x_1,x_2,...,x_n),Y(y_1,y_2,...,y_m)⟩,
где x_i и y_j — конкретные значения входных и целевых признаков для данного примера, n и m — количества входных и выходных признаков соответственно.
Для простоты допустим, что в модели единственная выходная переменная (m=1). Тогда при наличии утечки целевого признака в набор входных обучающий пример примет вид:
⟨X(x_1,x_2,...,x_n,y),Y(y)⟩.
Поясним это с помощью рисунка.
Целевая переменная y в процессе обучения модели должна использоваться только для вычисления выходной ошибки E=y−y', где y' — фактический выход модели для данного примера. Однако, как показано на рисунке, целевая переменная попадает так же и в число входных переменных, в чем и заключается ее утечка.
Например, пусть требуется построить модель, предсказывающую вероятность просрочки по кредиту. В ней входными признаками будут характеристики заемщика, такие как возраст, доход, сведения об имуществе и т.д., а целевым признаком — факт просрочки, известный для ранее наблюдаемых заемщиков.
Если включить сумму просрочки в число входных признаков, то модель окажется очень точной, так как одна из входных переменных будет нести всю информацию о выходной: из того, что сумма просрочки больше нуля, следует факт ее наличия. Но суммы просрочки известны только для ранее наблюдавшихся заемщиков, а для новых — нет.
В результате окажется, что информация о целевой переменной, имеющаяся при обучении модели, не может быть использована в реальном бизнес-процессе. Как следствие, модель будет работать очень плохо. Признаком целевой утечки как правило является неправдоподобно высокое качество модели по итогам обучения.
В англоязычном варианте данный вид утечки обозначается как train-test contamination — TTC. Он связан с предобработкой данных, а именно с нормализацией, масштабированием, сглаживанием, квантованием, подавлением выбросов и другими методами, которые приводят к изменению значений данных.
С одной стороны, применение предобработки позволяет сделать процесс обучения более эффективным, а модель более точной, но только на обучающих данных, к которым эта предобработка применялась. При этом «подгонка» модели будет производиться именно к измененным данным, а не к реальным, которые, вероятнее всего будут использоваться на практике. Как следствие качество модели на обучающих данных окажется переоцененным.
Чтобы обнаружить этот вид утечки, проще всего сначала построить модель на предобработанных данных, а затем оценить ее качество на части данных, которые не были подвергнуты предобработке. Для этого удобно помимо тестового множества, примеры которого также подвергаются предобработке, сформировать валидационное множество отложенную выборку), примеры которого подаются как есть. Проверка обученной модели с помощью валидационного множества позволит оценить ее качество, ожидаемое на практических, а не обучающих данных.
Следует отметить, что применять для этих целей тестовое множество нельзя, поскольку его примеры подаются на вход модели вместе с обучающими и тоже должны подвергаться предобработке.
Если модель обучается с помощью перекрестной проверки, т.е. тестирующие и тренирующие блоки меняются местами, то чтобы избежать утечки типа TTC необходимо производить предобработку на каждой итерации.
И, наконец, если тестовые данные «протекают» в обучающие, т.е. используются как для подстройки параметров модели, так и для тестирования, оценка качества модели окажется завышенной.
Поэтому если проверка качества модели строится на простом разделении исходного набора данных на обучающее и тестовое множества, то важно позаботиться, чтобы тестовые данные не попали в обучающие.
На практике утечку данных обнаружить достаточно сложно, как и оценить ее последствия. Это усугубляется еще и тем, что разрабатывают и эксплуатируют аналитические модели люди, зачастую работающие в разных компаниях или подразделениях.
В результате, специалист, скажем, IT-отдела, обучает модель, проверяет ее качество и передаёт в эксплуатацию в отдел маркетинга. В свою очередь специалист отдела маркетинга, не подозревая о наличии утечки данных, удивляется, почему такая хорошая, по заверениям IT-отдела, модель так плохо работает на реальных данных.
Для того, чтобы найти причину, нужно как минимум организовать процесс взаимодействия специалистов, разрабатывающих и эксплуатирующих модель.
Наиболее очевидным подходом к предотвращению утечки данных является организационный. Т.е. управление данными в процессе их интеллектуального анализа должно выстраиваться так, чтобы не допустить утечки. Единых подходов здесь нет, опора делается в основном на опыт, знание данных и предметной области, в которой используется модель. Тем не менее, ряд общих рекомендаций сделать можно:
Утечка данных может привести к многомиллионным потерям в бизнесе, где решения принимаются на основе анализа данных с применением ML-моделей. Поэтому очень важно уделять внимание мониторингу признаков сигнализирующих о возникновении утечки данных, поскольку своевременное обнаружение проблемы поможет смягчить ее последствия.
Другие материалы по теме: