Короткий ответ
Нужно сравнить долю пропусков в разных сегментах (по платформе, стране, периоду регистрации и так далее); если пропуски сильно концентрируются в одном сегменте, это сигнал, что пропуск не случаен и напрямую связан с источником или природой данных этого сегмента.
Как это работает подробнее
строят сводную таблицу доли пропусков по каждому сегменту (df.groupby('segment')['col'].apply(lambda x: x.isna().mean())); если доля пропусков заметно различается между сегментами, а не распределена равномерно, пропуски скорее всего связаны с определённым процессом (например, новая версия приложения не отправляла поле, или пользователи одной страны не заполняли анкету).
Пример кода
question-129.py
import pandas as pd
df = pd.DataFrame({
'platform': ['ios', 'ios', 'android', 'android', 'android'],
'age': [25, None, 30, None, None]
})
missing_by_segment = df.groupby('platform')['age'].apply(lambda x: x.isna().mean())
print(missing_by_segment)Что использовать на практике
- Практика. такой анализ особенно важен перед принятием решения об удалении строк или заполнении пропусков — если пропуски систематически связаны с, например, менее активными пользователями, удаление строк занизит метрики активности; стоит также проверить, не совпадает ли момент появления пропусков с датой релиза или изменением трекинга.
- Проверка. доля пропусков для android должна оказаться заметно выше (2 из 3, то есть 0.67), чем для ios (1 из 2, то есть 0.5), что указывает на возможную связь пропуска с платформой и требует дальнейшего разбирательства.
Подводные камни
- Частая ошибка. делают вывод о "случайности" пропусков только по общей доле пропусков в таблице, не разбивая по сегментам; увидев связь пропусков с сегментом, сразу удаляют весь сегмент вместо того, чтобы отдельно разобраться, является ли это технической проблемой трекинга или реальной особенностью сегмента.