Прогнозирование результатов футбола с помощью статистического моделирования

Прогнозирование результатов футбола с помощью статистического моделирования

3.9/5

Этот пост, объединяющий самый популярный в мире вид спорта с любимым всеми дискретным распределением вероятностей, предсказывает футбольные матчи с использованием распределения Пуассона.

Дэвид Шихан

Специалист по данным, интересующийся спортом, политикой и ссылками на Симпсоны

Футбол (или футбол для моих американских читателей) полон клише: «Это игра из двух таймов», «играть по одной игре за раз» и «Ливерпуль не смог выиграть Премьер-лигу». Вы с меньшей вероятностью услышите: «Если рассматривать количество голов, забитых каждой командой, как независимые процессы Пуассона, статистическое моделирование предполагает, что сегодня у домашней команды есть 60% шансов на победу». Но на самом деле это тоже немного клише (это обсуждалось здесь, здесь, здесь, здесь и особенно хорошо здесь). Как мы обнаружим, простая модель Пуассона слишком упрощена. Но это хорошая отправная точка и хороший интуитивно понятный способ узнать о статистическом моделировании. Итак, если вы приехали сюда, чтобы заработать деньги, я слышал, что этот парень зарабатывает 5000 фунтов стерлингов в месяц, не выходя из дома.

Распределение Пуассона

Модель основана на количестве голов, забитых / пропущенных каждой командой. Команды, которые в прошлом забивали больше, имеют больше шансов забить голы в будущем. Мы импортируем все результаты матчей недавно завершившегося сезона Премьер-лиги (2016/17). Существуют различные источники этих данных (kaggle, football-data.co.uk, github, API). Я создал оболочку R для этого API, но на этот раз я пойду по маршруту csv 1win приложение ios скачать.

Домашняя команда В гостях ГлавнаяЦели В гостях 0 1 2 3 4
Бернли Суонси 0 1
Хрустальный дворец Вест Бромвич 0 1
Эвертон Тоттенхэм 1 1
Корпус Лестер 2 1
Манчестер Сити Сандерленд 2 1

Мы импортировали csv как фрейм данных pandas, который содержит различную информацию для каждой из 380 игр АПЛ в сезоне английской премьер-лиги 2016-17 гг. Мы ограничили фрейм данных интересующими нас столбцами (в частности, названиями команд и количеством голов, забитых каждой командой). Я опущу большую часть кода, который создает графики в этом посте. Но не волнуйтесь, вы можете найти этот код на моей странице на github. Наша задача - смоделировать финальный раунд матчей в сезоне, поэтому мы должны удалить последние 10 строк (каждая игровая неделя состоит из 10 матчей).

Вы заметите, что в среднем команда хозяев забивает больше голов, чем команда гостей. Это так называемое «домашнее (поле) преимущество» (обсуждается здесь) и не относится к футболу. Сейчас удобное время для введения распределения Пуассона. Это дискретное распределение вероятностей, которое описывает вероятность количества событий в течение определенного периода времени (например, 90 минут) с известной средней частотой возникновения. Ключевое предположение состоит в том, что количество событий не зависит от времени. В нашем контексте это означает, что голы не становятся более / менее вероятными в зависимости от количества голов, уже забитых в матче. Вместо этого количество голов выражается исключительно как функция средней скорости забитых голов. Если это было неясно, возможно, эта математическая формулировка прояснит:

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

Мы можем использовать эту статистическую модель для оценки вероятности определенных событий.

Вероятность ничьей - это просто сумма событий, в которых две команды забивают одинаковое количество голов.

Обратите внимание, что мы считаем количество голов, забитых каждой командой, независимыми событиями (т.е. P (A n B) = P (A) P (B)). Разница двух распределений Пуассона на самом деле называется распределением Скеллама. Таким образом, мы можем рассчитать вероятность ничьей, введя в это распределение средние значения целей.

Итак, надеюсь, вы увидите, как мы можем адаптировать этот подход к конкретным моделям совпадений. Нам просто нужно знать среднее количество голов, забитых каждой командой, и ввести эти данные в модель Пуассона. Давайте посмотрим на распределение голов, забитых «Челси» и «Сандерленд» (команды, финишировавшие 1-м и последним соответственно).

Построение модели

Теперь вы должны убедиться, что количество голов, забитых каждой командой, можно приблизительно оценить с помощью распределения Пуассона. Из-за относительного размера выборки (каждая команда играет не более 19 домашних / выездных игр) точность этого приближения может значительно различаться (особенно в начале сезона, когда команды сыграли меньше игр). Как и раньше, теперь мы можем рассчитать вероятность различных событий в этом матче «Челси Сандерленд». Но вместо того, чтобы рассматривать каждое совпадение отдельно, мы построим более общую модель регрессии Пуассона (что это такое?).

Результаты обобщенной линейной регрессии модели Деп. Переменная: № Наблюдения: Модель: Остатки Df: Семейство моделей: Модель Df: Функция ссылки: Шкала: Метод: Лог-вероятность: Дата: Отклонение: Время: Пирсон chi2: Нет. Итерации:
цели740
GLM700
Пуассон39
бревно1.0
IRLS-1042,4
Сб, 10 июн 2017776,11
11:17:38659.
8
Coef std err z P>| z | [95,0% конф. Int.] Перехватить команда [T.Bournemouth] команда [T.Burnley] команда [T.Chelsea] команда [T.Crystal Palace] команда [Т. Эвертон] команда [Т.Халл] команда [T.Leicester] команда [T.Liverpool] команда [T.Man City] команда [T.Man United] команда [Т. Мидлсбро] команда [Т. Саутгемптон] команда [Т.Сток] команда [Т.Сандерленд] команда [Т.Сванси] команда [Т.Тоттенхэм] команда [Т. Уотфорд] команда [T.West Brom] команда [T.West Ham] противник [T.Bournemouth] оппонент [Т.Бернли] противник [Т.Челси] противник [T.Crystal Palace] противник [Т. Эвертон] противник [Т.Халл] противник [Т. Лестер] противник [T.Liverpool] противник [T.Man City] противник [T.Man United] противник [Т.Мидлсбро] противник [Т. Саутгемптон] противник [Т.Сток] противник [Т.Сандерленд] противник [Т.Сванси] противник [Т.Тоттенхэм] противник [Т. Уотфорд] противник [T.West Brom] противник [T.West Ham] дом
0,3725 0,198 1,880 0,060 -0,016 0,761
-0,2891 0,179 -1,612 0,107 -0,641 0,062
-0,6458 0.200 -3,230 0,001 -1,038 -0,254
0,0789 0,162 0,488 0,626 -0,238 0,396
-0,3865 0,183 -2,107 0,035 -0,746 -0,027
-0.2008 0,173 -1,161 0,246 -0,540 0,138
-0,7006 0,204 -3,441 0,001 -1,100 -0,302
-0,4204 0,187 -2,249 0,025 -0,787 -0,054
0,0162 0,164 0,099 0,921 -0,306 0,338
0,0117 0,164 0,072 0,943 -0,310 0,334
-0,3572 0,181 -1,971 0,049 -0,713 -0,002
-1,0087 0,225 -4,481 0,000 -1,450 -0,568
-0,5804 0,195 -2,976 0,003 -0,963 -0,198
-0,6082 0,197 -3,094 0,002 -0,994 -0,223
-0,9619 0,222 -4,329 0,000 -1,397 -0,526
-0,5136 0,192 -2,673 0,008 -0,890 -0,137
0,0532 0,162 0,328 0,743 -0,265 0,371
-0,5969 0,197 -3,035 0,002 -0,982 -0,211
-0,5567 0,194 -2,876 0,004 -0,936 -0,177
-0,4802 0,189 -2,535 0,011 -0,851 -0,109
0,4109 0,196 2,092 0,036 0,026 0,796
0,1657 0,206 0,806 0,420 -0,237 0,569
-0,3036 0,234 -1,298 0,194 -0,762 0,155
0,3287 0.200 1,647 0,100 -0,062 0,720
-0,0442 0,218 -0,202 0,840 -0,472 0,384
0,4979 0,193 2,585 0,010 0,120 0,875
0,3369 0,199 1,694 0,090 -0,053 0,727
-0,0374 0,217 -0,172 0,863 -0,463 0,389
-0,0993 0,222 -0,448 0,654 -0,534 0,335
-0,4220 0,241 -1,754 0,079 -0,894 0,050
0,1196 0,208 0,574 0,566 -0,289 0,528
0,0458 0,211 0,217 0,828 -0,369 0,460
0,2266 0,203 1,115 0,265 -0,172 0,625
0,3707 0,198 1,876 0,061 -0,017 0,758
0,4336 0,195 2,227 0,026 0,052 0,815
-0,5431 0,252 -2,156 0,031 -1,037 -0,049
0,3533 0,198 1,782 0,075 -0,035 0,742
0,0970 0,209 0,463 0,643 -0,313 0,507
0,3485 0,198 1,758 0,079 -0,040 0,737
0,2969 0,063 4,702 0,000 0,173 0,421

Если вам интересна часть smf.glm (.), Вы можете найти дополнительную информацию здесь (редактировать: в более ранних версиях этого поста ошибочно использовалось обобщенное оценочное уравнение (GEE) - в чем разница?). Меня больше интересуют значения, представленные в столбце coef сводной таблицы модели, которые аналогичны наклонам в линейной регрессии. Подобно логистической регрессии, мы берем показатель степени значений параметров. Положительное значение означает больше целей (), а значения, близкие к нулю, представляют более нейтральные эффекты (). Внизу таблицы вы можете заметить, что коэффициент дома равен 0,2969. Это отражает тот факт, что домашние команды обычно забивают больше голов, чем гости (в частности, = в 1,35 раза более вероятно). Но не все команды созданы равными. У Челси коэффициент 0,0789,в то время как соответствующее значение для Сандерленда составляет -0,9619 (как бы говоря, «Челси» (Сандерленд) набирает больше (намного хуже!), чем средний показатель). Наконец, оппонент * оценивает наказание / вознаграждение команды в зависимости от качества оппонента. Это снижает обороноспособность каждой команды («Челси»: -0,3036; «Сандерленд»: 0,3707). Другими словами, у вас меньше шансов забить «Челси». Надеюсь, все это имеет как статистический, так и интуитивный смысл.

Начнем делать прогнозы на ближайшие матчи. Мы просто передаем наши команды в poisson_model, и он возвращает ожидаемое среднее количество голов для этой команды (нам нужно запустить его дважды - мы рассчитываем ожидаемое среднее количество голов для каждой команды отдельно). Итак, давайте посмотрим, сколько голов мы ожидаем забить «Челси» и «Сандерленд».

Популярные слоты