Лабораторная работа №6: Комплексный EDA и Feature Engineering
Цель: Научиться не просто "смотреть" на данные, а готовить их для моделей машинного обучения. Мы проведем очистку от выбросов, создадим новые сильные признаки (Feature Engineering) и преобразуем категориальные переменные в цифры.
Инструменты:
- Python 3, Pandas, NumPy
- Seaborn, Matplotlib
- Датасет: Medical Cost Personal Datasets (Затраты на страховку).
Описание данных:
Мы будем предсказывать charges (медицинские расходы).
Признаки: age, sex, bmi (индекс массы тела), children, smoker, region.
Часть 1: Анализ и обработка выбросов (Outliers)
Выбросы могут исказить работу моделей (особенно линейных). Наша цель — найти их и аккуратно обработать.
Задание 1.1:
- Загрузите датасет.
- Постройте Boxplot для колонки
bmi. Видите точки за "усами"? Это выбросы. - Постройте гистограмму распределения
bmi.
Часть 2: Feature Engineering (Создание признаков)
Модели любят признаки, которые несут прямой физический смысл.
Задание 2.1: Категоризация (Binning)
Возраст — непрерывная величина. Иногда полезно разбить её на группы.
Создайте колонку age_group на основе age:
- 18-35: 'Young'
- 36-55: 'Middle'
- 56+: 'Senior'
Используйте pd.cut.
Задание 2.2: Interaction Features (Взаимодействие)
В медицине известно: курение вредно. Но курение при ожирении (BMI > 30) — это смертельное комбо, которое резко повышает расходы.
Создайте признак obese_smoker (Ожирение + Курильщик):
- Равен 1, если
bmi> 30 Иsmoker== 'yes'. - Равен 0 в остальных случаях.
Часть 3: Трансформация целевой переменной
Посмотрите на распределение расходов (charges).
Проблема скошенных данных
Целевые переменные, связанные с деньгами, часто имеют длинный "хвост" вправо. Линейные модели с трудом предсказывают такие распределения, поэтому их нужно приводить к нормальному виду.
Задание 3.1: Log Transformation
- Постройте гистограмму
charges. Вы увидите длинный "хвост" справа (Right Skewed). Модели такое не любят. - Создайте колонку
log_charges, применив натуральный логарифм:np.log1p(log(x+1)). - Постройте гистограмму новой колонки. Она должна стать похожей на колокол.
Часть 4: Кодирование (Encoding) и Корреляция
Чтобы увидеть полную картину, нужно превратить текст в цифры.
Задание 4.1: One-Hot Encoding
Преобразуйте категориальные переменные (sex, smoker, region, age_group) в числовой формат (One-Hot), используя pd.get_dummies.
- Аргумент
drop_first=Trueудаляет дублирующие столбцы (чтобы избежать мультиколлинеарности).
Задание 4.2: Финальная тепловая карта
Постройте Heatmap корреляций для df_encoded.
Найдите топ-3 признака, которые сильнее всего коррелируют с charges.