Моделирование Результатов в Гольфе с Помощью Цепей Маркова
Мотивация
С тех пор, как мне исполнилось девять лет, в моей жизни было лишь два занятия, которые меня по-настоящему интересовали. К ним относились мой любимый спорт и учёба. Я совмещала игру в гольф за сборную команду России с учёбой на отличные оценки в инженерном классе Московской школы. По окончанию школы, моим следующим шагом было поступление в университет США, где программа student-athlete очень сильно развита. Тебе дают возможность получать высшее образование, а также быть частью спортивной команды, которая соревнуется с командами других университетов в течении всего учебного года. И вот, прошло уже три с половиной года с тех пор, как я стала частью этой команды, а значит, остался один семестр до того, как я надену мантию. И по случаю завершения моей карьеры, в моей голове возник вопрос, а есть ли что-то, что связывает студенческий гольф и знания, которые я приобрела.
Введение
В студенческом гольфе, как и в любом другом спортивном туре, есть разные виды турниров, а конкретнее: Regular Season Tournaments — где твоя команда соревнуется с 10–20 другими, в зависимости от бюджета университета, местоположения университета и уровня игроков, таких турниров каждая команда играет четыре осенью, и шесть весной; Conference Championship — где твоя команда соревнуется с уже определенными командами, которые исторически входят в состав вашей конференции, проходит в апреле; и Post Season Tournaments, куда проходят только команды выигрывавшие Conference Championship, а также команды, входящие в топ-50 рейтинга по результатам Regular Season (всего в дивизионе за который я играю около 250 команд), проходит в два этапа, Regionals и Nationals, и оба проходят в мае.
Несложно догадаться, что основное внимание каждой команды лежит на Conference Championship, все силы и подготовка направлены туда. И вот, готовясь к моей последней Конференции, я задала себе вопрос, а можно ли математически предсказать вероятность победы моей команды? Об этом я и расскажу, но начнём с теории о статистическом методе, который я выбрала для оценки вероятности выигрыша. А именно, с Марковских Цепей.
Теория Метода
Цепь Маркова — последовательность случайных событий с конечным или счетным числом исходов, где вероятность наступления каждого события зависит только от состояния, достигнутого в предыдущем событии. Характеризуется тем свойством, что, говоря нестрого, при текущем настоящем состоянии системы, её будущее состояние не зависит от прошлого. Названа в честь А.А. Маркова, который впервые ввёл это понятие в работе 1906 года. [1]
Создаётся переходная матрица на n-шаге
А вектор
является начальным распределением цепи Маркова.
Матрица является стохастической, так как сумма вероятностей в каждом ряду равна единице.
Пример
Давайте поработаем с примером (все цифры выдуманные). И так, у нас есть три вида погоды, которые могут наступить завтра: дождь, солнце и ветер. Если сегодня был дождь, то вероятность того, что завтра снова будет дождь 60%, вероятность того, что будет ветер 30%, и вероятность того, что будет солнце 10%. Если сегодня было солнце, то вероятность того, что завтра будет солнце 70%, вероятность того, что будет ветер 10%, и вероятность того, что будет дождь 20%. Ну, а если сегодня был ветер, то вероятность того, что завтра сохраниться ветреная погода будет равна 60%, вероятность того, что будет солнце 15% и вероятность дождя 25%. Там самым, создается переходная матрица, где n-шаг это один день, а состояния квадратной матрицы — дождь, солнце, ветер.
Дождь | Солнце | Ветер | |
Дождь | 0,6 | 0,1 | 0,3 |
Солнце | 0,2 | 0,7 | 0,1 |
Ветер | 0,25 | 0,15 | 0,6 |
Тем самым, если сегодня 14 декабря, и сегодня идет дождь, то вероятность солнца 15 декабря будет равна 10%. Ну, а если мы хотим рассчитать вероятность солнца 16 декабря, то тогда мы возводим матрицу во вторую степень, так как теперь, n-шаг это два дня, вместо одного, а результаты 14 декабря никак не влияют на погоду 16-го, по Марковским цепям.
Гольф Команды
Ну вот, когда мы разобрались с теорией, пора вернуться обратно к гольфу. И так, напомню, что цель этой статьи, рассчитать вероятность победы каждой команды, которая будет соревноваться в Conference Championship вместе со мной. Команд всего девять:
Калифорнийский Государственный Университет, Лонг Бич (Long Beach State University = LBSU) *моя команда
Калифорнийский Государственный Университет, Фуллертон (California State University Fullerton = CSUF)
Калифорнийский Государственный Университет, Нортридж (California State University Northridge = CSUN)
Калифорнийский Государственный Университет, Бэйкерсфилд (California State University Bakersfield = CSUB)
Университет Калифорнии, Ирвайн (University of California Irvine = UCI)
Университет Калифорнии, Риверсайд (University of California Riverside = UCR)
Университет Калифорнии, Дэвис (University of California Davis = UCD)
Калифорнийский Политехнический Университет, Сан Луис Обиспо (California Polytechnic University San Luis Obispo = Cal Poly SLO)
Университет Гавайев (University of Hawaii = UHawaii)
И так, как проводятся соревнования по гольфу в целом. Каждая команда состоит из пяти человек. Каждый турнир состоит из трех раундов по 18 лунок. Результат каждого раунда считается как сумма четырех из пяти лучших (наименьших) результатов.
Для анализа, я собрала результаты каждой из девяти команды на всех турнирах, проведенных осенью 2024 года. Все команды сыграли по четыре разных турнира. Поскольку команды играли в неравных условиях, а в гольфе, на результат сильно оказывают влияния такие факторы как погода, сложность поля и уровень соперников, я также учла корректировку — очки рейтинга, которые предоставлены на официальном сайте подсчета счетов в университетском спорте [2].
С помощью таблицы в Microsoft Excel, я смогла посчитать счет каждой команды в каждом раунде, а также средний счет (с учетом очков рейтинга) за осенний сезон.
Использование Метода
Для чего же нужны были эти цифры? С помощью анализа счетов за каждый раунд, а также нескольких предположений, у меня получилось составить переходную матрицу, которая показывает вероятность каждой команды упасть или подняться в рейтинге конференции, где n-шаг равен одному раунду, а состояния матрицы это рейтинг команды от одного до девяти. Предположения были таковыми:
Вероятность того, что команда сохранит свою позицию в рейтинге больше, чем вероятность того, что команда её поменяет, так как один раунд это очень короткий промежуток времени
Упасть в рейтинге легче, чем подняться, так как в гольфе нельзя сыграть лучше определенного счета, но можно сыграть неограниченно плохо
Так как разница в счетах между командами занимающими шестое и седьмое место почти всегда была очень значительна, команды, которые по результатам осеннего сезона заняли седьмое и ниже места, не имеют шансов стать чемпионами конференции
Средний счет (с учетом очков рейтинга) за осенний сезон помог создать начальное распределение цепи:
UCD 250,51
LBSU 262,3
CSUF 266,92
UCI 267,05
Cal Poly Slo 272,46
UCR 274,78
UHawaii 289,82
CSUN 291,48
CSUB 294,08
И так, имея всю нужную информацию, можно приступать к написанию кода для выведения матрицы и последующей работы с ней.
teams <- c("UC Davis", "Long Beach State", "Cal State Fullerton",
"UC Irvine", "Cal Poly Slo", "UC Riverside",
"U of Hawaii", "Cal State Northridge", "Cal State Bakersfield")
scores <- c(250.51, 262.3, 266.92, 267.05, 272.46, 274.78, 289.82, 291.48, 294.08)
n <- length(scores)
P <- matrix(0, nrow = n, ncol = n)
for (i in 1:n) {
for (j in 1:n) {
if (i == j) {
P[i, j] <- 0.7
} else if (abs(i - j) == 1) {
if (j > i) {
P[i, j] <- -0.09
} else {
P[i, j] <- 0.14
}
} else if (abs(i - j) == 2) {
if (j > i) {
P[i, j] <- -0.04
} else {
P[i, j] <- 0.07
}
} else if (abs(i - j) == 3) {
if (j > i) {
P[i, j] <- -0.02
} else {
P[i, j] <- 0.06
}
} else {
P[i, j] <- 0.01 / abs(i - j)
}
}
if (i <= 6) {
P[i, 7:n] <- 0
} else {
P[i, 1:6] <- 0
}
P[i, ] <- P[i, ] / sum(P[i, ])
}
print(round(P, 3))
результат прогонки кода
Далее, используя полученную матрицу, я смоделировала движение между рейтингами для каждой команды в течении следующих 18 раундов — именно столько раундов осталось до старта Конференции -, а также, посчитала средний рейтинг для каждой команды. Здесь я предоставлю код, написанный для моей команды, но для моделирования остальных, приходилось менять лишь строку «current rank» и название+цвет графика.
tm <- matrix(c(
0.820, 0.105, 0.047, 0.023, 0.003, 0.002, 0.000, 0.000, 0.000,
0.141, 0.705, 0.091, 0.040, 0.020, 0.003, 0.000, 0.000, 0.000,
0.066, 0.132, 0.660, 0.085, 0.038, 0.019, 0.000, 0.000, 0.000,
0.055, 0.064, 0.127, 0.636, 0.082, 0.036, 0.000, 0.000, 0.000,
0.002, 0.056, 0.066, 0.032, 0.659, 0.085, 0.000, 0.000, 0.000,
0.000, 0.000, 0.000, 0.144, 0.717, 0.000, 0.000, 0.000, 0.000,
0.000, 0.000, 0.000, 0.000, 0.844, 0.108, 0.048, 0.000, 0.000,
0.000, 0.000, 0.000, 0.000, 0.000, 0.151, 0.752, 0.097, 0.000,
0.000, 0.000, 0.000, 0.000, 0.000, 0.077, 0.154, 0.769
), byrow = TRUE, nrow = 9)
current_rank <- 2
trajectory <- numeric(18)
trajectory[1] <- current_rank
for (round in 2:18) {
current_rank <- sample(1:9, size = 1, prob = tm[current_rank, ])
trajectory[round] <- current_rank
}
average_rank <- mean(trajectory)
plot(1:18, trajectory, type = "o", col = "gold", pch = 16,
xlab = "Round", ylab = "Rank", main = "Trajectory of Long Beach State Over 18 Rounds",
ylim = c(9, 1), yaxt = "n")
axis(2, at = 1:9, labels = 1:9)
grid()
segments(x0 = 0, y0 = average_rank, x1 = 18, y1 = average_rank, col = "black", lty = 2)
text(x = 10, y = 5, labels = paste("Avg Rank:", round(average_rank, 2)), col = "black", pos = 4)
результат прогонки кода
Ну и для сравнения, хочу показать результат прогонки кода для трех других команд — одной из высшего звена, одной из среднего и одной из низшего.
команда высшего звена
команда среднего звена
команда низшего звена
В итоге, средний рейтинг каждой команды получился таким:
UCD 2,44
LBSU 2,94
CSUF 3,28
UCI 4,06
Cal Poly Slo 4,28
UCR 5,61
UHawaii 8,22
CSUB 8,28
CSUN 8,33
С помощью алгебры, я перевела средний рейтинг команды в вероятность выигрыша и получила следующие результаты
total_probability <- 1 / 2.44 + 1 / 2.94 + 1 / 3.28 + 1 / 4.06 + 1 / 4.28 + 1 / 5.61
print(UC_Davis <- (1 / 2.44) / total_probability)
print(Long_Beach_State <- (1 / 2.94) / total_probability)
print(Cal_State_Fullerton <- (1 / 3.28) / total_probability)
print(UC_Irvine <- (1 / 4.06) / total_probability)
print(Cal_Poly_Slo <- (1 / 4.28) / total_probability)
print(UC_Riverside <- (1 / 5.61) / total_probability)
print(U_Hawaii <- 0)
print(Cal_State_Bakersfield <- 0)
print(Cal_State_Northridge <- 0)
UCD 23,9%
LBSU 19,9%
CSUF 17,8%
UCI 14,4%
Cal Poly Slo 13,6%
UCR 10.4%
UHawaii 0%
CSUB 0%
CSUN 0%
Заключение
И хотя прогнозируемым победителем оказался Университет Калифорнии, Дэвис, я и мои товарищи по команде сделаем все возможное, чтобы доказать, что статистика неверена, и стать чемпионами второй раз подряд!
Список Литературы
[1] https://ru.wikipedia.org/wiki/Цепь_Маркова
[2] https://scoreboard.clippd.com/rankings