-
devops/ - скрипты запуска инфраструктуры для разработки
- docker-compose.yml - манифест инфраструктуры
- load_data.sh - скрипт для загрузки данных в psql
- schemas.sql - скрипт для создания таблиц и функций в бд
-
evraz/ - модели, признаки, метрики, настройки
- features.py - скрипты формирования признаков
- metrics.py - метрики
- model.py - модели
- settings.py - настройки и обёртки для подключения к бд
-
make_submission.py - код для запуска пайплайна сбора фичей, кросвалидации модели, обучения и предсказания на тестовом датасете
-
make_submission.sh - код для формирования сабмита
-
../data/raw/*.csv - датасет
-
../data/submissions/*.{csv|zip} - сабмиты
-
../data/logs/*.log - логи запусков
Для извлечения признаков использовались SQL запросы к бд. В качестве базы данных была ипользована postgresql v13.4 развёрнутая в докере для удобства. Данный подход позволяет удобным образом делать запросы на сбор признаков, а также значительно быстрее и экономичнее по памяти, чем использование pandas dataframe.
Для удобства разработки и чтения признаки были разбиты на категории и выделены в отдельные классы. Каждый из классов наследуется от DBFeatureExtractor, в котором реализована логика по сбору признаков из бд. Наследуемые классы в большинстве случаев требуют лишь определения шаблона запроса.
Более подробная документация по каждому из признаков описана в docstring.
В качестве моделей был использован catboost. Обучалось две модели: одна на T, другая на C. Чтобы избежать кучи кода по отбору признаков, подбору гиперпараметров и т.д. был использован фреймворк LightAutoML с ограничением на использование 2 моделей. TODO: всё же обучить и затюнить одну модель, вместо нескольких в lama.