Продвинутый EDA, Очистка и Feature Engineering
Цели лекции
- Научиться не просто находить выбросы (Outliers), но и принимать решение: удалить или оставить?
- Освоить Feature Engineering: искусство создания новых признаков, которые повышают точность моделей.
- Разобраться с кодированием категорий (Encoding) и трансформацией распределений.
Часть 1: Анатомия Выбросов (Outliers)
Выброс — это наблюдение, которое аномально отклоняется от других значений в выборке.
1.1. Философия: Баг или Фича?
Прежде чем удалять выброс, инженер должен ответить на вопрос: "Откуда он взялся?"
Два типа выбросов
- Ошибка данных: Опечатка (возраст 200 лет), сбой датчика (температура -300C). Их необходимо Удалять/Исправлять.
- Редкое событие: "Черный лебедь". Клиент купил товаров на $1M. Это реальные данные, их нужно Оставлять. Если удалить, модель никогда не научится работать с VIP-клиентами.
1.2. Методы детектирования
Как найти выбросы алгоритмически?
- Основан на Boxplot.
- Границы: и .
- Все, что за пределами — кандидаты на вылет.
- Это самый надежный (робастный) метод.
1.3. Методы борьбы (Treatment)
- Trimming (Удаление): Просто выкинуть строки. Опасно, если данных мало.
- Capping / Winsorizing (Срезание): Все значения -го перцентиля заменяем на значение 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. Стандарт индустрии.