Постановка ML-задачи и работа с данными

Exploratory Data Analysis: распределения и аномалии

Содержание курса

5. Пропущенные значения: три разных механизма

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

  • MCAR (Missing Completely At Random) — пропуск никак не связан ни с самим пропущенным значением, ни с другими признаками. Например, часть записей потерялась из-за случайного сбоя при выгрузке. Такие пропуски можно удалить или заполнить без риска внести смещение.
  • MAR (Missing At Random) — пропуск зависит от других наблюдаемых признаков, но не от самого пропущенного значения. Например, данные о промо-активности отсутствуют чаще для магазинов определённого типа, но не потому, что промо там было или не было. Здесь удаление строк уже может дать смещённую выборку.
  • MNAR (Missing Not At Random) — пропуск зависит именно от самого пропущенного значения. Например, магазины с очень низкими продажами могут не передавать данные — тогда пропуск в Sales связан с его реальным значением. Это самый опасный случай: никакая импутация не устраняет смещение без дополнительных предположений. В rossmann_train.csv по сводке пропусков все ключевые столбцы — Store, DayOfWeek, Date, Sales, Customers, Open — заполнены полностью, пропусков нет. Это упрощает анализ, но не означает, что данные идеальны: нули в Sales при Open=1 — это тоже форма аномалии, которую стоит проверять отдельно. Проверить количество и долю пропусков по каждому столбцу элементарно:

import pandas as pd

df = pd.read_csv('rossmann_train.csv')

missing = df.isnull().sum()
missing_pct = df.isnull().mean() * 100

pd.DataFrame({'missing_count': missing, 'missing_pct': missing_pct.round(2)})

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

Начать заново?

Помощник начнёт новый диалог по этой задаче. Текущая переписка останется в истории до конца срока хранения.

О переписке

Можно приложить до трёх фото PNG, JPEG или WebP по 5 МБ.

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

Проверка решения остаётся отдельным действием.