Skip to content

Latest commit

 

History

History
160 lines (112 loc) · 12.6 KB

README.md

File metadata and controls

160 lines (112 loc) · 12.6 KB

Sberbank Data Science Journey 2018: AutoML

Материалы к соревнованию по автоматизированному машинному обучению SDSJ 2018 AutoML.

Описание задачи

SDSJ AutoML — соревнование по построению алгоритмов машинного обучения, выполняющих автоматически такие действия как предобработка данных, выбор семейства моделей, подбор гиперпараметров.

Формат набора данных

Данные передаются решению в формате CSV. В наборах данных присутствуют следующие колонки:

  • line_id — идентификатор строки
  • target — целевая переменная (только для обучающего набора), вещественное число для регрессии и 0/1 для классификации
  • <type>_<feature> — признак одного из возможных типов (type):
    • number — числовой формат (может содержать количественную, категориальную или бинарную величину)
    • string — строковый формат
    • datetime — дата в формате 2010-01-01 или дата/время в формате 2010-01-01 10:10:10
    • id — идентификатор (категориальная величина особой природы)

Формат решения

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

В корне архива обязательно должен быть файл metadata.json следующего содержания:

{
    "image": "sberbank/python",
    "entry_points": {
        "train_classification": "python train.py --mode classification --train-csv {train_csv} --model-dir {model_dir}",
        "train_regression": "python train.py --mode regression --train-csv {train_csv} --model-dir {model_dir}",
        "predict": "python predict.py --test-csv {test_csv} --prediction-csv {prediction_csv} --model-dir {model_dir}"
    }
}

Здесь image — поле с названием docker-образа, в котором будет запускаться решение, entry_points — команды, при помощи которых запускается решение (train_* — обучение модели в режиме классификации и регрессии, predict — построение предсказаний с использованием обученной модели). Для решения текущей директорией будет являться корень архива.

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

  • {train_csv}, {test_csv} — путь к CSV-файлу с обучающей или тестовой выборкой
  • {model_dir} — путь к заранее созданной директории, в которую необходимо положить обученную модель для последующего использования
  • {prediction_csv} — путь к файлу, в который необходимо записать предсказания

При запуске решения, в переменной окружения TIME_LIMIT указывается максимальное время (в секундах), которое разрешено работать алгоритму. Гарантируется, что алгоритму отдельно на обучение и предсказание дается не менее 300 секунд, однако для больших наборов данных этот лимит повышен.

Для запуска решений можно использовать существующие окружения:

  • sberbank/python — Python3 с установленным большим набором библиотек (подробнее)
  • gcc - для запуска компилируемых C/C++ решений (подробнее здесь)
  • node — для запуска JavaScript
  • openjdk — для Java
  • mono — для C#

Подойдет любой другой образ, доступный для загрузки из DockerHub. При необходимости, Вы можете подготовить свой образ, добавить в него необходимое ПО и библиотеки (см. инструкцию по созданию Docker-образов); для использования его необходимо будет опубликовать на DockerHub.

Ограничения

Контейнер с решением запускается в следующих условиях:

  • решению доступны ресурсы
    • 12 Гб оперативной памяти
    • 4 vCPU
  • решение не имеет доступа к ресурсам интернета
  • максимальный размер упакованного и распакованного архива с решением: 1 Гб
  • архив распаковывается в файловую систему, находящуюся в оперативной памяти (ramfs), доступную решению для записи
  • остальное содержимое контейнера доступно только для чтения
  • CSV с набором данных не превышает 3 Гб

Система оценки

  1. Для каждой задачи (датасету) по тестовой части выборки считается метрика, специфичная для задачи (RMSE для регрессии, ROC-AUC для бинарной классификации).
  2. Для каждой задачи (датасета) производится перевод значения метрик участников в общую шкалу по следующей схеме. За наилучшее по метрике решение (среди всех отправленных и успешно протестированных решений) даётся 1 балл, бейзлайн-решение оценивается в 0 баллов. Участники, находящиеся по метрике между наилучшим и бейзлайн-решениями получают пропорциональное количество баллов между 0 и 1. Решения по качество нижу бейзлайна оцениваются в 0 баллов. Если наилучшее решение и бейзлайн решения совпадают, то все участники получают 0 баллов. Если решение участника выдаёт на задаче ошибку или не проходит по временному ограничению, то оно получают за эту задачу 0 баллов.
  3. Итоговый результат каждого участника считается как сумма результатов по каждой задачи после переда в общую шкалу. В общем лидерборде участники ранжируются по итоговому результату.

Примеры запуска и примеры наборов данных

Инструкция по локальному запуску решения в контейнере

Например, можно запустить baseline или публичное решение vlarine.

Публичный набор датасетов для локального тестирования решений: sdsj2018_automl_check_datasets.zip

1. Docker

Сначала необходимо установить Docker под вашу OC (инструкция на официальном сайте). Затем загружаем образ с DockerHub, это займёт некоторое время:

docker pull sberbank/python

Обратите внимание, что потребуется около 20ГБ свободного места на жёстком диске. А также, в Docker для Mac установлены свои ограничения на память, которые можно изменить настройках во вкладке "Advanced".

2. Запускаем обучение

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

docker run \
  -v {workspace_dir}:/workspace_0001 \
  -v {train_csv}:/data/input/train.csv:ro \
  -v {model_dir}:/data/output/model \
  -w /workspace_0001 \
  -e TIME_LIMIT=300 \
  --memory 12g \
  --name solution_0001_train \
  sberbank/python \
  python train.py --mode classification --train-csv /data/input/train.csv --model-dir /data/output/model

Здесь:

  • {workspace_dir} — каталог решения, в котором лежит файл metadata.json;
  • {model_dir} — каталог, в который будет записана модель (нужно предварительно создать);
  • {train_csv} — файл с обучающей выборкой.

Все пути должны быть абсолютными.

После отработки кода контейнер нужно остановить, иначе команда с тем же названием контейнера повторно не запустится:

docker stop solution_0001_train
docker rm solution_0001_train

Аналогично следует останавливать и solution_0001_test.

3. Валидация

Для этого сначала нужно получить prediction с помощью следующей команды:

  • {prediction_dir} — каталог решения, в котором будет лежать файл с прогнозами
docker run \
      -v {workspace_dir}:/workspace_0001 \
      -v {test_csv}:/data/input/test.csv:ro \
      -v {model_dir}:/data/input/model \
      -v {prediction_dir}:/data/output \
      -w /workspace_0001 \
      -e TIME_LIMIT=300 \
      --memory 12g \
      --name solution_0001_test \
      sberbank/python \
      python predict.py --test-csv /data/input/test.csv --model-dir /data/input/model --prediction-csv /data/output/prediction.csv

А затем сравнить с соответствующим файлом test-target.csv в папке sdsj2018_automl_check_datasets.

Таким же образом валидация проводится для остальных датасетов

Полезные ссылки