Итеративная импутация (iterative imputation) — это метод заполнения пропущенных значений в наборе данных, при котором каждый признак с пропусками поочерёдно предсказывается на основе всех остальных признаков с помощью модели машинного обучения. Процесс повторяется несколько раз (итераций), пока значения не стабилизируются.

Как это работает

  1. Инициализация. Все пропуски временно заполняются простыми способами (например, средним или медианой).
  2. Цикл по признакам. Для каждого признака, содержащего пропуски:
    • Он считается целевой переменной.
    • Остальные признаки (включая уже заполненные) используются как предикторы.
    • Строится модель (линейная регрессия, случайный лес и т.п.) на объектах, где целевой признак не пропущен.
    • Модель предсказывает пропущенные значения этого признака.
  3. Повторение. Шаги 2 выполняются для всех признаков по очереди. Затем весь цикл повторяется заданное число раз или до сходимости (когда изменения становятся меньше порога).
  4. Результат. Получается один заполненный набор данных (одиночная импутация) или несколько (при множественной импутации, например, 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)

Итеративная импутация — мощный инструмент предобработки данных, который часто применяется в статистике и машинном обучении, когда пропуски нельзя игнорировать и важна точность заполнения.