Приведение сырых данных к виду, пригодному для обучения: типы, форматы, дубликаты, согласованность единиц измерения.
Ключевые тезисы
- Все преобразования должны быть оформлены как воспроизводимый pipeline, а не как ручные шаги в ноутбуке.
- Параметры преобразований подбираются только на train и применяются к val/test.
- Один и тот же код предобработки должен работать в обучении и в проде.
Какую задачу решает
Между выгрузкой из базы и обучением модели лежит слой работы, который определяет результат сильнее выбора алгоритма: типы приведены неверно, даты лежат строками, дубликаты задваивают часть выборки, категории записаны в трёх вариантах написания. Предобработка — это приведение данных к форме, в которой модель видит именно то, что вы имели в виду.
Главное правило всей темы: любая операция, использующая статистику по выборке (среднее для заполнения, границы для масштабирования, частоты категорий), должна вычисляться на обучающей части и применяться к остальным. Нарушение этого правила даёт утечку — оптимистичную валидацию и разочарование в проде.
Типичная ошибка: scaler.fit_transform(X) на всей выборке, а потом разбиение на train и test. Среднее и посчитаны с участием тестовых строк — модель на валидации выглядит лучше, чем есть. Разница часто невелика (доли процента), поэтому ошибку не замечают, пока она не накопится вместе с другими. Правильный порядок: сначала разбиение, затем fit на train и transform на обеих частях — или просто положите скейлер в и не думайте об этом.
Подробный разбор
Главное правило предобработки: то, что вы сделали с 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) # все параметры выучены только на trainhandle_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Оформление обучения как воспроизводимой последовательности шагов вместо разрозненных ноутбуков.
Всё, что названо в описании, разобрано здесь же или в соседней теме — переходы под каждым определением.
Pipeline
Последовательность шагов, обучаемая как единое целое. Единственный надёжный способ не допустить утечки при .
Разбор ниже: Пайплайн вместо ручных шаговfit / transform
fit считает параметры на обучении, transform применяет их. Смешение этих ролей — источник большинства ошибок.
Приведение типов
Числа как строки, даты как объекты, категории как числа — молчаливые источники неверных .
Разбор ниже: Типы, дубликаты и согласованностьДубликаты
Одна строка, попавшая и в обучение, и в тест, превращает валидацию в фикцию.
Разбор ниже: Типы, дубликаты и согласованностьПрофильная компетенция для ролей: Data Scientist, Аналитик данных, Data Engineer.
Усиливает профиль: Продуктовый инженер.
Глава «Данные» последний раз правилась . Нашли ошибку — напишите.