Одна обработка при обучении и предсказании
Если обучить модель на масштабированных данных, а в сервис передать исходные, математически корректный запрос даст неправильный результат. Преобразования являются частью модели. Pipeline связывает их в один объект: fit обучает шаги по train, predict повторяет нужные преобразования без переобучения.В лаборатории первый шаг — StandardScaler, второй — LogisticRegression. fit вычисляет средние и масштабы train, преобразует train и обучает классификатор. На test вызывается только predict: он использует уже найденные параметры. Никогда не вызывайте fit_transform отдельно на test: это создаст другое пространство признаков.
Пропуски и категории
Для таблицы с разными типами полезен ColumnTransformer. Числа можно заполнять медианой train и масштабировать; категории — заполнять и кодировать OneHotEncoder. Заранее определите поведение на новой категории. Опция handle_unknown="ignore" позволяет обработать её без ошибки, но выбранное представление нужно учитывать при интерпретации. Отсутствующие обязательные колонки должны давать понятную ошибку.В Wine признаки числовые и без пропусков, поэтому дополнительные преобразования не нужны. Не добавляйте сложность только ради длинного списка инструментов. Сначала зафиксируйте контракт на имена, порядок, конечность и тип значений.
Pipeline и cross-validation
Передавайте весь Pipeline в CV. Тогда каждый fold обучит масштабирование только на своей обучающей части. Если заранее масштабировать весь train, а потом делить на folds, validation-части уже повлияют на средние — утечка будет и внутри CV.Проверяйте это численно: scaler.mean_ после финального fit должен совпасть со средними train, а не всей таблицы. Такая проверка содержательнее, чем проверка наличия слова Pipeline в исходнике. В сохранённый артефакт включайте весь конвейер, а не только коэффициенты классификатора.