Данные

Data preprocessing

Предобработка данных

актуальноТекущий рабочий стандарт

Направления: Машинное обучение · Классический ML

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

Ключевые тезисы

  • Все преобразования должны быть оформлены как воспроизводимый pipeline, а не как ручные шаги в ноутбуке.
  • Параметры преобразований подбираются только на train и применяются к val/test.
  • Один и тот же код предобработки должен работать в обучении и в проде.

Какую задачу решает

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

Главное правило всей темы: любая операция, использующая статистику по выборке (среднее для заполнения, границы для масштабирования, частоты категорий), должна вычисляться на обучающей части и применяться к остальным. Нарушение этого правила даёт утечку — оптимистичную валидацию и разочарование в проде.

Утечка через масштабирование

Типичная ошибка: scaler.fit_transform(X) на всей выборке, а потом разбиение на train и test. Среднее и посчитаны с участием тестовых строк — модель на валидации выглядит лучше, чем есть. Разница часто невелика (доли процента), поэтому ошибку не замечают, пока она не накопится вместе с другими. Правильный порядок: сначала разбиение, затем fit на train и transform на обеих частях — или просто положите скейлер в и не думайте об этом.

Подробный разбор

2 подтемы — объяснения, формулы, примеры и интерактивные графики.

Главное правило предобработки: то, что вы сделали с train, должно автоматически повториться на test и в проде. Ручное «я тут поправил пару значений» гарантированно расходится с продакшеном.

from sklearn.pipeline import Pipeline
from sklearn.compose import ColumnTransformer
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import StandardScaler, OneHotEncoder

num = Pipeline([("imp", SimpleImputer(strategy="median")),
                ("sc", StandardScaler())])
cat = Pipeline([("imp", SimpleImputer(strategy="most_frequent")),
                ("ohe", OneHotEncoder(handle_unknown="ignore"))])

prep = ColumnTransformer([("num", num, num_cols), ("cat", cat, cat_cols)])
model = Pipeline([("prep", prep), ("clf", LogisticRegression())])
model.fit(X_train, y_train)   # все параметры выучены только на train
Один объект `model` содержит и предобработку, и модель — его же сохраняют в прод
На практике

handle_unknown="ignore" — не косметика: в проде обязательно появится категория, которой не было в обучении, и без этого сервис упадёт.

  • Типы: числа, приехавшие строками («1 234,5»), даты как текст, булевы как «Да/Нет».
  • Дубликаты: полные копии строк раздувают вес объекта; частичные (один клиент дважды) ломают .
  • Единицы измерения: рубли и тысячи рублей в одном столбце — классика после объединения источников.
  • Категории-синонимы: «Москва», «москва», «МСК» — три разных значения для модели.
Пример

В датасете автомобилей столбец price пришёл строкой с символом ? вместо пропуска. pd.to_numeric(df.price, errors="coerce") превращает ? в NaN — и только после этого видно, что пропусков 4, а не 0.

Где применяется

  • Подготовка табличных данныхТипы, пропуски, категории, масштаб — обязательный минимум перед любой моделью.
  • Воспроизводимость сериализуется вместе с моделью, и прод получает ровно те же преобразования.
  • без утечкиВнутри каждый фолд обучает свои преобразования на своей части данных.

Плюсы, минусы и альтернативы

Плюсы

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

Минусы

  • Скучно и незаметно: результат виден только в отсутствии проблем.
  • Легко переусердствовать и потерять сигнал (агрессивная чистка ).
  • Каждый шаг — потенциальный источник утечки, если считать статистики не там.

Брать, если

  • Всегда. Вопрос только в объёме, а не в необходимости.
  • Особенно тщательно — когда данные собраны из нескольких источников.

Не брать, если

  • Не чистите то, что не мешает: агрессивная предобработка сама по себе не улучшает модель.

Чем заменяют

Тема также относится к главам:Инженерия данныхНадёжность

Видеолекции

Записи университетских курсов, где эта тема звучит. Ссылка открывает запись с той секунды, где о ней говорят, — искать по трёхчасовой лекции не нужно.

Связанные темы

Надёжность данных · Подготовка данных

Data Quality85%

Качество данных · Инженерия данных

Автоматические проверки, которые ловят поломку источника раньше, чем она попадёт в модель.

Data Contracts85%

Контракты данных · Инженерия данных

Явная договорённость между источником и потребителем: какие поля, каких типов и с какими гарантиями.

Idempotency & Exactly-once85%

Идемпотентность и гарантии доставки · Инженерия данных

Что происходит при повторной обработке события и как не задвоить данные.

Change Data Capture85%

Захват изменений (CDC) · Инженерия данных

Чтение журнала изменений базы вместо периодических полных выгрузок.

Feature Stores85%

Хранилища признаков · MLOps

Централизованное хранилище признаков, единое для обучения и онлайн-инференса.

Data leakage85%

Утечка данных · Данные

Ситуация, когда в обучении присутствует информация, недоступная в момент реального предсказания. Главная причина «слишком хороших» метрик.

Data leakage85%

Утечка данных · Практика ML

Самая дорогая ошибка в ML: модель отлично работает офлайн и разваливается в проде.

Missing values75%

Пропущенные значения · Данные

Пропуски бывают случайными и неслучайными — от механизма зависит, можно ли их просто заполнить.

Outliers75%

Выбросы · Данные

Наблюдения, резко отличающиеся от остальных. Они бывают ошибками измерения, а бывают самым ценным сигналом.

Encoding75%

Кодирование категорий · Данные

Перевод категориальных признаков в числа: one-hot, ordinal, target encoding, хеширование, эмбеддинги.

Normalization & Standardization75%

Нормализация и стандартизация · Данные

Приведение признаков к сопоставимым масштабам, без которого расстояния, градиенты и регуляризация работают некорректно.

Feature engineering75%

Конструирование признаков · Данные

Создание признаков, в которых закономерность становится линейно отделимой или просто более заметной для модели.

ML Pipelines75%

ML-пайплайны · MLOps

Оформление обучения как воспроизводимой последовательности шагов вместо разрозненных ноутбуков.

Кому эта тема нужна

Профильная компетенция для ролей: Data Scientist, Аналитик данных, Data Engineer.

Усиливает профиль: Продуктовый инженер.

Следующий шагДальше по связи: Data QualityАвтоматические проверки, которые ловят поломку источника раньше, чем она попадёт в модель.Перейти →

Глава «Данные» последний раз правилась . Нашли ошибку — напишите.