Урок 5. Подготовка и разведочный анализ данных (EDA)

При решении сложных практических задач на построение надежной модели машинного обучения уходит лишь малая часть времени. Основной и самый трудоемкий этап — это сбор, очистка и предварительное исследование данных. Сегодня мы обсудим жизненный цикл ML-проектов, познакомимся со структурой библиотеки Pandas и проведем первичный разведочный анализ (EDA) на примере реального датасета аренды квартир.

Подготовка данных в жизненном цикле ML-проекта

В сфере анализа данных существует фундаментальный принцип — GIGO (Garbage In, Garbage Out), что означает «мусор на входе — мусор на выходе». Даже самая передовая модель машинного обучения не сможет показать высокую точность прогнозирования, если на этапе обучения в нее были поданы зашумленные, некорректные или нерепрезентативные данные.

Жизненный цикл типичного ML-проекта выглядит следующим образом:

Сбор данных → Очистка → EDA → Инжиниринг признаков → Обучение модели → Оценка

Практический инсайт: На сбор, предобработку, очистку и исследование данных уходит до 80% времени работы специалиста. Опыт оценки соревнований и хакатонов показывает, что победу в 99% случаев одерживает не та команда, которая выбрала сложную архитектуру нейросети, а та, которая качественнее и глубже провела очистку и разведочный анализ данных.

Сбор данных (Data Collection)

Прежде чем начать исследование, данные необходимо собрать. Основными источниками для ML-проектов выступают:

  • Файлы: плоские таблицы CSV, книги Excel, структурированные файлы JSON или высокопроизводительные бинарные форматы хранения Parquet.
  • Базы данных: реляционные (SQL-хранилища вроде PostgreSQL или MySQL) и нереляционные (NoSQL решения типа MongoDB).
  • API веб-сервисов: получение структурированных пакетов информации от внешних систем.
  • Веб-скрапинг: автоматический парсинг веб-страниц сайтов (с использованием библиотек BeautifulSoup или Scrapy).

Библиотека Pandas — фундамент для работы с данными

Pandas — это ключевая библиотека языка Python для анализа и манипуляции структурированными данными. Она построена поверх библиотеки NumPy, наследуя ее скорость вычислений (за счет низкоуровневой реализации операций на C и Fortran), но предоставляет гораздо более удобный прикладной интерфейс.

Основные структуры данных в Pandas:

  1. Series (Серия): одномерный массив данных с метками (индексами). Аналог одного столбца в таблице. Используется для хранения одномерных временных рядов, показаний приборов или последовательных котировок акций.
  2. DataFrame (Датафрейм): двумерная табличная структура данных с именованными строками и столбцами. Аналог всей таблицы целиком (как лист в Excel). Это самый популярный объект, с которым мы будем работать.

Разведочный анализ данных (EDA)

EDA (Exploratory Data Analysis) — это этап глубокого исследования структуры, состава и масштаба проблем внутри имеющегося набора данных до перехода к непосредственному обучению моделей.

Ключевые цели EDA:

  1. Выявление скрытых паттернов, закономерностей и трендов в данных.
  2. Поиск и диагностика аномалий, выбросов и ошибок ручного ввода в таблицах.
  3. Проверка базовых бизнес-гипотез.
  4. Формирование идей для генерации новых признаков (Feature Engineering).
  5. Оценка общего качества выборки (обнаружение пропусков).

Практика: первичный осмотр датасета

В качестве практического примера мы используем реальный датасет аренды квартир в Москве, выгруженный с сайта ЦИАН (содержит 5437 строк и 25 признаков). Первичный осмотр структуры мы выполняем с помощью встроенных инструментов DataFrame:

  • data.shape — возвращает размерность таблицы (количество строк и столбцов).
  • data.head() и data.tail() — выводят первые и последние 5 строк таблицы для визуального знакомства с содержимым.
  • data.columns — выводит список всех признаков (колонок). На этом этапе мы качественно оцениваем релевантность признаков и принимаем решение удалить неинформативные столбцы (ID объявления, ссылки, номера телефонов), которые не влияют на цену, но могут вызвать переобучение модели.
  • data.dtypes — показывает типы данных каждого столбца (целые числа int, дробные числа float или категориальные/текстовые объекты object).

Поиск аномалий при помощи первичной статистики

Метод data.describe() вычисляет базовые статистические метрики для числовых столбцов: среднее значение, минимум, максимум, стандартное отклонение и квантили (включая медиану — квантиль 50%).

Анализ экстремумов (минимумов и максимумов) позволяет быстро выявить выбросы. Например, при анализе высоты потолков в нашем датасете среднее значение составило 2.77 м, а максимум — 28 метров. Очевидно, что потолок высотой 28 метров — это аномалия (скорее всего, опечатка при вводе данных, где забыли поставить разделительную точку: 2.80 м). Оставлять такие значения без изменений нельзя, так как они исказят веса линейных моделей.

Диагностика пропущенных значений (Missing Values)

Наличие пропусков (пустых ячеек NaN) — одна из главных проблем реальных датасетов. На этапе EDA наша задача — оценить масштаб проблемы при помощи метода data.isna().sum().

Для лучшего понимания распределения пропусков по колонкам используется тепловая карта библиотеки Seaborn:

sns.heatmap(data.isna().transpose(), cbar=False)

Такая тепловая карта наглядно подсвечивает плотность пропущенных данных. Если в каком-то второстепенном признаке пропущено более \(70\%\) значений, в большинстве случаев эту колонку целесообразно просто удалить.

Анализ уникальных категорий и сбалансированности классов

Для качественного анализа текстовых категориальных колонок (например, типа парковки или округа) применяются методы:

  • data['Колонка'].unique() — выводит уникальный список всех встреченных категорий.
  • data['Колонка'].value_counts() — подсчитывает количество упоминаний каждого значения.

Этот шаг позволяет оценить сбалансированность классов в выборке. Если распределение категорий имеет сильный перекос (например, один класс занимает 95% выборки, а остальные по 1-2%), датасет считается несбалансированным. Визуально оценить эту характеристику помогает гистограмма распределения признаков sns.histplot().

Самостоятельная практика

Запустите интерактивный блокнот в Google Colab, подгрузите исследуемый датасет ЦИАН и пройдите все шаги первичного осмотра. Попробуйте вывести распределение уникальных значений для категориальных признаков «Округ» и «Ремонт», зафиксировав обнаруженные пропуски или аномалии.

План занятия

  1. Роль подготовки данных в машинном обучении
    • Принцип GIGO («Garbage In, Garbage Out»): почему плохой подбор данных на входе гарантирует низкое качество работы алгоритмов.
    • Временные затраты в проектах: обоснование того, почему до 80% ресурсов специалиста тратится на предобработку. Оценка опыта побед на ИИ-хакатонах.
  2. Сбор данных (Data Collection)
    • Обзор источников: файловые хранилища (CSV, Excel, JSON, Parquet), базы данных (SQL/NoSQL), API-сервисы, автоматический веб-скрапинг (парсинг сайтов).
    • Открытые репозитории: работа с платформами Kaggle, Google Dataset Search, Hugging Face, Ростат.
    • Концепция анонимизации: защита конфиденциальной информации путем очистки и инжиниринга признаков.
  3. Библиотека Pandas как инструмент манипуляции данными
    • Архитектура библиотеки Pandas и ее связь с NumPy.
    • Базовые структуры данных: одномерные массивы с индексами (Series) и двумерные таблицы (DataFrame).
  4. Разведочный анализ данных (EDA)
    • Основные цели EDA: понимание внутренней структуры данных до обучения модели, выявление скрытых взаимосвязей, детекция выбросов и аномалий сбора информации.
  5. Первичный осмотр датасета (на примере аренды квартир с ЦИАН)
    • Импорт рабочего окружения на Python (Pandas, NumPy, Seaborn, Matplotlib, Re).
    • Загрузка и оценка размерности (shape), вывод первых и последних строк таблицы (head()), tail()).
    • Анализ признакового пространства: оценка типов данных (dtypes) и наименований колонок.
    • Качественный отсев заведомо нерелевантных параметров (ID объявлений, телефоны, внешние ссылки).
  6. Первичная статистика и поиск аномалий
    • Расчет статистических метрик по числовым столбцам с помощью метода describe().
    • Анализ диапазонов (минимумов, максимумов) и мер центральной тенденции (среднее, медиана).
    • Практический поиск выбросов и ошибок ручного ввода (кейс с высотой потолка 28 метров).
  7. Диагностика пропущенных значений (Missing Values)
    • Глобальный подсчет пропусков (ячеек NaN) по признакам через isna().sum().
    • Визуализация структуры пропущенных значений при помощи тепловой карты в Seaborn (sns.heatmap()).
  8. Анализ категориальных признаков
    • Получение перечня уникальных классов категории (unique()) и подсчет их распределения (value_counts()).
    • Концепция сбалансированности классов и ее графическая проверка с помощью гистограммы (sns.histplot()).

Не уходите просто так – не упустите возможность только здесь и сейчас получить скиду!

Индивидуальная консультация по Яндекс Директу или Google Ads со скидкой

25%

"*"обозначает обязательные поля

Это поле используется для проверочных целей, его следует оставить без изменений.