Будут предоставлены данные по двум финансовым инструментам PIZZA и PASTA. Вам предстоит проанализировать и сгенерировать прогнозы значений волатильности для инструмента PIZZA на 100 изменений в данных (на финансовом сленге на 100 "тиков") PIZZA вперед. При этом, вы можете исследовать изменение качества прогноза волатильности PIZZA путем добавления в модель данных по финансовому инструменту PASTA. Инструмент PASTA прогнозировать не нужно, он предоставляется исключительно, как вспомогательный.
Предсказания Y рассчитываются по формуле:
Y = pd.Series(mid_price).rolling(window=100).std().shift(-99)
,
где mid_price
- это 1/2 * (лучшая цена спроса + лучшая цена предложения)
.
Метрика качества:
10 / rmse
,
где rmse = numpy.sqrt(sklearn.metrics.mean_squared_error(наши_эталоны, ваши_предсказания))
.
Т.е мы берем Ваши предсказания, вычисляем метрику качества по указанной формуле и чем больше оказывается эта метрика, тем лучше результат и тем вы точнее выполняете предсказания.
-
Разработка модели: Вы разрабатываете модель, для этого Вам будут предоставлены примеры исходного кода и данные в формате csv (формат см. ниже).
-
Валидация: для этого нужно подготовить решение, упакованное в zip архив. Коммуникация с вашей моделью происходит в интерактивном режиме. Ваша модель получает в обновления лимитной книги заявок (стакана, orderbook'a) пошагово (строка из csv) и после каждого шага необходимо вернуть предсказанную волатильность. Вам нужно предоставить модель, которая будет автоматически упакована в контейнер и провалидирована на сервере. Инструкции по подготовке решения см. ниже. Валидацию можно выполнять много раз, по итогам валидации вы получаете место в таблице интерактивного рейтинга. Вы должны уложиться во временные параметры проверки на валидации. Время валидации составляет не более 5 минут на 1 000 000 записей. Модель должна обрабатывать валидационные данные с этой частотой на нашем проверочном железе, чтобы результат был засчитан.
-
Итоговый прогон стартует после окончания активной части соревнования. Вы должны представить вашу наилучшую модель для итогового прогона на нашем тестовом сете. Итоговый прогон выполняется только один раз - Вы должны уложиться во временные параметры проверки на тестовом сете. Размер итогового тестового сета в 4 раза больше размера сета валидации.
- ZIP
- Python 2.7 или Python 3.5 с модулями:
pandas
,numpy
,scikit-learn
,docker
,scipy
Выполнение производится в контейнере docker под ОС Linux. В качестве образа для docker-контейнеров используется последняя версия kaggle/python.
Архив содержит:
Файл | Описание |
---|---|
data/train_data.csv |
Тренировочные данные |
jupyter_solution_example |
Пример создания модели в Jupyter Notebook |
solution_example/hackathon_protocol.py |
Реализация сетевого протокола |
solution_example/metadata.ini |
Содержит команду запуска. Должен обязательно присутствовать в корне zip-архива с решением. |
solution_example/predict_online.py |
Пример простого работающего клиента, возвращает текущую волатильность вместо предсказанной. На основе этого файла вы можете построить свою предсказательную модель. TCP соединение устанавливается по указанному IP адресу и порту, указанных в переменных окружения: HACKATHON_CONNECT_IP , HACKATHON_CONNECT_PORT (если переменные не заданы, то по умолчанию при локальном запуске predict_online.py будет использованы localhost:12345 при запущенном check_solution_server.py ). Обязательно необходимо указать в переменных: USERNAME , PASSWORD (ваш логин и пароль, использованный при регистрации на сайте). |
check_solution_server.py |
Локальный сервер для проверки решения, который вы можете запускать на своем компьютере. Оценивает предсказания и выводит результат. Обязательно (!) перед отправкой решения на сервер проверить корректность его работы с помощью данного локального сервера. |
Предположим, Вы подготовили модель в Jupyter Notebook. Нужно перенести модель в standalone скрипт, который можно запускать из командной строки, и который сможет обмениваться данными с проверяющим сервером.
- В файле
predict_online.py
прописать вашиUSERNAME
иPASSWORD
, выбранные Вами при регистрации (см. наш пример решения). - Сохранить обученную модель в файл. Например, модель
lightgbm.Booster
имеет методsave_model('my_model.txt')
. Сохраненный файл вы будете использовать при интерактивном выполнении. - Составить скрипт python для интерактивного исполнения, который один раз подгрузит сохраненную на шаге 1, обученную модель.
Глобально, в этом скрипте Вам нужно выполнять следующее:
- Загрузить свою модель. Например, для
lightgbm.Booster
нужно указать сохраненный файл моделиmodel = lightgbm.Booster(model_file='my_model.txt')
. - При вызове коллбека
on_orderbook()
Вам будут передаваться очередные данные, и вы должны сохранять их для того, чтобы потом выполнить предсказания при вызове коллбекаmake_prediction()
. - В коллбеке
make_prediction()
вы обязаны вызвать реализованный и унаследованный метод вашего клиентаself.send_volatility(answer)
.
- Загрузить свою модель. Например, для
- Дождаться выполнения скрипта до финального вызова коллбека
on_score(items_processed, time_elapsed, score_value)
, где в переменнойscore_value
будет возвращено оценочное значение Вашего решения по объявленной методике. - Поместить файлы решения в zip архив, содержащий в имени файла название команды и состоящего только из букв и цифр латинского алфавита (например:
MySuperTeam-MyBestSolution_v1.zip
). - Перейти к пункту "Как отправить на проверку решение"
- Подготовить zip архив с сохраненной моделью. В корне должен содержаться metadata.ini, где прописана команда запуска для выбранной версии python.
- Отправить zip архив через http://alfahack.dhis.org/upload. Сервер рассчитывает и сохраняет md5-хеш загружаемого файла - не пытайтесь загрузить один и тот же файл (даже с другим именем) повторно.
- В случае успешной загрузки файла на сервер на странице загрузки появится ссылка вида:
- You can check solution for errors by following link: d84581140e548373c54ec332899b2bcd, по которой Вы можете проверить результат выполения вашего решения на сервере
- Общая таблица выполняющихся в данный момент решений на сервере будет доступна по ссылке: http://alfahack.dhis.org/tasks.
- В случае успешной проверки, ожидать появления обновленного результата на scoreboard: http://alfahack.dhis.org.
Тренировочные данные - это csv вида:
?
0_ID;1_TIME;BID_P_1;BID_V_1;BID_P_2;BID_V_2;BID_P_3;BID_V_3;BID_P_4;BID_V_4;BID_P_5;BID_V_5;BID_P_6;BID_V_6;BID_P_7;BID_V_7;BID_P_8;BID_V_8;BID_P_9;BID_V_9;BID_P_10;BID_V_10;ASK_P_1;ASK_V_1;ASK_P_2;ASK_V_2;ASK_P_3;ASK_V_3;ASK_P_4;ASK_V_4;ASK_P_5;ASK_V_5;ASK_P_6;ASK_V_6;ASK_P_7;ASK_V_7;ASK_P_8;ASK_V_8;ASK_P_9;ASK_V_9;ASK_P_10;ASK_V_10;Y
PIZZA;1970.01.01 01:11:29.966690;2418;7;2417;3;2416;3;2415;3;2414;57;2413;9;2412;8;2411;7;2410;10;2409;5;2421;5;2422;5;2423;5;2424;5;2425;5;2430;1;2431;2;2436;1;2437;1;2438;1;0.4195656724940916
PIZZA;1970.01.01 01:11:32.444868;2418;7;2417;3;2416;3;2415;4;2414;57;2413;9;2412;8;2411;7;2410;10;2409;5;2421;5;2422;5;2423;5;2424;5;2425;5;2430;1;2431;2;2436;1;
PIZZA;1970.01.01 01:11:33.886045;2420;1;2418;7;2417;3;2416;3;2415;4;2414;57;2413;9;2412;8;2411;7;2410;10;2421;5;2422;5;2423;5;2424;5;2425;5;2430;1;2431;2;2436;1;2437;1;2438;1;0.42091770831337116
PIZZA;1970.01.01 01:11:36.895255;2420;1;2418;7;2417;4;2416;3;2415;4;2414;57;2413;9;2412;8;2411;7;2410;10;2421;5;2422;5;2423;5;2424;5;2425;5;2430;1;2431;2;2436;1;2437;1;2438;1;0.41350314204962735
PASTA;1970.01.01 01:21:29.006102;128694;53;128693;150;128692;107;128691;123;128690;45;128689;108;128688;98;128687;204;128686;108;128685;143;128695;110;128696;90;128697;87;128698;90;128699;167;128700;88;128701;172;128702;192;128703;155;128704;213;NaN
PASTA;1970.01.01 01:21:29.006131;128694;53;128693;150;128692;107;128691;123;128690;45;128689;108;128688;98;128687;204;128686;108;128685;175;128695;110;128696;90;128697;87;128698;90;128699;167;128700;88;128701;172;128702;192;128703;155;128704;213;NaN
0_ID
: идентификатор финансового инструмента (PIZZA или PASTA). Предсказываем волатильность по PIZZA. PASTA может помочь, может испортить, решать Вам.1_TIME
: время изменения данных, микросекундная точность.BID_P_1 - BID_P_10
: цены спроса с самой лучшей (BID_P_1
) до самой плохой (BID_P_10
)BID_V_1 - BID_V_10
: объемы спроса, соответствующие цене спроса с соответствующим индексом (BID_V_1
соответствуетBID_P_1
и т.д.)ASK_P_1 - ASK_P_10
: цены предложения, по аналогииASK_V_1 - ASK_V_10
: объемы предложения, по аналогииY
: если изобразить в псевдокоде:- для PIZZA:
pd.Series((BID_P_1 + ASK_P_1)/2).rolling(window=100).std().shift(-99)
- для PASTA:
NaN
.
- для PIZZA: