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

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

(Различия между версиями)
Перейти к: навигация, поиск
(Открытый Data Mining Contest кафедры ММП ВМК МГУ)
(Открытый Data Mining Contest кафедры ММП ВМК МГУ)
 
(106 промежуточных версий не показаны.)
Строка 3: Строка 3:
* Спонсор и поставщик данных: '''[http://www.inventum.ru компания Inventum Algorithmic Asset Management]'''
* Спонсор и поставщик данных: '''[http://www.inventum.ru компания Inventum Algorithmic Asset Management]'''
* Организатор: '''[[Участник:Dj|Дьяконов Александр Геннадьевич]]'''
* Организатор: '''[[Участник:Dj|Дьяконов Александр Геннадьевич]]'''
-
* Срок: '''4 недели'''
+
* Срок: '''4 недели''' (до 23:59 26.12.2012)
* Призовой фонд: '''20000 руб.'''
* Призовой фонд: '''20000 руб.'''
* Задача: '''прогнозирование финансовых временных рядов'''
* Задача: '''прогнозирование финансовых временных рядов'''
 +
* Скачать: ''' [[Media:contestinventumdata.zip | данные]], [[Media:mcode.zip | m-файлы]], [[Media:solution.zip | пример ответа]] '''
{{notice|
{{notice|
-
'''Соревнование скоро стартует.'''<br/>
+
Соревнование закончено!
-
26 ноября 2012 года будут доступны данные.
+
 
 +
Поздравляем '''Ульянова Дмитрия''' с победой в основном конкурсе!
 +
 
 +
Поздравляем '''Рыжкова Александра''' - обладателя приза жюри!
 +
 
 +
Процедура награждения прошла 18.01.2013 в офисе компании Inventum Algorithmic Asset Management.
}}
}}
-
{{TOCright}}
+
__TOC__
 +
 
 +
== Итоги соревнования ==
 +
Первое место (по лидерборду) - '''Ульянов Дмитрий'''.
 +
 
 +
Приз жюри (за активность, отчёт и волю к победе) - '''Рыжков Александр'''.
 +
 
 +
Здесь выложены все (в том числе и тестовые) данные соревнования: [http://alexanderdyakonov.narod.ru/aidata.zip СКАЧАТЬ ФАЙЛ]
 +
 
 +
== Изменения (ВАЖНО) ==
 +
Данные для тестирования '''расширены!''' <br/>
 +
Здесь выложен финальный тестовый файл: [[Media:contestinventumdatafinal.zip | СКАЧАТЬ ФАЙЛ]] (по нему будет определён победитель) <br/>
 +
Здесь выложен образец решения: [[Media:solutionfinal.zip | СКАЧАТЬ ФАЙЛ]] <br/>
 +
'''Теперь в файле с данными:''' <br/>
 +
статистика трёх последовательных недель <br/>
 +
''test1'' - понедельник <br/>
 +
''test2'' - вторник <br/>
 +
''test3'' - четверг (информации о среде нет!)<br/>
 +
''test4'' - пятница<br/>
 +
''дальше старый блок данных''<br/>
 +
''price5'' - понедельник<br/>
 +
...<br/>
 +
''test14'' - пятница<br/>
 +
<br/>
 +
Надо делать прогнозы в первые (!) четыре дня и последние два<br/>
 +
(они же входили в прошлую тестовую выборку).<br/>
 +
<br/>
 +
Следующий пересчёт турнирной таблицы состоится<br/>
 +
'''24 декабря''' (решения принимаются до '''23.12.2012 23:59'''),<br/>
 +
а финальный пересчёт - '''27 декабря''' (до '''26.12.2012 23:59''').<br/>
 +
<br/>
 +
21 декабря пересчёта не будет. До 24 декабря можно прислать 2 решения -
 +
одно на старом тесте и одно на финальном (в тему письма добавить слово NEW). <br/>
 +
До 27 декабря также можно прислать два решения (естественно, на финальном тесте).<br/>
 +
Из присланных решений каждого участника на финальном тесте (их потенциально может быть 3)
 +
будет выбрано лучшее.
== Задача ==
== Задача ==
Строка 21: Строка 62:
* '''Первое место''' (по функционалу качества) – 10000 руб.
* '''Первое место''' (по функционалу качества) – 10000 руб.
* '''Приз жюри''' – 10000 руб. (здесь оценивается эффективность алгоритма, краткость и изящество кода, полнота отчёта, умные вопросы и замечания).
* '''Приз жюри''' – 10000 руб. (здесь оценивается эффективность алгоритма, краткость и изящество кода, полнота отчёта, умные вопросы и замечания).
 +
 +
Оба приза может получить один человек.
 +
 +
Также успешные участники соревнования получат возможность войти в состав рабочей группы,
 +
которая будет заниматься анализом данных фондового рынка.
 +
 +
== Турнирная таблица ==
 +
 +
=== Лучшие результаты ===
 +
{|class="standard"
 +
!Участник || Результат || Комментарий
 +
|-
 +
|Ульянов Дмитрий|| 101.276, 116.979||
 +
|-
 +
|Рыжков Александр|| 114.768||
 +
|-
 +
|Новиков Александр|| 117.804||
 +
|-
 +
|}
 +
 +
=== Загрузка до 26.12.2012 - последние загрузки на финальном тесте===
 +
{|class="standard"
 +
!Участник || Результат на финальном тесте || на предварительном тесте || Комментарий
 +
|-
 +
|Ульянов Дмитрий|| 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 - отображены первые загрузки на финальном тесте===
 +
{|class="standard"
 +
!Участник || Результат || Последние 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 ===
 +
{|class="standard"
 +
!Участник || Результат || Комментарий
 +
|-
 +
|Петров Григорий|| 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''' был получен с помощью следующего кода
 +
<source lang="matlab">
 +
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;
 +
</source>
 +
 +
=== Загрузка до 14.12.2012 ===
 +
{|class="standard"
 +
!Участник || Результат || Комментарий
 +
|-
 +
|Петров Григорий|| 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''' был получен с помощью следующего кода
 +
<source lang="matlab">
 +
function yf = DjForecast3(th, yh, tf)
 +
% примитивный прогноз константой
 +
% с попыткой угадать тренд
 +
yf = tf*0 + (2*mean(yh(end-19:end)) - mean(yh(end-39:end-20)));
 +
</source>
 +
 +
=== Загрузка до 07.12.2012 ===
 +
{|class="standard"
 +
!Участник || Результат || Результат по новому ф-лу ||Комментарий
 +
|-
 +
|Рыжков Александр|| 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'' строчек
 +
<source lang="matlab">
 +
% вместо I = (realprice>lastprice)~=(ansprice>lastprice);
 +
I = ((realprice>lastprice)&(ansprice>lastprice))|((realprice<lastprice)&(ansprice<lastprice));
 +
I = ~I;
 +
</source>
 +
 +
'''DjBenchmark2''' был получен с помощью следующего кода
 +
<source lang="matlab">
 +
function yf = DjForecast2(th, yh, tf)
 +
% просто - последняя цена!!! (самый глупый алгоритм)
 +
% НО: ПРАВИЛЬНЕЕ БРАТЬ СРЕДНЕЕ ПО НЕКОТОРОМУ ВРЕМЕННОМУ ИНТЕРВАЛУ!
 +
yf = mean(yh(end-9:end)) + tf*0;
 +
</source>
 +
 +
=== Загрузка до 30.11.2012 ===
 +
{|class="standard"
 +
!Участник || Результат || Комментарий
 +
|-
 +
|Ульянов Дмитрий|| 75.0094|| Преодолён ''DjBenchmark2''
 +
|-
 +
|Новиков Александр|| 109.15|| Преодолён ''DjBenchmark2''
 +
|-
 +
|Харациди Олег|| 123.793||
 +
|-
 +
|Рыжков Александр|| 165.818||
 +
|-
 +
|Подоприхин Дмитрий|| 256.853||
 +
|-
 +
|Арбузова Дарья|| 683.705||
 +
|-
 +
|Петров Григорий|| 1218.36||
 +
|-
 +
|''DjBenchmark1''|| 1589.53 ||
 +
|}
== Данные ==
== Данные ==
 +
 +
'''[[Media:contestinventumdata.zip | СКАЧАТЬ zip-mat-файл с данными]]''' (5.6 Мб)
Полностью природа данных не разглашается. <br/>
Полностью природа данных не разглашается. <br/>
Строка 37: Строка 390:
По последним двум дням (''test9'', ''test10'') представлена аналогичная информация, но некоторые значения цены заменены на ''NaNы'' – их и надо предсказать.
По последним двум дням (''test9'', ''test10'') представлена аналогичная информация, но некоторые значения цены заменены на ''NaNы'' – их и надо предсказать.
-
Также участникам доступен архив m-файлов, в которых прописана процедура генерации тестовой выборки,
+
Также участникам доступен '''[[Media:mcode.zip | архив M-ФАЙЛОВ (zip, 2.3 Kб)]]''', в котором
-
функция оценки решения и функция визуализации ''PlotPrice''
+
представлены следующие функции
-
(анализ кода позволит лучше понять данные).
+
* '''DeletePoints.m''' - вспомогательная функция для получения данных,
 +
* '''DjBenchmark1.m''' - так можно оформлять свои решения - пример функции прогноза,
 +
* '''Evaluate.m''' - функция для оценки решения (будет использована для лидерборда),
 +
* '''PlotPrice.m''' - функция для визуализации,
 +
* '''readme.m''' - САМАЯ ВАЖНАЯ - примеры работы остальных функций.
== Специфика ==
== Специфика ==
Строка 65: Строка 422:
'''Текст письма''' значения не имеет и не будет просматриваться.<br />
'''Текст письма''' значения не имеет и не будет просматриваться.<br />
'''Вложение''' – mat-файл и zip-архив m-файлов, с помощью которых он был получен.<br />
'''Вложение''' – mat-файл и zip-архив m-файлов, с помощью которых он был получен.<br />
 +
 +
'''[[Media:solution.zip | ПРИМЕР корректного mat-файла (в zip-архиве)]]''' (433 Kб)
В mat-файле должны лежать ровно три переменные:
В mat-файле должны лежать ровно три переменные:
Строка 71: Строка 430:
* ''test10''.
* ''test10''.
-
Последние две матрицы могут быть получены из данных с помощью замены NaNов на прогнозируемые значения.
+
Последние две матрицы могут быть получены из данных с помощью замены ''NaN''ов на прогнозируемые значения.
Но для экономии объёма пересылаемого письма можно присылать только целевые вектор-столбцы.
Но для экономии объёма пересылаемого письма можно присылать только целевые вектор-столбцы.
Строка 85: Строка 444:
== Даты ==
== Даты ==
-
* Соревнование стартует '''26 ноября 2012 г.''',
+
* Соревнование стартует '''26 ноября 2012 г.''',
-
* заканчивается – '''24 декабря 2012 г.'''.
+
* заканчивается — '''26 декабря 2012 г.''' в 23:59.
-
В течение каждой недели можно слать письма с решениями на ящик. Они обрабатываются и формируется автоматический рейтинг. За неделю можно прислать одно письмо. В качестве итогового ответа засчитывается лучшее присланное решение (переобучение вряд ли произойдёт, поскольку каждый участник имеет максимум 4 попытки).
+
В течение каждой недели можно слать письма с решениями на ящик. Они обрабатываются и формируется автоматический рейтинг. За неделю можно прислать одно письмо. В качестве итогового ответа засчитывается лучшее присланное решение (переобучение вряд ли произойдёт, поскольку каждый участник имеет максимум 5 попыток).
 +
Заполнение турнирной таблицы происходит по пятницам. '''СМ. ПОПРАВКУ В РАЗДЕЛЕ "ИЗМЕНЕНИЯ"'''
== Среда разработки ==
== Среда разработки ==
-
Участники должны реализовывать алгоритмы в среде Matlab. Не запрещается пользоваться сторонними пакетами и любыми алгоритмами для этой среды. Допускается решение и в других средах, однако ответ должен быть в mat-формате (в этом случае участник не может претендовать на приз «первое место по лидерборду», но может получить «приз жюри», если обоснует в отчёте необходимость использования другой среды).
+
Участники должны реализовывать алгоритмы '''в среде Matlab'''. <br/>
 +
Не запрещается пользоваться сторонними пакетами и любыми алгоритмами для этой среды. Допускается решение и в других средах, однако ответ должен быть в mat-формате (в этом случае участник не может претендовать на приз «первое место по лидерборду», но может получить «приз жюри», если обоснует в отчёте необходимость использования другой среды).
 +
 
 +
== Некоторые ссылки ==
 +
 
 +
* [http://quantile.ru/01/01-Literacy.pdf Введение в прогнозирование в классических моделях] Достаточно полный обзор, но в запутанных эконометрических терминах. Для любителей... Можно, кстати, посмотреть и другие статьи журнала [http://quantile.ru Квантиль]
 +
 
 +
* [http://www.neuroproject.ru/forecasting_tutorial.php Здесь] кратко описывается полезная терминология. Информации мало, но она простая и понятная.
 +
 
 +
* [http://www.gistatgroup.com/gus/index.html Гусеница] - интересный подход к прогнозированию, который редко работает... но идеи знать полезно.
 +
 
 +
* [http://www.mbureau.ru/articles/dissertaciya-model-prognozirovaniya-vremennyh-ryadov-glava-1 Здесь] тоже есть вся необходимая терминология. При желании можно изучить всю диссертацию.
 +
 
 +
* Подходы призёров одного из соревнований по прогнозированию рядов:
 +
[http://www.neural-forecasting-competition.com/downloads/NN3/methods/27-NN3_Herbert_Jaeger_report.pdf первое место]
 +
(интересный нейросетевой подход, есть некоторые ссылки + можно найти сайт авторов),
 +
[http://www.neural-forecasting-competition.com/downloads/NN3/methods/38-NN3_ADEODATO_Paulo-CIn_UFPE-BRAZIL.pdf второе],
 +
[http://www.neural-forecasting-competition.com/downloads/NN3/methods/03-NN3_PedroFlores_paper_ArticuloST.pdf третье].
 +
 
 +
* Полезно смотреть блоги специалистов. Например, [http://robjhyndman.com/ этот].
 +
 
 +
* Посты победителей соревнований: [http://blog.kaggle.com/2010/11/24/how-we-did-it-jeremy-howard-on-winning-the-tourism-forecasting-competitoin/ здесь] и [http://blog.kaggle.com/2010/09/27/how-i-did-it-lee-baker-on-winning-tourism-forecasting-part-one/ здесь].
 +
 
 +
* [http://www.kaggle.com/c/AlgorithmicTradingChallenge Соревнование по финансовому прогнозированию]
 +
Постановка задачи сильно отличается от нашей. Но полезное (например, в форуме) найти можно.
 +
 
 +
 
 +
Также в Интернете полно информации непосредственно по прогнозированию котировок.
 +
Не стоит забывать также о сведении этой задачи к обычной регрессионной
 +
(для неё можно применять какой-нибудь библиотечный метод, например SVM или RF).
== Вопросы ==
== Вопросы ==
-
могут быть заданы на страничке соревнования на вкладке [[http://www.machinelearning.ru/wiki/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5:%D0%A1%D0%BE%D1%80%D0%B5%D0%B2%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_Inventum_Data_Mining_Contest Обсуждение]]. Ответы могут даваться другими участниками (каждый подписывает свой ответ). Такая активность также учитывается при розыгрыше «приза жюри».
+
могут быть заданы на страничке соревнования на вкладке [[http://www.machinelearning.ru/wiki/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5:%D0%A1%D0%BE%D1%80%D0%B5%D0%B2%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_Inventum_Data_Mining_Contest Обсуждение]] (надо зарегистрироваться на этом ресурсе). Ответы могут даваться другими участниками (каждый подписывает свой ответ). Такая активность также учитывается при розыгрыше «приза жюри».
 +
 
 +
[[Категория:Конкурсы]]

Текущая версия

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


Соревнование закончено!

Поздравляем Ульянова Дмитрия с победой в основном конкурсе!

Поздравляем Рыжкова Александра - обладателя приза жюри!

Процедура награждения прошла 18.01.2013 в офисе компании Inventum Algorithmic Asset Management.


Содержание


Итоги соревнования

Первое место (по лидерборду) - Ульянов Дмитрий.

Приз жюри (за активность, отчёт и волю к победе) - Рыжков Александр.

Здесь выложены все (в том числе и тестовые) данные соревнования: СКАЧАТЬ ФАЙЛ

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

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

Вопросы

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

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