Это четвертая статья из серии, посвященной науке о данных и бейсболу. Вы можете найти части I , II и III по ссылкам ниже.

Часть I: Расшифровка следующей подачи: использование данных для предсказания хода питчера в бейсболе

Часть II: Победа с помощью данных: оптимизация игровой стратегии в бейсболе

Часть III: Предотвращение травм на основе данных в бейсболе: максимальное увеличение производительности и продолжительности жизни игрока

— — — — —

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

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

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

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

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

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

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

Понимание важности данных в бейсбольном драфте

Успех в Высшей лиге бейсбола зависит от способности эффективно вести разведку и драфтить. Ставки высоки; правильное решение потенциально может означать приобретение следующего Шохея Отани или Хулио Родригеса. Этот процесс долгое время зависел от мудрости опытных скаутов, которые проводят бесчисленные часы, наблюдая за игроками, тщательно записывая их технику, оценивая их физические данные и делая субъективные суждения об их потенциале.

Тем не менее, спорт сейчас находится в процессе смены парадигмы с введением науки о данных. Мы можем дополнить традиционные методы разведки сведениями, полученными в результате расширенной аналитики, что позволит сделать процесс принятия решений более объективным и обоснованным. Это слияние методологий старой и новой школы помогает по-новому взглянуть на то, как бейсбольные команды строят свои команды.

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

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

В Python это может выглядеть примерно так:

from sklearn.ensemble import RandomForestRegressor

# Define the model
model = RandomForestRegressor(n_estimators=100, random_state=42)

# Train the model
model.fit(X_train, y_train)

# Make a prediction on a new prospect
prospect_data = np.array([17, 6.2, 190, 95, 0])  # age, height, weight, fastball_velocity, past_injuries
predicted_future_performance = model.predict(prospect_data.reshape(1, -1))

В этом гипотетическом сценарии X_train и y_train — это данные о наших тренировках (с такими столбцами, как возраст, рост, вес, скорость фастбола и прошлые травмы), а prospect_data — это данные нашего нового потенциального клиента. Модель генерирует прогноз будущей эффективности для этого потенциального клиента, помогая в разработке решения.

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

Сбор урожая: искусство сбора соответствующих данных

Сбор правильных данных является основой для получения следующей звезды франшизы. Задача заключается в том, чтобы определить, какие фрагменты данных будут наиболее точно информировать ваши модели и приведут к наиболее надежным прогнозам.

На поверхностном уровне каждый болельщик знаком со стандартным набором бейсбольной статистики — средними показателями отбивания, ИКР, ЭРА для питчеров и так далее. Эти фундаментальные показатели составляют основу любых усилий по сбору данных и служат отправной точкой для нашего анализа.

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

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

# Import necessary libraries
import pandas as pd
import matplotlib.pyplot as plt

# Load data
data = pd.read_csv('baseball_data.csv')

# Let's say we are interested in these specific metrics
interested_metrics = ['launch_angle', 'exit_velocity', 'spin_rate', 'height', 'weight', 'age']

# Analyzing the data
print(data[interested_metrics].describe())

# Visualizing the data 
# For instance, we might be interested in the relationship between 'exit_velocity' and 'launch_angle'
plt.scatter(data['exit_velocity'], data['launch_angle'])
plt.xlabel('Exit Velocity')
plt.ylabel('Launch Angle')
plt.title('Relationship between Exit Velocity and Launch Angle')
plt.show()

Этот приведенный выше код сначала загружает набор данных с помощью pandas. Затем он фокусируется на определенных показателях, которые нас интересуют — в данном случае «угол запуска», «скорость выхода», «скорость вращения», «рост», «вес» и «возраст». Функция describe() предоставляет статистическую сводку этих метрик, давая немедленное представление об их распределении.

Затем мы создаем точечную диаграмму, используя matplotlib, чтобы визуализировать взаимосвязь между «exit_velocity» и «launch_angle». Такие визуализации могут помочь нам лучше понять закономерности и взаимосвязи в наших данных, стимулируя наш анализ и выбор функций для моделирования машинного обучения.

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

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

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

Подготовка к этапу: предварительная обработка данных для моделей машинного обучения

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

Очистка данных и обработка пропущенных значений

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

# Import pandas library
import pandas as pd

# Load data
data = pd.read_csv('baseball_data.csv')

# Identify missing values
print(data.isnull().sum())

# Fill missing values with median
for column in data.columns:
    if data[column].isnull().any():
        data[column].fillna(data[column].median(), inplace=True)

Нормализация числовых данных

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

# Import the preprocessing module from sklearn
from sklearn import preprocessing

# Define the scaler 
scaler = preprocessing.MinMaxScaler()

# Apply the scaler to the numerical columns
data[['height', 'weight', 'age']] = scaler.fit_transform(data[['height', 'weight', 'age']])

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

# Encode categorical data
data = pd.get_dummies(data, columns=['batting_side', 'pitching_arm'])

Разработка функций

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

# Create a new feature 'BMI' from 'height' and 'weight'
data['BMI'] = data['weight'] / (data['height'] ** 2)

# Create a new feature 'experience' from 'age' and 'professional_years'
data['experience'] = data['professional_years'] / data['age']

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

Подготовка: выбор и обучение моделей машинного обучения

Когда наши данные предварительно обработаны и готовы к работе, пришло время погрузиться в суть машинного обучения — выбор и обучение моделей. Выбор модели сильно зависит от решаемой задачи и характера данных. Будь то регрессионные модели для прогнозирования среднего результата игрока в будущем, деревья решений для классификации потенциальных клиентов по разным уровням или даже нейронные сети для сложных нелинейных паттернов, у каждого есть свое место в наборе инструментов специалиста по обработке и анализу данных.

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

Давайте рассмотрим базовый пример этого процесса, используя библиотеку Python scikit-learn.

# Import necessary libraries
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error

# Define features and target
features = data.drop('future_batting_average', axis=1)
target = data['future_batting_average']

# Split the data into training and test sets (80% used for training, 20% used for validation)
X_train, X_test, y_train, y_test = train_test_split(features, target, test_size=0.2, random_state=42)

# Create a Linear Regression model
model = LinearRegression()

# Train the model
model.fit(X_train, y_train)

# Use the trained model to make predictions on the test set
predictions = model.predict(X_test)

# Evaluate the model
mse = mean_squared_error(y_test, predictions)
print(f'The Mean Squared Error of the model is: {mse}')

В этом примере мы сначала определяем наши функции и целевую переменную «future_batting_average». Затем мы разделяем данные на обучающий набор (80% данных) и тестовый набор (оставшиеся 20%).

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

Это упрощенная иллюстрация, и фактическое обучение модели может быть более сложным. Мы могли бы использовать разные модели, настраивать их параметры или даже объединять их в ансамбль. Кроме того, мы могли бы использовать перекрестную проверку вместо простого разделения обучения и тестирования, и мы могли бы исследовать более сложные метрики оценки в зависимости от характера проблемы. Тем не менее, этот пример дает общее представление о процессе.

Расшифровка игры: важность функции и оценка перспективы

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

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

Давайте посмотрим, как мы можем извлечь важность функций из древовидной модели, такой как регрессор случайного леса:

# Import necessary libraries
from sklearn.ensemble import RandomForestRegressor

# Create a Random Forest Regressor model
rf_model = RandomForestRegressor(n_estimators=100, random_state=42)

# Train the model
rf_model.fit(X_train, y_train)

# Get feature importances
importances = rf_model.feature_importances_

# Sort features by their importance
features_importance = sorted(zip(importances, X_train.columns), reverse=True)

# Print feature importance
for rank, (importance, feature) in enumerate(features_importance, start=1):
    print(f"{rank}. {feature}: {importance}")

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

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

# Let's assume 'prospect_data' is a DataFrame containing the data for a potential prospect
prospect_data = pd.read_csv('prospect_data.csv')

# Preprocess prospect data as done with the training data
# ...

# Predict the prospect's future performance
prospect_performance = rf_model.predict(prospect_data)

print(f"The predicted future performance of the prospect is: {prospect_performance}")

В этом последнем фрагменте кода мы загружаем данные для потенциального клиента и предварительно обрабатываем их так же, как наши обучающие данные. Затем мы используем нашу обученную модель Random Forest, чтобы предсказать будущую производительность потенциального клиента.

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

В землянке: искусство непрерывного улучшения модели

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

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

В Python процесс обновления модели новыми данными может быть простым. Давайте проиллюстрируем это с помощью нашей модели RandomForestRegressor:

# Import new data
new_data = pd.read_csv('new_baseball_data.csv')

# Preprocess new data as done with the initial training data
# ...

# Split new data into features and target
new_features = new_data.drop('future_batting_average', axis=1)
new_target = new_data['future_batting_average']

# Retrain the model with new data
rf_model.fit(new_features, new_target)

# Validate the updated model with the latest test set
new_predictions = rf_model.predict(X_test)
new_mse = mean_squared_error(y_test, new_predictions)
print(f'The Mean Squared Error of the updated model is: {new_mse}')

В этом примере мы загружаем новые данные и предварительно обрабатываем их так же, как и исходные данные. Затем мы переобучаем нашу модель случайного леса на этих новых данных, используя метод fit. Наконец, мы оцениваем производительность обновленной модели на нашем тестовом наборе.

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

Окончательный результат: Большой шлем в принятии решений на основе данных

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

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

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

Здесь может помочь наш подход, основанный на данных. Мы собрали исчерпывающие данные об обоих игроках, от их стандартной статистики до детальных показателей, таких как скорость вращения Джейка или скорость замаха Алекса. Мы обработали эти данные и передали их в нашу модель машинного обучения.

# Import Jake's and Alex's data
prospects_data = pd.read_csv('prospects_data.csv')

# Preprocess their data as we did with our training data
# ...

# Use our model to predict their future performance
prospects_performance = rf_model.predict(prospects_data)

print(f"Predicted future performance: {prospects_performance}")

Наша модель проецирует будущее поведение Джейка и Алекса. Эти прогнозы в сочетании с оценкой скаутами их навыков и психологической стойкости формируют всестороннюю оценку двух игроков.

Теперь у вас, как у GM, есть дополнительный мощный инструмент в вашем арсенале для принятия решений. Если предполагаемая производительность Джейка лучше соответствует потребностям команды, выбор очевиден. Если прогноз Алекса на базе и мастерство попаданий лучше соответствуют стратегии команды, то он — очевидный выбор.

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

# Import new performance data
new_data = pd.read_csv('new_data.csv')

# Preprocess new data in the same way we did with our initial dataset
# ...

# Retrain the model with the new data
rf_model.fit(new_features, new_target)

# Validate the updated model with the latest test set
new_predictions = rf_model.predict(X_test)
new_mse = mean_squared_error(y_test, new_predictions)
print(f'The Mean Squared Error of the updated model is: {new_mse}')

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

Ландшафт бейсбольного драфта в эпоху науки о данных и машинного обучения превратился из субъективного искусства в проницательную науку, основанную на фактах. Чертежная доска теперь становится динамичным полем битвы, управляемым данными. Объединяя традиционную мудрость скаутов с методами машинного обучения, мы не просто меняем правила игры; мы революционизируем его, по одной точке данных за раз. Это дивный новый мир бейсбола, и мы прямо на домашней тарелке.

**Эту серию было очень весело писать. Если у вас есть комментарии или предложения, присылайте их мне по адресу [email protected].

Далее: наука о данных + футбол (футбол).