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

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

(Различия между версиями)
Перейти к: навигация, поиск
(Загрузка до 26.12.2012)
(Загрузка до 26.12.2012)
Строка 92: Строка 92:
|-
|-
|Рыжков Александр|| 166.015|| 94.3988||
|Рыжков Александр|| 166.015|| 94.3988||
 +
|-
 +
|Новиков Александр|| 171.5286 || см. пред. загрузку|| пересчитано вручную
|-
|-
|Ульянов Дмитрий|| 173.141|| 192.481||
|Ульянов Дмитрий|| 173.141|| 192.481||
Строка 104: Строка 106:
|-
|-
|''DjBenchmark1''|| 1356.01||
|''DjBenchmark1''|| 1356.01||
-
|-
 
-
|Новиков Александр|| 171.5286 || см. пред. загрузку|| пересчитано вручную
 
|-
|-
|Харациди Олег|| NaN|| 99.9973||
|Харациди Олег|| NaN|| 99.9973||

Версия 13:33, 24 декабря 2012

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


19 декабря опубликованы изменения - см. ниже


Содержание


Изменения (ВАЖНО)

Данные для тестирования расширены!
Здесь выложен финальный тестовый файл: СКАЧАТЬ ФАЙЛ (по нему будет определён победитель)
Здесь выложен образец решения: СКАЧАТЬ ФАЙЛ
Теперь в файле с данными:
статистика трёх последовательных недель
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 руб. (здесь оценивается эффективность алгоритма, краткость и изящество кода, полнота отчёта, умные вопросы и замечания).

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

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

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

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

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

Загрузка до 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).

Вопросы

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