Финальный репозиторий хакатонного решения команды ROCKET.
-
inference.ipynb Predict-only ноутбук. Он читает исходные CSV из папки data, сам строит признаки и через зафиксированный checkpoint воспроизводимо формирует финальный
predictions.csv. -
train.py Код обучения модели. Скрипт строит component/scenario-level таблицы из
data/и обучает historicalhierarchical model. -
predict.py Код получения предсказаний. Скрипт строит те же признаки, загружает зафиксированный checkpoint модели и воспроизводимо формирует финальный [predictions.csv].
-
streamlit_app.py Продуктовый интерфейс для загрузки CSV, обучения модели с нуля и дообучения из checkpoint.
-
model/hierarchical_o2_baseline.pt Зафиксированный checkpoint baseline-модели.
-
data Источник входных данных для решения:
- daimler_component_properties.csv
- daimler_mixtures_train.csv
- daimler_mixtures_test.csv
-
predictions.csv Файл, который формируется контейнерным запуском для отправки на платформу.
-
docks Служебные материалы для сдачи:
- logo.png
-
Dockerfile
-
requirements-docker.txt
-
requirements-dev.txt
-
scripts/local_ci.ps1
-
tests/
-
.dockerignore
-
patent_data Папка с патентными данными и отдельным локальным pipeline для экспериментов с расширенным train:
- daimler_mixtures_train_patent_attach.csv
- daimler_component_properties_patent_attach.csv
- train.py
- predict.py
- inference.ipynb
- README.md
Что это за папка:
- отдельные скрипты для локального обучения и предсказания на объединённых
data + patent_data.
Важно: baseline-скрипты в корне проекта эти файлы автоматически не читают.
-
tools/merge_patent_attach_into_data.py Вспомогательный скрипт для локального объединения патент-пакета с исходными CSV в отдельную папку
data_with_patents/.
- читает исходные CSV из
data/; - строит те же признаки, что и
predict.py; - загружает checkpoint model/hierarchical_o2_baseline.pt;
- сохраняет итоговый
predictions.csv.
Во время исполнения создается временная папка _notebook_runtime_o2. Это runtime-артефакт.
Код обучения baseline сохранен в train.py.
Ожидаемая структура проекта:
Neftecode/
├── data/
│ ├── daimler_component_properties.csv
│ ├── daimler_mixtures_train.csv
│ └── daimler_mixtures_test.csv
├── docks/
│ └── logo.png
├── inference.ipynb
├── patent_data/
│ ├── daimler_component_properties_patent_attach.csv
│ ├── daimler_mixtures_train_patent_attach.csv
│ ├── inference.ipynb
│ ├── predict.py
│ ├── train.py
│ └── README.md
├── train.py
├── predict.py
├── src/
├── model/
│ └── hierarchical_o2_baseline.pt
├── predictions.csv
├── Dockerfile
└── requirements-docker.txt
Нужны пакеты:
numpypandasscikit-learntorch
В Docker используется CPU-only сборка PyTorch.
Обучение модели:
python train.pyСкрипт обучит модель с нуля и сохранит:
model/trained_model.ptprediction_fresh_retrain.csv
Параметры эксперимента можно менять через CLI:
python train.py --epochs 50 --batch-size 8 --seed 42Дообучение из существующего checkpoint:
python train.py --epochs 30 --init-checkpoint model/hierarchical_o2_baseline.ptЗапуск Streamlit-интерфейса:
pip install -r requirements-dev.txt
streamlit run streamlit_app.pyВ интерфейсе можно:
- использовать CSV из папки
data/или загрузить своиtrain,testиcomponent_properties; - обучить модель с нуля;
- дообучить модель из baseline checkpoint или загруженного
.pt; - скачать checkpoint, validation predictions и test predictions после запуска.
Логирование эксперимента в MLflow:
python train.py --epochs 20 --enable-mlflow --mlflow-tracking-uri sqlite:///mlflow.dbЛокальная CI-проверка:
pip install -r requirements-dev.txt
powershell -ExecutionPolicy Bypass -File scripts/local_ci.ps1CI-скрипт запускает unit-тесты, python predict.py и smoke-test обучения на 1 эпоху.
Получение финальных предсказаний через зафиксированный checkpoint:
python predict.pyРезультат:
- в корне проекта будет создан или обновлен predictions.csv
Для патентного контура есть отдельный самостоятельный predict-only ноутбук:
jupyter notebook patent_data/inference.ipynbСборка образа:
docker build -t neftecode-o2 .Запуск в PowerShell:
docker run --rm -v ${PWD}:/app neftecode-o2Запуск в cmd:
docker run --rm -v %cd%:/app neftecode-o2Контейнер:
- ставит зависимости из requirements-docker.txt;
- запускает predict.py;
- воспроизводимо записывает
predictions.csvв корень проекта.
