Итеративная импутация (iterative imputation) — это метод заполнения пропущенных значений в наборе данных, при котором каждый признак с пропусками поочерёдно предсказывается на основе всех остальных признаков с помощью модели машинного обучения. Процесс повторяется несколько раз (итераций), пока значения не стабилизируются.
Как это работает
- Инициализация. Все пропуски временно заполняются простыми способами (например, средним или медианой).
- Цикл по признакам. Для каждого признака, содержащего пропуски:
- Он считается целевой переменной.
- Остальные признаки (включая уже заполненные) используются как предикторы.
- Строится модель (линейная регрессия, случайный лес и т.п.) на объектах, где целевой признак не пропущен.
- Модель предсказывает пропущенные значения этого признака.
- Повторение. Шаги 2 выполняются для всех признаков по очереди. Затем весь цикл повторяется заданное число раз или до сходимости (когда изменения становятся меньше порога).
- Результат. Получается один заполненный набор данных (одиночная импутация) или несколько (при множественной импутации, например, MICE).
Связь с MICE
Наиболее известная реализация итеративной импутации — MICE (Multiple Imputation by Chained Equations). В ней итеративная схема используется для создания нескольких правдоподобных вариантов заполнения, что позволяет оценить неопределённость, связанную с пропусками. В библиотеке scikit-learn класс IterativeImputer реализует одиночную итеративную импутацию, но может быть адаптирован для множественной.
Преимущества
- Учитывает взаимосвязи между признаками, поэтому заполнения получаются более реалистичными, чем при использовании среднего или медианы.
- Работает с разными типами данных (числовые, категориальные — при выборе подходящей модели).
- Гибкость: можно использовать любую модель регрессии/классификации.
Недостатки
- Вычислительно затратен, особенно на больших данных.
- Требует настройки (выбор модели, числа итераций, порядка признаков).
- Может привести к переобучению, если модель слишком сложная.
- Не гарантирует сходимость для всех данных.
Пример (Python, scikit-learn)
from sklearn.experimental import enable_iterative_imputer
from sklearn.impute import IterativeImputer
import numpy as np
X = np.array([[1, 2, np.nan],
[3, np.nan, 5],
[7, 8, 9]])
imputer = IterativeImputer(max_iter=10, random_state=0)
X_filled = imputer.fit_transform(X)
print(X_filled)Итеративная импутация — мощный инструмент предобработки данных, который часто применяется в статистике и машинном обучении, когда пропуски нельзя игнорировать и важна точность заполнения.