Sobes.tech
Middle — Senior
38

Как обрабатывать пропуски и категориальные признаки перед обучением модели?

Companies where asked
СБЕРСБЕР

Answer from AI

sobes.tech AI

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

Пропуски в данных:

  • Удаление строк или столбцов: если пропусков мало, можно удалить соответствующие строки или столбцы.
  • Заполнение значений: чаще применяют заполнение средним, медианой, модой или специальным значением (например, "Unknown"). Для временных рядов можно использовать метод прямой или обратной интерполяции.
  • Использование моделей: иногда пропуски заполняют предсказаниями других моделей.

Категориальные признаки:

  • Label Encoding: присваивает каждой категории числовой код. Подходит для упорядоченных категорий.
  • One-Hot Encoding: создаёт бинарные признаки для каждой категории. Хорошо для неупорядоченных категорий.
  • Target Encoding: заменяет категории средним значением целевой переменной, но требует аккуратности во избежание утечки данных.

Пример на Python с использованием pandas и scikit-learn:

import pandas as pd
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import OneHotEncoder

# Пример данных
data = pd.DataFrame({
    'age': [25, 30, None, 22],
    'city': ['Moscow', 'SPB', 'Moscow', None]
})

# Заполнение пропусков в числовом признаке медианой
imputer = SimpleImputer(strategy='median')
data['age'] = imputer.fit_transform(data[['age']])

# Заполнение пропусков в категориальном признаке модой
imputer_cat = SimpleImputer(strategy='most_frequent')
data['city'] = imputer_cat.fit_transform(data[['city']])

# One-Hot Encoding для категориального признака
encoder = OneHotEncoder(sparse=False, handle_unknown='ignore')
encoded_cities = encoder.fit_transform(data[['city']])

encoded_df = pd.DataFrame(encoded_cities, columns=encoder.get_feature_names_out(['city']))

# Итоговый датафрейм
result = pd.concat([data.drop('city', axis=1), encoded_df], axis=1)
print(result)

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