Соревнование Inventum Data Mining Contest
Материал из MachineLearning.
Открытый Data Mining Contest кафедры ММП ВМК МГУ
- Спонсор и поставщик данных: компания Inventum Algorithmic Asset Management
- Организатор: Дьяконов Александр Геннадьевич
- Срок: 4 недели (до 23:59 26.12.2012)
- Призовой фонд: 20000 руб.
- Задача: прогнозирование финансовых временных рядов
- Скачать: данные, m-файлы, пример ответа
Содержание |
Итоги соревнования
Первое место (по лидерборду) - Ульянов Дмитрий.
Приз жюри (за активность, отчёт и волю к победе) - Рыжков Александр.
Здесь выложены все (в том числе и тестовые) данные соревнования: СКАЧАТЬ ФАЙЛ
Изменения (ВАЖНО)
Данные для тестирования расширены!
Здесь выложен финальный тестовый файл: СКАЧАТЬ ФАЙЛ (по нему будет определён победитель)
Здесь выложен образец решения: СКАЧАТЬ ФАЙЛ
Теперь в файле с данными:
статистика трёх последовательных недель
test1 - понедельник
test2 - вторник
test3 - четверг (информации о среде нет!)
test4 - пятница
дальше старый блок данных
price5 - понедельник
...
test14 - пятница
Надо делать прогнозы в первые (!) четыре дня и последние два
(они же входили в прошлую тестовую выборку).
Следующий пересчёт турнирной таблицы состоится
24 декабря (решения принимаются до 23.12.2012 23:59),
а финальный пересчёт - 27 декабря (до 26.12.2012 23:59).
21 декабря пересчёта не будет. До 24 декабря можно прислать 2 решения -
одно на старом тесте и одно на финальном (в тему письма добавить слово NEW).
До 27 декабря также можно прислать два решения (естественно, на финальном тесте).
Из присланных решений каждого участника на финальном тесте (их потенциально может быть 3)
будет выбрано лучшее.
Задача
Прогнозирование временного ряда (котировки одного из финансовых инструментов).
Призы
- Первое место (по функционалу качества) – 10000 руб.
- Приз жюри – 10000 руб. (здесь оценивается эффективность алгоритма, краткость и изящество кода, полнота отчёта, умные вопросы и замечания).
Оба приза может получить один человек.
Также успешные участники соревнования получат возможность войти в состав рабочей группы, которая будет заниматься анализом данных фондового рынка.
Турнирная таблица
Лучшие результаты
Участник | Результат | Комментарий |
---|---|---|
Ульянов Дмитрий | 101.276, 116.979 | |
Рыжков Александр | 114.768 | |
Новиков Александр | 117.804 |
Загрузка до 26.12.2012 - последние загрузки на финальном тесте
Участник | Результат на финальном тесте | на предварительном тесте | Комментарий |
---|---|---|---|
Ульянов Дмитрий | 101.276 | 57.7756 | |
Рыжков Александр | 114.768 | 85.3244 | |
Ульянов Дмитрий | 116.979 | 104.886 | |
Новиков Александр | 117.804 | 69.1741 | |
Сокурский Юрий | 122.21 | 73.2242 | |
Алешин Илья | 130.535 | 92.805 | отчёт |
Горелов Алексей | 130.581 | 74.9362 | отчёт |
Антипов Алексей | 133.097 | 76.8883 | |
Алешин Илья | 133.27 | 85.395 | |
Никифоров Андрей | 140.505 | 74.9363 | отчёт |
Арбузова Дарья | 145.644 | 59.7558 | отчёт |
Найдин Олег | 146.815 | 126.91 | отчёт / поздняя сдача |
Шадриков Андрей | 148.057 | 117.907 | отчёт |
Рыжков Александр | 153.02 | 49.7495 | отчёт |
Сокурский Юрий | 156.381 | 114.776 | отчёт |
Антипов Алексей | 157.917 | 73.0367 | |
Петров Григорий | 168.339 | 58.805 | |
Харациди Олег | 180.361 | 107.614 | отчёт |
Арбузова Дарья | 180.489 | 194.231 | |
Петров Григорий | 181.137 | 95.7359 | |
Новиков Александр | 193.045 | 157.989 | отчёт |
Львов | нет | нет | отчёт |
Ломов | нет | нет | отчёт |
Загрузка до 26.12.2012 - отображены первые загрузки на финальном тесте
Участник | Результат | Последние 2 недели | Комментарий |
---|---|---|---|
DjBenchmark3 | 125.34 | ||
Петров Григорий | 131.767 | 47.06 | |
DjBenchmark4 | 138.482 | ||
Ломов Никита | 140.505 | 74.9362 | |
DjBenchmark2 | 141.352 | ||
Алешин Илья | 145.654 | 59.76 | |
Антипов Алексей | 145.655 | 59.7653 | |
Kuzmin Alexey | 145.654 | 59.76 | |
Подоприхин Дмитрий | 148.947 | 78.3636 | Прислан отчёт |
Рыжков Александр | 166.015 | 94.3988 | |
Новиков Александр | 171.5286 | см. пред. загрузку | Пересчитано вручную |
Ульянов Дмитрий | 173.141 | 192.481 | |
Никифоров Андрей | 183.659 | 95.9978 | Прислан отчёт |
Горелов Алексей | 184.946 | 167.002 | |
Адимов Арсений | 185.232 | 188.029 | Не было пометки NEW |
Шадриков Андрей | 192.669 | 174.82 | Прислан отчёт |
DjBenchmark1 | 1356.01 | ||
Харациди Олег | NaN | 99.9973 |
Загрузка до 23.12.2012
Участник | Результат | Комментарий |
---|---|---|
Петров Григорий | 47.06 | |
Львов Сергей | 59.76 | |
Зиннурова Эльвира | 59.76 | Прислан отчет |
Алешин Илья | 59.76 | |
Kuzmin Alexey | 59.76 | |
Антипов Алексей | 59.7653 | |
DjBenchmark4 | 69.1741 | |
Горелов Алексей | 74.9362 | |
Ломов Никита | 83.4674 | |
Рыжков Александр | 94.3988 | |
Харациди Олег | 99.9973 | Ошибка. Тестирование было по новым данным. |
Найдин Олег | 161.611 | |
Адимов Арсений | 188.021 | |
Ульянов Дмитрий | 192.481 | Ошибка. Тестирование было по новым данным. |
Новиков Александр | 230.347 | |
Подоприхин Дмитрий | 1894.71 | Ошибка. Тестирование было по новым данным. Неверные названия переменных. |
Арбузова Дарья | 3827.02 |
DjBenchmark4 был получен с помощью следующего кода
function yf = DjForecast4(th, yh, tf) t0 = min(th); t1 = max(th); X = []; j = 1; for ti = t0:5:t1 yy = yh((th>=ti)&(th<(ti+5))); if isempty(yy) X(j) = X(j-1); else X(j) = mean(yy); end; j = j + 1; end; X = [X(end-3:end)]; C = [-0.0229 0.0862 -0.2936 1.2303]'; yf = tf*0 + X*C;
Загрузка до 14.12.2012
Участник | Результат | Комментарий |
---|---|---|
Петров Григорий | 47.06 | |
Рыжков Александр | 49.7495 | |
Львов Сергей | 74.9362 | |
Зиннурова Эльвира | 74.9363 | |
Алешин Илья | 74.9363 | |
Новиков Александр | 74.9435 | |
Kuzmin Alexey | 74.9363 | |
Найдин Олег | 74.937 | |
Антипов Алексей | 75.0094 | |
Шадриков Андрей | 77.799 | |
Подоприхин Дмитрий | 78.3636 | |
Харациди Олег | 83.5271 | |
DjBenchmark3 | 91.7827 | По старому функционалу - 91.7652 |
Афанасьев Кирилл | 116.305 | |
Ломов Никита | 146.088 | Неверное имя файла |
Горелов Алексей | 167.002 | |
Арбузова Дарья | 211.039 | |
Ульянов Дмитрий | 226.171 |
DjBenchmark3 был получен с помощью следующего кода
function yf = DjForecast3(th, yh, tf) % примитивный прогноз константой % с попыткой угадать тренд yf = tf*0 + (2*mean(yh(end-19:end)) - mean(yh(end-39:end-20)));
Загрузка до 07.12.2012
Участник | Результат | Результат по новому ф-лу | Комментарий |
---|---|---|---|
Рыжков Александр | 49.7519 | 49.7515 | |
Петров Григорий | 50.2177 | 50.2176 | |
Сокурский Юрий | 74.9435 | 74.9435 | |
Никифоров Андрей | 74.9362 | 74.9362 | |
Харациди Олег | 74.9362 | 74.9362 | |
Зиннурова Эльвира | 74.9363 | 74.9363 | Ошибка в названии файла |
Шабашев Фёдор | 75.4932 | 75.4932 | |
Подоприхин Дмитрий | 78.3636 | 78.3636 | Ошибка в названии файла |
Ульянов Дмитрий | 98.6007 | 98.6011 | |
Алешин Илья | 104.638 | 104.637 | |
DjBenchmark2 | 116.305 | ||
Шадриков Андрей | 128.659 | 128.672 | |
Новиков Александр | 135.318 | 135.393 | Ошибка в теме письма |
Львов Сергей | 146.508 | 146.509 | |
Горелов Алексей | 151.193 | 151.192 | |
Арбузова Дарья | 169.393 | 169.405 | |
Найдин Олег | 182.881 | 245.759 | Ошибка в названии файла |
Алексей Антипов | 310.316 | 310.323 | Ошибка в переменной name |
Kuzmin Alexey | 310.316 | 310.323 | Ошибка в названии файла |
Замечание. Вычисление по новому функционалу связано с небольшим багом в старом. Всё исправляется добавлением в функцию Evaluate строчек
% вместо I = (realprice>lastprice)~=(ansprice>lastprice); I = ((realprice>lastprice)&(ansprice>lastprice))|((realprice<lastprice)&(ansprice<lastprice)); I = ~I;
DjBenchmark2 был получен с помощью следующего кода
function yf = DjForecast2(th, yh, tf) % просто - последняя цена!!! (самый глупый алгоритм) % НО: ПРАВИЛЬНЕЕ БРАТЬ СРЕДНЕЕ ПО НЕКОТОРОМУ ВРЕМЕННОМУ ИНТЕРВАЛУ! yf = mean(yh(end-9:end)) + tf*0;
Загрузка до 30.11.2012
Участник | Результат | Комментарий |
---|---|---|
Ульянов Дмитрий | 75.0094 | Преодолён DjBenchmark2 |
Новиков Александр | 109.15 | Преодолён DjBenchmark2 |
Харациди Олег | 123.793 | |
Рыжков Александр | 165.818 | |
Подоприхин Дмитрий | 256.853 | |
Арбузова Дарья | 683.705 | |
Петров Григорий | 1218.36 | |
DjBenchmark1 | 1589.53 |
Данные
СКАЧАТЬ zip-mat-файл с данными (5.6 Мб)
Полностью природа данных не разглашается.
Участникам запрещается искать источники данных!
В mat-файле лежат массивы, которые соответствуют 10 рабочим дням (пн–птн, пн–птн).
По восьми рабочим дням (price1,...,price8) есть полная информация.
Каждая матрица здесь имеет следующий формат:
- Первый столбец – час,
- Второй – минута,
- Третий – секунда,
- Четвёртый – тысячная доли секунды,
- Пятый (целевой) – цена.
По последним двум дням (test9, test10) представлена аналогичная информация, но некоторые значения цены заменены на NaNы – их и надо предсказать.
Также участникам доступен архив M-ФАЙЛОВ (zip, 2.3 Kб), в котором представлены следующие функции
- DeletePoints.m - вспомогательная функция для получения данных,
- DjBenchmark1.m - так можно оформлять свои решения - пример функции прогноза,
- Evaluate.m - функция для оценки решения (будет использована для лидерборда),
- PlotPrice.m - функция для визуализации,
- readme.m - САМАЯ ВАЖНАЯ - примеры работы остальных функций.
Специфика
Естественно, при прогнозе нельзя использовать информацию о будущем. Данные в последние два дня представляют последовательности отрезков известных и неизвестных значений. Каждый блок [известное, неизвестное] «сдвинут по вертикали» на случайное число. Это сделано для того, чтобы нельзя было узнать будущие цены и определить тренд.
Обращаем внимание участников на то, что большую роль играет горизонт прогнозирования (на сколько времени вперёд вы «угадываете» цену). При присуждении «приза жюри» будет учитываться также способность прогнозирования на короткие (около 5 секунд) промежутки времени.
Форма участия
Независимо от того, как было получено решение, оно принимается от одного участника (нельзя присылать командные решения). Слава, призы и баллы по практикуму (для студентов 317 группы ВМК) являются индивидуальными достижениями. Соревнование обязательно для студентов 317 группы ВМК МГУ и открыто для любых других участников.
Формат решения
Каждый участник присылает письмо на ящик inventum-contest@yandex.ru.
Заголовок письма – Имя и Фамилия (настоящие, псевдонимы не принимаются).
Текст письма значения не имеет и не будет просматриваться.
Вложение – mat-файл и zip-архив m-файлов, с помощью которых он был получен.
ПРИМЕР корректного mat-файла (в zip-архиве) (433 Kб)
В mat-файле должны лежать ровно три переменные:
- name – строка с Фамилией и Именем (совпадает с темой письма),
- test9,
- test10.
Последние две матрицы могут быть получены из данных с помощью замены NaNов на прогнозируемые значения. Но для экономии объёма пересылаемого письма можно присылать только целевые вектор-столбцы.
В одном из писем каждого участника (видимо, в последнем) должен также содержаться отчёт о решении задачи (прикладывается в виде отдельного doc или pdf-файла).
Отчёт
Особых требований к отчёту нет. Должна быть чётко прописана логика решения, эксперименты, которые были сделаны, реализованные алгоритмы и основные выводы.
Оценка решения
В каждой точке, в которой нужно было сделать прогноз, измеряется ошибка прогноза. Если тренд угадан (т.е. прогнозируемое и реальное значения больше последней известной цены или одновременно меньше – угадано повышение или понижение цены), то ошибка прогноза в этой точке – модуль отклонения от настоящего значения. Иначе – квадрат отклонения.
Даты
- Соревнование стартует 26 ноября 2012 г.,
- заканчивается — 26 декабря 2012 г. в 23:59.
В течение каждой недели можно слать письма с решениями на ящик. Они обрабатываются и формируется автоматический рейтинг. За неделю можно прислать одно письмо. В качестве итогового ответа засчитывается лучшее присланное решение (переобучение вряд ли произойдёт, поскольку каждый участник имеет максимум 5 попыток). Заполнение турнирной таблицы происходит по пятницам. СМ. ПОПРАВКУ В РАЗДЕЛЕ "ИЗМЕНЕНИЯ"
Среда разработки
Участники должны реализовывать алгоритмы в среде Matlab.
Не запрещается пользоваться сторонними пакетами и любыми алгоритмами для этой среды. Допускается решение и в других средах, однако ответ должен быть в mat-формате (в этом случае участник не может претендовать на приз «первое место по лидерборду», но может получить «приз жюри», если обоснует в отчёте необходимость использования другой среды).
Некоторые ссылки
- Введение в прогнозирование в классических моделях Достаточно полный обзор, но в запутанных эконометрических терминах. Для любителей... Можно, кстати, посмотреть и другие статьи журнала Квантиль
- Здесь кратко описывается полезная терминология. Информации мало, но она простая и понятная.
- Гусеница - интересный подход к прогнозированию, который редко работает... но идеи знать полезно.
- Здесь тоже есть вся необходимая терминология. При желании можно изучить всю диссертацию.
- Подходы призёров одного из соревнований по прогнозированию рядов:
первое место (интересный нейросетевой подход, есть некоторые ссылки + можно найти сайт авторов), второе, третье.
- Полезно смотреть блоги специалистов. Например, этот.
Постановка задачи сильно отличается от нашей. Но полезное (например, в форуме) найти можно.
Также в Интернете полно информации непосредственно по прогнозированию котировок.
Не стоит забывать также о сведении этой задачи к обычной регрессионной
(для неё можно применять какой-нибудь библиотечный метод, например SVM или RF).
Вопросы
могут быть заданы на страничке соревнования на вкладке [Обсуждение] (надо зарегистрироваться на этом ресурсе). Ответы могут даваться другими участниками (каждый подписывает свой ответ). Такая активность также учитывается при розыгрыше «приза жюри».