Какие знаешь способы заполнения пропусков?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Заполнение пропусков (импутация) — критическая часть предварительной обработки данных в ML. Это не просто замена значений, а стратегическое решение, которое влияет на качество модели.
Статистические методы
Простая подстановка средних/медиан/моды — самый базовый способ. Среднее хорошо для нормально распределённых данных, медиана робустнее к выбросам, мода для категориальных признаков.
from sklearn.impute import SimpleImputer
# Среднее значение
imputer = SimpleImputer(strategy="mean")
X_filled = imputer.fit_transform(X)
# Медиана (robust)
imputer = SimpleImputer(strategy="median")
Прямое и обратное заполнение — для временных рядов. Forward fill (ffill) использует последнее известное значение, backward fill (bfill) — следующее.
df["column"].fillna(method="ffill") # Распространить последнее значение вперёд
df["column"].fillna(method="bfill") # Распространить следующее назад
K-Nearest Neighbors (KNN)
Заполняет пропуск на основе k ближайших соседей по другим признакам:
from sklearn.impute import KNNImputer
imputer = KNNImputer(n_neighbors=5)
X_filled = imputer.fit_transform(X)
Плюсы: учитывает сложные зависимости между признаками. Минусы: вычислительно дорого на больших данных.
Множественная импутация (MICE)
Iterative Imputer использует машинное обучение для предсказания пропусков:
from sklearn.experimental import enable_iterative_imputer
from sklearn.impute import IterativeImputer
imputer = IterativeImputer(estimator=Ridge(), max_iter=10)
X_filled = imputer.fit_transform(X)
Работает циклично: предсказывает один признак на основе других, потом второй и т.д. Сильнее KNN, но медленнее.
Deep Learning подходы
Для сложных данных можно использовать VAE или GAIN, но это над-инженеринг для большинства случаев.
Удаление пропусков
Иногда проще удалить строки/столбцы:
df.dropna() # Удалить строки с пропусками
df.dropna(thresh=0.5) # Оставить только столбцы с заполненностью >50%
Практические рекомендации
- Проанализируй паттерн: случайные пропуски (MCAR) vs зависимые (MAR/MNAR)
- Для MAR: используй MICE или KNN
- Для MCAR: простая статистика часто работает
- Для временных рядов: forward/backward fill
- Оцени влияние: сравни модели с разными стратегиями импутации
Выбор метода зависит от процента пропусков, природы данных и природы отсутствия.