Приведение сырых данных к виду, пригодному для обучения: типы, форматы, дубликаты, согласованность единиц измерения.
Ключевые тезисы
- Все преобразования должны быть оформлены как воспроизводимый pipeline, а не как ручные шаги в ноутбуке.
- Параметры преобразований подбираются только на train и применяются к val/test.
- Один и тот же код предобработки должен работать в обучении и в проде.
Подробный разбор
2 подтем — раскройте любую, чтобы увидеть объяснение, формулы, примеры и интерактивные графики.
1Пайплайн вместо ручных шагов
Почему любое преобразование должно быть кодом, а не действием в ноутбуке.
Главное правило предобработки: то, что вы сделали с 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" — не косметика: в проде обязательно появится категория, которой не было в обучении, и без этого сервис упадёт.
2Типы, дубликаты и согласованность
Рутинные проверки, которые ловят больше ошибок, чем любая модель.
- Типы: числа, приехавшие строками («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Оформление обучения как воспроизводимой последовательности шагов вместо разрозненных ноутбуков.