Можно ли использовать спрогнозированную погоду, чтобы предсказать время победы в гонке?
Введение
Моя гипотеза состоит в том, что погода оказывает большое влияние на время победы в Кентукки Дерби. В этом анализе я буду использовать прогноз погоды для Кентукки Дерби, чтобы предсказать время победы в гонке с помощью машинного обучения (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