machine-learningЛекцияPython

Продвинутый EDA, Очистка и Feature Engineering

👀 Загрузка...

Цели лекции

  • Научиться не просто находить выбросы (Outliers), но и принимать решение: удалить или оставить?
  • Освоить Feature Engineering: искусство создания новых признаков, которые повышают точность моделей.
  • Разобраться с кодированием категорий (Encoding) и трансформацией распределений.

Часть 1: Анатомия Выбросов (Outliers)

Выброс — это наблюдение, которое аномально отклоняется от других значений в выборке.

1.1. Философия: Баг или Фича?

Прежде чем удалять выброс, инженер должен ответить на вопрос: "Откуда он взялся?"

Два типа выбросов

  • Ошибка данных: Опечатка (возраст 200 лет), сбой датчика (температура -300C). Их необходимо Удалять/Исправлять.
  • Редкое событие: "Черный лебедь". Клиент купил товаров на $1M. Это реальные данные, их нужно Оставлять. Если удалить, модель никогда не научится работать с VIP-клиентами.

1.2. Методы детектирования

Как найти выбросы алгоритмически?

  • Основан на Boxplot.
  • Границы: Q11.5×IQRQ1 - 1.5 \times IQR и Q3+1.5×IQRQ3 + 1.5 \times IQR.
  • Все, что за пределами — кандидаты на вылет.
  • Это самый надежный (робастный) метод.

1.3. Методы борьбы (Treatment)

  • Trimming (Удаление): Просто выкинуть строки. Опасно, если данных мало.
  • Capping / Winsorizing (Срезание): Все значения >99> 99-го перцентиля заменяем на значение 99-го перцентиля. Мы не теряем запись, но убираем экстремальный "хвост".
  • Log Transformation: Логарифм "сплющивает" большие значения, подтягивая их к центру. Часто спасает от удаления.

Часть 2: Feature Engineering (Конструирование признаков)

Модель ML — это просто математическая формула. Она не знает, что такое "Дата постройки дома", она видит число 1990.

Что такое Feature Engineering?

Feature Engineering — это процесс превращения сырых данных в признаки, которые облегчают обучение модели.

2.1. Создание через взаимодействие

Создавайте признаки, имеющие физический смысл.

  • Дано: Цена квартиры, Площадь.
  • Плохой подход: Отдать оба числа в модель.
  • Хороший подход: Создать Цена за м² = Цена / Площадь. Этот признак часто гораздо сильнее коррелирует с целевой переменной.

2.2. Работа с датами

Сырая дата 2023-10-05 бесполезна для математики. Разбивайте её на компоненты:

  • Год, Месяц, День недели.
  • Флаг Is_Weekend (Выходной ли?).
  • Циклические признаки: преобразование месяца через sin/cos (чтобы Декабрь и Январь были рядом, а не 1 и 12).

2.3. Binning (Биннинг)

Превращение непрерывной переменной в категориальную.

  • Пример: Вместо точного возраста (23, 45, 67) делаем группы: "Student", "Adult", "Senior".
  • Зачем: Помогает бороться с шумом и нелинейностью в простых моделях (линейная регрессия).

Часть 3: Кодирование категорий (Encoding)

Большинство моделей (кроме CatBoost/LightGBM) не умеют работать с текстом. Нужно превратить "Red", "Green", "Blue" в цифры.

Каждой категории присваивается число: Red=0, Green=1, Blue=2.

  • Где применять: Для ординальных (упорядоченных) данных: Size (S, M, L) -> (0, 1, 2).
  • Риск: Если применить к городам (Paris=0, London=1), модель решит, что London > Paris, что математически некорректно.

Часть 4: Трансформация распределений

Многие модели (Линейная регрессия, KNN, Нейросети) любят Нормальное распределение (колокол) и не любят разные масштабы.

4.1. Логарифмирование (Log Transform)

Если гистограмма имеет "длинный хвост" справа (например, доходы населения), примените np.log1p(x).

  • Это делает распределение похожим на нормальное.
  • Уменьшает влияние выбросов.

4.2. Масштабирование (Scaling)

Если один признак — "Зарплата" (100 000), а другой — "Возраст" (30), то для модели Зарплата в 3000 раз важнее. Это неверно. Нужно привести их к одному масштабу.

  • Min-Max Scaler: Сжимает данные в диапазон [0, 1]. Чувствителен к выбросам.
  • Standard Scaler (Z-score normalization): Делает среднее = 0, дисперсию = 1. Стандарт индустрии.

🧠 Проверка знаний

Какой метод кодирования категорий лучше всего подходит для данных без встроенного порядка (например, названий городов)?

Что означает подход Capping (Winsorizing) при работе с выбросами?

Следующий материалРаздел пройден