competitive_ds_cource_prj

Проект для курса MLOps и production в DS исследованиях 3.0 и курса Введение в соревновательный Data Science на Stepic.

Important

Разработка проекта ведётся по методологии GitHub-flow. Подробенне в CONTRIBUTING.md.

Warning

Проект и документация в стадии разработки.

Краткое описание проекта

Для оптимизации расходов на ремонт и техническое обслуживание автомобилей каршеринговой компании необходима модель, которая будет прогнозировать, время через которое произойдёт поломка и класс поломки.

Цель - построить модель (или модели), прогнозирующую время, через которое произойдёт поломка, и класс поломки.

Целевые метрики:

  1. ROC AUC - для прогнозирования класса поломки (классификация)
  2. RMSLE - для прогнозирования времени до поломки (регрессия) $$RMSLE = \sqrt{ \frac{1}{n} \sum_{i=1}^n \left(\log (1 + \hat{y}_i) - \log (1 + y_i)\right)^2},$$
    где
    $n$ - количество наблюдений,
    $\hat{y}_i$ значение, спрогнозированное моделью для наблюдения $i$,
    $y_i$ - фактическое значение для наблюдения $i$,
    $\log$ - натуральный логарифм.

Применяемые в проекте инструменты автоматизации описаны в разделе Инструменты автоматизации.

Развёртывание проекта

Проект и среда разработки запакованы в Docker-контейнер. Для того, чтобы развернуть их на локальной машине или сервере необходимо выполнить следующие шаги:

  1. Установить Docker.
  2. Клонировать репозиторий.
  3. Предоставить необходимые ключи (подробнее в разделе. Ключи).
  4. Собрать образы контейнеров и запустить их. Для сборки и запуска пользователю предлагается использовать следующие скрипты:
    • build.sh - сборка образа базов контейнера и контейнера со средой разработки.
    • start.sh - запуск контейнера со средой разработки в интерактивном режиме с использованием /bin/bash,
    • jupyter.sh - запуск контейнера со средой разработки с запущенным сервером Jupyter Notebook,
    • gh_actions_runner/build_runner.sh - сборка контейнера с self-hosted runner для GitHub Actions,
    • gh_actions_runner/start_runner.sh - запуск контейнера с self-hosted runner для GitHub Actions и самого ранера.

Подробнее о развёртывании и запуске в CONTRIBUTING.md и разделах Среда разработки, CI/CD конвейер GihHub Actions.

Применяемые в проекте инструменты автоматизации описаны в разделе Инструменты автоматизации.

Ключи

Для полноценной работы с проектом необходимо предоставить следующие ключи:

  • /.dev_env_pat - файл с PAT для доступа к репозиторию из среды разработки в контейнере.
  • /.gdrive/credentials.json - ключи для доступа DVC к удалённому хранилищу Google Drive. (подробнее).
  • /gh_actions_runner/.secret_token - Временный токен для работы self-hosted runner с GitHub Actions (подробнее).

Документация

Документация и отчёты разделены на несколько разделов, размещённых в отдельных файлах:

Инструменты автоматизации

В проекте используются следующие инструменты автоматизации (CI/CD):

  • Docker - основной инструмент автоматизации сборки и изоляции окружений;
  • Git - система контроля версий кода;
  • GitHub Actions - инструмент CI/CD;
  • Poetry - Менеджер пакетов Python;
  • Cookiecutter - утилита для шаблонизации проектов, с помощью которой была создана структура каталогов и файлов данного репозитория;
  • DVC - система контроля версий данных и workflow-менеджер;
  • Pre-commit - утилита для автоматического запуска проверок при каждом коммите.
  • Ruff - Автоформатер и линтер для проверки выполнения требований стандартов оформления кода.
  • Mypy - Линтер для проверки типов.

Структура репозитория

├── comp_ds_prj                   <- Каталог с python-модулями проекта.
│   ├── data                      <- Скрипты для загрузки и обработки данных.
│   ├── features                  <- Скрипты, создающие из сырых данных признаки, пригодные для передачи модели.
│   ├── logs                      <- Каталог с модулями для организации и настройки логирования.
│   ├── models                    <- Модули, реализующие работу с разными моделями. Для каждой модели свой модуль.
│   └── visualization             <- Скрипты для генерации графиков.
|
├── data
│   ├── external                  <- Данные, полученные из внешних источников, например открытых API в интернете.
│   ├── interim                   <- Промежуточные данные, полученные после предобработки сырых данных и данных из
|   |                                внешних источников, а также данные, полученные после промежуточных шагов
|   |                                обработки.
│   ├── processed                 <- Подготовленные данные, пригодные для отправки модели.
│   ├── raw                       <- Сырые исходные данные, полученные из первоисточника.
│   └── submissions               <- Прогнозы (сабмиты) для отправки на Kaggle.
|
├── docs                          <- Документация проекта.
│   └── figures                   <- Иллюстрации для документации.
|
├── .dev_env_pat                  <- файл с PAT для доступа к удалённому репозиторию GitHub из среды разработки в
|                                    контейнере.
├── .dvc                          <- Временные файлы и настройки DVC, в том числе и данные для доступа ко внешнему 
|   |                                хранилищу.
│   ├── config                    <- Глобальные настройки.
│   └── config.local              <- Локальные настройки.
├── .gdrive
│   └── credentials.json          <- Токен для подключения DVC к внешнему хранилищу данных на Google Drive.
|
├── gh_actions_runner             <- Каталог со скриптами и файлами для работы с self-hosted runner
|   |                                (GitHub Actions).
│   ├── build_runner.sh           <- Скрипт, собирающий образ контейнера с ранером из Dockerfile в этом же каталоге.
│   ├── Dockerfile                <- Dockerfile для сборки контейнера с ранером.
│   ├── remove_runner.sh          <- Скрипт анулирует регистрацию ранера в GitHub Actions, что вызывает остановку
|   |                                работающего ранера.
│   ├── .secret_token             <- Временный токен для регистрации ранера в GitHub Actions. 
│   └── start_runner.sh           <- Скрипт, запускающий контейнер с ранером. После запуска контейнера Скрипт
|                                    также регистрирует и запускает ранер.
├── .github
│   └── workflows                 <- Каталог с описанием CI/CD конвейеров GitHub Actions в формате yaml.
|
├── logs                          <- Каталог для логов.
|
├── models                        <- Каталог с сохранёнными обученными моделями.
|
├── notebooks                     <- Каталог с тетрадками Jupyter
│   ├── exploratory               <- Notebook-и с первичными исследованиями и экспериментами. 
|   |                                В них допустимо большое количество кода.
│   └── reports                   <- Более тщательно оформленные тетрадки, служащие основой для отчётов.
|
├── references                    <- Дополнительные сторонние материалы и руководства.
│   └── baseline_by_authors.ipynb <- Baseline-решение от авторов
|                                    [курса](https://stepik.org/course/108888/info).
|
├── reports                       <- Каталог с отчётами. Отчёты содержат информацию об основных этапах
|                                    исследования, разработке модели и полученных результатах. Для остальных
|                                    разделов, например описания окружения разработки и процесса его
|                                    развёртывания есть документация (каталог docs).
|
├── build.sh                      <- Скрипт, собирающий образ базового контейнера из Dockerfile и образ контейнера
|                                    непосредственно с окружением разработки из Dockerfile_dev_env.
├── Dockerfile                    <- Dockerfile базового контейнера.
├── Dockerfile_dev_env            <- Dockerfile контейнера со средой разработки.
├── .dockerignore                 <- Аналог .gitignore для Docker. Docker не будет копировать и обрабатывать всё,
|                                    что перечислено в этом файле.
├── .dvcignore                    <- Аналог .gitignore для DVC. DVC не будет обрабатывать всё, что перечислено в
|                                    этом файле.
├── dvc.lock                      <- Файл с метаданными о каждом шаге workflow, описанного в dvc.yaml и выполняемого
|                                    DVC. Файл позволяет DVC определить какие шаги нужно выполнить.
├── dvc.yaml                      <- Описание workflow DVC в формате yaml.
├── .env                          <- Файл с переменными окружения, которые могут быть импортированы в среду
|                                    разработки.
├── .gitignore
├── jupyter.sh                    <- Скрипт для запуска контейнера среды разработки с запущенным сервером
|                                    Jupyter Notebook.
├── LICENSE                       <- лицензия MIT.
├── poetry.lock                   <- Файл с зафиксированными зависимостями Poetry.
├── pyproject.toml                <- Файл с описанием пакетов, устанавливаемых в виртуальное окружение, и
|                                    параметрами линтеров и автоформатеров.
├── requirements.txt              <- Файл с зафиксированными зависимостями Poetry, экспортированный в формате для
|                                    других менеджеров пакетов.
├── README.md                     <- README.md верхнего уровня, отображающийся на заглавной странице репозитория.
├── CONTRIBUTING.md               <- Руководство для новых участников проекта.
└── start.sh                      <- Скрипт для запуска контейнера среды разработки. Предоставляет доступ к
                                     /bin/bash в контейнере.