Единицы
1. Введение в искусственный интеллект в науке о данных и аналитике: рабочий процесс, роли, границы, проверка и этика 2. Сбор данных и понимание источников: схема, выборка, качество и осведомленность об утечках 3. Очистка и предварительная обработка данных: отсутствующее значение, выбросы и преобразование типов 4. Исследовательский анализ данных (EDA): распределения, взаимосвязи и первоначальные выводы 5. Разработка функций: создание вариантов, кодирование, масштабирование и предотвращение утечек 6. Построение модели: постановка задачи, выбор алгоритма и разделение обучения/тестирования 7. Оценка модели: метрики, перекрестная проверка и экстремальное обучение 8. Визуализация и рассказывание историй: точная графика, честная графика 9. Генерация кода: анализ с помощью искусственного интеллекта с помощью Python (Pandas) и SQL 10. Утечка данных и воспроизводимость: тихие катастрофы и дисциплина 11. Фонд MLOps, этика, конфиденциальность и ответственная аналитика
Единица 10 / 11

Утечка данных и воспроизводимость: тихие катастрофы и дисциплина

Прибыль:

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

Есть две ошибки, на которые тратится больше всего усилий в науке о данных, и обе они коварны, потому что приводят к катастрофе именно тогда, когда «кажется, все в порядке». Первый — утечка данных: модель отлично работает на тестовом наборе, но дает сбой в производстве. Второе — невоспроизводимость: вы проводите анализ через полгода и получаете совершенно другой результат. Этот модуль посвящен подробному знанию и избежанию этих двух ловушек. ИИ может увеличить оба риска (быстро генерирует, предполагает скрытые утечки, облегчает выполнение действий вручную), но также может и снизить их при правильном использовании. Разница в дисциплине.

Утечка данных: модель ясновидящей

Утечка данных — это когда модель во время обучения видит информацию, которой у нее не будет во время фактического прогнозирования. Модель «обманывает» эту информацию, отлично выглядит на тестовом наборе, но без этой информации не работает в производстве. Симптом утечки почти всегда один и тот же: слишком хорошо, чтобы быть правдой. Прежде чем радоваться, увидев точность в 99%, стоит поискать утечки.

Основными видами утечки являются:

1. Утечка цели. Функция является результатом достижения цели. В прогнозе «было отменено» столбцы «Дата отмены» или «Сумма возврата» являются результатом целевого значения; Они будут заполнены только тогда, когда результат будет очевиден.

2. Утечка времени: перенос будущей информации в прошлое. При расчете «среднего значения за последние 30 дней» включите дни после прогнозируемого дня или разделите временной ряд случайным образом.

3. Утечка предварительной обработки: преобразования обучения, такие как масштабирование, заполнение, кодирование всех данных перед разделом обучения/тестирования. Усреднение тестовых данных мешает обучению.

4. Утечка повторяющихся/сгруппированных строк: строки, принадлежащие одному и тому же человеку, присутствуют как в обучении, так и в тестировании (два посещения одного и того же пациента в разных наборах). Модель запоминает человека.

Тип утечки

Как рождается

Как предотвратить

целевая утечка

Столбец, который является результатом цели

Тест «Есть ли оно у меня в момент предсказания»

утечка времени

Привнесение будущего в прошлое

Хронологическое деление, управление окнами

Утечка предварительной обработки

Преобразование до разделения

Пайплайн, подошёл только после тренировки

Утечка сгруппированной строки

Один и тот же блок в двух комплектах

Разделить по группам (GroupKFold)

Единственная дисциплина, предотвращающая утечку

Общее решение для всех типов утечек сводится к одному предложению: изолировать набор тестов как можно раньше, чтобы имитировать реальное будущее, и не «учить» его ничему. На практике это означает: сначала разделить, затем выучить все преобразования только из обучения и применить их в конвейере (структуре, собирающей все шаги в одну цепочку). По каждому признаку задайте вопрос «имею ли я эту информацию на момент предсказания?» Если есть время, разделите его в хронологическом порядке; Если один и тот же модуль повторяется, разделите его на группы.

Внимание: Самый опасный аспект утечки заключается в том, что она представляется успешной. Плохая модель, очевидно, даст плохие результаты и будет замечена; Слитая модель прекрасно работает, всех радует, запущена в производство — вот тут-то и начинается развал. Поэтому «очень хороший» результат – это повод для тревоги, а не для празднования.

Воспроизводимость: получение одного и того же результата дважды.

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

Действия вручную: изменение ячейки в Excel вручную, редактирование диаграммы вручную. Решение: запишите каждый шаг в коде.

Нефиксированная случайность: обучение модели, выборка, разделение подразумевают случайность. Решение: исправить случайное начальное число (начальное значение генератора случайных чисел) (random_state=42).

Смена версий: результат может измениться при изменении версии библиотеки. Решение: исправить зависимости (requirements.txt, файл окружения).

Никакого учета: непонятно, какие данные, какой код, какой параметр использовались. Решение: контроль версий (Git — система, сохраняющая все версии кода) и версионирование данных.

«Это работает только на моей машине»: Решение: задокументируйте среду, по возможности используйте контейнеры (Docker).

три мини-кейса

Случай 1 — Целевая утечка. Анализ состояния здоровья включал столбец «Лекарства после выписки», позволяющий прогнозировать, «будет ли пациент повторно госпитализирован». Эта графа заполнялась только после выписки пациента. Модель дала 96%, в производстве 61%. 8-недельный проект был мусором. Урок: задайте каждому признаку вопрос «присутствует ли он на момент предсказания?»

Случай 2 — Утечка при предварительной обработке. Одна команда масштабировала все данные, а затем разделила их. Среднее значение тестовых данных участвовало в масштабировании. Оценка CV 89%, фактическое производство 76%. Фальшивый успех исчез, когда я перешёл в Pipeline и узнал о трансформациях только во время обучения. Урок: сначала разделите, потом преобразуйте.

Случай 3 — Невозможность воспроизвести. Аналитик хотел обновить диаграмму, которую он представил руководству три месяца спустя, но не мог вспомнить, как он ее составил; многие шаги выполнялись вручную в Excel. Результата не получилось и доверие пошатнулось. Урок: никаких ручных действий, все в коде и Git.

Четыре копируемых шаблона

1) Проверка утечек:

Ваша роль: инспектор по утечкам. Цель: «отток» (0/1), базовая дата прогноза: Record_date. Я дам вам этот список функций. Для КАЖДОГО признака: (а) является ли он следствием цели, (б) доступен ли он мне в момент прогнозирования, (в) включает ли временное окно будущее? Отметьте его как «небезопасное/подозрительное/утечка» и напишите причину. Особенности: [список]

2) Герметичный трубопровод:

Настройте конвейер sklearn: сначала разделите поезд/тест (стратифицированный, начальное значение = 42), ЗАТЕМ поместите всю предварительную обработку (вменение, масштабирование, кодирование) в конвейер ТОЛЬКО из обучения. Объясните, почему код не содержит утечек, какой шаг и где был изучен.

3) Код контрольного списка воспроизводимости:

Я хочу, чтобы мой анализ был воспроизводимым. Предложите код/структуру, которая добавляет: (1) жесткое начальное значение для всей случайности, (2) используемые версии библиотеки печати, (3) тег даты/версии для данных и вывода. Также дайте мне контрольный список, чтобы убедиться, что нет никаких действий вручную.

4) Сгруппированный раздел (утечка одного и того же блока):

В данных один и тот же customer_id существует в нескольких строках. Сделайте разделение (GroupKFold илиGroupShuffleSplit, group = customer_id), которое ПРЕДОТВРАЩАЕТ участие одного и того же клиента как в обучении, так и в тестировании. Включите код, проверяющий, что после разделения в обоих наборах нет клиентов.

Слабая подсказка / Сильная подсказка

Слабая подсказка:

Моя модель показала точность 98 %, разве это не здорово? Оптимизируйте код.

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

Мощная подсказка:

Ваша роль: инспектор по утечкам. Моя модель возвращает точность 98% на тестовом наборе, что для меня звучит «слишком хорошо, чтобы быть правдой». Проверьте: (1) являются ли какие-либо функции результатом цели, (2) выполнены ли преобразования перед разделением, (3) являются ли одни и те же единицы в двух наборах, (4) есть ли какие-либо утечки времени. Перечислите все подозрительные моменты; Сосредоточьтесь на поиске утечки, а не на исправлении ситуации.

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

Распространенные ошибки

  • Отмечаем «очень хороший» результат. Оценка «слишком хорошо, чтобы быть правдой» — это предупреждение об утечке информации, а не достижение.
  • Изучение преобразования всех данных перед разделением. Самая распространенная утечка; Сначала разделите трубопровод.
  • Разбиение временного ряда случайным образом. Модель видит будущее; Хронологическое деление обязательно.
  • Оставляем один и тот же блок в двух комплектах. Модель запоминает человека; Разделите по группам.
  • Не вмешиваясь вручную и не записывая код. Анализ становится невоспроизводимым; все должно быть в коде и Git.
Совет: напишите «клятву чести» из двух предложений в начале вашего проекта: «Я никоим образом не трогал тестовый набор до того, как увидел его в производстве. Каждый шаг записан в коде, а начальное число фиксировано». Если вы не можете честно подписать эти два предложения, ваш результат еще не надежен.

В заключение

Утечка данных и невоспроизводимость — две самые дорогостоящие молчаливые ошибки в науке о данных. Утечка — это видение будущего модели, которое представляет собой ложный успех; Решение состоит в том, чтобы заранее разделить тестовый набор, изучить преобразования только в процессе обучения (конвейер), задать каждой функции вопрос «Есть ли она у меня на момент прогнозирования» и выполнить правильное разделение (хронологическое/групповое). Воспроизводимость – это возможность получить один и тот же результат дважды; его решение — вручную удалить шаги, закрепить начальное значение, заморозить версии и сохранить все в Git. ИИ может либо увеличить, либо уменьшить эти риски; Это ваша дисциплина, которая определяет.

Задача приложения

Возьмите список функций построенной вами модели (или гипотетической) и задайте каждой функции вопрос: «Есть ли у меня эта информация на момент прогнозирования?» в письменной форме; Найдите хотя бы одного кандидата на утечку. Затем заполните контрольный список, чтобы ваш анализ был воспроизводимым: исправлено ли начальное значение, есть ли ручные действия, зарегистрированы ли версии, находятся ли они в Git. Устраните недостатки.

контрольный список

  • [ ] Ссылался ли я на оценку «слишком хорошо, чтобы быть правдой» как на предупреждение об утечке?
  • [ ] Изучил ли я все трансформации после разделения только во время тренировок?
  • [ ] Разделился ли я по временной/групповой структуре (хронологическая/GroupKFold)?
  • [ ] Сделал ли я всю случайность повторяемой с фиксированным начальным числом?
  • [ ] Удалил ли я действия, выполняемые вручную, и сохранил ли все код и контроль версий?