Эвристическая модель построения прогнозов
В данной статье я объясню как работает текущий алгоритм построения прогнозов. И пусть он пока является весьма примитивным и выявляет лишь простейшие закономерности, но развивая и дополняя эту простейшую модель (этакая каша из топора) на выходе можно получить вполне себе серьезный результат.
Текущий алгоритм построен по принципу эвристической модели (современные методы интеллектуального анализа данных пока не затрагиваем):
1) Построение мат модели расчета результатов матча на основе некоторых параметров, которые подбираются человеком исходя из его знаний предметной области
2) Подбор значений параметров для каждой из команд на основе имеющихся результатов таким образом, чтобы среднее отклонение наших прогнозов от имеющихся результатов было минимальным
3) Расчет прогноза на основе полученных данных
Перейдем от теории к практике. Для первого приближения нашей модели к желаемой, я выбрал самую простую схему:
Пусть каждая команда характеризуется двумя параметрами (что, конечно же, является слишком сильным упрощением):
1) Уровень атаки
2) Уровень защиты
Рассчитывать результат матча между двумя командами будем по следующей формуле:
АD - уровень защиты команды А. BА - уровень атаки команды B.
Если AD > BA, то в очной встрече команда B не забъет мячей в ворота команды A. В противном случае, команда B забъет BA - AD мячей.
Далее нам нужно подобрать параметры атаки и защиты для каждой команды. Как же это сделать? Введем понятие штрафа для прогноза как разницу между прогнозируемым количеством забитых мячей и тем, которое получилось на самом деле. Например, на прошлый тур система выдала прогноз Мордовия - Зенит 0:2, но итоговый счет матча 1:0. Штраф за эту игру будет равен: |0 - 1| + |2 - 0| = 3. Теперь просуммируем все штрафы для всех уже проведенных матчей в этом сезоне. Таким образом мы получим функцию от 2 * n переменных (где n - количество команд), которую нам нужно минимизировать. Это можно сделать любым методом прямой оптимизации. Я использовал метод Хука-Дживса.
Результаты расчета параметров:
Зенит, атака=2, защита=1
Краснодар, атака=2, защита=1
Динамо, атака=2, защита=-1
ЦСКА, атака=1, защита=1
Спартак, атака=1, защита=0
Терек, атака=1, защита=0
Кубань, атака=1, защита=0
Локомотив, атака=1, защита=0
Рубин, атака=1, защита=0
Мордовия, атака=0, защита=0
Уфа, атака=-2, защита=0
Амкар, атака=0, защита=0
Урал, атака=1, защита=0
Торпедо, атака=1, защита=-1
Ростов, атака=1, защита=-1
Арсенал, атака=0, защита=0
Ну и прогноз на ближайший тур РФПЛ:
Арсенал - Уфа 0:0
ЦСКА - Амкар 1:0
Рубин - Зенит 1:1
Локомотив - Урал 2:1
Терек - Торпедо 2:1
Кубань - Краснодар 0:2
Мордовия - Динамо 1:2
Спартак - Ростов 2:1
В следующей статье будет производится разбор проблемных мест текущего алгоритма, а так же способов его улучшения.