Соревнование Inventum Data Mining Contest

Материал из MachineLearning.

Перейти к: навигация, поиск

Открытый Data Mining Contest кафедры ММП ВМК МГУ


В последнюю неделю соревнования

организаторы постараются дать больше тестовых данных (для определения победителя). Будет предоставлена возможность нескольких загрузок. Подробности позже...


Содержание

Задача

Прогнозирование временного ряда (котировки одного из финансовых инструментов).

Призы

  • Первое место (по функционалу качества) – 10000 руб.
  • Приз жюри – 10000 руб. (здесь оценивается эффективность алгоритма, краткость и изящество кода, полнота отчёта, умные вопросы и замечания).

Оба приза может получить один человек.

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

Турнирная таблица

Лучший результат

Участник Результат Комментарий
Петров Григорий 47.06 Лидер третьей недели
Рыжков Александр 49.7515 Лидер второй недели
Ульянов Дмитрий 75.0094 Лидер первой недели


Турнирная таблица пересчитывается по пятницам (по данным, присланным до четверга 23:59).
Учитывается последний присланный за неделю результат.
Среди всех учтённых результатов одного участника в конце соревнования выбирается лучший.

Загрузка до 20.12.2012

Участник Результат Комментарий
DjBenchmark4 69.1741

Загрузка до 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 г.,
  • заканчивается – 24 декабря 2012 г. в 12:00 (полдень).

В течение каждой недели можно слать письма с решениями на ящик. Они обрабатываются и формируется автоматический рейтинг. За неделю можно прислать одно письмо. В качестве итогового ответа засчитывается лучшее присланное решение (переобучение вряд ли произойдёт, поскольку каждый участник имеет максимум 5 попыток). Заполнение турнирной таблицы происходит по пятницам.

Среда разработки

Участники должны реализовывать алгоритмы в среде Matlab.
Не запрещается пользоваться сторонними пакетами и любыми алгоритмами для этой среды. Допускается решение и в других средах, однако ответ должен быть в mat-формате (в этом случае участник не может претендовать на приз «первое место по лидерборду», но может получить «приз жюри», если обоснует в отчёте необходимость использования другой среды).

Некоторые ссылки

  • Здесь кратко описывается полезная терминология. Информации мало, но она простая и понятная.
  • Гусеница - интересный подход к прогнозированию, который редко работает... но идеи знать полезно.
  • Здесь тоже есть вся необходимая терминология. При желании можно изучить всю диссертацию.
  • Подходы призёров одного из соревнований по прогнозированию рядов:

первое место (интересный нейросетевой подход, есть некоторые ссылки + можно найти сайт авторов), второе, третье.

  • Полезно смотреть блоги специалистов. Например, этот.

Постановка задачи сильно отличается от нашей. Но полезное (например, в форуме) найти можно.


Также в Интернете полно информации непосредственно по прогнозированию котировок. Не стоит забывать также о сведении этой задачи к обычной регрессионной (для неё можно применять какой-нибудь библиотечный метод, например SVM или RF).

Вопросы

могут быть заданы на страничке соревнования на вкладке [Обсуждение] (надо зарегистрироваться на этом ресурсе). Ответы могут даваться другими участниками (каждый подписывает свой ответ). Такая активность также учитывается при розыгрыше «приза жюри».

Личные инструменты