Статистический пример популярной спортивной истории

Обзор

Одна из самых захватывающих историй спортивной аналитики, ставшая популярной благодаря фильму Moneyball 2011 года, команда Oakland Athletics 2002 года создала историю, выиграв 20 игр подряд с 13 августа по сентябрь 2002 года.

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

ДеПодеста, выпускник экономики Гарвардского университета, поступил в пятерку в 1999 году и быстро начал применять анализ бейсбольной статистики для оценки и покупки игроков (Sabermetrics).

Этот подход оказался в центре внимания после исторического сезона 2002 года, когда Билли Бин приобрел сильно недооцененных игроков, чтобы заменить уход ключевых игроков перед началом сезона. Из-за жестких бюджетных ограничений Oakland Athletics Билли прибег к методам, которые изучает ДеПодеста, чтобы покупать недооцененных игроков для выплаты зарплаты калифорнийской команде.

В этой статье делается попытка воссоздать отрывки из анализа Пола ДеПодеста, чтобы продемонстрировать мощь простейшего метода контролируемого обучения, известного как линейная регрессия.

Отказ от ответственности

Этот анализ очень похож на тематическое исследование в курсе MIT Analytics Edge по edX. Однако я выбрал язык программирования для статьи - Python, а не R, который использовался в вышеупомянутом курсе.

Линейная регрессия

Линейная регрессия - это алгоритм контролируемого обучения в машинном обучении, который основан на статистических принципах. Он в основном используется для моделирования взаимосвязи между независимой переменной, обычно y, с одной или несколькими независимыми переменными, обозначенными X. Если для прогнозирования y используется только одна независимая переменная, она называется простой линейной регрессией или линейной регрессией, тогда как при наличии нескольких независимых переменных она называется множественной линейной регрессией.

Термины β, называемые коэффициентами регрессии, относятся к взаимосвязи между переменной x и зависимой переменной y. Давайте проиллюстрируем это на примере.

Уравнение:

Цена дома в $ = 50000 + 1,35 × (Размер дома в квадратных футах) + ε

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

1,35 - это значение β, которое означает, что на каждый квадратный фут увеличения размера дома происходит увеличение цены дома на 1,35 доллара США Если бы значение β было -1,35, то на каждый 1 кв. фут увеличения размера дома , было бы на 1,35 доллара США уменьшение цены дом .

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

Формула остатков:

ε = yŷ

где y обозначает фактические значения, а ŷ обозначает значение y, прогнозируемое нашей моделью.

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

Набор данных

Набор данных, который я использовал, - это набор данных Moneyball из Kaggle, который был собран с baseball-reference.com.

Изучение данных

Данные читаются в Python с помощью библиотеки pandas.

df = pd.read_csv("baseball.csv")
df.head()

Здесь нам нужно определить несколько терминов:

  • RA означает разрешенные пробеги.
  • RS обозначает забитые пробежки.
  • OBP расшифровывается как On Base Percentage.
  • SLG означает процент пробок.
  • BA - средний уровень.
  • OOBP - это OBP оппонента.
  • OSLG - это SLG оппонента.
  • W означает количество побед в этом сезоне.

Новая переменная RD добавляется как разница между RS и RA.

Кроме того, мы будем вести учет только за год ‹2002, чтобы воспроизвести данные до сезона 2002 года.

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

Обратите внимание, что все четыре характеристики (переменные) приблизительно нормально распределены. График как количества забитых, так и разрешенных прогонов слегка смещен влево. Хвосты графика подсчитанных запусков кажутся толще, чем у графика разрешенных запусков.

По словам ДеПодесты в клипе, для выхода в плей-офф в 2002 году «А» требовалось не менее 99 побед. Попробуем визуализировать это понимание.

# Plotting scatterplot
plt.figure(figsize=(10,8))
plt.scatter(x=moneyball0.W,y = moneyball0.RS,c="red")
plt.scatter(x=moneyball1.W,y = moneyball1.RS,c="blue")
plt.xlabel("Wins")
plt.ylabel("Runs Scored")
plt.axvline(x = 99)

Из приведенного выше графика мы видим, что оценка ДеПодеста в 99 побед имеет смысл, поскольку, по-видимому, только 3 наблюдения (красные) не вышли в плей-офф с ≥ 99 победами.

ДеПодеста также подсчитал, что игрокам «А» необходимо набрать как минимум 814 пробежек и разрешить только 645 пробежек, чтобы пройти в постсезон. Это означало, что разница между набранными и разрешенными пробегами должна была составлять приблизительно 169 (RD). Давайте посмотрим на отношения между RD и Wins.

x = np.array(moneyball.RD)
y = np.array(moneyball.W)
# Deriving slope,intercept values
slope, intercept = np.polyfit(x, y, 1)
abline_values = [slope * i + intercept for i in x]
#Plotting the figure
plt.figure(figsize=(10,8))
plt.scatter(x, y)
plt.plot(x, abline_values, 'b')
plt.title("Slope = %s" % (slope))
plt.xlabel("Run Difference")
plt.ylabel("Wins")
plt.show()

Мы ясно видим, что связь между двумя переменными линейна.

print(np.corrcoef(x,y))
output:
[[ 1.          0.93851498]
 [ 0.93851498  1.        ]]

Кроме того, существует сильная корреляция 0,9385 между RD и количеством побед.

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

Следите за обновлениями части 2.

Источники

  1. Https://www.edx.org/course/analytics-edge-mitx-15-071x-3
  2. Http://www.imdb.com/title/tt1210166/
  3. Https://en.wikipedia.org/wiki/Linear_regression
  4. Http://www.numpy.org/
  5. Https://matplotlib.org/