No history yet

Просунута імпутація пропусків

Чому дані зникають?

Пропуски в даних — це більше, ніж просто порожні клітинки. Це сигнали, що розповідають історію про те, як дані були зібрані. Розуміння цієї історії є ключем до правильного вибору методу відновлення. Не всі пропуски однакові, і їхня природа визначає, наскільки сильно вони можуть спотворити ваш аналіз.

Існує три основні механізми виникнення пропусків:

МеханізмАкронімОпис
Повністю випадковий пропускMCARЙмовірність пропуску значення не залежить ні від самого цього значення, ні від інших змінних у датасеті. Це найпростіший випадок.
Випадковий пропускMARЙмовірність пропуску значення залежить від інших відомих змінних, але не від самого пропущеного значення.
Невипадковий пропускMNARЙмовірність пропуску залежить від самого значення, яке мало б бути на цьому місці. Це найскладніший і найпроблемніший випадок.

Уявіть, що ми проводимо опитування про доходи. Якщо деякі учасники випадково пропустили питання через збій у програмі, це — MCAR (Missing Completely at Random). Якщо люди з вищою освітою частіше відмовляються відповідати на питання про дохід (але освіта нам відома), це — MAR (Missing at Random). А якщо люди з найвищими доходами систематично не вказують свій дохід, бо не хочуть його розкривати, це — MNAR (Missing Not at Random). Прості методи, як-от заміна середнім, добре працюють лише для MCAR. Для MAR та MNAR потрібні більш витончені підходи.

Ітеративна імпутація (MICE)

Коли дані пропущені випадково (MAR), ми можемо використовувати інші ознаки, щоб змоделювати та заповнити пропуски. Саме на цьому принципі працює ітеративна імпутація. Вона розглядає кожну змінну з пропусками як цільову, а решту змінних — як предиктори в регресійній моделі.

Процес схожий на розгадування кросворду, де ви заповнюєте одне слово, що допомагає вгадати наступні, і так по колу, доки вся сітка не буде заповнена логічно.

Цей метод відомий як (Multivariate Imputation by Chained Equations). Алгоритм працює ітеративно:

  1. Робить початкове заповнення пропусків (наприклад, середнім значенням).
  2. Для першої змінної з пропусками він будує модель, використовуючи всі інші змінні, і прогнозує пропущені значення.
  3. Переходить до наступної змінної і повторює крок 2, використовуючи вже оновлені дані.
  4. Повторює цей цикл кілька разів, доки значення не стабілізуються.
import numpy as np
from sklearn.experimental import enable_iterative_imputer
from sklearn.impute import IterativeImputer

# Приклад даних з пропусками
X = np.array([
    [1, 2, np.nan],
    [3, 4, 5],
    [np.nan, 6, 7],
    [8, 9, 10]
])

# Створення об'єкта імпутера
imputer = IterativeImputer(max_iter=10, random_state=0)

# Навчання та трансформація даних
X_imputed = imputer.fit_transform(X)

print(X_imputed)

Iterative Imputer розроблено Scikit-Learn і моделює кожну ознаку з пропущеними значеннями як функцію інших ознак.

Імпутація за методом найближчих сусідів (KNN)

Ще один інтуїтивно зрозумілий підхід — це імпутація за допомогою K-найближчих сусідів (KNN). Його логіка проста: щоб заповнити пропуск, ми знаходимо k найбільш схожих об'єктів (рядків) у нашому датасеті, де це значення відоме. Потім ми беремо середнє (або медіану, або найчастіше значення) цієї ознаки у знайдених «сусідів» і заповнюємо ним пропуск.

Цей метод ефективний, оскільки він враховує багатовимірну схожість між об'єктами, а не просто дивиться на одну колонку. Проте він чутливий до вибору k та може бути обчислювально дорогим на великих датасетах.

import numpy as np
from sklearn.impute import KNNImputer

X = np.array([
    [1, 2, np.nan],
    [3, 4, 5],
    [np.nan, 6, 7],
    [8, 9, 10]
])

# n_neighbors - це наш 'k'
imputer = KNNImputer(n_neighbors=2)
X_imputed = imputer.fit_transform(X)

print(X_imputed)

Оцінка якості та індикатори пропусків

Після імпутації важливо переконатися, що ми не спотворили дані. Хороший метод імпутації повинен зберігати початковий розподіл даних та кореляції між змінними. Ви можете порівняти статистичні показники (середнє, стандартне відхилення) та візуалізувати розподіли (гістограми, діаграми розсіювання) до та після заповнення пропусків.

Додавання бінарних індикаторів пропусків — це простий, але потужний прийом. Для кожної змінної з пропусками створюється нова колонка, яка показує, де саме були пропущені дані. Таким чином, навіть якщо імпутація була не ідеальною, модель все ще може «бачити» початкову структуру пропусків і використовувати цю інформацію для кращого прогнозування.

Вибір правильної стратегії роботи з пропусками — це баланс між збереженням даних та мінімізацією зміщення. Розуміючи механізми виникнення пропусків та володіючи сучасними методами імпутації, ви можете значно підвищити якість і надійність ваших моделей.

Quiz Questions 1/6

Уявіть, що ви проводите опитування про фізичну активність. Через технічний збій у програмі деякі відповіді випадково не збереглися. Який механізм виникнення пропусків у даних це описує?

Quiz Questions 2/6

Який метод заповнення пропусків розглядає кожну змінну з пропусками як цільову і будує модель для її прогнозування на основі інших змінних?