Данные

Missing values

Пропущенные значения

актуальноТекущий рабочий стандарт

Направления: Машинное обучение · Классический ML

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

Ключевые тезисы

  • MCAR / MAR / MNAR — три механизма пропусков с разными последствиями для смещения оценок.
  • Простые стратегии: медиана, мода, отдельная категория; сложные: KNN-imputer, модельное .
  • Флаг «значение было пропущено» часто сам по себе является сильным .

Какую задачу решает

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

Разница практическая. При случайном пропуске (MCAR) можно почти всё, включая удаление строк. При MAR помогает импьютация по другим признакам. При MNAR — например, доход не указали именно те, у кого он высокий, — любое заполнение вносит систематическое смещение, и правильный ход обычно другой: добавить флаг пропуска как отдельный .

Когда флаг важнее значения

В данных о кредитах поле «стаж на текущем месте» пусто у 12% заявителей. Заполнение медианой даёт признаку правдоподобный вид — и теряет главное: пропуск встречается у безработных и у тех, кто скрывает нестабильную занятость. Добавьте has_experience = 0/1 рядом с заполненным значением, и этот флаг с высокой вероятностью попадёт в топ важности модели. Общее правило: заполняйте, но всегда сохраняйте факт пропуска отдельным .

Подробный разбор

3 подтемы — объяснения, формулы, примеры и интерактивные графики.

МеханизмЧто это значитПримерМожно ли заполнять
MCARпропуск не зависит ни от чегосбой датчикада, смещения не будет
MARзависит от других молодые реже указывают доходда, но по группам
MNARзависит от самого значениявысокие зарплаты скрываютнет — нужен флаг и осторожность

Проверить механизм полностью нельзя, но многое видно: сравните распределения в строках с пропуском и без. Если они различаются — это не MCAR.

  1. Удалить строки — только если пропусков мало (< 5%) и они MCAR.
  2. Константа / медиана / мода — быстро и безопасно; медиана устойчивее среднего к выбросам.
  3. Отдельная категория «неизвестно» — для категориальных часто лучший вариант.
  4. По группам: медиана дохода внутри возрастной группы — простой способ учесть MAR.
  5. Модель: обучить регрессию/, предсказывающую пропущенный по остальным.
Статистика считается только по обучающей части — иначе тест протекает в обучение
На практике

Почти всегда стоит добавить бинарный was_missing. Часто сам факт пропуска информативнее подставленного значения: «не указал доход» — сильный сигнал в скоринге.

возрастдоход
возраст23.00 … 61.00
доход45000.00 … 210000.00
Преобразование
Робастные статистики (медиана, IQR) устойчивее к выбросам — переключите режим и добавьте выброс

Медиана по столбцу игнорирует всё, что известно об объекте из других . MICE (Multiple Imputation by Chained Equations) идёт иначе: каждый признак с пропусками по становится целевой переменной, а остальные — предикторами, и обучается регрессия, восстанавливающая его значения. Проходы повторяются, пока значения не стабилизируются.

  1. Все пропуски грубо заполняются (медианой или средним) — стартовая точка.
  2. Для первого с пропусками восстановленные значения удаляются обратно.
  3. На наблюдаемой части обучается модель «этот ← все остальные», и пропуски предсказываются ею.
  4. То же повторяется для каждого ; цикл проходов идёт до сходимости.
from sklearn.experimental import enable_iterative_imputer  # noqa: F401
from sklearn.impute import IterativeImputer
from sklearn.ensemble import HistGradientBoostingRegressor

imp = IterativeImputer(
    estimator=HistGradientBoostingRegressor(),
    max_iter=10, random_state=0,
)
X_train_imp = imp.fit_transform(X_train)   # обучение только на train
X_test_imp = imp.transform(X_test)
IterativeImputer в scikit-learn — реализация той же схемы; kNN-импутация делает похожее по ближайшим соседям
МетодУчитывает связиСтоимостьКогда брать
Медиана / моданетмгновенномало пропусков, нужен быстрый
По группамчастичнонизкаяизвестен группирующий (MAR)
kNN-импутацияда, локальносредняянебольшие таблицы, разнородные
MICEда, через регрессиивысокаямного связанных числовых
На практике

Импутер — часть модели: он обучается на train и применяется к test, иначе в обучение протекает информация из теста. И бинарный флаг was_missing полезен даже при самой аккуратной импутации.

Где применяется

  • Табличные данные из реальных системПропуски есть почти всегда — вопрос лишь в том, признали вы их механизм или нет.
  • Опросы и анкетыКлассический MNAR: не отвечают на чувствительные вопросы именно те, у кого ответ нестандартный.
  • Данные с датчиковПропуски связаны с отказами оборудования — сам факт пропуска диагностичен.
  • с нативной поддержкой, и выучивают направление для пропуска сами — часто лучше любой импьютации.

Плюсы, минусы и альтернативы

Плюсы

  • Правильная работа с пропусками часто даёт больше, чем настройка модели.
  • Флаг пропуска бесплатен и нередко оказывается сильным .
  • Современный обрабатывает пропуски штатно, без предварительного заполнения.

Минусы

  • Заполнение средним занижает и искажает .
  • Удаление строк выбрасывает данные и смещает выборку, если пропуск не MCAR.
  • Сложная импьютация — ещё одна модель, которую нужно валидировать и версионировать.
  • Механизм пропуска обычно нельзя проверить по данным, только предположить.

Брать, если

  • Пропусков больше 1–2% в значимом признаке — разбираться обязательно.
  • Доля пропусков различается между классами — это сигнал, а не шум.

Не брать, если

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

Чем заменяют

Видеолекции

Тайм-кода именно на эту тему в записях нет. Но глава «Данные» разобрана в курсах целиком — с той оговоркой, что место в записи придётся искать самому.

Связанные темы

Подготовка данных

Data preprocessing75%

Предобработка данных · Данные

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

Outliers75%

Выбросы · Данные

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

Encoding75%

Кодирование категорий · Данные

Перевод категориальных признаков в числа: one-hot, ordinal, target encoding, хеширование, эмбеддинги.

Normalization & Standardization75%

Нормализация и стандартизация · Данные

Приведение признаков к сопоставимым масштабам, без которого расстояния, градиенты и регуляризация работают некорректно.

Feature engineering75%

Конструирование признаков · Данные

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

ML Pipelines75%

ML-пайплайны · MLOps

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

Тема в работе целиком

Разбор архитектуры, где эта тема — один из кирпичей: требования, развилки, цифры и режимы отказа.

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

Глава «Данные» последний раз правилась . Нашли ошибку — напишите.