← Маршрут ML-инженерии

Урок · 2 мин чтения · упражнения и самопроверка

Воспроизводимость и артефакты

После урока: объяснить seed и выполнить упражнение «Обучить модель, сохранить артефакт и фактический отчёт», обосновав выбранный подход..

Перед началом

Примеры выполняются локально: скачайте лабораторию и установите зависимости по README. Онлайн-редактор алгоритмических задач не содержит ML-библиотеки.

Эксперимент, который можно повторить

Одного seed недостаточно. Сохраните источник и версию данных, индексы разбиения, параметры обработки и модели, версии библиотек и код. Для некоторых алгоритмов и аппаратных операций даже это не гарантирует побитовое совпадение между системами. В лаборатории проверяем совпадение предсказаний в одном фиксированном окружении CPU.

В скачанном комплекте зависимости закреплены в requirements.txt. Выполните команды установки из README и затем python -m ml_lab.train интерпретатором окружения. Команда создаёт artifacts/wine.joblib и artifacts/wine.json. Отчёт содержит вычисленные CV- и holdout-метрики, baseline, индексы, хеш данных и артефакта, seed и время обучения.

Сохранённая модель

Артефакт включает весь Pipeline и сведения о признаках. Joblib сохраняет Python-объекты, поэтому загружать следует только собственные доверенные файлы: чужой pickle/joblib может исполнять код. Для загрузки сохраняйте совместимые версии библиотек; перенос между произвольными версиями не обещается.

Хеш позволяет различить файлы, но не заменяет проверку качества. Повторные файлы могут отличаться из-за метаданных времени, даже если предсказания одинаковы. Поэтому в тесте воспроизводимости сравниваются параметры, split и результаты, а не равенство всех байтов артефакта.

Model card

В MODEL_CARD.md запишите цель, источник данных, метрику выбора, ограничение применимости, известные ошибки, входную схему, команду воспроизведения и процедуру отката. Не вписывайте примерную точность: перенесите фактические значения из отчёта вашего запуска с указанием размера holdout.

Контроль готовности

Запустите python -m unittest discover -s tests -v. Проверки используют реальный датасет, повторно обучают модель, сверяют масштабирование с train и вызывают API. Статус «тесты прошли» должен соответствовать завершению команды, а не наличию файлов в папке.

Пошаговый пример

python
import hashlib
import json
configuration = {"seed": 42, "model": "logistic_regression"}
serialized = json.dumps(configuration, sort_keys=True).encode()
print(hashlib.sha256(serialized).hexdigest() == hashlib.sha256(serialized).hexdigest())

Ожидаемый вывод

text
True

Одинаковые сериализованные байты дают одинаковый SHA-256. Для модели дополнительно проверяются данные, версии и предсказания.

Сделайте самостоятельно

Обучите лабораторную модель дважды. Сравните split, best_params и предсказания. Какие значения могут закономерно отличаться?

Ответ и критерии проверки

В одном окружении с тем же seed split и предсказания должны совпасть. Время запуска и хеш файла с временными метаданными могут отличаться. Проверка этого поведения включена в test_reproducible_predictions.

Проверьте понимание

1. Достаточно ли записать один random_state для полного повторения?
2. Можно ли загружать чужой joblib без проверки доверия?