Можно ли использовать спрогнозированную погоду, чтобы предсказать время победы в гонке?

Введение

Моя гипотеза состоит в том, что погода оказывает большое влияние на время победы в Кентукки Дерби. В этом анализе я буду использовать прогноз погоды для Кентукки Дерби, чтобы предсказать время победы в гонке с помощью машинного обучения (ML). В предыдущих статьях я обсуждал важность использования объяснимого машинного обучения в бизнес-среде, чтобы обеспечить понимание бизнеса и помочь с поддержкой и управлением изменениями. В этом анализе, поскольку я стремлюсь исключительно к точности, я проигнорирую этот совет и перейду сразу к более сложной, но точной машине с градиентным усилением черного ящика (GBM), потому что мы хотим выиграть немного денег!

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

Создание ГБМ

# Load Libraries #
library(dplyr)
library(tidyr)
library(glmnet)
library(caret)
library(rpart)
library(gbm)
library(rsample)
library(plotly)
library(readr)
library(reticulate)

# Read in Data #
data <- read.csv("...KD Data.csv")

# Declare Year Variables #
year <- data[,1]

# Declare numeric x variables #
numeric <- data[,c(2,3,4)]

# Scale numeric x variables
scaled_x <- scale(numeric)
# check that we get mean of 0 and sd of 1
colMeans(scaled_x)
apply(scaled_x, 2, sd)

#Declare y variable #
y <- data[,6]

# One-Hot Encoding #
data$Weather <- as.factor(data$Weather)
xfactors <- model.matrix(data$Year ~ data$Weather)[, -1]

# Bring prepped data all back together #
scaled_df <- as.data.frame(cbind(year,y,scaled_x,xfactors))

# Isolate pre-2023 data #
old_data <- scaled_df[-1,]
new_data <- scaled_df[1,]

# Gradient Boosted Machine #
# Find Max Interaction Depth #
floor(sqrt(NCOL(old_data)))

# Find Optimal n.trees #
tree_mod <- gbm(
  formula = y ~ .,
  distribution = "gaussian",
  data = old_data,
  shrinkage = 0.001, #Small dataset so small shrinkage
  interaction.depth = 3, #Determined above
  n.minobsinnode = 10, #Default
  bag.fraction = 0.99, #Small dataset, so this has to be large
  n.trees = 1000, 
  n.cores = NULL, # will use all cores by default
  verbose = FALSE
)  

# find index for n trees with minimum CV error
best.iter <- gbm.perf(tree_mod, method="OOB", plot.it=TRUE, oobag.curve=TRUE, overlay=TRUE)
print(best.iter)

# Full GBM Model #
GBM <- gbm(y ~ .,
           distribution = "gaussian",
           data = old_data,
           n.trees = 500,  
           interaction.depth = 3, 
           shrinkage = 0.001,
           n.minobsinnode = 10, 
           bag.fraction = 0.99, 
           train.fraction = 1, 
           n.cores = NULL, 
           verbose = FALSE
)

Прогноз погоды на Кентукки Дерби 2023

# 2023 Kentucky Derby Data #
GBM_Prediction <- predict(GBM, new_data, 
                          n.trees = 500,
                          distribution = "gaussian",
                          shrinkage = 0.001,
                          interaction.depth = 3,
                          n.minobsinnode = 10,
                          bag.fraction = 0.99,
                          train.fraction = 1,
                          n.cores = NULL, 
                          verbose = FALSE
)

Обсуждение

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

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

Подпишитесь на DDIntel Здесь.

Посетите наш сайт здесь: https://www.datadriveninvestor.com

Присоединяйтесь к нашей сети здесь: https://datadriveninvestor.com/collaborate