Постановка ML-задачи и работа с данными

Exploratory Data Analysis: распределения и аномалии

Содержание курса

Exploratory Data Analysis: распределения и аномалии

После того как данные загружены и датафрейм собран, первый вопрос звучит просто: «А что вообще внутри?» Прежде чем строить графики или обучать модели, нужно получить числовое резюме по каждому признаку — это и есть описательная статистика.

1. Описательная статистика: первый взгляд на данные

Описательная статистика — это набор числовых характеристик, которые дают сжатое представление о признаке: где находится его центр, насколько сильно разброс значений, есть ли экстремальные точки. Без неё вы работаете вслепую. Для числового столбца ключевые метрики такие:

  • Среднее (mean) — центр тяжести распределения. Чувствительно к выбросам.
  • Медиана (50%) — середина отсортированного ряда. Устойчива к экстремальным значениям.
  • Стандартное отклонение (std) — типичное отклонение от среднего.
  • Квантили (25%, 75%) — границы, которые отсекают нижнюю и верхнюю четверть данных.
  • Минимум и максимум — крайние точки; именно здесь чаще всего прячутся ошибки и выбросы. Посмотрим, как это выглядит на rossmann_train.csv. Вывод df.describe() для ключевых признаков:

import pandas as pd

df = pd.read_csv('rossmann_train.csv')
df.describe()

По данным из сводки описательной статистики видно следующее:

  • Sales: среднее ≈ 5774, медиана ≈ 5744 — они близки, что говорит об относительной симметрии. Но максимум — 41 551, при среднем около 5774. Это почти в 7 раз выше среднего: явный сигнал о наличии правого хвоста и потенциальных выбросов.
  • Customers: среднее ≈ 633, медиана ≈ 609, максимум — 7388. Похожая картина: основной массив компактный, но хвост тянется далеко вправо.
  • Open: среднее ≈ 0.83 при min=0 и max=1 — это бинарный признак, где 17% строк приходится на закрытые магазины. Когда магазин закрыт, Sales и Customers равны нулю — это важно учесть при анализе распределений. Отдельно стоит запустить df.info(): он показывает типы данных и количество непустых значений по каждому столбцу — быстрая проверка, что никакие столбцы не потерялись при загрузке.

df.info()

Ещё один быстрый шаг — df.isnull().sum() и df.nunique(). Первый считает пропуски по столбцам, второй — количество уникальных значений. Например, DayOfWeek имеет ровно 7 уникальных значений — это ожидаемо. Если бы там оказалось, скажем, 8 — это был бы сигнал об ошибке кодирования. Что важно понять: описательная статистика не заменяет визуализацию, но она задаёт вопросы, на которые визуализация потом отвечает. Заметили большой разрыв между медианой и максимумом у Sales? Следующий шаг — посмотреть на форму распределения.

Начать заново?

Помощник начнёт новый диалог по этой задаче. Текущая переписка останется в истории до конца срока хранения.

О переписке

Можно приложить до трёх фото PNG, JPEG или WebP по 5 МБ.

Переписка и фото хранятся 90 дней после последнего принятого сообщения. Преподаватель получит доступ к диалогу, когда вы попросите его помочь.

Проверка решения остаётся отдельным действием.