На финальном этапе подготовки данных мы разберемся со скрытыми дефектами датасетов — выбросами (outliers) и текстовыми категориями. Мы научимся математически отсекать аномалии, правильно переводить текст в понятные компьютеру числа и проводить комплексную визуализацию структуры признаков перед началом моделирования.
1. Выбросы (Outliers): в чем их опасность?
Выбросы — это экстремальные точки данных, которые существенно отклоняются от основной массы наблюдений в выборке.
Проблемы, создаваемые выбросами:
Искажение статистик: выбросы сильно смещают среднее значение и стандартное отклонение.
Классический пример: если в баре сидят 10 человек со средним годовым доходом в (50 000), и к ним заходит Билл Гейтс, средний годовой доход присутствующих мгновенно взлетит до десятков миллионов. При этом медиана останется прежней — именно поэтому она гораздо более устойчива к выбросам.
Деградация линейных моделей: алгоритмы регрессии пытаются минимизировать среднеквадратичную ошибку (MSE). Поскольку в MSE ошибки возводятся в квадрат, одно экстремально далекое значение будет «перетягивать» на себя всю плоскость регрессии, ухудшая точность прогнозирования для остальных \(99.9\%\) нормальных объектов.
Как обнаружить и отсечь выбросы?
Самый надежный статистический инструмент для поиска границ нормального распределения — метод межквартильного размаха (IQR — Interquartile Range):
Вычисляется размах:
$$IQR = Q3 – Q1$$
где \(Q1\) — первый квартиль (\(25\%\)-й перцентиль), а \(Q3\) — третий квартиль (\(75\%\)-й перцентиль).
Все значения, выходящие за эти границы, признаются выбросами. Коэффициент \(1.5\) является стандартным, но может корректироваться в зависимости от специфики задачи.
Итерационный нюанс: Очистку выбросов стоимости жилья эффективнее проводить сегментированно — отдельно по каждой группе комнат, так как нормальная цена для четырехкомнатной квартиры является очевидным выбросом для однокомнатной. После первой итерации очистки на графике sns.boxplot могут снова появиться «мягкие» выбросы. Это естественный процесс, вызванный пересчетом квартилей после удаления экстремальных точек. Повторно чистить их не нужно.
2. Работа с категориальными признаками
Алгоритмы машинного обучения оперируют исключительно математическими операциями (сложением, умножением матриц) и не способны напрямую работать с текстом вроде «Москва» или «Комфорт-класс». Наша задача — оцифровать эти категории без искажения информации.
Метод 1. Порядковое кодирование (Label Encoding)
Каждой уникальной текстовой категории присваивается уникальное целое число: \(\text{Москва} \rightarrow 0\), \(\text{Санкт-Петербург} \rightarrow 1\), \(\text{Казань} \rightarrow 2\).
Проблема: создает ложную иерархию. Линейная модель будет математически полагать, что Казань (2) «больше» или «в два раза круче» Санкт-Петербурга (1), пытаясь найти несуществующую линейную зависимость.
Когда применять: только для порядковых (Ordinal) признаков, где иерархия заложена изначально (например: \(\text{Эконом} \rightarrow 0\), \(\text{Комфорт} \rightarrow 1\), \(\text{Бизнес} \rightarrow 2\)).
Метод 2. Дамми-кодирование (One-Hot Encoding / OHE)
Для каждого уникального значения категории создается отдельный бинарный столбец (0 или 1).
Преимущество: категории становятся равноправными, исключая ложную иерархию.
Проблема («Проклятие размерности»): если категориальный признак содержит сотни уникальных значений (например, 280 станций метро), OHE создаст 280 новых колонок, превратив таблицу в огромную разреженную матрицу с обилием нулей, что существенно замедлит вычисления.
В Pandas One-Hot Encoding реализуется методом pd.get_dummies(). При этом крайне важно передавать аргумент drop_first=True:
Зачем использовать drop_first=True? Данный параметр удаляет первую (базовую) категорию из вновь созданных столбцов. Если для всех оставшихся колонок значение равно 0, модель автоматически понимает, что объект относится к удаленной базовой категории. С математической точки зрения это устраняет избыточность (мультиколлинеарность), обеспечивая стабильную сходимость весов линейных моделей.
3. Продвинутая визуализация признаков в Seaborn
После удаления нереализованных в рамках учебного процесса признаков и фильтрации дубликатов мы сохраняем готовый чистый датасет в файл rent_dataset.csv и проводим комплексный визуальный анализ:
Детальный попарный анализ (sns.jointplot): строит совместное распределение двух числовых переменных. По центру отображается диаграмма рассеяния (scatterplot), наглядно показывающая, как цена зависит от площади, а сверху и справа — одномерные гистограммы распределений каждой из этих переменных по отдельности.
Панорамный обзор (sns.pairplot): строит сетку (матрицу) графиков попарных взаимосвязей для всех числовых признаков датасета. На главной диагонали отображаются графики распределения признаков, а вне диагонали — корреляционные облака точек. Использование параметра hue='Комнат' позволяет автоматически раскрасить точки в зависимости от количества комнат, наглядно выявляя кластеры данных.
4. Резюме: типичные проблемы данных и методы их решения
Пропущенные значения (NaN): лечатся удалением строк (при объеме пропусков < 5%), удалением признака целиком (при пропусках > 60%) или заполнением (медианой, модой, KNNImputer).
Выбросы (Outliers): диагностируются через Box Plot (метод IQR), лечатся удалением экстремальных аномалий или логарифмированием числовых рядов.
Несбалансированные классы: выравниваются методами изменения объема выборок (Oversampling/Undersampling) или взвешивания классов в процессе обучения модели.
Проклятие размерности: устраняется отбором наиболее информативных признаков (Feature Selection) или алгоритмами снижения размерности (например, методом главных компонент PCA).
План занятия
Борьба с выбросами (Outliers)
Определение понятия выбросов и оценка проблем, которые они создают (искажение статистических показателей, деградация весов линейных моделей).
Математический аппарат обнаружения: расчет межквартильного размаха (\(IQR = Q3 – Q1\)) и определение допустимых границ выбросов.
Инструменты визуализации: использование ящиков с усами (sns.boxplot) в целом по датасету и с группировкой по категориям комнат.
Реализация алгоритма очистки: написание пошагового цикла фильтрации аномальных цен для каждой категории комнат отдельно.
Объяснение природы появления «мягких» выбросов после первой итерации очистки данных.
Кодирование категориальных признаков
Проблема нечисловых шкал: почему модели понимают только числовой формат данных.
Метод Label Encoding (Порядковое кодирование): концепция, область применения (порядковые признаки) и критический недостаток (создание ложной математической иерархии).
Метод One-Hot Encoding (OHE / Дамми-кодирование): принцип создания бинарных столбцов для номинальных шкал (на примере признака «Округ»).
Главный недостаток OHE — проклятие размерности (разрастание признакового пространства при высокой кардинальности категорий).
Реализация OHE в Pandas с помощью метода get_dummies(). Обоснование важности исключения первого признака (параметр drop_first=True) для предотвращения мультиколлинеарности.
Финальная очистка и экспорт датасета
Отсечение нереализованных в рамках учебного процесса признаков и повторная фильтрация возникших дубликатов строк.
Сохранение очищенного и подготовленного набора данных в файл rent_dataset.csv при помощи to_csv().
Продвинутая визуализация взаимосвязей признаков
Использование детального двумерного анализа sns.jointplot для исследования корреляции площади и стоимости квартир.
Построение комплексной панорамной матрицы попарных распределений sns.pairplot. Группировка и цветовое кодирование точек с помощью параметра hue.
Сводный обзор типичных «болезней» данных
Методология лечения проблем: пропущенные значения (NaN), аномальные выбросы, несбалансированность классов в классификации, проклятие размерности и недостаточный объем строк (аугментация).