Está en la página 1de 111

MÁSTER EN BIG DATA & ANALYTICS

TRABAJO DE FIN DE MÁSTER

Data Mining & Machine Learning en la NBA

AUTORES:
Álvaro Dorado Verdejo [alvarodv96@gmail.com]
David Borque Martínez [davborque@gmail.com]
Juan Antonio Clavijo González [juan.ant.clavijoglez@gmail.com]
Lijun Lin [linlijun3e@gmail.com]

(Grupo A nº 8)

Tutor:
Prof. D. Alberto Martín Fernández [alberto.martin@bssocialmedia.com]

Madrid, Junio 2020


“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

MÁSTER EN BIG DATA & ANALYTICS


TRABAJO DE FIN DE MÁSTER

Data Mining & Machine Learning en la NBA

AUTORES:
Álvaro Dorado Verdejo [alvarodv96@gmail.com]
David Borque Martínez [davborque@gmail.com]
Juan Antonio Clavijo González [juan.ant.clavijoglez@gmail.com]
Lijun Lin [linlijun3e@gmail.com]

(Grupo A nº 8)

Tutor:
Prof. D. Alberto Martín Fernández [alberto.martin@bssocialmedia.com]

Madrid, Junio 2020

2
“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

RESUMEN

El objetivo principal de este proyecto es predecir con la mayor exactitud posible el equipo ganador
del partido que se seleccione de la NBA (National Basketball Association). Para ello, se calcula
la probabilidad de victoria de un equipo, empleando diferentes modelos de aprendizaje
automático. Esta información será de gran utilidad de cara a un apostante, una casa de apuestas o
para la preparación del partido frente a un rival.

El proyecto consta de varias fases. En primer lugar, se realiza una fase preparatoria, que
incluye la extracción, limpieza, transformación y selección de los datos o atributos más relevantes.
Una vez que están preparados, se procederá a su uso en los diferentes modelos de predicción que
se llevarán a cabo durante el proyecto. Para cada modelo se debe realizar una fase preliminar de
selección de hiperparámetros, tras la cual se entrenan y evalúan sobre un subconjunto de los datos
extraídos. Se probará en varios modelos para sacar el máximo rendimiento y obtener un mayor
acierto.

En el estudio se presenta, además, el plan de negocio que se llevaría a cabo, que consiste en
una consultora especializada en el deporte, inicialmente centrada en la NBA, pero con el objetivo
de usar la experiencia en este campo para otras ligas de baloncesto o deportes. Formada por los
cuatro integrantes de este trabajo, y que ofrece sus servicios tanto a equipos, como a casas de
apuestas. De cara a largo plazo se presentan otras ramas de negocio, también relacionadas con el
Big Data.

Por último, se realiza una comparativa de los modelos y una evaluación de los resultados, así
como se valora la viabilidad del negocio y las líneas de mejora de cara a futuro.

Palabras clave: Machine Learning, Big Data, Python, Data Mining, NBA.

3
“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

ABSTRACT

The main objective of this project is to predict as accurately as possible the winning team of the
selected match of the NBA (National Basketball Association). For that purpose, the probability
of victory of a team is calculated using different machine learning models. This information will
be very useful for a bettor, a bookmaker, or the preparation of the game against an opponent.

The project consists of several stages. First, a preparatory stage, which includes the extraction,
cleaning, transformation, and selection of the most relevant data or attributes. Once they are
prepared, they will be used in different prediction models during the project. For each model, a
preliminary hyperparameter selection phase must be conducted, then a subset of the extracted data
is trained and evaluated. After that, it will be checked on several models to achieve the best
performance.

In addition, the study presents the business plan that would be executed, which consists of a
consulting firm specialized in sports, initially focused on the NBA, but with the aim of using its
experience in this field for other basketball leagues, or different kind of sports. The company
consists of four members of this project that offers these services to teams and bookmakers. For
the long term, other business branches are presented, also related to Big Data.

Finally, there will be a comparison of the models and an evaluation of the results, as well as
the viability of the business and the lines of improvement for the future.

Keywords: Machine Learning, Big Data, Python, Data Mining, NBA.

4
“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

ÍNDICE GENERAL

RESUMEN………………………………………………………………………………... 3
ABSTRACT ……………………………………………………………………………….4
ABREVIATURAS ………………………………………………………………………….7
ÍNDICE DE TABLAS ………………………………………………………………………8
ÍNDICE DE ILUSTRACIONES …………………………………………………………….10
I.- PARTE INTRODUCTORIA …………………………………………………………….12
1.-INTRODUCCIÓN ………………………………………………………………...12
2.- ESTADO DEL ARTE……………………………………………………………..14
2.1. BIG DATA …………………………………………………………………………….14
2.2. DATA MINING ………………………………………………………………………..15
2.3. EL BIG DATA EN EL DEPORTE ………………………………………………………16
2.4. EL BIG DATA EN LA NBA …………………………………………………………...17
3.- MODELO DE NEGOCIO…………………………………………………………19
4.- EQUIPOS ……………………………………………………………………….20
5.- METODOLOGÍA ………………………………………………………………..22
5.1. CONOCIMIENTO DEL CAMPO………………………………………………………..23
5.2. COMPRESIÓN DE LOS DATOS ………………………………………………………..23
5.3. PREPARACIÓN DE LOS DATOS Y SELECCIÓN DE LOS ATRIBUTOS ………………….23
5.4. MODELADO ………………………………………………………………………….24
5.5. EVALUACIÓN DE LOS MODELOS …………………………………………………….24
II.- PARTE GENERAL …………………………………………………………………...25
6.- EXTRACCIÓN …………………………………………………………………..25
6.1. EXTRACCIÓN ESTADÍSTICAS NBA …………………………………………………..25
6.2. EXTRACCIÓN DE LOS JUGADORES FRANQUICIA ……………………………………27
6.3. EXTRACCIÓN CUOTAS DE APUESTAS ………………………………………………..28
7.- TRANSFORMACIÓN DE DATOS…………………………………………………30
8.- ALMACENAMIENTO……………………………………………………………38
8.1. ESQUEMA DE BASE DE DATOS ………………………………………………………38
8.2. INTEGRACIÓN DE AZURE CON EL ENTORNO DE DESARROLLO …………………….39
9.- HERRAMIENTAS EMPLEADAS………………………………………………….40
10.- SELECCIÓN DE VARIABLES …………………………………………………..41
10.1. SELECCIÓN DE VARIABLES EN WEKA …………………………………………….41
10.2. SELECCIÓN DE VARIABLES EN PYTHON…………………………………………...43
10.3. ANÁLISIS DEFINITIVO ………………………………………………………………44
11.- MÉTRICAS ……………………………………………………………………46
12.- MODELOS DE PREDICCIÓN …………………………………………………..48
12.1. INTRODUCCIÓN …………………………………………………………………….48
12.2. REGRESIÓN LINEAL ………………………………………………………………..49
12.3. REGRESIÓN LOGÍSTICA:LOGIT ……………………………………………………50

5
“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

12.4. REDES NEURONALES ……………………………………………………………….56


12.5. ÁRBOL DE DECISIÓN ……………………………………………………………….67
12.6. SVM ………………………………………………………………………………..72
12.7. RANDOM FOREST…………………………………………………………………..82
13.- PLANIFICACIÓN Y PRESUPUESTOS …………………………………………..87
III.- CONCLUSIÓN Y TRABAJOS FUTUROS ……………………………………………..90
CONCLUSIONES …………………………………………………………………...90
TRABAJOS FUTUROS ………………………………………………………………93
IV.- ANEXOS ……………………………………………………………………………94
BIBLIOGRAFÍA …………………………………………………………………….94
ANEXO 1 TRANSFORMACIÓN DE LOS DATOS ……………………………………..98
ANEXO 2 ALMACENAMIENTO …………………………………………………….99
ANEXO 3 SELECCIÓN DE VARIABLES ……………………………………………100
ANEXO 4 MATRIZ DE CONFUSIÓN ……………………………………………….101
ANEXO 5 LOGIT …………………………………………………………………102
ANEXO 6 RRNN …………………………………………………………………103
ANEXO 7 ÁRBOL DE DECISIÓN …………………………………………………..104
ANEXO 8 SVM …………………………………………………………………..106
ANEXO 9 RANDOM FOREST ……………………………………………………...110

6
“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

ABREVIATURAS

NBA: National Basketball Association.


RNA: Red de Neuronas Artificiales.
SVM: Support Vector Machine.
AWS: Amazon Web Services.
JSON: JavaScript Object Notation.
CSV: Comma-Separated Values.
MIT: MIT Sloan Conference.
CRISP-DM: Cross Industry Process for Data Mining.
SRP-CRISP-DM: Sport Results Predictions CRISP-DM.
ReLU: Rectified Linear Unit.
WEKA: Waikato Environment for Knowledge Analysis.
NFL: National Football League.
IOT: Internet of Things.
MLB: Major League Baseball.
GPS: Global Positioning System.
IBM: International Business Machines.
DAFO: Debilidades Amenazas Fortaleza y Oportunidades.
SGD: Stochastic Gradient Descent.
DBSCAN: Density-Based Spatial Clustering of Applications with Noise.

7
“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

ÍNDICE DE TABLAS

TABLA 1: TABLA DE LAS ESTADÍSTICAS DE LA NBA…………………………………..25


TABLA 2: TOP 10 DE LOS ATRIBUTOS WEKA…………………………………………42
TABLA 3: TOP 10 DE LOS ATRIBUTOS PYTHON ………………………………………..43
TABLA 4: TOP 10 SCORE ……………………………………………………………….44
TABLA 5: PREDICCIÓN/REALIDAD……………...…………………………………….. 46
TABLA 6: RESUMEN MÉTRICAS REGRESIÓN LOGÍSTICA ……………………………...53
TABLA 7: RESUMEN MÉTRICAS 100 PARTIDOS CON CUOTA REGRESIÓN LOGÍSTICA ...54
TABLA 8: RESUMEN MÉTRICAS 100 PARTIDOS SIN CUOTA REGRESIÓN LOGÍSTICA….54
TABLA 9: COMPARACIÓN DE MODELOS CON ACIERTO REGRESIÓN LOGÍSTICA ……55
TABLA 10: RESUMEN DE LAS CAPAS DE LAS RED ……………………………………...59
TABLA 11: RESUMEN PARÁMETROS DE LA RED. ………………………………………62
TABLA 12: RESUMEN ACIERTOS CON CUOTA DE LA RED. ……………………………..63
TABLA 13: RESUMEN ACIERTOS SIN CUOTA DE LA RED. ………………………………64
TABLA 14: RESUMEN ACIERTOS CON CUOTA DE LA RED DE CADA 100 PARTIDOS. …...65
TABLA 15: RESUMEN ACIERTOS SIN CUOTA DE LA RED DE CADA 100 PARTIDOS. …….66
TABLA 16: ACIERTOS TOTAL SIN/CON CUOTA RED DE CADA 100 PARTIDOS. …………67
TABLA 17: RESUMEN CON CUOTA Y SIN CUOTA ÁRBOL DE DECISIÓN ………………...70
TABLA 18: RESUMEN 100 PARTIDOS CON CUOTA ÁRBOL DE DECISIÓN ………………72
TABLA 19: RESUMEN 100 PARTIDOS SIN CUOTA ÁRBOL DE DECISIÓN ………………..72
TABLA 20: RESUMEN SIN CUOTA Y CON CUOTA SVM ………………………………...76
TABLA 21: CONJUNTO DE ATRIBUTOS COMO RESULTADOS APLICAR MÉTODOS SVM.79
TABLA 22: RESUMEN DE RESULTADOS APLICADOS A LOS MÉTODOS DE SVM ……….80
TABLA 23: RESUMEN 100 PARTIDOS CON CUOTAS SVM ……………………………...81
TABLA 24: RESUMEN 100 PARTIDOS SIN CUOTAS SVM ………………………………81
TABLA 25: RESUMEN DE ACIERTOS SVM ……………………………………………..81
TABLA 26: RESUMEN DE ACIERTOS SIN CUOTAS Y CON CUOTAS RANDOM FOREST ….84
TABLA 27: RESUMEN 100 PARTIDOS CON CUOTAS RANDOM FOREST………………...85
TABLA 28: RESUMEN 100 PARTIDOS SIN CUOTAS RANDOM FOREST …………………86

8
“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

TABLA 29: RESUMEN DE ACIERTOS RANDOM FOREST CADA 100 PARTIDOS …………86
TABLA 30: ACIERTOS SIN/CON CUOTAS RANDOM FOREST 100 PARTIDOS……………86
TABLA 31: PRESUPUESTO Y DURACIÓN DEL PROYECTO ………………………………87
TABLA 32: RESUMEN DE RESULTADOS CONCLUSIÓN …………………………………90

9
“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

ÍNDICE DE ILUSTRACIONES

ILUSTRACIÓN 1:200 LOCALIZACIONES DE TIRO MÁS FRECUENTES…………………...18


ILUSTRACIÓN 2: ANÁLISIS DAFO………………………………………………………20
ILUSTRACIÓN 3: ESQUEMA DE CRISP-DM …………………………………………...22
ILUSTRACIÓN 4: ESQUEMA DE SRP-CRISP-DM ……………………………………..22
ILUSTRACIÓN 5: ESQUEMA DE EXTRACCIÓN DE DATOS……………………………….26
ILUSTRACIÓN 6: WEB EXTRACCIÓN DE DATOS ………………………………………..29
ILUSTRACIÓN 7: ESQUEMA DE BASE DE DATOS ………………………………………..39
ILUSTRACIÓN 8: LOGO DE JUPYTER NOTEBOOK ……………………………………..40
ILUSTRACIÓN 9: LOGO DE PYTHON……………………………………………………40
ILUSTRACIÓN 10: LOGO DE R.…………………………………………………………40
ILUSTRACIÓN 11: LOGO DE WEKA. …………………………………………………..40
ILUSTRACIÓN 12: INTERFAZ WEKA. …………………………………………………42
ILUSTRACIÓN 13: GRÁFICA DE REGRESIÓN LINEAL.………………………………….49
ILUSTRACIÓN 14: FUNCIÓN REGRESIÓN LOGISTICA. …………………………………50
ILUSTRACIÓN 15: MATRIZ DE CONFUSIÓN REGRESIÓN LOGÍSTICA 1 . ………………51
ILUSTRACIÓN 16: MATRIZ DE CONFUSIÓN REGRESIÓN LOGÍSTICA 2 . ………………52
ILUSTRACIÓN 17: MATRIZ DE CONFUSIÓN REGRESIÓN LOGÍSTICA 3 . ………………53
ILUSTRACIÓN 18: MATRIZ DE CONFUSIÓN REGRESIÓN LOGÍSTICA 4 . ………………53
ILUSTRACIÓN 19: GRÁFICA COMPARATIVA DE ACIERTO REGRESIÓN LOGÍSTICA 1 ...54
ILUSTRACIÓN 20: GRÁFICA COMPARATIVA DE ACIERTO REGRESIÓN LOGÍSTICA 2 . ..55
ILUSTRACIÓN 21: GRÁFICA DE RENDIMIENTO DE LAS DISTINTAS REDES …………….57
ILUSTRACIÓN 22: GRÁFICA DE ACCURACY/LOSS VS EPOCH DE LAS REDES 1 ………..61
ILUSTRACIÓN 23: GRÁFICA DE ACCURACY/LOSS VS EPOCH DE LAS REDES 2 ………..61
ILUSTRACIÓN 24: MATRIZ DE CONFUSIÓN CON CUOTAS (ENTRENAMIENTO 15) ……..65
ILUSTRACIÓN 25: MATRIZ DE CONFUSIÓN CON CUOTAS (ENTRENAMIENTO 8) ………65
ILUSTRACIÓN 26: GRÁFICA DE EVOLUCIÓN DEL ACCURACY RED NEURONAL ……….66
ILUSTRACIÓN 27: ÁRBOL DE DECISIÓN CON CUOTAS …………………………………68
ILUSTRACIÓN 28: TANTEO PROFUNDIDAD DEL ÁRBOL ………………………………..70

10
“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

ILUSTRACIÓN 29: MATRIZ DE CONFUSIÓN DEL ÁRBOL DE DECISIÓN SIN CUOTA ……..71
ILUSTRACIÓN 30: MATRIZ DE CONFUSIÓN DEL ÁRBOL DE DECISIÓN CON CUOTA ……71
ILUSTRACIÓN 31: MATRIZ DE CONFUSIÓN SVM SIN CUOTA ………………………….77
ILUSTRACIÓN 32: MATRIZ DE CONFUSIÓN SVM CON CUOTA ………………………...77
ILUSTRACIÓN 33: PROCESO DEL MÉTODO DE ENVOLTURA …………………………...78
ILUSTRACIÓN 34: MATRIZ DE CONFUSIÓN RANDOM FOREST CON CUOTA …………...85
ILUSTRACIÓN 35: MATRIZ DE CONFUSIÓN RANDOM FOREST SIN CUOTA…………….85
ILUSTRACIÓN 36: DIAGRAMA DE GANTT 1 ……………………………………………88
ILUSTRACIÓN 37: DIAGRAMA DE GANTT 2 ……………………………………………88
ILUSTRACIÓN 38: DIAGRAMA DE GANTT 3 ……………………………………………89
ILUSTRACIÓN 39: DIAGRAMA DE GANTT 4 ……………………………………………89
ILUSTRACIÓN 40: % ACUMULADO DE ACIERTOS CON CUOTAS ……………………….91
ILUSTRACIÓN 41: % ACUMULADO DE ACIERTOS SIN CUOTAS ………………………...92
ILUSTRACIÓN 42: DIAGRAMA DE ÁRBOL CADA 100 SIN CUOTAS ..…………………..105

11
“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

I.- PARTE INTRODUCTORIA


1.- INTRODUCCIÓN
Durante la segunda mitad del siglo XX, la tecnología y la informática propiciaron grandes
cambios, tanto en las empresas como en la vida diaria. Desde contratar un viaje a la forma de
comunicarnos, todo se ha adaptado a la era de la tecnología, y se ha acelerado en los últimos 30
años. Este gran cambio ha traído consigo nuevos términos como smartphone, software o tablet,
que rápidamente han pasado a ser parte de nuestro vocabulario.

En los últimos años, hay un término que no ha dejado de acaparar titulares y noticias: el Big
Data. Este término, se podría definir como conjuntos de datos cuyo tamaño (volumen),
complejidad (variabilidad) y velocidad de crecimiento (velocidad) dificulta su captura, gestión,
procesamiento o análisis mediante herramientas convencionales (PowerData, s.f.). Estos datos,
pueden ser tanto estructurados, una tabla, como no estructurados, una imagen (SAS, s.f.). Dentro
del Big Data, se encuentra el aprendizaje automático o machine learning, que consiste en emplear
modelos predictivos, los cuales se entrenan con estos grandes conjuntos de datos, y ayudan o,
incluso, toman decisiones (Observatorio IA, 2016).

Como ya se ha mencionado, la informática y sus numerosas aplicaciones han hecho posible


todas estas tareas. A lo largo de la segunda mitad del siglo XX, diferentes investigadores han
desarrollado estos métodos para predecir tendencias o acontecimientos, basándose en el análisis
previo de los datos. Estas predicciones se utilizan en numerosos campos, como la medicina, la
meteorología o el sector financiero; entre otros. Por todas estas aplicaciones, actualmente se
podría decir los datos son el petróleo del siglo XXI.

Entre todas estas aplicaciones, también se encuentra el deporte, y en concreto, el baloncesto.


En el baloncesto, un deporte de equipo, los resultados o estadísticas de cada jugador o equipo han
sido de gran utilidad a lo largo de la historia. Desde el porcentaje de triple o la diferencia de puntos
con un jugador en la cancha, se han recogido y analizado gran cantidad de estadísticas para
diferentes fines, como fichajes o la preparación de un partido. Dentro del baloncesto, la liga
profesional americana, la NBA (National Basketball Association), es la liga más importante del
mundo, siendo una de las más impredecibles e igualadas del planeta, y donde se encuentran los
mejores jugadores del mundo. Será en esta liga donde se centre este proyecto.

En este estudio, se recogen una gran cantidad de estadísticas, que facilita la propia web oficial
de la liga. Estas estadísticas son de cuatro temporadas (2016/17, 2017/18, 2018/19 y 2019/20).
Sobre estos datos se realiza un proceso de limpieza y transformación, tras el cual se almacenan
en una base de datos en la nube.

12
“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

Tras esto, se realiza un estudio sobre las estadísticas para seleccionar aquellas más relevantes
y que representen más factores. Con los datos ya preparados, es posible predecir el rendimiento
de cada equipo, basándose los partidos disputados de las temporadas anteriores (Morate Vázquez,
2016). Para ello, se entrenarán diferentes modelos de aprendizaje automático siguiendo distintos
métodos. Se plantea como un problema de clasificación, donde los modelos predicen qué equipo
ganará el partido, si el local o el visitante. En la última parte de este estudio se evalúan y comparan
los modelos, así como la viabilidad del modelo de negocio propuesto en el capítulo tres.

A continuación, en el capítulo dos se expone el estado del arte, donde, primero, se trata el
panorama actual del Big Data en general y, después, en el deporte y la NBA.

13
“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

2.- ESTADO DEL ARTE

En este capítulo se pretende ofrecer una visión panorámica del contexto que rodea este estudio,
haciendo un recorrido desde cómo los datos han cambiado la manera de trabajar de las empresas,
hasta cómo se saca conocimiento de los datos, pasando por las distintas áreas de conocimiento en
las que se aplican estas metodologías.

Más adelante, se hablará del Big Data en el deporte y en la NBA. Se expondrá la entrada de
las técnicas de predicción en este campo y cómo funciona la competición.

2.1. BIG DATA

En los últimos años términos como Big Data, valor del dato, tratamiento de dato, Data Science,
Data Analysis y muchos otros, se han hecho virales tanto en términos de nuevas profesiones como
en nuestra vida diaria, cuando a privacidad se refiere. El Big Data está en el día a día de la sociedad
y de las empresas. Es por este término y sus consecuencias, que la manera de trabajar y de cómo
vivimos hoy en día, ha cambiado tanto en los últimos años.

El término Big Data hace referencia a una gran cantidad de datos, tanto estructurados como
no estructurados que sobrepasan las capacidades de los softwares convencionales para ser
procesados y almacenados. Gartner (Oracle, s.f.), en 2001, definía las 3 V’s que caracterizan a los
grandes volúmenes de datos, que son: Volumen, Velocidad y Variedad.

• Volumen: La gran cantidad de datos que se generan hoy en día supone un reto en cuanto
a manejo y almacenamiento de estos datos. Según la empresa de análisis de datos Domo
(Refojos, 2020), cada persona genera unos 1.7 MB de datos por segundo (Staff High Tech
Editores, 2018).
• Velocidad: La velocidad a la que se generan estos datos y cómo se gestionan es uno de
los puntos clave a la hora de trabajar con los datos (Sicular, 2013). Aún más con el auge
del Internet de las Cosas (Internet of Things, IoT’s). También se habla de velocidad en
términos de operativa. Cuando tenemos cantidades muy grandes de datos hay que prestar
especial atención en cómo vamos a trabajar con estos datos, ya que para los ordenadores
convencionales estas tareas pueden ser difíciles o incluso imposibles de realizar.
• Variedad: Antes, los datos tenían un formato estructurado que facilitaba la relación entre
unos y otros, pero hoy en día los datos que se generan pueden también ser
semiestructurados o no estructurados, lo que supone también un reto a la hora de trabajar
con ellos.

14
“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

Actualmente, se han añadido otras dos: Veracidad y Valor. En cuanto a los problemas de
almacenamiento y computación de grandes volúmenes de datos, las empresas disponen de las
herramientas y tecnologías implementadas para subsanar estos problemas. El verdadero objetivo
es el de sacar valor de esos datos para poder ofrecer soluciones o sacar nuevos productos. Esos
datos que usan las empresas pueden ser propios o externos, lo que también plantea el interrogante
de cuán fiable es la información con la que estamos trabajando, es decir, si verdaderamente
estamos tratando con información veraz.

Para realizar este trabajo, se requiere de profesionales que sean capaces de trabajar con todos
estos factores en cuenta y den el empuje necesario para resolver los problemas que se puedan
llegar a plantear. De esta necesidad, es de donde nacen los Data Scientist, Data Analyst y demás
profesiones, relacionadas con el manejo de los datos en las empresas.

2.2. DATA MINING

Tratar de sacar partido a todos los datos de los que se disponen, no es una tarea sencilla. Se
necesitan de técnicas específicas que ayuden a esclarecer entre tanta información y determinar
cuál es aquella que aporta algún valor a la empresa o al problema que se trate de resolver.

Es en este punto en el que se introduce el Data Mining (Ribas, 2018). Un conjunto de técnicas
que permiten estudiar grandes conjuntos de datos, de manera automática o semiautomática, con
el propósito de encontrar patrones o reglas que ayuden a entender el comportamiento de los datos.

Cuando se quieren implementar estas técnicas es porque se quiere encontrar y aportar


información valiosa a las empresas para así, tomar mejores decisiones. Aplicar estas técnicas
supone un gran desafío, ya que hay muchos algoritmos y la elección de uno u otro requiere de un
conocimiento profundo del área de investigación y de las técnicas que se pueden aplicar.

Gracias a la minería de datos, que une los conocimientos de la estadística, la inteligencia


artificial y el aprendizaje automático, se puede extraer conocimiento de diversas áreas de
conocimiento, entre las que se encuentran seguridad de datos, salud, finanzas, marketing, deporte,
procesamiento de lenguaje natural o coches autónomos.

● Salud: Estudios descriptivos de cómo de efectivo es un tratamiento, a qué población


afecta cierta enfermedad. Estudios predictivos, como detectar cáncer con la ayuda de
redes neuronales o la propagación de un virus en la sociedad actual como está pasando
con el COVID-19.
● Sector bancario: Gestión de las transacciones realizadas por los clientes, control de las
operaciones realizadas, comportamiento de los usuarios y muchas más oportunidades que

15
“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

les brinda estas tecnologías a la banca pudiendo hacer una segmentación por tipo de
usuario o evaluar los servicios que se están prestando, mejorando la calidad de atención
al cliente.
● Transporte: Se tiene el ejemplo más claro en Google Maps, que nos ofrece la mejor ruta
posible teniendo en cuenta tráfico, transporte público y otros factores. Todas las
decisiones están basadas e implementadas gracias al desarrollo de las técnicas de minería
de datos.
● El deporte, también es un área en el que las técnicas de minería de datos resultan muy
importantes, ya sea individual o por equipos. Algoritmos que son capaces de predecir
resultados, lesiones de jugadores, o que sean capaces de determinar alineaciones o
estrategias, son utilizados por los equipos en ligas como por ejemplo la NFL, National
Football League (Warner, 2010), la NBA o el ajedrez.

A continuación, se presenta el estado de la cuestión en el ámbito del deporte y más


concretamente, la NBA, que es el estudio que se presenta en este trabajo.

2.3. EL BIG DATA EN EL DEPORTE

A lo largo de los últimos años, el Big Data ha transformado una gran cantidad de industrias, y el
deporte no es una excepción. Aunque en algunos deportes, como el fútbol, el análisis de datos y
estadísticas es un campo más reciente, en otros, como el béisbol lleva lustros implementado. Un
ejemplo de esto podemos verlo en la película Moneyball (2011), basada en la historia de Billie
Beane, directivo de Oakland Athletics (equipo de la MLB – liga de béisbol americana), quien a
mediados de los 90, basó los fichajes del equipo en estadísticas y análisis de los jugadores,
consiguiendo tener un equipo muy competitivo para el presupuesto de este. Desde 1998 a 2006,
el tercer equipo con menor presupuesto (2002), logró tener siempre más de un 50 % de victorias
y 5 clasificaciones a play-offs de 8 posibles (Reid, 2011).

Desde esos años, el Big Data ha ido ganando terreno y expandiendo su campo de acción a
otros deportes, como el fútbol o el tenis. Además de emplearse para fichar jugadores, también se
realizan estudios para prevenir las lesiones (Climent, 2018), analizar defensiva u ofensivamente
a otro equipo o la monitorización en tiempo real de un jugador.

Esto es posible gracias a los sensores (englobados dentro del llamado Internet de las Cosas)
que, cada vez más, se van incorporando a las equipaciones de distintos deportes. Por ejemplo, en
el último mundial fútbol, Rusia 2018, los jugadores de la selección española llevaban un pequeño
corsé con diferentes sensores que enviaban datos de frecuencia cardiaca, temperatura corporal,
velocidad de un sprint (GPS), impactos (gracias a un acelerómetro); así hasta 20000 datos por

16
“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

segundo que eran procesados en tiempo real y permitían medir el cansancio o la posibilidad de
una lesión muscular (Castellote, 2018). Otro ejemplo, en este caso en el tenis, es la raqueta de los
tenistas, por ejemplo, la de Rafa Nadal, contiene una amplia gama de sensores que ayudan a
mejorar los golpes de los tenistas y optimizar el diseño de la raqueta. El equipo de Rafa Nadal,
tras analizar estos datos, concluyó que el balear golpeaba el drive cada vez con menor fuerza, por
lo que decidieron aumentar el peso del marco superior de la raqueta (Nicolás, 2017).

El análisis de datos relacionado con el deporte es hoy un pilar fundamental para muchos
equipos en diferentes decisiones, tanto de fichajes como decisiones antes y durante los partidos.
Por el creciente interés, han surgido un gran número de empresas dedicadas al mismo, mientras
que otras empresas tecnológicas han creado departamentos específicos. IBM, el gigante
americano, ha desarrollado un modelo para predecir las posibles lesiones que pueden producirse
en la NFL (liga de fútbol americano), donde hay una media de 6-7 lesiones por partido (Wetsman,
2019) y, en algunos casos, pueden ser muy graves (IBM, s.f.). Esta gran liga americana colabora
también con Amazon en este aspecto.

Uno de los deportes pioneros en el uso del Big Data, es el baloncesto y más concretamente la
NBA (National Basketball Association).

2.4. EL BIG DATA EN LA NBA


La NBA, fundada en 1946, es la liga de baloncesto profesional más importante del mundo. Es una
liga de 30 equipos, divididos en dos conferencias (Este y Oeste) y en seis divisiones (Atlántica,
Central, Sudeste, Noroeste, Pacífico y Sudoeste). Cada temporada está dividida en una liga regular
(82 partidos) y los play-offs, donde se clasifican los 8 mejores equipos de cada conferencia, que
pelean por llegar al anillo en eliminatorias (cuartos, semis, final de conferencia y final) de 7
partidos cada una. La final se disputa entre los campeones de cada conferencia.

Al igual que otras grandes ligas americanas, se recogen desde hace décadas una gran cantidad
de estadísticas por jugador en cada partido. Con el crecimiento del Big Data, esto no ha hecho
más que expandirse, llegando a cambiar la forma de jugar. Uno de los equipos pioneros en el
empleo de Big Data fueron los Houston Rockets. Su general manager, Daryl Morey, es uno de
los fundadores de la conferencia anual sobre análisis deportivos de MIT (MIT Sloan Conference).
Desde que llegó en 2006, los Rockets han pasado de ser un equipo de media tabla a uno de los
grandes aspirantes al anillo en los últimos años. De hecho, los Rockets son uno de los equipos
punteros (récord histórico de triples en la temporada 2017-2018 (AB Sports, 2019)) en la
tendencia más marcada de la NBA en los últimos años: la eliminación del tiro de media distancia
(2 puntos), viendo que son menos efectivos que los tiros de corta distancia o los tiros de tres
puntos (Second Spectrum, 2019). Esta evolución queda patente en la siguiente ilustración.

17
“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

Ilustración 1: 200 localizaciones de tiro más frecuentes.

En las últimas temporadas, se han instalado cámaras y sensores que monitorizan en 3D el


movimiento de jugadores, árbitros y entrenadores, con técnicas de análisis de patrones espacio
temporales para lograr estudios más profundos y precisos (AB Sports, 2019). Desde la elección
de jugadores en el draft, hasta el estilo de juego de la liga, todo pasa por el Big Data.

Por todo ello, la NBA es una de las ligas más elegidas a la hora de realizar estudios y
publicaciones que impliquen uso y análisis de datos, gracias también a la facilidad de extraer una
gran cantidad de estadísticas. Los análisis más frecuentes se centran, como este trabajo, en la
predicción del ganador del partido. Fundamentalmente existen dos enfoques:

• Predecir el ganador basándose en los equipos: Para ello se extraen y agregan diferentes
estadísticas de ambos equipos, como puntos por partido, triples anotados o porcentaje de
victoria. Estos datos entrenan un modelo de Machine Learning. A diferencia de otros
campos, la predicción de eventos deportivos no tiene un modelo predominante y se
emplean una amplia gama de ellos en estos estudios, como pueden ser SVM, Random
Forest o redes neuronales, entre otros. En este enfoque se centra este trabajo.
• Predecir el ganador basándose en los jugadores: De forma similar al anterior, pero con
estadísticas pormenorizadas por cada jugador. Requieren estudios muy complejos y
algoritmos de Deep Learning, algunos de los cuales llegan a precisiones muy superiores,
incluso un 80 % (Oursky Post, 2019).

18
“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

3.- MODELO DE NEGOCIO

El modelo de negocio estaría formado por dos grandes bloques, el principal que consistiría en la
venta de los servicios de un equipo de investigadores y la segunda consistiría en la elaboración
de un blog de divulgación en la que se publiquen diversas investigaciones. La forma de negocio
sería la posibilidad de leer ciertas investigaciones de forma gratuita, pero habría que suscribirse
para poder leer todas al completo.

El equipo de investigadores, en un inicio, estaría formado por 4 personas de distintas áreas de


especialización, un ingeniero aeroespacial, un ingeniero de Tecnologías Industriales, un ingeniero
de Edificación y un economista. Este sería uno de los mayores puntos fuertes de este equipo de
investigación, a diferencia de otros equipos que sólo se centran en un sector en específico.

En un primer momento, se destacarán 5 grandes áreas de proyectos, entre la que destaca el


área de los deportes, el cual es el principal objetivo de la empresa. Cada área tendría su función
principal en la oferta de servicios de investigación y, también, la de divulgación.

La primera área sería la de deportes, debido al alto conocimiento de varios de ellos como lo
son el baloncesto y el fútbol. Se podrían prestar servicios, por ejemplo, a equipos de fútbol para
saber a qué jugadores fichar para la próxima temporada, lo que reduciría el riesgo de que el
jugador no se adaptase al equipo, o predecir el resultado según la alineación del equipo, mejorando
la preparación del partido. Además, para el blog de investigación se podrían publicar los análisis
de rendimiento de equipos, además de una proyección a futuro.

La segunda área trataría sobre la construcción o sector inmobiliario, en el ámbito de la


construcción se podrían usar los datos de los operarios que acuden a la obra y así poder anticiparse
a las medidas de prevención de riesgos laborales, y en ámbito del sector inmobiliario, se podrían
ajustar los precios de las viviendas según las clases sociales y las necesidades de la zona. Estos
servicios podrían ser contratados por empresas inmobiliarias y también se podrían publicar
informes en el blog sobre la evolución de los precios y posibles cambios a futuro.

La tercera área estaría relacionada con el ámbito económico, se podrían prestar servicios a
bancos para el desarrollo de modelos de análisis de riesgo, también se podrían realizar análisis
del mercado bursátil o predecir la evolución de ventas de un determinado producto y, además, se
podrían publicar reportes sobre la evolución de la economía, como podría ser el análisis del
crecimiento de la economía española o cualquier otro país o región.

La siguiente área estaría especializada en el uso de la Inteligencia Artificial para el


reconocimiento facial. Un caso muy actual de uso sería que mediante cámaras se comprobase si
todos los ciudadanos llevan las mascarillas puestas o para identificar a personas desaparecidas.

19
“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

La quinta área se centraría en el procesamiento del lenguaje natural. Esta área, al igual que el
resto, tendría muchas opciones de proyectos, algunos de ellos podrían ser el análisis de
reclamaciones y su clasificación, por ejemplo, en una empresa de paquetería en la que los clientes
de sus servicios pueden hacer reclamaciones a través de las redes sociales, se podrían clasificar y
destinarlas al departamento específico que sea. Para el blog se podrían hacer análisis de
sentimientos de grandes eventos o noticias, por ejemplo, el impacto que generó la marcha que
hubo sobre el cambio climático.

A continuación, se muestra un análisis DAFO que consiste en el análisis de la situación de la


empresa tanto en el ámbito interno (debilidades y fortalezas) como en el externo (amenazas y
oportunidades).

DEBILIDADES AMENAZAS

• Empresas de consultoría
• Falta de reconocimiento
(EY, KPMG, …)
internacional
• Otros equipos de
• Equipo pequeño de
investigadores
investigadores

FORTALEZAS OPORTUNIDADES

• Amplias áreas de trabajo • Investigación en otros países


• Conocimiento de 5 idiomas: • Equipo pequeño de
español, inglés, japonés, investigadores
chino y francés • Cursos de mejora
• Grupo multidisciplinar • Inmersión en el Blockchain
• Grupo agile

Ilustración 2: Análisis Dafo.

El plan de marketing se basaría principalmente en la venta de servicios de análisis a las


empresas que lo necesiten dentro de nuestras 5 áreas de investigación, aunque con el tiempo se
irían ampliando, y también sería la venta de suscripciones al blog de investigación.

La venta de servicios estaría destinada principalmente a empresas dentro de los ámbitos de


investigación y el blog iría destinado a todas aquellas personas que quieran mantenerse al día y
estén interesadas en la evolución de diversos temas de actualidad.

20
“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

4.- EQUIPOS

Para la realización del trabajo se han empleado diferentes equipos, uno por cada uno de los
miembros:

● Equipo 1: DELL Latitude 3440.


○ Microprocesador Intel Core i3-4030u (1.9 GHz).
○ Gráficos integrados Intel HD.
○ RAM: 8 Gb DDR3.
○ Disco de estado sólido (SSD): 512 Gb.
○ Pantalla de 14” mate de 1368 x 768 píxeles.
○ Software: Windows 10 64 bit.

● Equipo 2: DELL XPS 15 9570.


○ Microprocesador Intel Core i9-8950HK (2.9 GHz).
○ Gráficos integrados Intel UHD Graphics 630 y Nvidia GeForce GTX
1050Ti 4Gb.
○ RAM: 32 Gb DDR4.
○ Disco de estado sólido (SSD): 1024 Gb.
○ Pantalla de 15,6” táctil de 3840 x 2160 píxeles.
○ Software: Windows 10 pro 64 bit.

● Equipo 3: MSI GF65 Thin 9SD - 072XES


○ Microprocesador Intel Core i7-9750H (2.6 GHz)
○ Controlador gráfico Nvidia GeForce GTX 1660 Ti, GDDR6 6 Gb
○ RAM: 2*8 Gb DDR4
○ Disco de estado sólido (SSD): 512 Gb
○ Pantalla de 15.6” FHD 1920*1018, IPS-Level 120 Hz Thin Bezel
○ Software: Windows 10 pro 64 bit.

● Equipo 4: Lenovo G50-80


○ Microprocesador Intel Core i7 5500U (2.4 GHz)
○ Gráficos integrados: Intel HD Graphics 5500
○ RAM: 8 Gb DDR3
○ Disco de estado sólido (SSD): 512 Gb
○ Pantalla de 15.6” HD 1366x768
○ Software: Windows 10 64 bit.

21
“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

5.- METODOLOGÍA

Para la realización de este trabajo, la metodología que se ha seguido es una adaptación del CRISP-
DM (Cross Industry Process for Data Mining). Esta metodología presenta el ciclo de vida de un
proyecto de minería de datos. Trata el proceso de análisis de los datos como un proyecto
profesional, en el que, aparte de presentar el estudio de los modelos y su despliegue de cara a un
cliente, pueda ser utilizado como referencia para los nuevos investigadores. Es decir, que sirva
como referencia, experiencia sobre la que partir para próximos proyectos.

Ilustración 3: Esquema de CRISP-DM.

SRP-CRISP-DM (Rory P. Bunker, 2019), (Sport Results Predictions CRISP-DM), se presenta


como una modificación a la metodología CRISP-DM, adaptada a los proyectos de minería de
datos desarrollados en el ámbito del deporte.

Ilustración 4: Esquema de SRP-CRISP-DM.

En la ilustración 4 se observa cuáles son los principales pasos que hay que seguir en la
realización de los proyectos de minería de datos en el mundo del deporte.

22
“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

5.1. CONOCIMIENTO DEL CAMPO


Es esencial conocer el campo de estudio en el que se va a desarrollar el proyecto. Hay que entender
bien el sistema de juego del deporte, cómo se desarrolla la competición y las características
generales del deporte. Este conocimiento se adquiere leyendo información en los portales oficiales
de la NBA, acudiendo a revistas o páginas web de prestigio donde se aporta conocimiento esencial
para entender el deporte y los factores que influyen en su juego.

Un conocimiento profundo del campo en el que está enmarcado el estudio marca la diferencia
en cuanto a resultados y al valor de esos resultados, que es al fin y al cabo lo que se quiere
conseguir.

5.2. COMPRESIÓN DE LOS DATOS


A la hora de comenzar el proyecto, todo comienza por la recolección de los datos. En los
siguientes apartados del trabajo se irán especificando con más detalle cuál ha sido el
procedimiento y las herramientas que se han utilizado para extraer los datos con los que se va a
trabajar.

Los datos hay que comprenderlos, hay que saber cuántas categorías de resultados existen, por
ejemplo, en el baloncesto, los partidos nunca terminan en empate, y sólo hay dos posibilidades:
gana local o gana visitante. Pero en el fútbol, además de estas dos opciones, si cabe la posibilidad
de que un encuentro finalice en empate. Esta consideración hace que el problema varíe según el
deporte y que la manera de abordarlo sea diferente.

También se tiene que considerar que clase de datos se están usando, si son a nivel general del
equipo o particular de los jugadores. Esto hará que el enfoque sea más general, como ocurriría
trabajando con datos generales del equipo o, más concreto y enfocado a cada jugador, viendo
cómo influye su rendimiento o su aportación al equipo.

Estas consideraciones son clave para la realización de cualquier proyecto de minería de datos
en el deporte ya que los resultados que se cabe esperar difieren respecto del enfoque que se le dé.

5.3. PREPARACIÓN DE LOS DATOS Y SELECCIÓN DE LOS ATRIBUTOS


Para que los modelos de predicción obtengan resultados óptimos resulta esencial una preparación
y selección de atributos adecuada para, posteriormente, comenzar a diseñar los modelos.

Esta parte del proyecto se puede abordar de diferentes maneras, en este proyecto se ha optado
por aunar las mejores prácticas en esta parte. Se han atendido a las recomendaciones de los
expertos para tratar de contar con las estadísticas que mejor definen el rendimiento de un equipo.

23
“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

Además, se cuentan con datos representativos que no son obtenidos a partir del juego del equipo,
sino que aportan valor desde el exterior. Estos datos son las cuotas de las casas de apuestas, el
descanso de cada equipo y si el equipo cuenta con alguna baja significativa.

En el mundo del deporte todos los datos, tanto los propios del equipo, como los externos a
ellos, tienen su efecto en su actuación en el partido.

También se han empleado algoritmos de filtrado de estos atributos, estudiando su aportación


al hecho de que un equipo vaya a ganar o perder. Así evitamos que las variables que, en un
principio se pensaban que eran relevantes y después se comprueba que no, añadan ruido y el
modelo no sea capaz de trabajar de una manera correcta.

5.4. MODELADO
En esta etapa es en la que se decide cuáles serán los modelos que se van a usar para llevar a cabo
el proyecto. Dependiendo del objetivo del proyecto, se elegirá un modelo u otro. El problema se
puede afrontar de distintas maneras, con algoritmos de clasificación, donde la clase a predecir el
ganador o perdedor, o como un problema de regresión, donde resultado obtenido es un margen de
victoria o derrota.

En los siguientes apartados se irán presentando los modelos que se han empleado para realizar
las predicciones de quién ganará en el siguiente partido.

5.5. EVALUACIÓN DE LOS MODELOS


Cuando se llega a este punto, es muy importante definir cómo se van a realizar los
entrenamientos de los modelos. Qué datos se usarán para el modelado, y qué datos se usarán como
evaluación de ese modelo. En este trabajo se cuentan con los datos de las temporadas 2016-2017
a 2019-2020. Se ha decidido hacer la división de los datos de test y entrenamiento de manera que,
se calibrarán los modelos con las tres primeras temporadas de las que se tiene datos y se evaluarán
con la última temporada.

Hay que señalar que de los datos de los que se disponen son de la temporada regular. En total
se tienen 4659 partidos de los cuales 3689 de estos se usan para el entrenamiento, y 970 se usan
como test para evaluar los modelos.

A lo largo de este trabajo se irán presentando cada una de estas partes. Al final se presentará
unas conclusiones donde se discutirán los resultados y se verá cuál de los modelos es el que tiene
un mejor resultado.

24
“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

II.- PARTE GENERAL


6.- EXTRACCIÓN

6.1. EXTRACCIÓN ESTADÍSTICAS NBA


El primer paso para la realización de cualquier proyecto de minería de datos es disponer y extraer
los datos de una fuente fiable, ya que así, se asegura que los datos con los que se va a trabajar son
fiables y veraces, y permiten avalar los resultados que se obtendrán al final del estudio.

El punto del que se debe partir para dicha extracción es conocer la fuente de la cual contiene
los datos deseados, en este caso es la página web oficial de la NBA, en la que se ofrecen una gran
cantidad de estadísticas tanto de partidos, como de jugadores, dicha página web es
https://stats.nba.com/. Al ser una fuente oficial, se asegura la veracidad y fiabilidad de los datos
que se comentaba anteriormente.

Tabla 1: Estadísticas de las NBA.

Esta captura de pantalla, a modo de ejemplo, contiene las estadísticas de los Boston Celtics
cuando jugaron contra Indiana Pacers el día 10 de marzo del 2020 (NBA Stats, 2020).

Para extraer los datos de la página web, se va a construir lo que se llama un web scraper. El
web scraping consiste en la extracción de datos de la web. A partir del enlace a las páginas web
podemos diseñar un código que vaya extrayendo los datos de esta para poder disponer de ellos.

Tras probar con distintas herramientas de web scraping, que ofrecen tanto los lenguajes de
programación R y Python, no se conseguía obtener los datos.

Finalmente, en la opción que existe en el navegador de Herramientas para desarrolladores, en


la sección Network, se encuentra un enlace que lleva a un archivo JSON en el que se encontraban

25
“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

las estadísticas completas de cada partido. Una vez conseguido esto, se analizó dicho enlace para
que no hubiese que ir buscando ese enlace partido a partido, sino encontrar el patrón para que
pudiese ser modificable y agilizase ese proceso, se encontró y gracias a ello se pudieron extraer
tres temporadas completas más la actual, la temporada 2019-2020.

Una vez conseguido el patrón de dichos enlaces, a través de la librería jsonlite de R (Ooms,
2020), se extrajeron todos los datos en dos tablas distintas. La primera tabla de ellas está formada
por las estadísticas de los jugadores en cada partido, forma un total de 150.135 registros con 41
columnas. La segunda tabla está compuesta por todos los partidos, pero únicamente aparecen los
equipos y el resultado de cada partido. En un principio, esta segunda tabla iba a ser únicamente
de control para saber si se habían extraído bien los partidos y ver cuáles faltaban, pero
posteriormente se pudo sacar utilidad, por lo que cumple dos funciones. La duración de este
proceso suele rondar en torno a las tres horas y media, dependiendo del equipo y la velocidad de
conexión a la red.

Para automatizar el proceso y no tener que estar ejecutando el código en R diariamente de


forma manual, se empleó la herramienta Talend Open Studio for Data Integration, se trata de
herramienta open-source, que de una forma visual permite transformar datos a través de código
Java (Limberg, 2017).

El proceso que se llevó a cabo es el siguiente:

Ilustración 5: Esquema de extracción de datos.

En primer lugar, se creó un archivo batch, es un archivo de texto sin formato que contiene un
conjunto de instrucciones para ejecutar en el sistema operativo. Este archivo permite que ejecute
el programa R y después el script que contiene la extracción de los datos. En el punto 1 se muestra
la ejecución del archivo batch, el cual ejecuta el script de R del cual se genera un archivo CSV,
en el gráfico es el archivo NBA_JUGADORES. El proceso que lleva a cabo en el punto 2 es el
de subir el archivo CSV a la base de datos en Azure (de la cual se hablará posteriormente). Para
terminar con el automatizado de la extracción, lo que se hizo es guardar el proceso creado en

26
“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

Talend en otro archivo batch, y, a través de la herramienta que dispone Windows, el programador
de tareas, se hizo que cada noche a las 5 de la madrugada se actualizasen los datos.

De este modo los datos son actualizados en la base datos de forma diaria y automática, lo cual
permite tener los últimos datos al día.

6.2. EXTRACCIÓN DE LOS JUGADORES FRANQUICIA


En cada uno de los equipos de la NBA hay una serie de jugadores que tienen un rendimiento muy
por encima de la media. De estos jugadores suele depender el rendimiento general del equipo y,
normalmente, son aquellos que tienen los salarios más altos de entre toda la plantilla.

Como el hecho de que un jugador estrella juegue o no tiene un impacto considerable dentro
del rendimiento del equipo, se van a extraer estos datos para tener una idea de la condición del
equipo antes de que se dispute el encuentro. La fuente de datos es el portal web de ESPN (ESPN,
2017), muy conocido en el mundo del deporte. En la web se ofrecen los datos históricos de los
salarios de los jugadores para cada temporada.

El proceso de extracción se ha llevado a cabo en Python, usando las librerías urllib3 y


BeautifulSoup. Para sacar la información se realiza el siguiente proceso:

En primer lugar, se inspecciona la página para ver donde están almacenados los datos dentro
del código en el que está construida la página.

Una vez localizados, tratamos de pasar el código de la página donde está el contenido que
necesitamos a Python, de manera que se pueda manipular de forma automática. Para hacer esto,
se utilizan las librerías urllib3, que extrae el código, y la librería BeautifulSoup, que lo parsea y
permite buscar de una manera más fácil los elementos de la página necesarios para extraer el
contenido.

Ahora que ya se tienen localizados los datos, se extraen. Se dividen en tablas según la
temporada. Para cada temporada y para cada equipo se almacenan los 5 jugadores mejor pagados
de cada temporada.

Una vez sacados los jugadores mejor pagados para cada temporada se almacenan en tablas
divididas para cada una de las temporadas. El número de jugadores franquicia considerados para
cada temporada son 150, 30 equipos y 5 jugadores por equipo.

27
“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

6.3. EXTRACCIÓN CUOTAS DE APUESTAS


Actualmente el mercado de las apuestas deportivas está en auge, y el baloncesto no iba a ser
menos. Dentro de este deporte hay apuestas de diversos tipos, como pueden ser:

• Si el ganador del partido será el equipo local o el visitante.


• Si irán a la prórroga.
• Apuestas por cuartos.
• Apuestas Teaser.
• Apuestas totales.
• Apuestas con hándicap.
• Player Props.

Para desarrollar este trabajo se han extraído las apuestas del portal Oddsport, que guarda en su
página (Odds Portal, 2017) el histórico de las cuotas de los partidos de todas las temporadas de
las que se tienen datos.

Para extraer los datos, se probó primero tratar de extraerlo creando un web scraper como se
hizo con los jugadores franquicia que se menciona en el apartado anterior. El diseño de la página
web está realizado de manera que conforme el cliente, es decir el usuario, va interaccionando con
la página, el contenido se va actualizando. Esto supone un problema si queremos emplear las
librerías mencionadas anteriormente, ya que estas son útiles cuando el contenido ya está cargado
directamente en la página.

Para resolver este problema se trató de utilizar otras librerías disponibles en Python como
Selenium, que permiten a partir de líneas de códigos ir cargando en la página el contenido que se
quiere extraer. Pero al final, por razones técnicas y de tiempo, se ha empleado la extensión de
Google Chrome, Web Scraper (Web Scraper, s.f.). Esta extensión permite al usuario de una
manera intuitiva, extraer contenido de la web de manera automática y sin necesidad de entender
cómo está estructurada la web.

Los datos que se han extraído son un promedio de las cuotas de las casas de apuestas que
aparecen en la web de Oddsportal. Como podemos observar en la ilustración 4, cogemos la media
de las cuotas para el equipo local (la que está en la columna de nombre one) y la cuota para el
equipo visitante (la que está en la columna de nombre two). Ambas cuotas se recogen para los
partidos de la NBA de las temporadas que se tienen datos y se cuadran para cada partido según la
fecha y los equipos que se enfrentan.

28
“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

Ilustración 6: Web de extracción de datos.

Las cuotas son un dato muy útil, pues da una idea de la superioridad de un equipo frente al
otro y son datos que se proporcionan antes de que se juegue el partido, lo cual ofrece un dato muy
valioso y representativo para tratar de establecer quién será el ganador del partido.

29
“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

7.- TRANSFORMACIÓN DE DATOS

El paso que sigue tras la extracción de los datos es la transformación de los datos. Primero se
exploran los datos, hay que asegurarse de que los datos que se han extraído no tienen valores
ausentes, nulos o cualquier tipo de error. Este proceso es clave para después empezar a trabajar
con los mismos y sacar los atributos que se usarán para tratar de predecir al ganador del partido.

Tras una exploración de los datos extraídos se concluye que los datos de los que se disponen
están listos para pasar a la siguiente fase, extraer los atributos que se van a emplear en los modelos.

Antes de realizar los cálculos de los distintos atributos, se disponen las tablas para poder
trabajar con ellas. En la extracción de datos, se obtuvieron las estadísticas que aparecían en el box
score. Aquí se encontraban las estadísticas por jugador de cada equipo y cada partido. Como el
análisis que aquí se presenta es a nivel de equipo, primero, se calculan las estadísticas para cada
equipo. Para llevar a cabo estos cálculos, en primer lugar, se realiza un “group by” a la tabla
jugadores por ID_PARTIDO e ID_EQUIPO, y se aplica la función sum (sumatorio) a sus
columnas. Por tanto, esta tabla tendrá las estadísticas por partido y equipo completas. También se
añaden dos columnas, una con el porcentaje de tiro y la segunda con el porcentaje de tiro de tres
puntos. Esta tabla (tabla group by) tiene dos registros (filas) por partido, uno con las estadísticas
del visitante y otra con las del local, que podemos distinguir por la columna HOST (0 visitante y
1 local). Se recorre esta tabla y se crea una auxiliar con una fila por partido, donde cada columna
tiene el sufijo _local o _vis, según corresponda. Ahora, se realiza un join con la tabla calendario,
en la que se añaden todas estas columnas de estadísticas. Estas estadísticas nos permiten calcular
diferentes métricas y las estadísticas avanzadas.

Todos los atributos se han calculado tanto para el equipo local como para el equipo visitante
y siempre teniendo en cuenta que no se pueden añadir valores del partido que van a jugar,
únicamente de los anteriores cuando trabajamos con promedios.

• Win Lose (W/L): Esta es la variable dependiente objetivo a predecir. Para calcularla se
toman las columnas correspondientes a los puntos del local y visitante se calcula la diferencia
de puntos de cada partido. Con esta columna, se calcula W/L que será 1 si el local ha ganado
el partido o 0 si ha ganado el visitante.
• Descansos: Se han calculado los días de descansos que hay previos al enfrentamiento
entre los dos equipos. Se han calculado tanto para el local como para el visitante. Finalmente,
se han restado el número de días de descansos entre uno y otro.
• Rachas de victorias de los últimos 5 partidos: Se ha querido reflejar las últimas 5
victorias del equipo visitante y local. Para tener en cuenta estas victorias el cálculo se ha
hecho de la siguiente manera. Primero se obtiene un vector de longitud 5 que contiene 0 y 1

30
“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

que nos indican si ha ganado el partido o lo ha perdido. Ahora, considerando que las victorias
en partidos más próximos son más significativas, se dará un peso diferente a cada victoria.
Estos pesos son 0.5 si ha ganado el partido anterior, 0.2 hace dos, 0.15 hace tres, 0.1 hace
cuatro y 0.05 hace cinco partidos. Se suma y se obtiene 1 si ha ganado los últimos 5 partidos
y 0 si no ha ganado ninguno.
• Estadísticas box score: Para tener en cuenta las estadísticas del box score y,
posteriormente, ver si tienen relevancia para el estudio, se ha hecho un promedio de tiros
intentados, tiros encestados, tiros de campo intentados, tiros de campo encestados, rebotes
conseguidos de los últimos 5 partidos.
• Diferencia de puntos compuesta: Esta ratio mide la diferencia de puntos del equipo que
se quiere calcular frente a los puntos del último partido jugado. La clave de esta ratio es que
se calcula de forma distinta según el equipo juegue de como local:
𝑃𝑡𝑠𝑙𝑜𝑐𝑎𝑙 − 𝑃𝑡𝑠𝑣𝑖𝑠𝑖𝑡𝑎𝑛𝑡𝑒
𝐷𝑖𝑓𝑒𝑟𝑒𝑛𝑐𝑖𝑎𝑙𝑜𝑐𝑎𝑙 =
𝑃𝑡𝑠𝑙𝑜𝑐𝑎𝑙

O como visitante:
𝑃𝑡𝑠𝑣𝑖𝑠𝑖𝑡𝑎𝑛𝑡𝑒 − 𝑃𝑡𝑠𝑙𝑜𝑐𝑎𝑙
𝐷𝑖𝑓𝑒𝑟𝑒𝑛𝑐𝑖𝑎𝑣𝑖𝑠𝑖𝑡𝑎𝑛𝑡𝑒 =
𝑃𝑡𝑠𝑣𝑖𝑠𝑖𝑡𝑎𝑛𝑡𝑒

Lo que indica esto es que, si el valor es positivo, es porque ganaron y, si es negativo, lo


contrario. Además, ofrece valores más altos a aquellos partidos que hayan ganado con una
diferencia de puntos amplia y, a la inversa, ofrece un valor más bajo entre aquellos que hayan
perdido por una amplia diferencia. Los valores máximos y mínimos que tendría serían +1 y
-1. Por último, se calculó esta ratio para cada uno de los últimos 5 partidos jugados.
• Porcentaje de partidos ganados por el local como local y porcentaje de partidos
ganados por el visitante como visitante: Con este atributo se quiere tener una métrica que
indique la calidad del equipo cuando juega en casa y cuando juega fuera de casa.

Para realizar los cálculos se ha seguido el siguiente procedimiento. Se divide la tabla de


los partidos en cada una de las cuatro temporadas sobre las que se centra el estudio. Además,
se dividen en local y visitante, por cada equipo, lo que da lugar a ocho listas, cuatro
temporadas, local y visitante, de 30 tablas (una por equipo) cada una. A continuación, se
recorre mediante un bucle cada una de las 8 listas, y se realiza el siguiente proceso: en cada
iteración se añaden a la tabla tres columnas, la primera contiene los partidos jugados como
local o visitante hasta ese partido, la segunda los ganados (auxiliar) y la tercera resulta de la
división de la segunda entre la primera, lo que da los porcentajes (sobre 1) de victoria del
equipo local como local, y del equipo visitante como visitante.

31
“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

• Porcentaje de partidos ganados por el local y porcentaje de partidos ganados por el


visitante: En este caso, no se diferencia si el equipo ha ganado los partidos como local o
visitante en sus encuentros anteriores, sino que se calcula el porcentaje de los partidos que
ha ganado sobre el total de partidos jugados tanto de local como de visitante.
• Back to back: Con esto se determina si un equipo va a disputar el encuentro sin haber
tenido ni un solo día de descanso. Para realizar los cálculos del back to back y del porcentaje
de partidos ganados se ha seguido el siguiente procedimiento. Se ha dividido la tabla total de
los partidos en temporadas y se recorre una lista con las abreviaturas de cada uno de los 30
equipos, de forma que en cada iteración se crea una tabla auxiliar que contiene todos los
partidos de un equipo X en una temporada Y. Las variables calculadas se almacenan en un
diccionario con el ID_PARTIDO y si era local (1/0). Este diccionario se almacena en una
lista. Creamos en la tabla calendario las columnas correspondientes y con un bucle y un
condicional se añaden a cada partido los datos del diccionario que corresponde de la lista,
para local y visitante. En total se añaden 12 columnas.
• Play-offs: Se añade una columna que valore si el equipo puede clasificarse para play-
offs, que será 1 si tiene opciones, 0 si no las tiene y 2 si ya está clasificado. Para ello, con la
tabla calendario dividida por temporadas y las listas de equipos del este y del oeste, se crea
un bucle que recorre cada fila de la tabla, evalúa si el equipo local/visitante es del este/oeste
y añade a un diccionario el número de partido de la temporada que es (para ese equipo, entre
1 y 82), el equipo y las victorias. De esta forma, obtenemos ocho tablas: 2 por cada una de
las 4 temporadas (Este/Oeste), que contienen (salvo la de la temporada en curso) 1230 filas
registros, es decir, las victorias de cada uno de los 15 equipos tras haber disputado cada uno
de los 82 partidos. Con estas clasificaciones se recorre de nuevo la tabla de cada una de las
temporadas, filtrando si es Este/Oeste y el número de partido (1 - 82), se importan de las
clasificaciones anteriores del Este/Oeste las victorias del octavo clasificado, y se calculan las
tres posibilidades:
1. Si con los partidos restantes el octavo no puede alcanzar al equipo X (el de la
iteración), este equipo estará clasificado para play-offs.
2. Si el equipo X más los partidos restantes puede alcanzar al octavo, aún tendrá
opciones de clasificarse para play-offs (Nota: esto podría no ser así porque no
habría que tener en cuenta sólo el octavo, habría que contemplar el resto de los
equipos y los enfrentamientos restantes, pero es una primera aproximación).
3. Si con los partidos restantes el equipo X no puede alcanzar al octavo, este
equipo estará eliminado de los play-offs.

32
“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

Las estadísticas avanzadas (Rabinal, 2020) son otro tipo de estadísticas que permiten
estudiar la actuación de un equipo de una manera distinta a la que se refleja en la tabla del
box score.

• Offensive Efficiency: Se define como la cantidad de puntos que produce un jugador o


equipo cada 100 posesiones. Si el valor supera la barrera de 100 significa que ese equipo está
actuando de manera efectiva en el ataque ya que son capaces de anotar más de un punto por
cada posesión.

Para calcular este índice se ha seguido la siguiente fórmula (NBA Stuffer, Sin fecha):

𝑃𝑢𝑛𝑡𝑜𝑠 𝑎𝑛𝑜𝑡𝑎𝑑𝑜𝑠
𝑂𝑓𝑓𝑒𝑛𝑠𝑖𝑣𝑒 𝐸𝑓𝑓𝑖𝑐𝑖𝑒𝑛𝑐𝑦 = 100 ∗ ( )
𝑃𝑜𝑠𝑠𝑒𝑠𝑠𝑖𝑜𝑛

Los puntos anotados se refieren a los puntos que ha anotado el equipo en el partido. La
posesión se puede calcular de diferentes maneras.
Para este índice se ha calculado usando una fórmula sencilla:

𝑃𝑜𝑠𝑠𝑒𝑠𝑠𝑖𝑜𝑛 = 0,96 ∗ [(𝑓𝑔𝑎) + (𝑡𝑜𝑣) + 0.44 ∗ (𝑓𝑡𝑎) − (𝑜𝑟𝑒𝑏)]

Donde:
• fga: Tiros intentados.
• tov: Balones perdidos.
• fta: Tiros libres intentados.
• oreb: Rebotes ofensivos.
• Defensive Efficiency: Se define como la cantidad de puntos que un equipo permite que
le anoten cada 100 posesiones. Un valor por debajo de los 100 puntos se considera que el
equipo está haciendo una buena labor defensiva.
El cálculo es muy parecido a la eficiencia ofensiva.

𝑃𝑢𝑛𝑡𝑜𝑠 𝑎𝑛𝑜𝑡𝑎𝑑𝑜𝑠 𝑝𝑜𝑟 𝑒𝑙 𝑒𝑞𝑢𝑖𝑝𝑜 𝑐𝑜𝑛𝑡𝑟𝑎𝑟𝑖𝑜


𝑂𝑓𝑓𝑒𝑛𝑠𝑖𝑣𝑒 𝐸𝑓𝑓𝑖𝑐𝑖𝑒𝑛𝑐𝑦 = 100 ∗ ( )
𝑃𝑜𝑠𝑠𝑒𝑠𝑠𝑖𝑜𝑛

La fórmula de la posesión es la misma que para la eficiencia ofensiva. En este caso se


tiene en cuenta el número de puntos que el equipo contrario anota.
• Net Rating: Es el resultado de la diferencia entre la eficiencia ofensiva y defensiva. Un
net rating positivo suele ser un indicador favorable al juego de un equipo. Si es negativo,
puede indicar que el equipo sufre un déficit, lo que puede llegar a ser perjudicial.

33
“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

• Offensive Efficiency preciso: El cálculo es el mismo que para la eficiencia ofensiva


calculada anteriormente, lo que cambia es la manera en la que se calcula la posesión. En el
cálculo de las eficiencias que se ha realizado antes, se presentaba una fórmula de la posesión
básica. Ahora se va a emplear una fórmula más precisa de la misma.

𝑜𝑟𝑒𝑏
𝑃𝑜𝑠𝑠𝑒𝑠𝑠𝑖𝑜𝑛 = 0.5 ∗ ((𝑓𝑔𝑎 + 0.4 ∗ 𝑓𝑡𝑎 − 1.07 ∗ ((𝑜𝑟𝑒𝑏+𝑜𝑝 ) ∗ (𝑓𝑔𝑎 − 𝑓𝑔) + 𝑡𝑜𝑣) +
𝑟𝑒𝑏)
(𝑜𝑝 𝑜𝑟𝑒𝑏)
(𝑜𝑝 𝑓𝑔𝑎 + 0.4 ∗ (𝑜𝑝 𝑓𝑡𝑎) − 1.07 ∗ (𝑜𝑝 ) ∗ (𝑜𝑝 𝑓𝑔𝑎 − 𝑜𝑝 𝑓𝑔) + 𝑜𝑝 𝑡𝑜𝑣))
𝑜𝑟𝑒𝑏+𝑑𝑟𝑒𝑏)

Donde:
• fga: Lanzamientos intentados.
• tov: Balones perdidos.
• fta: Tiros libres intentados.
• oreb: Rebotes ofensivos.
• dreb: Rebotes defensivos.
• fg: Lanzamientos totales.
• op fga: Lanzamientos intentados realizados por los oponentes.
• op tov: Balones perdidos realizados por los oponentes.
• op fta: Tiros libres intentados realizados por los oponentes.
• op oreb: Rebotes ofensivos realizados por los oponentes.
• op dreb: Rebotes defensivos realizados por los oponentes.
• op fg: Lanzamientos totales realizados por los oponentes.

Usando esta fórmula de la posesión, la eficiencia ofensiva del equipo local se corresponde
con la eficiencia defensiva del equipo visitante.
• Defensive Efficiency preciso: Como ya se ha indicado en la eficiencia ofensiva, se usa
ahora la fórmula más precisa para el cálculo de posesión, pero teniendo en cuenta los puntos
que recibe el equipo.
Usando esta fórmula de la posesión, la eficiencia defensiva del equipo local se corresponde
con la eficiencia ofensiva del equipo visitante.
• Net Rating preciso: Es la diferencia entre la eficiencia ofensiva y defensiva del equipo
calculadas con la fórmula más precisa para la posesión.
Se han calculado las eficiencias ofensivas y defensivas y los net rating como un promedio
de toda la trayectoria de los equipos a lo largo de la temporada y para los últimos 10 partidos.
• Four Factors: Los cuatro factores claves del éxito del baloncesto, así los definía Dean
Oliver, uno de los máximos referentes en el mundo de las estadísticas en el baloncesto. En

34
“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

su libro Basketball on Paper, (Squared2020, 2017) trata de identificar qué cuatro factores
son los que están relacionados con el éxito en el baloncesto.

1. Porcentaje de tiro de campo efectivo (eFG%): Esta medida es una escala corregida
para tratar de identificar el porcentaje de tiros de campo de un equipo. Esta medida
no se puede tomar de manera individual ya que con ella es imposible determinar el
estilo de juego de un equipo. Sin embargo, es un buen indicador de los puntos
anotados por cada intento de tiro.
𝑓𝑔𝑚 + 0.5 ∗ 𝑡𝑝𝑚
𝑒𝐹𝐺% =
𝑓𝑔𝑎

2. Factor de pérdida de balón (TOV%): Refleja el porcentaje de balones perdidos


respecto a las posesiones. Un valor alto de esta medida en un equipo indica que el
equipo pierde más veces el balón por cada posesión a lo largo del partido.
𝑡𝑜𝑣
𝑇𝑂𝑉% =
𝑝𝑜𝑠𝑠𝑒𝑠𝑖𝑜𝑛𝑠

3. Porcentaje de rebote ofensivo (OREB%): Con esta medida se trata de reflejar el


número de rebotes ofensivos frente al número de rebotes disponibles tras un intento
de tiro fallido. Da una idea de la habilidad de un equipo de continuar con la ofensiva
a pesar de haber fallado un tiro.
𝑜𝑟𝑒𝑏
𝑂𝑅𝐸𝐵% =
𝑜𝑟𝑒𝑏 + 𝑜𝑝 𝑑𝑟𝑒𝑏

4. Factor de tiro libre (FTRate): Representa la frecuencia con la que el equipo llega a
la línea de tiros libres. Cuando un equipo tiene un factor de tiro libre alto está llevando
a cabo dos objetivos. El primero es garantizar intentos de anotar más puntos. Y el
segundo, refleja que el equipo rival está perdiendo el control del juego.
𝑓𝑡𝑎
𝐹𝑇𝑅𝑎𝑡𝑒 =
𝑓𝑔𝑎

Se han calculado estos factores como un promedio de toda la trayectoria de los equipos a
lo largo de la temporada y para los últimos 10 partidos.
• Expected Winning Percentage (Log5): Fórmula desarrollada por Bill James (NBA
Stuffer, s.f.). Estima la probabilidad de que en equipo A gane al equipo B basado en el
porcentaje de partidos que ha ganado el equipo A al equipo B, y viceversa.
Para realizar el cálculo de esta métrica, primero se ha calculado el porcentaje de partidos
que ha ganado el equipo A frente al equipo B sobre el total de los partidos en los que se han
enfrentado. Para ello primero se sacan el total de los partidos en los que los dos equipos se

35
“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

han enfrentado hasta la fecha. Se contabilizan las veces que un equipo ha ganado a otro tanto
como local como visitante. Finalmente, se divide entre el número de partidos que han jugado.
Ahora con estos porcentajes pasamos a calcular el Expected Winning Percentage con la
siguiente fórmula:

𝑝𝐴 − 𝑝𝐴 ∗ 𝑝𝐵
𝑊𝑖𝑛𝑛𝑖𝑛𝑔 𝑃𝑒𝑟𝑐𝑒𝑛𝑡𝑎𝑔𝑒 𝑜𝑓 𝑡𝑒𝑎𝑚 𝐴 𝑎𝑔𝑎𝑖𝑛𝑠𝑡 𝑡𝑒𝑎𝑚 𝐵 =
𝑝𝐴 − 𝑝𝐵 − 2 ∗ 𝑝𝐴 ∗ 𝑝𝐵

• Player Efficency Rating (PER): Es una de las estadísticas más populares en la NBA. Se
calcula por jugador y está pensada para tener en cuenta todas las contribuciones tanto
ofensivas como defensivas. Su fórmula es:

2 𝑇𝑒𝑎𝑚 𝑎𝑠𝑡 1 1 𝑇𝑒𝑎𝑚 𝑎𝑠𝑡


𝑢𝑃𝐸𝑅 𝑥 𝑀𝑃 = 3 ∗ 𝑝𝑚 + ∗ 𝑎𝑠𝑡 + (2 − 𝑓 ) ∗ 𝑓𝑔𝑚 + ∗ 𝑓𝑡𝑚 ∗ (2 − )−𝑣∗
3 𝑇𝑒𝑎𝑚 𝑓𝑔𝑚 2 3 𝑇𝑒𝑎𝑚 𝑓𝑔𝑚

𝑡𝑜𝑣 − 𝑣 ∗ 𝑑 ∗ (𝑓𝑔𝑎 − 𝑓𝑔𝑚) − 0.44 ∗ 𝑣(0.44 + 0.56 ∗ 𝑑)(𝑓𝑡𝑎 − 𝑓𝑡𝑚) + 𝑣(1 − 𝑑)(𝑟𝑒𝑏 − 𝑜𝑟𝑒𝑏) +
𝐿𝑒𝑎𝑔𝑢𝑒 𝑓𝑡𝑚 𝐿𝑒𝑎𝑔𝑢𝑒 𝑓𝑡𝑎
𝑣 ∗ 𝑑 ∗ 𝑜𝑟𝑒𝑏 + 𝑣 ∗ 𝑠𝑡𝑙 + 𝑣 ∗ 𝑑 ∗ 𝑏𝑙𝑘 − 𝑝𝑓 ( − 0.44 𝑣)
𝐿𝑒𝑎𝑔𝑢𝑒 𝑝𝑓 𝐿𝑒𝑎𝑔𝑢𝑒 𝑝𝑓

Es una fórmula compleja que incluye factores (f, v y d; presentados en el anexo 1),
estadísticas de jugador, de equipo y de la liga. La leyenda de las diferentes variables se
presentará, también, en el anexo 1.
La fórmula se implementa en una función que calcula el PER de cada jugador. Para
calcular el del equipo, se promedia cada PER jugador con los minutos jugados por cada
jugador, dividido entre los minutos totales del partido. Así se obtiene el PER para local y
visitante por partido.
Además, a la vista de que los resultados no reflejan correctamente la calidad de equipos
de carácter defensivo (como Boston Celtics o San Antonio Spurs), se aproxima el mayor
PER de cada partido (que en un 90 % de las ocasiones coincide con el ganador) a 1, escalando
el del equipo contrario.

A parte de todas las estadísticas que se han calculado, para cada partido se han tenido en
cuenta las cuotas de apuestas y los lesionados de cada uno de los equipos.

• Cuotas de apuestas: Como ya se explicó en el apartado anterior de extracción, se han


extraído las cuotas de apuestas para cada uno de los equipos. Durante la extracción se
obtuvieron 4 tablas distintas, una para cada temporada, cada una de ellas recogía la fecha en
la que se jugaba el partido, las cuotas del equipo local y el equipo visitante y los puntos
anotados por el equipo local y el visitante.
Como en la tabla de las apuestas no se disponía de una columna como identificador del
partido, el primer paso fue normalizar las fechas de las tablas que contenían las apuestas y la

36
“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

tabla donde estaba la información de los partidos. Después se pasó a inspeccionar los datos
que se habían extraído de las cuotas. Se observa que hay datos de partidos que no pertenecen
a la temporada regular, que es el objeto de estudio de este trabajo. Eliminamos los datos que
no se van a estudiar y se conservan aquellos que son los que cuadran con los datos de los
partidos que se van a usar.
El siguiente paso fue unir los datos, para ello se normalizaron los datos de las fechas para
poder unirlas. La unión de las dos tablas se hizo teniendo en cuenta, la fecha y los equipos
que se enfrentaban. Se comprueba si hay o no conflicto en los datos. Se observa que hay
datos que no se han podido unir ya que habría diferencias en los datos asociados a los
partidos. Por lo tanto, se aborda el problema de otra manera. En vez de usar la fecha, se
estudia primero si los encuentros entre los equipos y los resultados de los encuentros son
valores únicos para todos los partidos. Se observa que, excepto para dos partidos de la
temporada de 2018-2019, en los encuentros que hubo, en ninguno se repitieron los equipos
que se enfrentaban ni el resultado final del partido. Entonces, para realizar la unión de los
datos, se tiene en cuenta qué equipo se enfrentaron y el resultado del partido, consiguiendo
así unir las dos tablas. Para los dos partidos de la temporada 2018-2019 se introdujeron los
datos de manera manual, ya que eran únicamente dos partidos.
● Lesionados: Una vez se extrajeron los datos de los jugadores franquicia de cada equipo
en cada temporada, se obtuvieron 4 tablas, una para cada temporada, de los jugadores mejor
pagados de los 30 equipos.
Primero se filtraron los 5 jugadores mejores pagados de cada uno de los equipos en cada
temporada. En la tabla en la que se recogían los datos de las estadísticas de los jugadores en
cada partido, la columna status indica si el jugador está lesionado para ese partido o si el
entrenador decidió no contar con él para jugar el partido. Teniendo en cuenta eso para cada
uno de los partidos, se pasa a comprobar, por el nombre del jugador, si ese jugador estaba
lesionado o si no se llegó a contar con él.
Después de hacer esto para cada partido, se hace una comprobación para ver si los datos
que se han obtenidos son correctos. Se observa que hay diferencias, ya que no se ha tenido
en cuenta si un jugador ha sido traspasado de un equipo a otro durante la temporada. Como
no se dispone de ese dato, se opta por contabilizar la ausencia de ese jugador en la plantilla
como un incremento en el número de lesionados de ese equipo para ese partido. Se toma esta
decisión ya que el hecho de que no se cuente con ese jugador con en el equipo, supone
también un punto negativo en la fuerza de la plantilla. Obteniendo así el número de
lesionados para el equipo local y el equipo visitante.

37
“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

8.- ALMACENAMIENTO

Para el almacenamiento de los datos se ha optado por hacer uso de las tecnologías Cloud. El
almacenamiento se realiza en una base de datos SQL en una nube. Dentro del mundo Cloud
existen tres grandes actores: AWS (Amazon Web Services), Google Cloud o Microsoft Azure, que
ofrecen una amplia gama de productos y soluciones, y por supuesto, la creación de una base de
datos SQL.

De estos proveedores se ha seleccionado Azure, por su sencillez y facilidad de integración. La


solución estándar, con hasta 10 Gb de almacenamiento ha sido la elegida al ser suficiente para el
alcance de este trabajo.

Con la suscripción de estudiante, Microsoft regala 100 $ para el primer año de uso. El coste
de esta base de datos sería de 12.65 €/mes. La suscripción de estudiante condiciona los servidores
que se pueden seleccionar, en este caso se eligió entre las posibles localizaciones el servidor de
Centro-Sur de EEUU, al no haber ninguno disponible entre los europeos.

De esta forma, los datos son fácilmente accesibles desde cualquier dispositivo de cualquier
miembro del grupo. Además, la solución sería fácilmente escalable en caso de necesitar más
almacenamiento u otro tipo de base de datos, ya que Azure ofrece una amplia gama de productos
y facilidad para exportar los datos entre ellos.

8.1. ESQUEMA DE BASE DE DATOS.


El esquema de la base de datos relacional consta de las siguientes tablas:

● Tabla NBA_CONTROL: Esta tabla contiene el ID_PARTIDO con los equipos que se
enfrentan como local y visitante, y los puntos que anotó el local y el visitante.

● Tabla NBA_JUGADORES: Contiene los datos extraídos de la página web de la NBA,


como ya se describió en el apartado de extracción de los datos. Se relaciona con el resto
de las tablas a través de los campos ID_JUGADOR, ID_EQUIPO y ID_PARTIDO.

● Tabla NBA_MODELOS: Contiene un total de 163 columnas y 4659 registros. Esta


tabla contiene todos los atributos que se han mencionado en el apartado de la
transformación de los datos. Con esta tabla es con la que se va a trabajar en los próximos
apartados para el desarrollo de los modelos de selección. Los registros están referidos
cada partido por el ID_PARTIDO. En el anexo 2 se adjunta una consulta realizada desde
Python para disponer de los datos para su uso en los modelos.

38
“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

● Tabla CUOTAS: En esta tabla están almacenadas las cuotas del local y del visitante
en las columnas one y two respectivamente. Están relacionadas con el partido por la
columna ID_PARTIDO.

● Tablas con los resultados: Se almacenarán los resultados de los modelos de predicción
en tablas con el nombre del modelo al que se refiere. Con estas tablas se realizarán las
visualizaciones correspondientes a cada uno de los modelos en la herramienta de
visualización de Power BI, cargando los datos a la aplicación directamente desde la
base de datos.

Ilustración 7: Esquema de base de datos.

8.2. INTEGRACIÓN DE AZURE CON EL ENTORNO DE DESARROLLO.


Para trabajar con la base de datos se ha empleado el complemento “pyodbc”, que permite conectar
Python con una base de datos SQL de forma bidireccional. Además de este complemento, era
necesario instalar un driver específico de Azure, en este caso ODBC Driver 17 for SQL Server.

Con ello, el usuario y la contraseña de la base de datos, se pueden ejecutar consultas sobre la
base de datos e importar los datos hasta el IDE empleado, donde se transformaba en un
DataFrame (tabla) de Pandas (librería de Python).

39
“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

9.- HERRAMIENTAS EMPLEADAS

Las herramientas empleadas para este proyecto en el desarrollo del aprendizaje automático son
las siguientes, Jupyter Notebook, R y Weka.

• Jupyter Notebook, es un entorno informático interactivo basado en la web para crear


documentos (Wikipedia [Proyecto Jupyter], s.f.). En concreto se ha utilizado el servidor
web Jupyter Python. Python es un lenguaje que simplifica mucho la programación, tiene
diversas librerías, una gran comunidad y, sobre todo, es un lenguaje flexible (Covantec,
s.f.). En este proyecto la mayoría de los modelos se han ejecutado con el lenguaje de
programación Python.

Ilustración 8: Logo de Jupyter Notebook. Ilustración 9: Logo de Python.

• R, es un entorno y lenguaje de programación con un enfoque estadístico, es un software


libre y es uno de los lenguajes más utilizados en investigación científica. Además,
destaca en los campos de aprendizaje automático, minería de datos, investigación
biomédica, bioinformática y matemáticas financieras (Wikipedia [R], s.f.). Se ha
utilizado fundamentalmente en la extracción de los datos empleando la técnica del web
scraping mencionado en el apartado 5, Extracción.

Ilustración 10: Logo de R.

• Weka, es una plataforma de software para el aprendizaje automático y minería de datos,


Weka está escrito en Java y es un software que soporta distintas tareas de minería de
datos y contiene herramientas para el preprocesamiento de datos (Wikipedia [Weka],
s.f.). La rapidez que el programa ejecuta los modelos es algo que hay que destacar, en
comparación con los lenguajes de programación mencionados anteriormente.

Ilustración 11: Logo de WEKA.

40
“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

10.- SELECCIÓN DE VARIABLES

Tras el capítulo de transformación de los datos, se han extraído una gran cantidad de atributos
(155 en total) y se ha realizado una limpieza y preparación de estos. Tener una cantidad de
atributos muy elevada, puede provocar un mal funcionamiento del modelo, bien porque no sea
capaz de ponderar correctamente cada una de las variables, o porque necesite de un mayor tiempo
de entrenamiento, lo que acaba afectando a su rendimiento.

Por ello, se va a hacer uso de diferentes algoritmos de selección de variables para determinar
cuáles de ellas son más relevantes de cara a predecir el ganador (local/visitante) del partido. De
estos algoritmos, dos de ellos se han implementado en Python, y uno en el programa WEKA. En
total se tienen 4659 registros y 163 columnas (identificadores + atributos + clase).

10.1. SELECCIÓN DE VARIABLES EN WEKA


WEKA es un software libre pensado para acelerar el ciclo Idea – Experimento – Resultados que
caracteriza todo proyecto de Machine Learning. De las herramientas que ofrece se va a hacer uso
del Explorer. En este apartado, además de algoritmos de selección de variables, se ofrecen
visualizaciones de los datos, limpieza y algoritmos de aprendizaje automático, entre otras
funciones.

Una vez iniciado el Explorer, se carga el dataset completo en WEKA. Se eliminan aquellas
columnas que no se usarán para predecir la categoría (columna W/L), como el ID_PARTIDO o
la fecha, entre otras. Tras esto, se hace clic en la pestaña ‘Select attributes’. Es en esta pestaña
donde se deben elegir varias variables:

• La columna a predecir, que se selecciona en 1.


• El ‘Attribute Evaluator’, que será el algoritmo que evaluará la importancia (score) de
las variables, en 2.
• El ‘Search Method’ que será la función que hace la selección en base al score del
algoritmo anterior, en 3.
• Por último, se debe seleccionar el ‘Attribute Selection Mode’, donde se puede elegir si
usa todo el training set o lo divide en diferentes folds (partes), de forma que evalúe los
atributos en cada uno y ofrece los resultados como una media.

41
“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

Ilustración 12: Interfaz WEKA.

De los múltiples algoritmos que ofrece WEKA, se ha hecho uso de InfoGainAttributeEval,


que evalúa el valor de un atributo midiendo la ganancia de información respecto a la clase. Es un
método de evaluación individual.

𝑰𝒏𝒇𝒐𝑮𝒂𝒊𝒏(𝑪𝒍𝒂𝒔𝒔, 𝑨𝒕𝒕𝒓𝒊𝒃𝒖𝒕𝒆) = 𝑯(𝑪𝒍𝒂𝒔𝒔) − 𝑯(𝑪𝒍𝒂𝒔𝒔 | 𝑨𝒕𝒕𝒓𝒊𝒃𝒖𝒕𝒆)

Como ‘Search Method’ se ha seleccionado Ranker, que ordena los atributos según la
puntuación que proporciona el algoritmo anterior, y se ha optado por un cross-validation de 10
folds para extraer unas mejores conclusiones. De los 155 atributos totales, en un primer filtrado
se eligen los 35 primeros. En la siguiente tabla se muestran los 10 primeros:

Ranking Score medio Atributo


1 0.117 Cuota equipo local
2 0.116 Cuota equipo visitante
3 0.047 Net Rating Local (Preciso)
4 0.039 Diferencias de puntos anteriores Local
5 0.038 Porcentaje de victoria local
6 0.032 Porcentaje de victoria del local como local
7 0.032 Net Rating visitante (Preciso)
8 0.031 Net Rating visitante
9 0.027 Eficiencia ofensiva local (Preciso)
10 0.027 Eficiencia ofensiva local
Tabla 2: Top 10 de los atributos WEKA.

42
“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

10.2. SELECCIÓN DE VARIABLES EN PYTHON

ANOVA (ANÁLISIS DE VARIANZA)

Es un algoritmo que compara la media de dos o más atributos (usando la distribución F), con la
clase esperada. Es decir, para una variable numérica, ANOVA agrupa por clases y calcula la
media de cada una, a mayor diferencia de medias más representativo es el atributo y mayor es su
F-value (Statistics How To, s.f.).

En Python este algoritmo viene implementado en la librería sklearn y se denomina f-classif.


Además, hacemos uso de SelectKBest que elige las k mejores variables, que del mismo modo que
en el WEKA, son las 35 primeras. De esas 35, las 10 primeras son:

Ranking Score medio Atributo


1 548 Cuota equipo local
2 487 Cuota equipo visitante
3 259 Net Rating Local (Preciso)
4 254 Diferencias de puntos anteriores Local
5 202 Porcentaje de victoria local
6 179 Net Rating visitante (Preciso)
7 178 Net Rating visitante
8 159 Diferencias de puntos anteriores visitante
9 152 Porcentaje de victoria del local como local
10 128 Porcentaje de victoria visitante
Tabla 3: Top 10 de los atributos Python.

Se observa que el resultado es muy similar entre ambos algoritmos, aunque en las variables
restantes el ANOVA sí dista más del resto de algoritmos. En el anexo 3 se puede consultar el
código utilizado.

KENDALL’S

Es una medida no paramétrica que mide la dependencia entre dos variables clasificadas y su
dirección. Devuelve un coeficiente de correlación (τ) entre cada atributo (Wikipedia [Kendall
rank correlation coefficient], s.f.).

En Python está implementado dentro del paquete scipy como stats.kendalltau. Los 10 atributos
con más Score (en valor absoluto) son:

43
“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

Ranking Score medio Atributo


1 0.318 Cuota equipo local
2 0.317 Cuota equipo visitante
3 0.192 Net Rating Local (Preciso)
4 0.188 Porcentaje de victoria local
5 0.187 Diferencias de puntos anteriores Local
6 0.164 Porcentaje de victoria del local como local
7 0.164 Net Rating visitante (Preciso)
8 0.163 Net Rating visitante
9 0.155 Eficiencia ofensiva local (Preciso)
10 0.153 Porcentaje de victoria visitante
Tabla 4: Top 10 Score.

De nuevo, el resultado es muy similar a los anteriores, y en las variables restantes es muy
similar al WEKA. En el anexo 3 se puede consultar el código utilizado.

10.3. ANÁLISIS DEFINITIVO

Si se agrupan las 35 variables de cada uno de los algoritmos, y se eliminan las repeticiones, se
obtiene un total de 56 variables, de las cuales 13 son comunes entre los tres algoritmos, 20 más
entre WEKA y Kendall’s, Kendall’s y ANOVA 2 más y ANOVA y WEKA una.

Ahora, se debe verificar que estas variables preseleccionadas no presentan una gran
correlación entre ellas, es decir, son independientes y, por tanto, representan aspectos diferentes
del juego. Además del resultado de los algoritmos, se razonará aquellas que deben eliminarse por
reiteración. Para ello se ha hecho uso del coeficiente de correlación de Pearson y, de nuevo, de
Kendall’s. Por ejemplo, este estudio muestra que los Net Rating precisos y básicos (emplean una
función de posesión diferente) presentan una correlación muy fuerte, y por lo tanto se han
eliminado los básicos. Del mismo modo ha ocurrido con la eficiencia ofensiva y defensiva
básica/avanzada, y con la diferencia de puntos compuesta y la victoria o derrota en el anterior
partido. Otras variables que tienen una correlación superior a 0.7 no se han eliminado al
representar aspectos diferentes, como el porcentaje de victoria y el net rating. Tras este análisis
se eliminan un total de 18 variables que tienen fuerte correlación con otra y, además, representan
aspectos muy similares del juego.

Tras esta segunda selección, se tienen un total de 38 variables que siguen siendo excesivas
para el entrenamiento. Ahora, con los resultados preliminares de los modelos, criterios

44
“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

baloncestísticos y deportivos, y el objetivo de tener la mayor cantidad posible de factores distintos


en cuenta se han seleccionado un total de 27 variables, que son:

• Cuota local • Rating ofensivo visitante.


• Cuota visitante • Rating defensivo local.
• Net rating local preciso • Rating defensivo visitante.
• Net rating visitante preciso • PER local.
• Porcentaje victoria local • PER visitante.
• Porcentaje victoria visitante. • Diferencia de descanso
• Porcentaje victoria local como • Back-to-back local
local. • Back-to-back visitante.
• Porcentaje victoria visitante como • Diferencia de puntos compuesta
visitante. partido anterior local.
• Racha últimos 5 partidos local. • Diferencia de puntos compuesta
• Racha últimos 5 partidos visitante. partido anterior visitante.
• Lesionados local. • Media de la diferencia de puntos de
• Lesionados visitante. los últimos 10 partidos local.
• Clasificación para play-offs local. • Media de la diferencia de puntos de
• Clasificación para play-offs los últimos 10 partidos visitante.
visitante.
• Rating ofensivo local.

De esta forma tenemos los datos ya seleccionados y estudiados para entrenar los modelos de
manera correcta.

45
“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

11.- MÉTRICAS

En este apartado se tratarán las métricas usadas en los distintos modelos para medir la calidad de los
mismos (Martínez Heras, Precision, Recall, F1, Accuracy en clasificación, s.f.). A continuación, se
mostrará la explicación de las métricas y se hará un pequeño ejemplo en cada caso de acuerdo con
una muestra aleatoria de 100 partidos, siendo el valor 1 la victoria del equipo local y el 0 la victoria
del equipo visitante:

● Matriz de confusión: Sirve para visualizar el desempeño de un modelo de forma sencilla.


La matriz está compuesta por dos bloques, uno de ellos son los valores predichos y otros los
valores reales. En este proyecto las matrices de confusión se hacen usando Python y el código
utilizado se encuentra en el anexo 4.
En este ejemplo predice correctamente 75 partidos, de los cuales acierta la victoria local
en 5 casos, y, la victoria visitante en 70, sin embargo, predice erróneamente 25 valores, 10
de ellos son predichos como victoria local cuando ganó el equipo visitante y en los otros 15
sucede lo contrario.

Predicción Predicción
0 1 0 1
0 TN FP 0 70 10
Realidad Realidad
1 FN TP 1 15 5

Tabla 5: Predicción/Realidad.

● Exactitud (Accuracy): esta métrica indica que tan bien realiza la clasificación el modelo, es
decir, mide los casos en las que el modelo ha acertado. A pesar de que esta medida suele ser
muy utilizada, puede llevar a error, ya que no se distingue entre los distintos tipos de aciertos
ni de errores, por ejemplo, podría ser que acertase muchos partidos de victoria local, sin
embargo, de la visitante cayese mucho.

𝑇𝑃 + 𝑇𝑁
𝑎𝑐𝑐𝑢𝑟𝑎𝑐𝑦 =
𝑇𝑃 + 𝑇𝑁 + 𝐹𝑃 + 𝐹𝑁

5 + 70
𝑎𝑐𝑐𝑢𝑟𝑎𝑐𝑦 = = 0.75
5 + 70 + 10 + 15

Con este ejemplo daría un acierto del 75% de los partidos predichos.

46
“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

● Precisión (precision): ofrece la calidad de predicción de los partidos locales (clase positiva),
es decir, de todos los partidos en los que hubo victoria local, en cuáles se ha acertado:
𝑇𝑃
𝑝𝑟𝑒𝑐𝑖𝑠𝑖𝑜𝑛 =
𝑇𝑃 + 𝐹𝑃
5
𝑝𝑟𝑒𝑐𝑖𝑠𝑖𝑜𝑛 = = 0.33
10+5

En este caso el modelo sólo podría predecir con exactitud un 33% de los partidos que se
jugasen de visitante.
También se puede hacer lo mismo para los partidos en los que se intenta predecir la victoria
del equipo visitante:
70
𝑝𝑟𝑒𝑐𝑖𝑠𝑖𝑜𝑛 = = 0.82
70+15

Para el equipo visitante la precisión sería del 82%, muy superior al 33% del equipo visitante.
● Exhaustividad (recall): es el porcentaje de partidos locales que ha sido capaz de identificar
correctamente, es decir, dentro de los partidos que ha predicho como victoria del local eran
ciertas, al igual que antes se puede hacer para las victorias de visitantes.
𝑇𝑃
𝑟𝑒𝑐𝑎𝑙𝑙 =
𝑇𝑃 + 𝐹𝑁

5
𝑟𝑒𝑐𝑎𝑙𝑙 = = 0.25
5 + 15

Este modelo sólo sería capaz de identificar un 25 % de las victorias de locales.

• F1 score: esta métrica consiste en la unión de la precisión y del recall para que sea más fácil
la comparación entre distintos modelos. Al usar esta métrica, tanto la precisión como el recall
tienen la misma importancia, en el caso de que se quisiese dar más importancia a la precisión,
entonces se podría usar el F2 score.

𝑝𝑟𝑒𝑐𝑖𝑠𝑖𝑜𝑛 · 𝑟𝑒𝑐𝑎𝑙𝑙
𝐹1 = 2
𝑝𝑟𝑒𝑐𝑖𝑠𝑖𝑜𝑛 + 𝑟𝑒𝑐𝑎𝑙𝑙

0.33 · 0.25
𝐹1 = 2 = 0.28
0.33 + 0.25

47
“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

12.- MODELOS DE PREDICCIÓN

12.1. INTRODUCCIÓN
En este apartado se presentarán los diferentes modelos planteados para predecir los ganadores de cada
partido. En total se han elaborado un total de seis modelos, que, por orden de presentación son:
regresión lineal, regresión logística, redes neuronales, árbol de decisión, SVM y Random Forest. En
cada uno de ellos se explica cuáles son sus fundamentos y cómo se han configurado sus
hiperparámetros, para posteriormente evaluar los resultados una vez realizado el entrenamiento.

El entrenamiento en todos ellos se ha llevado a cabo siguiendo la misma metodología. Se han


utilizado dos métodos de entrenamiento:

• En el primer método, que denominaremos test completo, se entrena el modelo con las 27
variables seleccionadas y con las tres primeras temporadas, y se evalúa en la temporada en
curso, que, tras la eliminación de los 170 primeros partidos, tiene un total de 800 (20,62 %
del dataset total). A continuación, se eliminan las cuotas de las casas de apuestas extraídas y
se reentrena con estas 25 variables del mismo modo que con las cuotas.

• En el segundo método, se realiza una prueba del modelo más realista, y, en vez de predecir
los 800 partidos de la temporada 2019-2020, se entrena con las tres primeras temporadas y
se evalúa en los 100 primeros partidos. Ahora, estos 100 partidos se incorporan, junto con el
set anterior, al dataset de entrenamiento, se reentrena la red y se evalúa en los 100 siguientes
(partidos del 100 al 200). Se sigue realizando el mismo proceso, evaluando en los siguientes
100 mientras se incorporan los anteriores al set de entrenamiento. De esta forma, el algoritmo
puede entrenarse en las particularidades de la temporada en curso. Este entrenamiento se
denominará test dividido y conlleva entrenar los modelos ocho veces en total. De igual
manera que antes, este entrenamiento se realizará con y sin las cuotas.

De esta forma, se dispondrá de 4 porcentajes de acierto por modelo, lo que dará lugar a un análisis
y comparativa final entre todos los modelos.

48
“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

12.2. REGRESIÓN LINEAL


La regresión lineal trata de relacionar una variable frente a un conjunto de variables explicativas
(Wikipedia [Regresión lineal], s.f.). Este modelo es uno de los más simples y sencillos para la
predicción, suele ser utilizado para estudiar la relación que existe entre las variables y puede ser
expresado de acuerdo con la siguiente función:

𝑌 = 𝛽0 + 𝛽1 𝑥1 +. . +𝛽𝑘 𝑥𝑘 + 𝜀

Donde Y sería la variable que se quiere predecir, en nuestro caso sería el porcentaje que tiene un
equipo de ganar el partido, 𝛽0 es la constante, el resto de β sería la influencia que tienen las variables
sobre la variable a predecir y ε es la perturbación aleatoria, es decir, aquellos valores que no son
predichos por las variables y que son asociadas al azar, se calcula como el valor real menos el valor
predicho.

Para que el modelo sea válido tienen que cumplirse unas hipótesis:

1. La esperanza de la perturbación aleatoria es nula.


2. Homocedasticidad, es decir, la varianza de la perturbación aleatoria es constante en todo
el modelo.
3. Independencia, la covarianza entre perturbaciones distintas han de ser nulas.
4. Normalidad, las perturbaciones deben tener una distribución normal.
5. No deben existir dependencias lineales entre los atributos.
6. Regresores estocásticos, la variable a predecir no puede encontrarse en el conjunto de
variables predictoras.
7. Debe de haber más registros que atributos.

A la hora de usar este modelo para predecir porcentajes, se encuentra con un problema y es que al
no estar acotado entre 0 y 1, puede contener valores menores que 0 y mayores a 1.

Ilustración 13: Gráfica de Regresión lineal.

49
“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

A pesar de que existan ciertas ideas de que unos valores fuera del intervalo 0 y 1 puedan ser valores
muy probables, en este caso, se descartó el modelo, ya que no serían vinculantes los resultados. Por
lo tanto, para evitar ese problema se puede usar un modelo de regresión logística.

12.3. REGRESIÓN LOGÍSTICA: LOGIT

En este apartado se hablará sobre el modelo Logit (Padilla, s.f.), que forma parte de las regresiones
logísticas. Este modelo sirve para el cálculo de probabilidades, ya que ofrece un resultado entre 0 y
1. Además, es utilizado en el ámbito de la econometría, por ejemplo para el cálculo del riesgo de
impago.

Dadas estas características, se decidió usarlo para el cálculo de la probabilidad de la victoria de un


partido por equipo.

La función para calcular la probabilidad sigue la siguiente forma:

𝑃(𝑥) = 𝐴(𝛽0 + 𝛽1 𝑥1 +. . +𝛽𝑘 𝑥𝑘 )

𝑒𝑥𝑝 (𝑧)
𝐴(𝑧) =
1 + 𝑒𝑥𝑝 (𝑧)

La representación de la función gráficamente:

Ilustración 14: Función regresión Logistica.

Siendo P la probabilidad de victoria, 𝛽0 indica la probabilidad de éxito cuando todas las variables
x son cero y el resto de los valores 𝛽 indican la variación de probabilidad de victoria cuando las
variables x aumentan en una unidad. Las variables x serían cada una de las variables que se tienen en
cuenta.

Para conseguir el modelo óptimo, se tuvo en cuenta el porcentaje de acierto en los registros usados
para el test, la significatividad individual de cada parámetro y el criterio de información de Akaike
(AIC), el cual mide la bondad de ajuste de acuerdo con la función de máxima verosimilitud del
modelo y la complejidad según la cantidad de parámetros, es decir, este criterio castiga el usar muchas

50
“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

variables. Lo que se busca en este criterio son los valores más bajos. La función AIC sigue la siente
forma:

𝐴𝐼𝐶 = 2𝑘 − 2𝑙𝑛 (𝐿)

Siendo k el número de parámetros del modelo y L el máximo valor de la función de verosimilitud


del modelo.

REGRESIÓN LOGÍSTICA PLANTEADA: LOGIT

En este apartado se llevará a cabo el análisis del rendimiento del modelo de regresión logística. Como
ya se habló en la explicación anterior, se usarán los contrastes de significatividad individual y criterio
AIC para elegir el mejor modelo y, después, se observarán las métricas. El código para su ejecución
se encuentra en el anexo 5.

A continuación, se llevará a cabo el análisis del rendimiento del modelo de regresión logística.
Como ya se ha comentado, primero se analizará el modelo sin usar las cuotas de los partidos y después
con ellas.

En el primer caso, se analizará el modelo con las 25 variables que han sido seleccionadas para los
entrenamientos y, como ya se dijo antes, en este modelo no se usarán las cuotas. Analizando los
valores del modelo se observó que había varias variables no significativas y el valor del criterio AIC
es de 4275,1. Además, presenta un accuracy del 65%, una precisión del 63,93 % y un recall para la
predicción de victoria de los equipos locales del 81,06%, sin embargo, para los visitantes es del 53,95
%, es decir, de todos los partidos que predijeron como victorias del equipo visitante se acertó menos
de la mitad, el valor de F1 Score es de 71,49 %. La matriz de confusión es la siguiente:

Ilustración 15: Matriz de confusión Regresión Logística 1.

51
“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

A la vista de los resultados y ver que existían variables individualmente no significativas, se


decidió ir eliminando una a una hasta conseguir unos resultados mejores.

El segundo modelo sin cuotas cuenta con 16 variables, 9 menos que el caso anterior, y un valor
AIC del 4226,4, menor que en el anterior modelo, es decir, está valorando positivamente que existan
menos variables, además que el acierto aumenta ligeramente. Todos los valores de accuracy,
precisión, recall de victoria del equipo local y visitante y F1 score aumentaron con respecto al caso
anterior con valores del 65,63 %, 64,21 %, 82,48 %, 84,22 % y 72,19 %, respectivamente. La matriz
de confusión es la siguiente:

Ilustración 16: Matriz de confusión Regresión Logística 2.

En este caso se va a llevar a cabo la creación de un nuevo modelo logit, pero esta vez usando las
cuotas de apuestas para ver si se puede mejorar los resultados anteriores. Se realizará el mismo
proceso que en el primer caso anterior, se usarán las mismas 25 variables más las cuotas, se ejecutará
el modelo y se verá qué se puede mejorar para aumentar la precisión y disminuir el valor del Criterio
de AIC.

Una vez ejecutado el modelo, ofreció un accuracy del 64,13 %, es decir, más baja que en los
modelos de sin cuotas, además tuvo un valor de 4736 del Criterio de AIC, por lo que no se elegiría el
uso de este modelo. En el ámbito de las métricas, todas disminuyen, exceptuando el recall para
victorias locales con un 82,91 % y para victorias visitantes con un 58,04 %. La matriz de confusión
es la siguiente:

52
“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

Ilustración 17: Matriz de confusión Regresión Logística 3.

A la vista de estos resultados, se procede a eliminar las variables que no son significativas
individualmente usando el mismo método que se usó anteriormente. El modelo final cuenta con un
total de sólo 6 variables, 21 variables menos que el primer modelo con cuotas. En este caso dio un
accuracy del 66,5 %, mejor que el resto de modelos Logit, además el Criterio de AIC tiene un valor
de 4187,6 , menor que en el resto de los modelos. En este modelo todas las métricas mejoran, menos
el recall para victorias de los equipos visitantes con un 53,41 % y la precisión para las victorias
visitantes, 29,63 %.

Ilustración 18: Matriz de confusión Regresión Logística 4.


A continuación, se muestra una tabla con el resumen de todas las métricas:

Métrica Sin cuotas 1 Sin cuotas 2 Con cuotas 1 Con cuotas 2


Accuracy 65 % 65,63 % 64,13 % 66,50 %
Precisión 63,93 % 64,21 % 62,76 % 64,81 %
Recall 81,06 % 82,45 % 82,91 % 83,37 %
F1 Score 71,49 % 72,19 % 71,44 % 72,93 %
Tabla 6: Resumen métricas Regresión Logística.

53
“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

A la vista de los resultados de ambos modelos procesados, el segundo modelo sin cuotas y el
segundo modelo con cuotas, se procede a entrenar con el segundo método mencionado, es decir,
analizar la exactitud de los aciertos cada 100 partidos y ver si alguno ofrece mejor rendimiento en
unos casos u otros.

Ilustración 19: Gráfica comparativa de acierto Regresión Logística 1.

Con cuotas
Métrica 0-100 100-200 200-300 300-400 400-500 500-600 600-700 700-800 Media
Accuracy 74 % 67 % 63 % 65 % 68 % 66 % 70 % 62 % 66,88%
Precisión 73,24 % 63,01 % 62,86 % 64,71 % 63,24 % 66,20 % 68,66 % 59,38 % 65,23%
Recall 88,14 % 88,46 % 80 % 80 % 86 % 68,66 % 83,64 % 76 % 81,36%
F1 Score 80 % 73,60 % 70,40 % 71,54 % 72,88 % 73,44 % 75,41 % 66,67 % 72,99%
Tabla 7: Resumen métricas 100 partidos con cuota Regresión Logística.

Sin cuotas
Métrica 0-100 100-200 200-300 300-400 400-500 500-600 600-700 700-800 Media
Accuracy 73 % 66 % 63 % 65 % 65 % 63 % 67 % 61 % 65,38%
Precisión 72,22 % 62,50 % 63,24 % 65,15 % 61,19 % 64,29 % 68,33 % 58,46 % 64,42%
Recall 88,14 % 86,54 % 78,18 % 78,18 % 82 % 78,95 % 74,55 % 76 % 80,32%
F1 Score 79,39 % 72,58 % 69,92 % 71,07 % 70,09 % 70,57 % 71,30 % 66,09 % 71,56%
Tabla 8: Resumen métricas 100 partidos sin cuota Regresión Logística.

Se puede observar que se demuestra que el modelo con cuotas ofrece mejores resultados en media
con respecto al modelo sin ellas.

54
“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

Para finalizar este apartado, se va a proceder también a la comparación de ambos modelos con el
acierto que tendría apostar siempre a la cuota más baja, decir que ganará al equipo con más victorias
y decir que ganaría siempre el equipo local.

Partidos Mod. sin cuotas Mod. con cuotas Cuotas Porcentaje Local
1 a 100 73% 74% 73% 65,5% 59%
101 a 200 66% 67% 67% 69,5% 52%
201 a 300 63% 63% 67,5% 64,5% 55%
301 a 400 65% 65% 64% 62% 55%
401 a 500 65% 68% 68,5% 72,5% 50%
501 a 600 63% 66% 65% 64% 57%
601 a 700 67% 70% 67 65,5% 55%
701 a 800 61% 62% 64% 60% 50%
Tabla 9: Comparación de modelos con acierto Regresión Logística.

Ilustración 20: Gráfica comparativa de acierto Regresión Logística 2.

Se puede observar que sólo en tres casos, apostar a la cuota más baja ha tenido un acierto mayor
que el modelo con cuotas. Comparando el mismo modelo frente al acierto de que la victoria será del
que tenga más victorias pasadas ofrece que de los 8 grupos de partidos, sólo uno de ellos tiene un
mejor resultado. Finalmente, se observa que decir que va a ganar el equipo local da un acierto menor
que cualquiera de los dos modelos.

55
“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

12.4. REDES NEURONALES

INTRODUCCIÓN

El siguiente modelo planteado es una red neuronal. Una red neuronal artificial tiene un
comportamiento ligeramente inspirado en las redes neuronales biológicas. Básicamente, se compone
de unidades, denominadas neuronas, interconectadas entre sí, que, dada una entrada, proporcionan
una salida. En el apartado de arquitectura y funcionamiento se explicará con mayor detalle.

A pesar de que la popularización de estos algoritmos es relativamente reciente, su origen (Na8,


2018) se remonta a 1958, cuando el científico Frank Rosenblatt, basándose en los estudios de Warren
McCulloch y Walter Pitts, creó el perceptrón. El perceptrón, aún en uso, es una neurona que toma
dos entradas binarias x1 y x2, con unos pesos asignados w1 y w2, y proporciona una salida binaria.

En 1959, en Stanford, Bernard Widrow y Marcian Hoff crearon las primeras redes neuronales,
denominadas ADALINE y MADALINE, diseñadas y usadas hoy en día para reducir el ruido durante
una llamada telefónica (Jaspreet, 2016). En 1965, la combinación de varios perceptrones dio lugar al
Multilayer Perceptrón. La entrada y la salida seguían siendo binarias con unos pesos asignados a
mano por el científico. Tras esta fase inicial, los estudios y avances decaen debido a las limitaciones
técnicas de la época, y no es hasta los años 80, con la aparición de la neurona sigmoidal, cuando estos
algoritmos entran en el campo del aprendizaje automático. Esta unidad usaba como función de
activación la función sigmoidal, que devuelve valores entre 0 y 1, y permite entrenar la red de manera
más rápida. Es también en esta década, cuando se crean las redes con feedforward -propagation (hacia
delante) y backpropagation (también se retroalimentan, redes recurrentes).

A lo largo de los siguientes años, se crean diferentes tipos de redes neuronales para usos más
específicos, como las redes convolucionales (CNN - 1989) o las redes LSTM (Long-Short Term
Memory - 1997). A partir de 2006, el interés en las redes neuronales crece y da paso al llamado Deep
Learning, donde los modelos son mucho más complejos y profundos, llegando a tener cientos de
capas y miles de neuronas. En los últimos años, su uso ha crecido de manera exponencial, creándose
modelos cada vez más profundos y complejos, como la red GAN (2014), donde se tienen dos redes,
el generador, que genera muestras falsas y el discriminador que debe distinguir estas de las
verdaderas.

La popularidad de este tipo de algoritmos se ha multiplicado en los últimos años gracias a tres
factores fundamentales:

• El exponencial crecimiento de las fuentes de datos, así como el acceso a las mismas. Cada
año crece el número de dispositivos capaces de recoger datos (IoT, vehículos inteligentes,
smartphones, etc.)

56
“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

• La mayor capacidad de los ordenadores y equipos personales.


• La optimización de los algoritmos, con nuevas funciones de activación, por ejemplo, la
función ReLU (Rectified Linear Unit) es una función más sencilla y usada hoy en día que la
función sigmoidal, ya que permite un tiempo de proceso menor.

Las redes neuronales son modelos de una mayor complejidad que los anteriores, pero también
presentan un mejor rendimiento a mayor número de datos y/o atributos. En la figura 20 se observa
cómo mejora el rendimiento de diferentes tamaños de red y de un algoritmo tradicional frente a la
cantidad de datos.

Ilustración 21: Gráfica de rendimiento de las distintas redes.

ARQUITECTURA Y FUNCIONAMIENTO

Una red neuronal está formada por capas, cada una de las cuáles está formada por un número variable
de neuronas. Si se atiende a la situación de la capa en la red, existen tres tipos de capas:

• La capa de entrada de datos (Input layer), con tantas neuronas como atributos se introducen
a la red.
• Una o varias capas ocultas o intermedias (Hidden layer/s). Cada una de ellas compuesta por
el mismo o un número distinto de neuronas.
• Una capa de salida (Output unit), que devuelve la predicción, bien sea una clase (red neuronal
de clasificación) o un valor de regresión (red neuronal de regresión). Por tanto, puede haber
desde 1 neurona de salida (dos clases o red de regresión) o tantas como clases de salida
existan.

Estas capas están interconectadas entre sí. Si todas las neuronas de una capa están conectadas con
la capa siguiente, se denomina capa fully connected. En ocasiones, tener todas estas conexiones
provoca que la red tenga overfitting, por ello se eliminarán algunas de las mismas.

57
“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

Las capas se interconectan a través de matrices, que contienen los pesos de cada una de las
neuronas de la capa n para las neuronas de la capa n - 1, es decir, cada fila de una de estas matrices
contiene unos pesos de una neurona (de la capa n + 1) para cada neurona de la capa anterior (capa n).
Cada neurona evalúa la entrada multiplicada por su peso correspondiente y aplica la función de
activación elegida. Cuando una red se entrena, estos pesos van cambiando su valor, en función de la
función de optimización elegida, para reducir el coste del error que tiene la red (Inzaugarat,
Understanding Neural Networks: What, How and Why?, 2018).

Con una red bien configurada y una función de optimización acorde al problema a resolver, los
pesos finales serán los que minimizan el error del dataset de entrenamiento. Este entrenamiento se
realiza a base de iteraciones y cada una tiene dos componentes principales, una propagación hacia
delante (feedforward), que dado unos pesos calcula unos outputs. Esta salida se compara con la
respuesta real y se calcula el error, que se extiende hacia atrás (backpropagation), modificando los
pesos para reducir el error en la siguiente propagación hacia delante (Woodford, 2019).

RED NEURONAL PLANTEADA

El modelo se ha desarrollado en Python y para ello, se ha hecho uso de la librería Keras. Keras es una
librería dedicada al Deep Learning, y permite implementar redes neuronales de forma rápida y
efectiva, acelerando el ciclo Idea – Experimento – Resultados. Permite ajustar los distintos parámetros
de la red de forma sencilla, además de ser muy usado por profesionales y estudiantes de todo el
mundo, y contar con una documentación y comunidad muy amplia. Para hacer uso de esta librería es
necesario tener instalado TensorFlow, un paquete de Python sobre el que se apoya Keras.

En esta librería de Keras se tienen que configurar varios hiperparámetros. Como se verá en cada
uno de ellos parte de la búsqueda se ha realizado empleando un GridSearch. Un GridSearch es una
técnica iterativa que realiza combinaciones de los parámetros que se especifiquen y muestra el
rendimiento de cada combinación. En Python está integrada en el paquete sklearn. Hay que destacar
que computacionalmente es muy costosa y se deben combinar una baja cantidad de hiperparámetros
(2 o 3) con un número limitado de valores para cada uno. Finalmente se han combinado los resultados
de las distintas configuraciones, dada la imposibilidad, por tiempo de proceso, de variar todos los
parámetros en un mismo GridSearch y la dependencia entre los hiperparámetros.

• Tipo de modelo: En este hiperparámetro se tienen dos opciones Sequential o Functional. Si


bien este último proporciona una mayor flexibilidad y configurabilidad, el modelo elegido ha
sido Sequential, ya que permite tener una mayor rapidez en el desarrollo.
• Tipo y número de capas del modelo: En este apartado se han realizado una gran cantidad
de pruebas para determinar cuál de las configuraciones era más adecuada. Se han probado
diferentes tipos y número de capas. También se ha experimentado cambiando el resto de los

58
“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

parámetros para ver qué configuración final era la óptima. Realizando un GridSearch en
varias configuraciones, seleccionando como hiperparámetros a optimizar el número de
neuronas de las dos primeras capas, junto con el número de epochs y el batch size, parámetros
que se verán a continuación. Finalmente, la red tiene 7 capas, 6 de ellas de tipo Dense y una
de ellas (la segunda) de tipo Dropout. La función de esta capa es eliminar algunas de las
conexiones de las capas entre las que se encuentra, para reducir el overfitting y la complejidad
de la red, permitiendo entrenamientos más rápidos, sin afectar a los aciertos de la red. En la
tabla 10 se presenta esta configuración de forma detallada.
• Función de activación de cada capa: Keras ofrece en total 7 funciones de activación. Al
igual que en el apartado anterior, se ha realizado un GridSearch, donde se han probado cuatro
de estas funciones (softmax, relu, sigmoid y linear) en las capas ocultas. El resultado era
similar, en accuracy, entre las tres primeras funciones. Finalmente, se ha elegido para todas
las capas ocultas la función relu (ReLU) que es más eficiente computacionalmente. La capa
de salida tendrá sigmoid como función de activación, ya que proporciona una salida entre 0
y 1, que representa la probabilidad (sobre 1) de que gane el equipo local. Se considera que
para valores mayores a 0.5 el local ganará el encuentro, y si es menor o igual a 0.5, ganará el
visitante.
• Número de neuronas de cada capa: Este es uno de los hiperparámetros más importantes,
ya que determina el orden de la red, y, por tanto, su profundidad y complejidad. Una práctica
recomendada es que el número de neuronas de la primera de las capas ocultas sea el cuadrado
de la segunda. Se han determinado en las mismas pruebas que el tipo y número de capas.

En la siguiente tabla se presenta un resumen de la red propuesta:

Número de capa Tipo de capa Función de activación Número de neuronas


1 (Input) Dense - 27/25
2 (Hidden) Dense ReLU 256
3 (Hidden) Dropout - -
4 (Hidden) Dense ReLU 16
5 (Hidden) Dense ReLU 8
6 (Hidden) Dense ReLU 4
7 (Hidden) Dense Sigmoid 1
Tabla 10: Resumen de las capas de la red.

Además de la arquitectura del modelo, se ajustan otros parámetros relacionados con el


entrenamiento, como son:

• Función de optimización: Hay varias funciones de optimización, de las que se ha seleccionado


la función Adam, que es la función más utilizada hoy en día por su buen rendimiento. Adam

59
“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

implementa el algoritmo de Adam, una variante de stochastic gradient descent (SGD), que
resulta computacionalmente más eficiente y rápida. En esta función se tienen diferentes
parámetros: learning rate, beta 1, beta 2 y épsilon, entre otros. El más importante es el learning
rate, que representa cuánto se van a actualizar los pesos de la red respecto a la función de pérdida.
Si es demasiado elevado, los “saltos” serán demasiados grandes y el algoritmo puede converger
de forma más lenta o, incluso, divergir si es muy elevado. Si es muy pequeño, el algoritmo puede
tardar demasiado tiempo en converger o puede quedarse atrapado en mínimos locales (Zulkifli,
2019). Se puede verificar si se ha realizado una elección correcta de este parámetro con las
figuras 21 y 22, que se comentarán más adelante (George V, 2019).
• Cross validation data: Un dataset de validación tiene como función mejorar el rendimiento en
el test del modelo. Para ello se aísla una parte del dataset de entrenamiento, que sólo se utiliza
para evaluar el modelo y ajustar sus hiperparámetros. Keras nos da la opción de proporcionar el
dataset o hacer un split sobre el de entrenamiento. En este estudio, se ha optado por la segunda
opción y se ha utilizado un 20 % del dataset para la validación.
• Función de pérdida: Sirve como métrica del número de ejemplos que se han clasificado de
manera incorrecta. Para problemas de clasificación binaria se utiliza binary cross entropy. Su
ecuación es:

En esta ecuación p(y) representa la probabilidad de que el ejemplo sea 1 (partido ganado por
el local), por tanto, si nuestro modelo siempre clasificase bien los ejemplos, la pérdida sería 0
(Godoy, 2018). La función de optimización tiene como objetivo minimizar esta función.
• Batch size: Es un número entero que representa el número de ejemplos tras los que se
actualizarán los pesos de la red. Si se elige un batch size de 1, por ejemplo, tras cada muestra del
entrenamiento se actualizarían los pesos de la red. Se ha realizado, de nuevo, un GridSearch para
determinar el número idóneo de batch size y de epochs, ya que están relacionados. También se
han tenido en cuenta los resultados de los GridSearch en otros parámetros, ya que en ocasiones
(como en el tipo y número de capas), también se variaban estos parámetros.
• Epochs: Representa el número de iteraciones con el que se va a entrenar la red neuronal. Aquí,
se debe seleccionar para lograr un equilibrio entre la precisión que se obtiene en el conjunto de
entrenamiento, y la que se obtiene en el conjunto de test. Si el número de epochs es demasiado
bajo, la red no tendrá iteraciones suficientes para ajustar los pesos que se mencionaban
anteriormente, por tanto, el rendimiento será insuficiente tanto en el test como en el set de
entrenamiento, dando lugar al underfitting. Si, por el contrario, se elige un número demasiado
elevado, la precisión en el set de entrenamiento será muy buena, ya que los pesos se han ajustado
muchísimo a esos datos, es decir, se los han “aprendido de memoria”, mientras que en el

60
“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

conjunto de test el modelo va a tener un rendimiento muy pobre e insatisfactorio. Esto se conoce
como overfitting. Estos fenómenos no solo se ven influidos por el número de iteraciones, también
están relacionados con el número de atributos o la calidad de los mismos. Como ya se ha
mencionado, está muy relacionado con el batch size, ya que la multiplicación de ambos
parámetros representa el número de veces que se van a actualizar los pesos en el entrenamiento.
Por ejemplo, con un batch size de 15 y 1000 epochs, se actualizarían los pesos 15000 veces. En
la selección de estos parámetros también se han observado las gráficas de Accuracy/Loss vs
Epochs, las cuales representan un buen método para identificar si existe alguna de las
problemáticas mencionadas anteriormente.

Ilustración 22: Gráfica de Accuracy/Loss vs Epoch de las redes 1.

Por ejemplo, en la figura 21 se observa que la red comienza a presentar overfitting a partir de unas
500 iteraciones, ya que mientras la línea azul (accuracy/loss en el set de entrenamiento) sigue
creciendo, en el caso del accuracy, y bajando en el caso del error (loss) tras las 500 iteraciones, en el
caso del set de validación llega a una asíntota en el caso del accuracy, y se eleva cada vez más en el
caso del error.

Ilustración 23: Gráfica de Accuracy/Loss vs Epoch de las redes 2.

61
“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

En esta figura, sin embargo, el entrenamiento es correcto, ya que el modelo presenta un


rendimiento muy similar para ambos conjuntos. Por último, se observa que el modelo presenta algo
de incertidumbre, que se observa por las oscilaciones de la línea correspondiente al set de
entrenamiento.

Finalmente, la configuración de estos parámetros ha sido:

Hiperparámetro Valor
Función de optimización Función Adam. Learning rate 1×10-5
Función de pérdida Binary Cross entropy
Batch size 15
Epochs 1000
% Cross validation 20

Tabla 11: Resumen parámetros de la red.

En el anexo 6 se puede consultar el código Python de la red neuronal.

62
“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

RESULTADOS DE LA RED NEURONAL

Los resultados se van a evaluar de varias formas, haciendo uso de las métricas y tipos de
entrenamiento ya mencionados.

Las redes neuronales presentan cierta aleatoriedad, ya que las funciones de optimización son
estocásticas y la inicialización de los pesos es aleatoria, entre otros factores. Esto provoca que el
resultado no sea siempre exactamente el mismo, aunque no presenta una gran variación. Para mitigar
este efecto, se presentan los resultados de 20 intentos, junto con la media de cada métrica, para el
entrenamiento con cuotas y sin ellas.

Con cuotas
Accuracy
Prueba Accuracy test (%) Precisión (%) Recall (%) F1 Score (%)
train(%)
1 68,45 65,25 64,33 80,37 71,46
2 68,17 64,75 63,41 82,44 71,69
3 68,70 65,13 63,85 81,99 71,79
4 67,73 66,38 65,24 81,06 72,30
5 68,29 66,13 65,82 77,83 71,32
6 67,60 64,88 64,39 78,52 70,76
7 67,16 65,75 64,32 82,45 72,27
8 67,73 65,88 65,04 79,91 71,71
9 68,29 65,13 64,47 79,21 71,09
10 67,73 65,38 64,03 82,22 71,99
11 68,04 64,88 63,43 82,91 71,87
12 68,92 65,13 64,75 78,06 70,79
13 68,45 66,88 65,97 80,14 72,37
14 67,85 65,63 64,91 79,45 71,44
15 68,92 66,63 66,53 77,14 71,44
16 68,39 65,25 64,49 79,68 71,28
17 68,58 64,88 63,92 80,60 71,30
18 68,58 66,13 66,27 76,21 70,89
19 67,57 65,00 63,93 81,06 71,49
20 67,63 65,25 63,53 84,06 72,37
Media 68,14 65,52 64,63 80,27 71,58
Tabla 12: Resumen aciertos con cuota de la red.

63
“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

Sin cuotas
Accuracy
Prueba Accuracy test (%) Precisión (%) Recall (%) F1 Score (%)
train (%)
1 67,00 65,25 63,53 84,06 72,37
2 67,07 64,88 63,92 80,60 71,30
3 67,51 65,13 63,46 83,83 72,24
4 67,16 63,63 62,03 84,53 71,55
5 66,85 66,88 67,07 76,21 71,35
6 66,88 65,50 64,09 82,45 72,12
7 67,19 63,63 62,72 80,83 70,64
8 67,07 64,75 64,27 78,52 70,69
9 67,16 65,50 65,13 78,06 71,01
10 66,72 63,88 64,12 75,52 69,35
11 67,32 65,63 66,81 72,52 69,55
12 66,53 64,63 63,49 81,52 71,39
13 67,29 66,00 65,45 78,75 71,49
14 67,19 65,38 65,48 76,21 70,44
15 66,97 65,63 64,91 79,45 71,44
16 67,57 65,50 65,61 76,21 70,51
17 67,54 64,75 64,95 75,75 69,94
18 66,72 65,50 64,62 80,14 71,55
19 66,72 65,50 64,56 80,37 71,61
20 67,13 64,63 64,37 77,60 70,37
Media 67,08 65,11 64,53 79,16 71,05
Tabla 13: Resumen aciertos sin cuota de la red.

Como se puede observar, el rendimiento del algoritmo es muy similar con cuotas o sin ellas, el
acierto (accuracy) sólo baja del 65,52 % al 65,11 %, y el resto de las métricas presentan variaciones
similares. De hecho, la accuracy máxima conseguida es la misma en ambos entrenamientos (66,88
%), lo que es especialmente notable en el caso del entrenamiento sin cuotas, porque prácticamente
iguala el acierto que presenta la menor cuota (67 %). Los resultados en general no presentan grandes
variaciones. La precisión en ambos casos está rondando el 65 %, lo que indica que de cada 100
ejemplos que el algoritmo clasifica como positivos, sólo 65 lo son en realidad. Por otra parte, el recall
se encuentra alrededor del 80 % indica que el algoritmo sólo clasifica un 20 % de ejemplos negativos
son clasificados como positivos. Estas dos últimas conclusiones se observan en las figuras 23 y 24,
que representa las matrices de confusión. Más adelante se realizará una valoración más profunda y
global de estos resultados.

64
“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

Ilustración 24: Matriz de confusión con cuotas (entrenamiento 8) Ilustración 25: Matriz de confusión con cuotas (entrenamiento 15)
Red neuronal. Red neuronal.

Como en los resultados anteriores, debido a la aleatoriedad que presentan las redes neuronales, se
ha repetido cada entrenamiento 5 veces, y los resultados mostrados en la tabla son la media de estos
5 entrenamientos. La razón de reducir el número se debe al coste computacional, ya que de esta forma
se realizan 8 entrenamientos, por cinco repeticiones y dos maneras (con cuotas y sin estas), lo que
supone 80 entrenamientos.

Con cuotas
Métrica 0-100 100-200 200-300 300-400 400-500 500-600 600-700 700-800 Media
Accuracy 72,00 % 70,00 % 59,00 % 61,00 % 67,00 % 67,00 % 65,00 % 58,00 % 64,88 %
Precisión 73,85 % 67,19 % 60,95 % 62,12 % 63,49 % 65,79 % 66,67 % 56,90 % 64,62 %
Prueba 1
Recall 81,36 % 82,69 % 70,91 % 74,55 % 80,00 % 87,72 % 72,73 % 66,00 % 76,99 %
F1 Score 77,42 % 74,14 % 65,55 % 67,77 % 70,80 % 75,19 % 69,57 % 61,11 % 70,19 %
Accuracy 71,00 % 69,00 % 59,00 % 67,00 % 65,00 % 65,00 % 63,00 % 57,00 % 64,50 %
Precisión 72,73 % 67,21 % 61,29 % 66,67 % 61,90 % 66,18 % 65,00 % 56,14 % 64,64 %
Prueba 2
Recall 81,36 % 78,85 % 69,09 % 80,00 % 78,00 % 78,95 % 70,91 % 64,00 % 75,14 %
F1 Score 76,80 % 72,57 % 64,96 % 72,73 % 69,03 % 72,00 % 67,83 % 59,81 % 69,46 %
Accuracy 72,00 % 69,00 % 60,00 % 61,00 % 66,00 % 67,00 % 66,00 % 58,00 % 64,88 %
Precisión 71,23 % 65,67 % 61,90 % 62,12 % 63,33 % 68,18 % 66,15 % 56,45 % 64,38 %
Prueba 3
Recall 88,14 % 84,62 % 70,91 % 74,55 % 76,00 % 78,95 % 78,18 % 70,00 % 77,67 %
F1 Score 78,79 % 73,95 % 66,10 % 67,77 % 69,09 % 73,17 % 71,67 % 62,50 % 70,38 %
Accuracy 73,00 % 68,00 % 59,00 % 66,00 % 71,00 % 65,00 % 68,00 % 58,00 % 66,00 %
Precisión 72,22 % 65,63 % 62,07 % 65,67 % 67,80 % 66,18 % 67,16 % 55,41 % 65,27 %
Prueba 4
Recall 88,14 % 80,77 % 65,45 % 80,00 % 80,00 % 78,95 % 81,82 % 82,00 % 79,64 %
F1 Score 79,39 % 72,41 % 63,72 % 72,13 % 73,39 % 72,00 % 73,77 % 66,13 % 71,62 %
Accuracy 73,00 % 70,00 % 62,00 % 64,00 % 66,00 % 63,00 % 62,00 % 57,00 % 64,63 %
Precisión 72,86 % 66,67 % 62,32 % 64,62 % 62,12 % 65,15 % 63,49 % 55,74 % 64,12 %
Prueba 5
Recall 86,44 % 84,62 % 78,18 % 76,36 % 82,00 % 75,44 % 72,73 % 68,00 % 77,97 %
F1 Score 79,07 % 74,58 % 69,35 % 70,00 % 70,69 % 69,92 % 67,80 % 61,25 % 70,33 %
Tabla 14: Resumen aciertos con cuota de la red de cada 100 partidos.

65
“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

Sin cuotas
Métrica 0-100 100-200 200-300 300-400 400-500 500-600 600-700 700-800 Media
Accuracy 70,00 % 66,00 % 61,00 % 65,00 % 68,00 % 65,00 % 67,00 % 58,00 % 65,00 %
Precisión 69,33 % 63,64 % 62,12 % 66,13 % 63,24 % 67,19 % 68,33 % 56,06 % 64,50 %
Prueba 1
Recall 88,14 % 80,77 % 74,55 % 74,55 % 86,00 % 75,44 % 74,55 % 74,00 % 78,50 %
F1 Score 77,61 % 71,19 % 67,77 % 70,09 % 72,88 % 71,07 % 71,30 % 63,79 % 70,71 %
Accuracy 74,00 % 71,00 % 59,00 % 65,00 % 66,00 % 66,00 % 64,00 % 62,00 % 65,87 %
Precisión 76,19 % 67,69 % 60,00 % 64,29 % 61,43 % 68,85 % 66,10 % 60,00 % 65,57 %
Prueba 2
Recall 81,36 % 84,62 % 76,36 % 81,82 % 86,00 % 73,68 % 70,91 % 72,00 % 78,34 %
F1 Score 78,69 % 75,21 % 67,20 % 72,00 % 71,67 % 71,19 % 68,42 % 65,45 % 71,23 %
Accuracy 69,00 % 72,00 % 57,00 % 65,00 % 69,00 % 64,00 % 68,00 % 59,00 % 65,37 %
Precisión 73,33 % 67,14 % 58,57 % 65,15 % 65,08 % 66,15 % 67,69 % 58,18 % 65,16 %
Prueba 3
Recall 74,58 % 90,38 % 74,55 % 78,18 % 82,00 % 75,44 % 80,00 % 64,00 % 77,39 %
F1 Score 73,95 % 77,05 % 65,60 % 71,07 % 72,57% 70,49 % 73,33 % 60,95 % 70,63 %
Accuracy 74,00 % 72,00 % 60,00 % 67,00 % 68,00 % 65,00 % 64,00 % 63,00 % 66,63 %
Precisión 73,91 % 66,22 % 61,54 % 67,74 % 63,24 % 66,18 % 66,10 % 61,40 % 65,79 %
Prueba 4
Recall 86,44 % 94,23 % 72,73 % 76,36 % 86,00 % 78,95 % 70,91 % 70,00 % 79,45 %
F1 Score 79,69 % 77,78 % 66,67 % 71,79 % 72,88 % 72,00 % 68,42 % 65,42 % 71,83 %
Accuracy 72,00 % 65,00 % 59,00 % 64,00 % 68,00 % 71,00 % 70,00 % 60,00 % 66,12 %
Precisión 71,23 % 62,69 % 60,61 % 63,77 % 63,24 % 72,58 % 73,58 % 58,62 % 65,79 %
Prueba 5
Recall 88,14 % 80,77 % 72,73 % 80,00 % 86,00 % 78,95 % 70,91 % 68,00 % 78,19 %
F1 Score 78,79 % 70,59 % 66,12 % 70,97 % 72,88 % 75,63 % 72,22 % 62,96 % 71,27 %
Tabla 15: Resumen aciertos sin cuota de la red de cada 100 partidos.

Los resultados son muy similares en todas las métricas (65,11 vs 65,80 % sin cuotas y 65,52 % vs
64,98 % con cuotas). Lo que sí se puede resaltar es que el rendimiento es muy bueno en los primeros
100 partidos (71,8 % de acierto sin cuotas y 72,2 % con cuotas) y se mantiene para los 200 primeros
(70,5 % sin cuotas), a partir de ese punto el rendimiento del algoritmo cae, sobre todo en los últimos
100 partidos. En la siguiente gráfica se representa la evolución del accuracy, en el entrenamiento con
cuotas y sin ellas, comparado con el acierto de apostar a la cuota más baja.

Ilustración 26: Gráfica de evolución del accuracy Red neuronal.

Para terminar, se presenta una tabla comparativa, con el acierto (accuracy), con cuotas y sin cuotas
y para ambas formas de entrenamiento. En la tabla se adjunta, como referencia, el porcentaje de

66
“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

acierto si siempre se predice victoria local, si se predice que siempre gana el equipo con mayor
porcentaje de victoria y si se apuesta siempre por la menor cuota.

% de acierto
Test completo sin cuotas 65,11 %
Test completo con cuotas 65,52 %
Test dividido sin cuotas 65,80 %
Test dividido con cuotas 64,98 %
Menor cuota 67,00 %
Mayor porcentaje 65,43 %
Local 54,13 %
Tabla 16: Aciertos total sin/con cuota red de cada 100 partidos

12.5. ÁRBOL DE DECISIÓN


El árbol de decisión es un modelo de predicción y clasificación utilizado en diversos ámbitos, es
una herramienta que sirve de ayuda a la hora de tomar decisiones. El árbol de decisión se plantea
como posibles ramas en las que se tienen diferentes soluciones a un escenario continuo de sucesos,
además, se tiene en cuenta la complejidad de cada situación y trata de buscar la decisión más adecuada
(Martínez Heras, Árboles de Decisión con ejemplos en Python, s.f.).

ELEMENTOS DE UN ÁRBOL

Los árboles de decisión están formados por nodos, vectores de números, flechas y etiquetas.

● Cada nodo se puede definir como el momento en el que se ha de tomar una decisión, a
medida que aumenta el número de nodos aumenta el número de posibles finales a los que
puede llegar. Esto hace que un árbol con muchos nodos sea complicado de dibujar a mano
y de analizar debido a la existencia de numerosos caminos que se pueden seguir.

● Los vectores de números serían la solución final a la que se llega en función de las diversas
posibilidades que se tienen, dan las utilidades en esa solución.

● Las flechas son las uniones entre un nodo y otro y representan cada acción distinta.

● Las etiquetas se encuentran en cada nodo y cada flecha y dan nombre a cada acción.

67
“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

CONCEPTOS

En el desarrollo de árboles utilizaremos frecuentemente estos conceptos más significativos:

● Sobreajuste (overfitting): Se produce cuando los datos de entrenamiento son pocos o


contienen incoherencias.
● Poda (prunning): La poda consiste en eliminar una rama de un nodo transformándolo en
una hoja.

REGLAS

En los árboles de decisión se tiene que cumplir una serie de reglas.

● Al comienzo hay un nodo inicial que no es apuntado por ninguna flecha, es el único del
diagrama con esta característica.
● El resto de los nodos del diagrama son apuntados por una única flecha.
● De esto se deduce que hay un único camino para llegar del nodo inicial a cada uno de los
nodos siguientes. No hay varias formas de llegar a la misma solución final, las decisiones
son excluyentes (Wikipedia [Árbol de decisión], , s.f.).

Ilustración 27: Árbol de decisión con cuotas.

La interpretación del árbol de decisión sería: un nodo raíz que hace una primera subdivisión por
cuotas y las salidas van a izquierda por True que son menor a 2,545 (440 resultados), y a la derecha
los False que son los que tiene la cuota por encima de 2,545 (360 resultados).
En el segundo nivel vemos la cantidad de muestras que se ha repartido (samples) respectivamente.
A medida que se baja de nivel los valores de entropía se aproximan más a 1(Azul), cuando el nodo
tiene más muestras y se acerca más a 0 cuando hay mayoría de muestras (Naranja).
El resto de las representaciones graficas del árbol de decisión se encontrará en el anexo 7 de
árboles de decisión (Na8, 2018).

68
“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

ÁRBOL DE DECISIÓN PLANTEADO.

El árbol planteado se ha realizado en Python y para ello se ha utilizado la librería Scikit-learn.

Scikit-learn es una librería para el aprendizaje automático, un software libre para el lenguaje de
programación Python, en esta librería incluye varios algoritmos de clasificación, regresión y análisis
de grupos entre los cuales están los árboles de decisión, SVM, DBSCAN. Esta fomentado para uso
académico y comercial. Proporciona una gama de algoritmos de aprendizaje supervisados y no
supervisados (Wikipedia [Scikit-learn], s.f.).

Para crear el árbol, utilizamos DecisionTreeClasifier que se encuentra dentro de la librería sklearn.
Por cómo se ha planteado el problema, se elige un árbol de clasificación y no de regresión.

El árbol que se implementará tendrá los siguientes parámetros, que se han seleccionado tras realizar
diversas pruebas y estudios:

• Criterio (criterion): Se ha elegido entropy, que mide el grado de organización del sistema.
También cuenta con otra opción, gini, que es una medida de impureza y la opción MSE (Mean
Square Error) que solo está disponible para los árboles de regresión y es el error cuadrático
medio.
• Cantidad mínima de muestras (min_samples_split) = 20 es la cantidad mínima de muestras
que debe tener un nodo para poder subdividir, en este estudio.
• Mínimos ejemplos por hoja (Min_samples_leaf) = 5 es la cantidad mínima que puede tener
una hoja final, en este estudio.
• Profundidad máxima (max_depth) = 2 ha sido la profundidad del árbol elegida. La
profundidad del árbol se calculará posteriormente para garantizar una mayor precisión y no
entrar en sobre ajuste.

Antes de ejecutar el modelo, se ha realizado varios experimentos y estudios con las variables, las
variables menos significativas se han suprimido, después del proceso de selección de las variables, el
número de variables se ha reducido a 25, este proceso de selección se ha mencionado en el apartado
6.

La profundidad del árbol se calcula mediante un tanteo, en el tanteo se obtiene la media aciertos.
El funcionamiento del tanteo es el siguiente, calcula el acierto con todos los niveles de profundidad,
empezando por el primer nivel (Na8, 2018).

69
“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

Ilustración 28: Tanteo profundidad del árbol.

Se observa que el nivel 2 es el nivel con mayor acierto tiene, con una media de acierto de un
64,12%, por lo tanto, la profundidad que usaremos en el árbol será 2. Con los parámetros mencionados
en los apartados anteriores, se procede al entrenamiento del modelo, el resultado obtenido es de
63,25% de accuracy, 61,64% de precisión, 84,99% de recall y un 71,46% de F1-score. Estos
resultados obtenidos son del conjunto de datos sin cuotas de mercado, se comparará con el conjunto
de datos con cuotas del mercado, los resultados obtenidos con cuotas del mercado son las siguientes,
67,63% de aciertos, 74,58% de precisión, 60,97% de recall, 67,09% de F1-score. Ambos resultados
se podrán ver en la tabla 17.

Sin cuotas Con cuotas


Accuracy 63,25% 67,63%
Precisión 61,64% 74,58%
Recall 84,99% 60,97%
F1-score 71,46% 67,09%
Tabla 17: Resumen con cuota y sin cuota árbol de decisión.

Se observa que los aciertos son ligeramente más altos en el set de entrenamiento con cuotas del
mercado. Si observamos la matriz de confusión sin tener en cuenta las cuotas, según la matriz 229
partidos fueron de victorias locales, pero sin embargo eran de visitantes y de lo contrario predijo que
65 victorias fueron visitantes, pero en realidad fueron locales.

70
“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

Ilustración 29: Matriz de confusión del árbol de decisión sin cuota.

En cuanto a la matriz de confusión con las cuotas se observa que 90 partidos que fueron de
victorias locales, pero el modelo las categoriza como visitantes, en cambio 169 partidos fueron
visitantes, pero las categoriza como locales.

Ilustración 30: Matriz de confusión del árbol de decisión con cuota.

A continuación, se procederá a analizar los aciertos del modelo con cada 100 partidos, como ya
se ha realizado en los modelos anteriores. Se llevará el mismo proceso que en el anterior caso a
diferencia de que seleccionaremos los 100 primeros partidos, después se calculará el nivel de
profundidad adecuada para esta selección de datos y por último se ejecutará el modelo.

71
“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

Los resultados obtenidos son los siguientes:

Con cuotas
Métrica 0-100 100-200 200-300 300-400 400-500 500-600 600-700 700-800 Media
Accuracy 77 % 71 % 69 % 64 % 65 % 62 % 69 % 57 % 66,75%
Precisión 79 % 69,49 % 68,75 % 64,62 % 61,91 % 65,07 % 69,35 % 66 % 68,02%
Recall 83,05 % 79,84 % 80 % 76,36 % 78 % 71,93 % 78,19 % 60,55 % 75,87%
F1 Score 80,99% 73,87 % 73,95 % 70 % 69,34 % 68,34 % 73,50% 55,93 % 70,70%
Tabla 18: Resumen 100 partidos con cuota árbol de decisión

Sin cuotas
Métrica 0-100 100-200 200-300 300-400 400-500 500-600 600-700 700-800 Media
Accuracy 73 % 67 % 60 % 62 % 67 % 60 % 66 % 58 % 64,13%
Precisión 72,86 % 65,08 % 64,71 % 64,91 % 62,69 % 63,49 % 67,21 % 56,89 % 64,73%
Recall 86,44 % 78,85 % 60 % 67,28 % 84 % 70,18 % 74,55 % 66 % 73,41%
F1 Score 79,07 % 71,30 % 62,26 % 66,07 % 71,79 % 66,67 % 70,69 % 61,12 % 68,62%
Tabla 19: Resumen 100 partidos sin cuota árbol de decisión

En el apartado anexo 7 se encontrará cómo se implementa los algoritmos.

12.6. SVM

El Supported Vector Machine, SVM, pertenece al conjunto de algoritmos de aprendizaje automático


supervisado. Fue desarrollado en los años noventa por Vapnik y sus colaboradores [50].
Originariamente el método se desarrolló para resolver problemas de clasificación binaria, pero se ha
logrado extender a problemas de clasificación múltiple y regresión (Amat Rodrigo, 2017). Se emplea
en diversos campos como pueden ser el reconocimiento de imágenes, caracteres, lenguaje natural y
muchos otros. Se considera un referente en el ámbito del aprendizaje estadístico y machine learning.

Se debe mencionar el modelo propuesto y el estudio desarrollado corresponde a un caso de


clasificación binaria. No se va a tratar el caso multiclase, aunque hay que mencionar que el SVM
también ofrece soluciones a esos problemas de clasificación. Además de que también resuelve
problemas de regresión.

Se va a diferenciar en tres casos según como sea el espacio de características de nuestro problema.
La clasificación binaria para casos donde los ejemplos son perfectamente separables, se denomina
SVMs de “margen duro”. En los casos donde hay ruido y no son perfectamente separables, es decir,
son cuasi – separables linealmente, se denominan SVMs de “margen blando”. Y, por último, la
clasificación en problemas donde los ejemplos no son separables linealmente, denominado como
“SVM kernelizadas”.

72
“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

Antes de empezar, una breve introducción teórica sobre lo que es un hiperplano. En un espacio p
– dimensional, un hiperplano se define como un subespacio plano y afín de dimensiones p – 1. Afín
quiere decir que no tiene por qué pasar por el origen. Por ejemplo, en un espacio de dos dimensiones,
el hiperplano sería una recta. En uno de tres dimensiones, sería un plano. Para dimensiones superiores
a tres la definición se mantiene.

Desde el punto de vista matemático, el hiperplano para p – dimensiones tendría la siguiente


estructura:

𝛽0 + 𝛽1 𝑥1 + 𝛽2 𝑥2 + ⋯ + 𝛽𝑝 𝑥𝑝 = 0

Si un punto del conjunto X no satisface la ecuación, el punto caerá a un lado u otro del hiperplano.
Para saber a qué lado cae el punto, únicamente hace falta saber el signo del resultado de evaluar el
punto x en la ecuación.

Para un conjunto de observaciones perfectamente separables, el problema de clasificación se


resolvería viendo en qué lado del hiperplano se distribuirían cada una de las observaciones. En estos
casos, hay infinitos hiperplanos que podrían separar las dos clases, pero se quiere aquel que los separe
de la manera más óptima.

Para solucionar este problema, el de encontrar el clasificador óptimo, tenemos que encontrar el
“hiperplano óptimo de separación” que se corresponde con el hiperplano que está más separado de
todas las observaciones de que se han introducido durante el entrenamiento. Aquí se introduce el
concepto de vectores soporte. Los vectores soporte son las distancias, maximizadas, entre las
observaciones de las dos clases y el hiperplano que definen la separación óptima entre las clases. De
esta manera se define el hiperplano único en el que se basa el clasificador para diferenciar las clases.

En el mundo real, los conjuntos de observaciones no son perfectamente separables. Normalmente


los conjuntos de datos suelen tener ruido, sería el caso de los cuasi – separables linealmente, o no
separables linealmente. En este último caso, utilizamos lo que se llama funciones kernel que lo que
hacen es definir espacios transformados llamados espacios de características donde los conjuntos de
datos si son separables.

Las funciones kernel más conocidas son:

• Lineal:

𝐾(𝑥, 𝑥 ′ ) = < 𝑥, 𝑥 ′ >

73
“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

• Polinómico:

𝐾(𝑥, 𝑥 ′ ) = (< 𝑥, 𝑥 ′ > + 𝑐)𝑑

• Gaussiano:

2
𝐾(𝑥, 𝑥 ′ ) = exp (−𝛾||𝑥 − 𝑥 ′ || )

• Sigmoidal:

𝐾(𝑥, 𝑥 ′ ) = 𝑡𝑎𝑛ℎ(𝛾 < 𝑥, 𝑥 ′ > + 𝜏)

Donde a los parámetros 𝛾, 𝜏 y 𝑑 se les denomina parámetros del kernel.

El porqué de que este método sea tan popular es debido a las ventajas (Scikit-learn, s.f.) que
presenta este modelo:

• Trabaja bien en problemas con muchas dimensiones.


• Es efectivo en problemas donde el número de dimensiones supera al número de
observaciones.
• Las funciones kernel le dotan de versatilidad, lo que ayuda a resolver cualquier tipo de
problema.

Pero como todo algoritmo de aprendizaje supervisado tiene sus desventajas:

• Si el número de atributos es mucho más grande que el número de observaciones es crucial


evitar el overfitting.

SVM PLANTEADA.

Para aplicar este algoritmo se ha hecho uso del modelo de clasificación SVC que provee la librería
de Python scikit-learn. Su implementación en Python está basada en LIBSVM. LIBSVM, es un
paquete software que permite la resolución de problemas de clasificación y regresión aplicando
máquinas de vectores soporte (Chang & Lin, 2001)[53]. El paquete software es de código abierto
(disponible en C++ y Java) permite implementar diversas formulaciones del SVM, empleando
distintos tipos de kernel, la clasificación de varias clases y técnicas de validación cruzada para la
selección del modelo más adecuado. Su implementación en Python se hace a través de la librería
scikit-learn. Esta librería, como ya se ha mencionado, está enfocada en el aprendizaje automático,
incluye diversos algoritmos entre los cuales se encuentra las máquinas de vectores soporte, los
bosques aleatorios, la regresión logística y muchos más (Wikipedia [Scikit-learn], s.f.).

74
“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

La implementación de este modelo se ha realizado de siguiendo el procedimiento que presentan


en la guía práctica para la aplicación del algoritmo de máquinas de vector soporte (Lin, Hsu, & Chang,
2003):

• Escalado de los datos.


• Al igual que en la red neuronal, se aplica el método GridSearchCV (Roman, 2019) para
encontrar la mejor combinación de hiperparámetros del modelo para nuestro conjunto de
entrenamiento.
• Con los hiperparámetros que da como resultado GridSearchCV, se ajusta el modelo a los
datos de entrenamiento y se realiza el test.

Con este procedimiento se quiere conseguir optimizar el modelo para obtener los mejores
resultados con los datos de los que disponemos.

Los hiperparámetros a calibrar en el modelo de SVM para la clasificación son los siguientes:

• C: Es el parámetro de coste. Es decir, es el que marca cuan de estricto es el margen de error


se permite entre las observaciones da las clases. Cuanto más alto, menos margen y por lo
tanto más rígido es el modelo a la hora de clasificar. Tiene que ser positivo. Por defecto es 1.
• Kernel: Aquí se especifica que función kernel es la que va a emplear el algoritmo para el
entrenamiento. El valor por defecto es el kernel gaussiano.
• Gamma: Este argumento es un coeficiente es una medida del peso que tiene cada
observación del entrenamiento. Cuanto más grande sea gamma más se verá influenciado el
modelo por la observación. Este parámetro se usa para los kernel gaussiano y sigmoide.
• Probability: Si instanciamos este parámetro a True, el modelo nos devolverá una
probabilidad estimada de la pertenencia de a una clase de la observación del test.

Para este modelo no se considera necesario instanciar más hiperparámetros de los ya mencionados,
en la guía mencionada anteriormente, no se plantean más modificaciones, el modelo implementado
instanciará con sus valores por defecto.

En la selección de los valores que se van a usar en el modelo para realizar el test, se va hacer uso
de una búsqueda exhaustiva de aquellos que son más óptimos para el problema. Para llevar a cabo
esta tarea se realiza la búsqueda haciendo uso de GridSearchCV. En el apartado de máquinas de
vectores soporte dentro del anexo 8 se observa cómo se implementa el algoritmo. Se introducen los
posibles valores de los hiperparámetros que puede tomar el modelo, GridSearchCV, de forma similar
a su implementación en la red neuronal, probará estos parámetros para el conjunto de entrenamiento
aplicando un cross-validation, es decir, dividiendo el set de entrenamiento aplicando la función
TimeSeriesSplit. Esta función divide el set de datos de manera tal que los conjuntos de datos los va
seleccionando de manera temporal y no aleatoria como lo haría por defecto el GridSearchCV. De esa

75
“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

manera se asegura que nunca se aplique la predicción a datos que aún no se conocen. Para la selección
de los hiperparámetros, el algoritmo los escoge según qué conjunto de hiperparámetros ha dado una
accuracy media mayor tras el cross-validation.

Los hiperparámetros que se han considerado en el GridSearchCV han sido los siguientes:

• C: Se han propuesto los valores 1, 10 y 100. Valores muy altos pueden hacer que el modelo
sea muy rígido y valores más bajos de 1 no ayudaría a la clasificación ya que el error
permitido sería muy grande.
• Kernel: Se han considerado el lineal y el gaussiano. El polinómico podría ser otra opción,
pero tiende a haber problemas de overfitting.
• Gamma: Este hiperparámetro solo tiene sentido para el kernel gaussiano. Los valores van
desde 0.001 hasta 100, se van multiplicando por diez los valores, con un total de 6 valores de
gamma.
• Probability: Se instancia esta variable a True, para obtener la probabilidad estimada de cada
clase.

Para el escalado de los datos se ha empleado es escalado estándar. Consiste en centrar los atributos
con respecto a media 0 con desviación estándar 1 de forma que los atributos tengan una distribución
normal estándar. Este método de pre-procesado hace que los algoritmos aprendan mejor, ya que
mantiene la información útil sobre valores atípicos y hace a los algoritmos menos sensibles a ellos
[56]. Se ha implementado usando la función StandardScaler de scikit-learn.

En el apartado 1 del anexo del SVM se puede ver como se ha implementado el modelo.

Con los parámetros que aquí se sacan, se entrena el modelo con el set de entrenamiento y se aplica
sobre el conjunto de test obteniendo los siguientes resultados:

Sin cuotas Con cuotas


Accuracy set entrenamiento 65,33% 66,35%
Accuracy set validación 65,75% 64,38%
C 1 1
Gamma 0.001 0.01
Kernel Gaussiano Gaussiano
Tabla 20: Resumen sin cuota y con cuota SVM

Los primeros resultados que se obtienen del modelo vemos que el SVM roza el 66% de partidos
acertados, lo que serían unos 528 partidos clasificados correctamente. La matriz de confusión del
modelo teniendo en cuenta las cuotas, se puede observar que está clasificando partidos ganados por

76
“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

el equipo visitante como si los hubiera ganado el local. Por lo tanto, el modelo está clasificando muy
bien los partidos que ha ganado el equipo local, pero, falla a la hora de clasificar con éxito los partidos
ganados por el visitante, ya que la victoria se la da al local.

Ilustración 31: Matriz de confusión SVM con cuota.

Cuando aplicamos el modelo sin las cuotas, es capaz de clasificar mejor los partidos ganados por
el visitante, pero aun así no hay una gran diferencia teniendo en cuenta las cuotas dentro de los
atributos.

Ilustración 32: Matriz de confusión SVM sin cuota.

Para tratar de mejorar el rendimiento del modelo se SVM se van a aplicar técnicas de selección de
variables, distintas a las aplicadas en el apartado de selección de variables.

Estos métodos son los llamados métodos de envoltura (González, Métodos de Selección de
Características, 2019). Estos métodos siguen el siguiente procedimiento.

77
“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

Ilustración 33: Proceso del método de envoltura.

Estos algoritmos tienen el objetivo de reducir la dimensionalidad del problema. Pasamos de tener
un conjunto p-dimensional, a tener un conjunto k-dimensional donde p > k (MLxtend, s.f.). Estos
algoritmos parten de un conjunto de características, y prueban el modelo con ese conjunto de
atributos, eliminando o añadiendo atributos según su aportación en el resultado del modelo. En este
trabajo se han considerado los siguientes algoritmos:

• Sequential Forward Selection (SFS): Este método parte de un conjunto vacío de


características y en cada iteración va agregando un nuevo atributo o descartándolo según
mejore el modelo.
• Sequential Backward Floating Selection (SFFS): La variable floating de este método por
cada variable añadida realiza pasos hacia atrás en el caso de que la variable escogida ofrezca
un rendimiento menor al conjunto anterior. Esto añade más combinaciones y, por lo tanto,
una búsqueda más exhaustiva.
• Sequential Forward Selection (SFS): Este método comienza con el conjunto total de
variables y va eliminando la característica menos significativa en cada iteración.
• Sequential Backward Floating Selection (SBFS): Añade la misma variante que para el
forward selection.

Estos algoritmos suelen ser computacionalmente muy costosos, pues si el número de atributos que
se pretende estudiar es muy grande, puede hacer que la búsqueda se alargue demasiado. Además,
ofrecen la posibilidad de instanciar el conjunto máximo de atributos con el que se quiere trabajar.

En este caso, primero se ha procedido a trabajar con el SFS y el SBS, añadiendo un GridSearchCV
al método. Con la librería Pipeline se realiza un GridSearchCV tanto para los parámetros del SVM
como para el método de envoltura. Obteniendo así el tamaño del conjunto óptimo de atributos, con
los atributos que mejor funcionan y con los hiperparámetros que mejor rendimiento ofrecen para ese
subconjunto de atributos. Para los hiperparámetros del SVM que se van a probar junto con los
métodos de selección de variables, solo se probará el kernel gaussiano. Esta decisión ha sido tomada
ya que se observa que el kernel lineal no se ajusta bien al conjunto de datos del cual se dispone.

78
“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

También es por la necesidad de reducir el número de iteraciones, ya que si no los tiempos de ejecución
se incrementarían sin además lograr mejoras significativas.

SFS SBS SFFS SBFS


Cuota local Cuota local Cuota local Cuota local
Cuota visitante Porcentaje Cuota visitante Porcentaje
de victoria de victoria
local local
Net Rating local Racha últimos Net Rating local Diferencia de
preciso 5 partidos preciso puntos
local compuesta
partido
anterior
local
Diferencias Lesionados Diferencias Diferencia de puntos
de puntos visitante de puntos compuesta
anteriores Local anteriores Local partido
anterior
visitante
Porcentaje Lesionados Porcentaje -
de victoria local de victoria
local local
Racha últimos Clasificación para Racha últimos -
5 partidos Play-offs 5 partidos
local visitante local
Lesionados Rating ofensivo Lesionados -
local visitante local
Clasificación para Back-to-back Clasificación para -
Play-offs local local Play-offs local
Back-to-back Diferencia de puntos Back-to-back -
visitante compuesta visitante
partido anterior
visitante
Tabla 21: Conjunto de atributos como resultados aplicar métodos SVM.

Tras la aplicación de estos métodos, que aparecen en el apartado 2 del anexo del SVM, se ha
pasado a realizar lo mismo para el SFFS y el SBFS, para ver las diferencias tanto en los atributos
escogidos como en el tiempo de ejecución de los algoritmos. En la tabla 22 se presentan los atributos
que se han escogido en cada uno de los métodos.

79
“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

SFS SBS SFFS SBFS


Accuracy set 67,30% 66,47% 67,30% 66,80 %
entrenamiento
Accuracy set validación 64% 64% 64% 64%
C 10 10 10 10
Gamma 0.001 0.001 0.001 0.01
Kernel Gaussiano Gaussiano Gaussiano Gaussiano
Tiempo de 32 63 22 107
ejecución(min)
Tabla 22: Resumen de resultados aplicados a los métodos de SVM.

Normalmente variantes floating de los métodos de envoltura tienen tiempos de ejecución más altos
que sus versiones estándar, se puede ver la diferencia entre el SBS y el SBFS. Estos métodos son una
alternativa a un Exhaustive Search, el cual prueba todas las combinaciones posibles entre los atributos
y se queda con la más óptima. Este método es el más costoso computacionalmente, por lo que se ha
optado utilizar los anteriores ya que, para tantos atributos, el proceso llegaría a ser muy extenso y
tampoco ofrece muchas mejoras sobre los mencionados anteriormente.

De los resultados que se han obtenido, se observa que se he ha mejorado en el set de entrenamiento
pero que en el set de test no ha habido una gran variación.

El siguiente paso, es el estudio de la temporada realizando predicciones cada 100 partidos. Como
ya se ha visto, el hecho de aplicar los métodos de selección de variables para encontrar el conjunto
más optimo no han mejorado los resultados obtenidos para todo el set de test, vamos a emplear todo
el conjunto de atributos que se tenía inicialmente. El procedimiento que se sigue para esta nueva
evaluación es el mismo que se siguió inicialmente. Se aplicará el GridSearhCV para encontrar los
hiperparámetros que mejor definan el conjunto de los datos para cada iteración y se aplicará la
evaluación al set de test.

En las dos tablas que se ven a continuación se muestran los valores que se han obtenido a de más
de una media de los resultados para cada métrica.

80
“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

Con cuotas
Métrica 0-100 100-200 200-300 300-400 400-500 500-600 600-700 700-800 Media
Accuracy 69 % 65 % 68 % 60 % 65 % 63 % 70 % 61 % 65,13%
Precisión 67,5 % 61,04 % 63,85 % 59,74 % 60,27 % 62,20 % 67,12 % 57,97 % 64,46%
Recall 91,52 % 90,38 % 96,36 % 83,63 % 88 % 89,47 % 89,09 % 80 % 88,56%
F1 Score 77,70 % 72,87 % 76,81 % 69,70 % 71,54 % 73,38 % 76,56 % 67,23 % 73,22%
Tabla 23: Resumen 100 partidos con cuotas SVM

Sin cuotas
Métrica 0-100 100-200 200-300 300-400 400-500 500-600 600-700 700-800 Media
Accuracy 71 % 69 % 61 % 59 % 66 % 66 % 64 % 61 % 64,63%
Precisión 69,23 % 64,38 % 61,11 % 59,46 % 61,43 % 65,75 % 63,76 % 58,21 % 62,92%
Recall 91,52 % 90,38 % 80 % 80 % 86 % 84,21 % 80 % 78 % 83,77%
F1 Score 78,83 % 75,20 % 69,29 % 68,21 % 71,66 % 73,84 % 70,96 % 66,67 % 71,84%
Tabla 24: Resumen 100 partidos sin cuotas SVM

En el último apartado del anexo del SVM se muestra la implementación de esta última parte.

Como resumen final de los resultados:

% de acierto
Test completo sin cuotas 65,75%
Test completo con cuotas 64%
Test dividido sin cuotas 64,63%
Test dividido con cuotas 65,13%
Cuota menor 67,00%
Porcentaje mayor 65,43%
Local 54,13%
Tabla 25: Resumen de aciertos SVM

Como se puede observar, el SVM, teniendo en cuenta los resultados obtenidos, se puede concluir
que no hay mucha diferencia entre tener en cuenta los datos de las cuotas y no tenerlos en cuenta en
el conjunto de datos. Esto tiene dos conclusiones, la primera es que se consigue un buen rendimiento
con los atributos que se han propuesto y que el SVM se queda por debajo del acierto de las cuotas.

81
“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

12.7. RANDOM FOREST


El algoritmo de los bosques aleatorios es uno de los algoritmos más efectivos dentro del machine
learning. Está enmarcado dentro de los algoritmos de aprendizaje automatizado de tipo ensamblador
llamado bagging o Boostrap Aggregation (Brownlee, 2016).

Los métodos de ensamble tratan de mejorar el rendimiento de los modelos de machine learning.
Trata de combinar varios algoritmos de aprendizaje automático para resolver el problema (González,
Métodos de Ensamble de Modelos, 2019).

El bagging consiste en la construcción de conjuntos. Dado un conjunto de datos, se realiza la


extracción de varias muestras de manera aleatoria. La aleatoriedad con la que se escogen las muestras
de los datos se hace de tal manera que cualquier variable tiene la misma probabilidad de caer en un
conjunto que en otro. Una vez que se tienen las diferentes muestras, se entrenan los modelos de
predicción de manera independiente. Los resultados finales se obtienen de una combinación de los
resultados de los diferentes submodelos.

El Random Forest en un tipo de algoritmo bagging en el que se emplean arboles de decisión como
modelos para cada conjunto de muestras. Cada árbol se construye de la siguiente manera (Orellana
Alvear, 2018):

• Del conjunto completo de entrenamiento se selecciona una serie de muestras. Estas muestras
se toman aleatoriamente (dando lugar a que todas las observaciones tengan la misma
probabilidad de entrar en el subconjunto) pero con reemplazo. Esto quiere decir que una
misma muestra puede aparecer en más de un subconjunto, así podemos generar infinitos
subconjuntos.
• Para cada nodo, se escogen un número de atributos aleatoriamente de manera tal que m,
siendo el número de atributos para cada nodo, y M, el número total de atributos del conjunto
de datos, se cumple que m<M. El número m se mantiene constante en todos los nodos del
árbol.
• Cada árbol crece hasta su máxima extensión posible.
• Los resultados se obtienen para cada nodo y el resultado final es una ponderación de los
resultados de los nodos.

El proceso de muestreo aleatorio de los datos se llama Bootstrap. Los subconjuntos que se crean
de esta selección se hacen de manera aleatoria cada vez que se ejecuta el modelo, para tratar de obtener
resultados de manera que los resultados no cambien cada vez que se ejecuta el modelo, se deberá
instanciar uno de los parámetros del modelo. Esto se mencionará más adelante en el apartado de la
implementación.

82
“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

Los bosques aleatorios suelen ofrecer muy buenos resultados en problemas de predicción. El
algoritmo se puede emplear tanto en problemas de regresión como en problemas de clasificación. En
este caso, se ha empleado el RandomForestClassifier, donde la clasificación de una observación a
una clase u otra se realiza por un sistema de votos, donde los distintos estimadores emiten un voto a
cada clase y la clase más votada es a la que se adjudica dicha observación.

Las principales ventajas de este método ensamblador son:

• La preparación de datos es mínima.


• Reduce la dimensionalidad.

Pero presenta algunas limitaciones:

• Es bueno para los problemas de clasificación, pero no tanto para la regresión.


• Poco control en lo que hace el modelo, es como una “caja negra”.

RANDOM FOREST PLANTEADA.

Los hiperparámetros de los cuales consta el modelo de Random Forest son los siguientes:

• n_estimators: El número de árboles de los cuales va a constar el algoritmo. Este es el


parámetro más importante a la hora de estudiar el Random Forest, normalmente a mayor
número de estimadores mejores resultados ofrece el modelo, sin embargo, llega un punto
donde el algoritmo no mejora y por lo tanto no es recomendable aumentar el número de
estimadores ya que el coste computacional suele ser relativamente alto.

• Criterion: Es la función que decide si se realiza una ramificación del árbol. Los valores de
este parámetro son Gini o entropy.
− Gini: mide el grado de impureza del nodo. Cuanto más impuro, quiere decir que las
clases están más mezcladas.
− Entropy: mide la ganancia de información entre un nodo y otro. La entropía es una
medida del grado de desorden del sistema, mientras menor sea la entropía menos
grado de desorden hay.

• Bootstrap: Procedimiento por el cual se hace el muestreo aleatorio con reemplazo. Si el valor
es True se realiza el muestreo aleatorio y si es False todas las observaciones se usan para
todos los nodos. En este caso el valor que se le da es True. Al ser aleatorio, cada vez que se
ejecuta el modelo, las muestras que de cada nodo son distintas, por lo tanto, puede que
resulten en resultados distintos. Para eliminar el grado de aleatoriedad de los resultados, se

83
“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

instancia el parámetro random_state. Este parámetro se suele instanciar con los valores 0 ó
42 (Scikit-learn, s.f.).

• Max_features: Este parámetro define el número de atributos que se considerarán en cada


nodo. Lo habitual en estos problemas es dejar el valor en auto, escogiendo la raíz cuadrada
del número de atributos que se tenga en el conjunto de datos inicial.

• Max_depth: Con este parámetro se define la profundidad de cada árbol de decisión de los
nodos. Tratamos así de que no haya overfitting, aunque en realidad no suele haber problemas
de ese tipo con estos métodos de aprendizaje.

Para el resto de hiperparámetros, se dejan sus valores por defecto ya que como se ha mencionado
antes, esta clase de algoritmos funcionan bien sin modificar muchos de sus parámetros. Los más
significativos son el número de estimadores, el criterio, y la cantidad de atributos que se escoge para
cada nodo.

Para determinar los parámetros óptimos del algoritmo, se ha realizado el mismo procedimiento
que se siguió en el SVM usando el GridSearchCV. Los valores que se han considerado para cada uno
de los hiperparámetros son los siguientes:

• n_estimators: Partimos desde el 50, después 100 y hasta 600 haciendo saltos de 100 en 100.
• Criterion: Gini o Entropy.
• Max_depth: De 2 a 5.

El resto ya están instanciados con sus valores por defecto.

Se observa que los resultados iniciales se mantienen en la tendencia de los modelos anteriores.

Sin cuotas Con cuotas


Accuracy set entrenamiento 65,43% 66,64%
Accuracy set validación 65,375% 66,50%
n_estimators 600 200
criterion Entropy Gini
max_depth 5 2
Tabla 26: Resumen de aciertos sin cuotas y con cuotas Random Forest.

Se puede apreciar en la matriz de confusión del modelo teniendo en cuenta las cuotas, que sigue
mostrando dificultad a la hora de clasificar bien los partidos ganados por el visitante.

84
“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

Ilustración 34: Matriz de confusión Random Forest con cuota. Ilustración 35: Matriz de confusión Random Forest sin cuota.

Lo mismo para el modelo sin tener en cuenta las cuotas. Con esto se puede llegar a decir que para
el Random Forest, el incluir las cuotas o no, a priori, no influye mucho a la hora de clasificar los
partidos. Se puede ver en el anexo 9 cómo se ha aplicado el método.

Ahora se va a realizar el análisis de los partidos, realizando las predicciones cada 100 partidos. En
este caso se ha seguido el mismo procedimiento que antes, con la variación de que se va a dejar el
valor de max_depth que tiene por defecto el modelo. Se toma esta decisión ya que no se observa
mucha diferencia entre instanciar este parámetro o no. Por lo tanto, como el Random Forest suele
clasificar bien con sus valores por defecto, en este caso solo se tendrán el conjunto de número de
estimadores mencionados antes y el criterio, gini o entropy.

Los resultados que se obtienen son los siguientes.

Con cuotas
Métrica 0-100 100-200 200-300 300-400 400-500 500-600 600-700 700-800 Media
Accuracy 75 % 65 % 70 % 68 % 71 % 62 % 67 % 61 % 67,37%
Precisión 76,56 % 63,07 % 71,19 % 67,16 % 69,09 % 66,67 % 72 % 60 % 68,22%
Recall 83,05 % 78,85 % 76,36 % 81,81 % 76 % 66,67 % 65,45 % 76 % 74,28%
F1 Score 79,67 % 70,08 % 73,68 % 73,77 % 72,13 % 66,67 % 68,57 % 66 % 70,96%
Tabla 72: Resumen 100 partidos con cuotas Random Forest

85
“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

Sin cuotas
Métrica 0-100 100-200 200-300 300-400 400-500 500-600 600-700 700-800 Media
Accuracy 72 % 64 % 64 % 68 % 65 % 58 % 60 % 57 % 63,50%
Precisión 76,27 % 62,5 % 65,07 % 69,49 % 61,90 % 62,29 % 62,71 % 56,14 % 64,93%
Recall 76,27 % 76,92 % 74,55 % 74,55 % 78 % 66,67 % 67,27 % 64 % 72,28%
F1 Score 76,27 % 68,96 % 69,49 % 71,93 % 69,03 % 64,41 % 64,91 % 59,81 % 68,01%
Tabla 28: Resumen 100 partidos sin cuotas Random Forest

Como se puede observar, la progresión es bastante satisfactoria en los primeros 500 partidos
teniendo en cuenta las cuotas de las casas de apuestas. En los últimos 300 se sigue viendo esa
tendencia a la baja del porcentaje de acierto de los modelos, tanto con las cuotas como sin las cuotas.

En la siguiente tabla se realiza un resumen de los resultados obtenidos. Se ve como para el análisis
cada 100 partidos el resultado del modelo teniendo en cuenta las cuotas es bastante bueno, en
comparación con el modelo sin cuotas, que pierde precisión en comparación con los primeros
resultados que se obtuvieron con el set de test completo.

% de acierto
Test completo sin cuotas 66,50%
Test completo con cuotas 65,38%
Test dividido sin cuotas 63,5%
Test dividido con cuotas 67,38 %
Cuota menor 67,00%
Porcentaje mayor 65,43%
Local 54,13%

Tabla 29: Resumen de aciertos Random Forest cada 100 partidos.

% aciertos acumulados Sin apuestas Con apuestas Cuota menor


100 72 % 75 % 73 %
200 68 % 70 % 70 %
300 66,67 % 70 % 69,17 %
400 67 % 69,5 % 67,87 %
500 66,6 % 69,8 % 68 %
600 65,17 % 68,5 % 67,5 %
700 64,43 % 68,28 % 67,43 %
800 63,5 % 67,37 % 67 %
Tabla 30: Aciertos sin/con cuotas Random Forest 100 partidos.

86
“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

13.- PLANIFICACIÓN Y PRESUPUESTOS

En este apartado, se mostrará el tiempo estimado que se ha empleado en cada una de las partes del
proyecto, además, se reflejara el coste aproximado. Para ello se empleará un diagrama de Gantt.

El diagrama de Gantt es una herramienta gráfica, donde se refleja el tiempo previsto que se
empleará en una tarea o actividades (Wikipedia [Diagrama de Gantt], s.f.), este diagrama es muy útil
para la planificación y organización de diversas tareas, y también compromete al equipo a trabajar
con un calendario previsto de ante mano y cumplir con los plazos de entrega de cada actividad.

Este diagrama es una herramienta indispensable en los sectores de la construcción, ya que una
entrega tardía del proyecto supone grandes pérdidas económicas. El diagrama también permite ajustar
las horas diarias dedicadas y el coste de cada hora que le queremos asignar a cada miembro del
proyecto.

Se ha fijado un horario de trabajo aproximado, de lunes a viernes de 9:00 a 13:00 después, 14:00
a 18:00 de la tarde, unas 8 horas diarias, el presupuesto es de 10 €/h.

En la tabla siguiente se podrá observar en detalle las actividades, las fechas de inicio, las fechas
de fin, las duraciones de las actividades, el porcentaje de progreso y por ultimo los costes generados.

Tabla 31: Presupuesto y duración del proyecto.

En la tabla 31, podemos observar que el coste total del proyecto es de 34.520 € y una duración
total de 119 días, sin embargo, el coste actual es de 26.656 €, es a causa de las actividades que aún
no han terminado.

87
“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

Ilustración 36: Diagrama de Gantt 1.

En la ilustración 36, se puede apreciar que la actividad de inicio es la de extracción de datos,


compuestos por dos subactividades que es la de búsqueda de fuente y la de extraer los datos, al
finalizar esta tarea comienza la tarea de Almacenamiento de los datos.

Ilustración 37: Diagrama de Gantt 2.

Todas las tareas van seguidas de otras, en la gráfica se representa con líneas o flechas de unión,
hay casos en los que hay tareas que empiezan antes de que una tarea termine, esas fechas de comienzo
de las actividades las podemos modificar, según el avance del proyecto se iran modificando las fechas
de las tareas.

88
“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

Ilustración 38: Diagrama de Gantt 3.

En la ilustración 38 se ve claramente las actividades que empiezan antes de que una termine.

Ilustración 39: Diagrama de Gantt 4.

En este caso, aparece una línea roja en la gráfica, eso quiere decir el día en el que nos encontramos
actualmente, y si nos fijamos bien, la fecha de finalización es el día 11 de junio de 2020, ya que el
programa calcula automáticamente los fines de semana y los días festivos, de manera que no exista
un cálculo erróneo del día de finalización de actividad.

89
“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

III.- CONCLUSIÓN Y TRABAJOS FUTUROS


CONCLUSIONES

Tras la exposición de los distintos modelos y sus resultados, a continuación, se va a realizar una
comparación y valoración de los mismos. En la tabla 32 se presenta una comparativa entre los
modelos, con cuotas y sin ellas, y con el set “dividido” y sin dividir.

Test completo Test dividido


Sin cuotas Con cuotas Sin cuotas Con cuotas
Logit 65,63 % 66,13 % 65,38 % 66,88 %
Red neuronal 65,11 % 65,52 % 65,80 % 64,98 %
Árbol de decisión 63,25 % 67,62 % 64,13 % 66,75 %
SVM 65,75 % 64 % 61,75 % 65,12 %
Random Forest 66,50 % 65,38 % 63,5 % 67,38 %
Tabla 32: Resumen de resultados conclusión.

En líneas generales, no hay grandes diferencias en el rendimiento de los modelos. Hay varios
aspectos que deben resaltarse, primero, a excepción del SVM y el Random Forest (con el test
dividido), los modelos varían poco su comportamiento, con cuotas o sin ellas. Aunque en un primer
contacto esto puede resultar impactante, más cuando tenemos en cuenta que las cuotas aciertan el 67
% de los partidos. En realidad, las cuotas son una métrica agregada que compara ambos equipos, y la
cuota es más baja cuando mejor sea el equipo, por ello dado que el acierto obtenido sin cuotas es muy
similar al 67%, se puede decir que los modelos no extraen rendimiento de dichas variables, ya que
los resultados obtenidos son muy parecidos.

La única excepción que cabría mencionar es el Random Forest que, cuando se entrena con cuotas
y el set dividido, mejora notablemente respecto al mismo tipo de entrenamiento sin cuotas, no
obstante, la diferencia entre el entrenamiento con cuotas y el set dividido frente al set completo y sin
cuotas es únicamente de 0,88 %.

Si se analiza por tipo de entrenamiento, con el test completo y sin cuotas, los modelos presentan
un rendimiento muy satisfactorio, destacando el SVM y el Random Forest, con un acierto del 65,75
% el SVM y 66,50% el Random Forest, ambos aproximados al 67 % de las cuotas. En este tipo de
entrenamiento, pero con cuotas, el árbol de decisión supera al benchmark (las cuotas), con un 67,62
% y la regresión logística obtiene un buen resultado con el 66,13 %.

En la figura 40 se representa el porcentaje acumulado de acierto con cuotas para todos los modelos,
y, como benchmark, el acierto acumulado prediciendo como ganador la menor cuota. Esta gráfica
corresponde al set dividido y con cuotas. Se observa que el SVM se desmarca del resto de modelos,
obteniendo unos resultados peores. La red neuronal muestra un comportamiento similar a las cuotas,
aunque se ve penalizada por su bajo acierto en la parte central y final de la temporada. Los modelos
que mejor funcionan son el Random Forest, que supera en todo momento a las cuotas y destaca

90
“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

especialmente en los últimos partidos; el árbol de decisión, que se comporta muy bien en la primera
mitad de la temporada, aunque se ve especialmente penalizado por el final, obteniendo finalmente un
acierto sólo un 0,25 % inferior a las cuotas; y la regresión logística, que presenta una gráfica muy
similar a las cuotas y un acierto sólo un 0,12 % inferior.

Ilustración 40: % acumulado de aciertos con cuotas.

En la figura 41 se observa la misma gráfica, pero esta vez para los modelos sin cuotas. Las
predicciones de todos los modelos son satisfactorias al principio de la temporada, pero se ven
penalizadas al no adaptarse de forma suficiente a la temporada en curso. El acierto de modelos como
la red neuronal o la regresión logística dista menos de un 2 % del acierto de las cuotas. Cabe destacar
que estos modelos presentan unos resultados muy similares con cuotas. No obstante, ambos son
menores que los obtenidos para el test completo y sin cuotas del árbol de decisión, el Random Forest
y la propia regresión logística.

91
“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

Ilustración 41: % acumulado de aciertos sin cuotas.

A la vista de los resultados, un aspecto que puede preguntarse el lector es porqué los modelos no
consiguen apenas superar el porcentaje de acierto que presentan las cuotas de apuestas. Aquí se deben
hacer varias puntualizaciones, en primer lugar, la temporada de test (2019-2020) presenta algunas
diferencias respecto a las anteriores, que corresponden al entrenamiento. Mientras que las cuotas
aciertan en estas temporadas porcentajes muy similares (en media, 67,20 %), no es así ni en porcentaje
de victoria del equipo con mayor porcentaje de victoria (63,15 % vs 65,43 % en el test) y, sobre todo,
en el porcentaje de victoria local (58,50 % vs 54,13 % en el test). Esta última diferencia afecta a los
modelos y se hace visible en la matriz de confusión, donde resalta la cantidad de partidos que el
modelo clasifica como 1 (victoria local) cuando son 0 (victoria visitante). Para solventar este
problema, se ideó entrenar los modelos con el test dividido, y, de esta forma, lograr que a lo largo de
la temporada los modelos se fueran adaptando a las condiciones de la temporada a predecir. A la vista
de los resultados, la mejora es inexistente. Esto puede deberse al poco peso de los ejemplos de esta
temporada respecto al set total (en el mejor de los casos, el último entrenamiento se realiza con 700
partidos de esta temporada y 3159 de las anteriores, es decir, un 18 % del dataset), lo que provoca
que no sea suficiente. En el apartado de conclusiones/trabajos a futuro se explorarán algunas
soluciones a este problema. La siguiente puntualización viene en cierto modo derivada de este último
punto, y tiene que ver con la elección de variables y de hiperparámetros que se ha realizado, ya que
se ha hecho teniendo como base las tres temporadas que forman de inicio el test, lo que ha podido
provocar que algunas variables importantes en esta temporada se hayan desechado o los
hiperparámetros no se hayan elegido de forma óptima. La solución podría ser ir adaptando los
hiperparámetros a lo largo de la temporada.

92
“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

El último aspecto por destacar de los resultados es el rendimiento de los modelos sin cuotas. Como
puede observarse, el rendimiento es muy cercano al acierto de las cuotas en varios de los modelos y/o
tipos de entrenamiento, lo que pone de manifiesto que los modelos podrían usarse, individualmente,
en conjunto o unidos a otras herramientas y predicciones de expertos para fijar las cuotas de los
partidos, o, por ejemplo, las predicciones que realizan algunos medios deportivos.

TRABAJOS FUTUROS

Tras el estudio que se ha realizado, en este apartado se van a presentar cuáles serían las propuestas de
mejoras que se llevaran a cabo en caso de afrontar el reto para la temporada 2020 - 2021.

Con el tiempo que se ha dedicado al análisis de los equipos, se han obtenido buenos resultados,
aunque se tienen limitaciones, al igual que el resto de los trabajos que se han realizado sobre los
deportes en equipo, ya que afectan muchos factores, y existe una parte de aleatoriedad en cada partido.
El enfoque del próximo estudio sería complementar el estudio planteado, es decir, por equipo, con
uno más centrado en los jugadores de forma individual.

El estudio de las variables más significativas que se ha realizado es de un conjunto de varias


temporadas. Se ha visto que para los primeros partidos los resultados han sido muy satisfactorios,
pero a lo largo que avanza la temporada los atributos seleccionados pueden perder su peso y podría
no tenerse en cuenta atributos que son más significativos para la temporada de test. Por lo tanto, el
estudio de los factores que influyen más en la actuación de un equipo en un determinado partido se
haría de manera más actualizada, evitando así la generalización y tratando los datos más en tiempo
real. En esta línea, en los modelos se debería dar más importancia a los datos más actuales, tratando
así de que se tenga más en cuenta los partidos más recientes y menos aquellos que fueron del inicio
de la temporada o de temporadas anteriores.

Otro punto a tener en cuenta para próximos proyectos de data mining en el deporte, sería usar
algoritmos más sofisticados, como pueden ser los de ensamble. Uno de los que se ha presentado en
este proyecto ha sido el Random Forest, que ha sido uno de los que mejores resultados ha obtenido.
Otro caso en el que se podría observar si mejora el rendimiento ensamblado el modelo Random Forest
con el Logit. Con esto lo que se quiere conseguir es encontrar aquellos modelos que trabajen de
manera más eficiente que los ya estudiados, tratando siempre de añadir más valor al trabajo que se ha
realizado

Todas estas mejoras son resultantes del estudio que se ha realizado, de todo el trabajo que se ha
llevado a cabo en el análisis deportivo y en el trabajo con los modelos de predicción. Esta experiencia
hace que las propuestas que aquí se presentan sean garantía de mejora para futuros proyectos en el
ámbito del data mining y el machine learning en la NBA y en el estudio de los deportes.

93
“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

IV.- ANEXOS

BIBLIOGRAFÍA

AB Sports. (3 de Febrero de 2019). El Moreyball, un antes y después en la historia de la NBA.


Obtenido de https://www.sportball.es/el-moreyball-un-antes-y-despues-en-la-historia-de-
la-nba/

Amat Rodrigo, J. (Abril de 2017). Máquinas de Vector Soporte (Support Vector Machines, SVMs).
Obtenido de
https://www.cienciadedatos.net/documentos/34_maquinas_de_vector_soporte_support_
vector_machines

Brownlee, J. (22 de Abril de 2016). Bagging and Random Forest Ensemble Algorithms for Machine
Learning. Obtenido de https://machinelearningmastery.com/bagging-and-random-forest-
ensemble-algorithms-for-machine-learning/

Castellote, A. (26 de Febrero de 2018). Así se controla a las estrellas del balón. Obtenido de
https://theluxonomist.es/2018/02/26/la-monitorizacion-del-futbol/agustin-castellote

Chang, C.-C., & Lin, C.-J. (2001). LIBSVM: A Library for Support Vector Machines. Taipei, Taiwan.

Climent, M. (27 de Julio de 2018). El genio de ‘Moneyball’: “El reto hoy es evitar lesiones con datos”.
Obtenido de https://innovadores.larazon.es/es/el-genio-de-moneyball-el-reto-hoy-es-
evitar-lesiones-con-datos/

Covantec. (s.f.). Programación en Python - Nivel básico. Obtenido de 1.3. Ventajas y desventajas:
https://entrenamiento-python-
basico.readthedocs.io/es/latest/leccion1/ventajas_desventajas.html

ESPN. (2017). NBA Player Salaries - 2016-2017. Obtenido de


http://www.espn.com/nba/salaries/_/year/2017/page/1

George V, J. (2 de Octubre de 2019). Useful Plots to Diagnose your Neural Network. Obtenido de
https://towardsdatascience.com/useful-plots-to-diagnose-your-neural-network-
521907fa2f45

Godoy, D. (21 de Diciembre de 2018). Understanding binary cross-entropy / log loss: a visual
explanation. Obtenido de https://towardsdatascience.com/understanding-binary-cross-
entropy-log-loss-a-visual-explanation-a3ac6025181a

González, L. (29 de Marzo de 2019). Métodos de Ensamble de Modelos. Obtenido de


https://ligdigonzalez.com/metodos-de-ensamble-de-modelos-machine-learning-ensemble-
methods-en-espanol/

González, L. (4 de Enero de 2019). Métodos de Selección de Características. Obtenido de


https://ligdigonzalez.com/metodos-de-seleccion-de-caracteristicas-machine-learning/

IBM. (s.f.). Preventing Injuries with Analytics. Obtenido de


https://www.ibmbigdatahub.com/infographic/preventing-injuries-analytics

Inzaugarat, E. (30 de Octubre de 2018). Understanding Neural Networks: What, How and Why?
Obtenido de https://towardsdatascience.com/understanding-neural-networks-what-how-
and-why-18ec703ebd31

Inzaugarat, E. (30 de Octubre de 2018). Understanding Neural Networks: What, How and Why?
Obtenido de https://towardsdatascience.com/understanding-neural-networks-what-how-
and-why-18ec703ebd31

94
“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

Inzaugarat, E. (30 de Octubre de 2018). Understanding Neural Networks: What, How and Why?
Obtenido de https://towardsdatascience.com/understanding-neural-networks-what-how-
and-why-18ec703ebd31

Jaspreet. (14 de Agosto de 2016). A Concise History of Neural Networks. Obtenido de


https://towardsdatascience.com/a-concise-history-of-neural-networks-2070655d3fec

Limberg, B. (11 de Septiembre de 2017). R Script in Talend Open Studio aufrufen. Obtenido de
https://www.youtube.com/watch?v=SLkzlRn5GNQ

Lin, C.-J., Hsu, C.-W., & Chang, C.-C. (2003). A Practical Guide to Support Vector Classification.
Taipei, Taiwan.

Martínez Heras, J. (s.f.). Árboles de Decisión con ejemplos en Python. Obtenido de


https://iartificial.net/arboles-de-decision-con-ejemplos-en-python/

Martínez Heras, J. (s.f.). Precision, Recall, F1, Accuracy en clasificación. Obtenido de


https://iartificial.net/precision-recall-f1-accuracy-en-clasificacion/

MLxtend. (s.f.). Sequential Feature Selector. Obtenido de


http://rasbt.github.io/mlxtend/user_guide/feature_selection/SequentialFeatureSelector/#
sequential-feature-selector

Morate Vázquez, J. (Junio de 2016). Predicción de Equipo Ganador en el Baloncesto. Obtenido de


https://core.ac.uk/download/pdf/79176592.pdf

Na8. (13 de Abril de 2018). Árbol de Decisión en Python: Clasificación y predicción. Obtenido de
https://www.aprendemachinelearning.com/arbol-de-decision-en-python-clasificacion-y-
prediccion/

Na8. (12 de Septiembre de 2018). Breve Historia de las Redes Neuronales Artificiales. Obtenido de
https://www.aprendemachinelearning.com/breve-historia-de-las-redes-neuronales-
artificiales/

NBA Stats. (10 de Marzo de 2020). BOS vs IND. Obtenido de


https://stats.nba.com/game/0021900960/

NBA Stuffer. (s.f.). Expected Winning Percentage (Log 5). Obtenido de


https://www.nbastuffer.com/analytics101/expected-winning-percentage-log5/

NBA Stuffer. (Sin fecha). Possession in Basketball Explained. Obtenido de


https://www.nbastuffer.com/analytics101/possession/

Nicolás, J. M. (18 de Septiembre de 2017). Rafa Nadal: ciencia y tecnología. Obtenido de


https://www.laverdad.es/ababol/ciencia/rafa-nadal-ciencia-20170918215107-nt.html

Observatorio IA. (22 de Marzo de 2016). Machine Learning o aprendizaje automático, una profesión
de futuro. Obtenido de https://observatorio-ia.com/machine-learning-o-aprendizaje-
automatico-una-profesion-de-futuro

Odds Portal. (2017). NBA 2016/2017 Results & Historical Odds. Obtenido de
https://www.oddsportal.com/basketball/usa/nba-2016-2017/results/

Ooms, J. (2 de Febrero de 2020). jsonlite. Obtenido de https://cran.r-


project.org/web/packages/jsonlite/jsonlite.pdf

Oracle. (s.f.). ¿Qué es big data? Obtenido de https://www.oracle.com/es/big-data/what-is-big-


data.html

Orellana Alvear, J. (12-16 de Noviembre de 2018). Ensambladores: Random Forest. Obtenido de


https://bookdown.org/content/2031/ensambladores-random-forest-parte-i.html

95
“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

Oursky Post. (26 de November de 2019). Obtenido de


https://blog.oursky.com/2019/11/26/machine-learning-applications-nba-predictions/

Oursky Post. (26 de Noviembre de 2019). Obtenido de


https://blog.oursky.com/2019/11/26/machine-learning-applications-nba-predictions/

Padilla, S. (s.f.). Modelos Logit y Probit. Obtenido de


https://economipedia.com/definiciones/modelos-logit-y-probit.html

PowerData. (s.f.). Big Data: ¿En qué consiste? Su importancia, desafíos y gobernabilidad. Obtenido
de https://www.powerdata.es/big-data

Rabinal, S. (18 de Marzo de 2020). Estadística avanzada: diccionario de términos, qué es, qué
significa.. Obtenido de https://es.nba.com/news/estadistica-avanzada-diccionario-de-
terminos-que-es-que-sirve-nba-analytics-2019-
sabermetrics/1gc73ududvomy1s3mqiahg238c

Refojos, M. (06 de Enero de 2020). El gran mapa del Big Data: ¿de dónde vienen todos nuestros
datos? Obtenido de https://byzness.elperiodico.com/es/innovadores/20200106/el-gran-
mapa-del-big-data-de-donde-vienen-todos-nuestros-datos-7793859

Reid, J. (11 de Octubre de 2011). ‘Moneyball’ is compelling, but leaves out much of the real story.
Obtenido de https://www.washingtonpost.com/sports/nationals/moneyball-is-compelling-
but-leaves-out-much-of-the-real-story/2011/10/11/gIQAMA1cdL_story.html

Ribas, E. (8 de Enero de 2018). ¿Qué es el Data Mining o minería de datos? Obtenido de


https://www.iebschool.com/blog/data-mining-mineria-datos-big-data/

Roman, V. (18 de Febrero de 2019). Machine Learning: Cómo Desarrollar un Modelo desde Cero.
Obtenido de https://medium.com/datos-y-ciencia/machine-learning-c%C3%B3mo-
desarrollar-un-modelo-desde-cero-cc17654f0d48

Rory P. Bunker, F. T. (2019). A machine learning framework for sport result prediction. Applied
Computing and Informatics, 27-33.

SAS. (s.f.). ¿Qué es el big data? Obtenido de https://www.sas.com/es_ar/insights/big-data/what-is-


big-data.html

Scikit-learn. (s.f.). 1.4. Support Vector Machines. Obtenido de 1.4.1. Classification: https://scikit-
learn.org/stable/modules/svm.html#svm-classification

Scikit-learn. (s.f.). Glossary of Common Terms and API Elements. Obtenido de https://scikit-
learn.org/stable/glossary.html#term-random-state

Second Spectrum. (1 de Junio de 2019). How Big Data and Analytics are Transforming Elite
Basketball. Obtenido de https://www.ideaconnection.com/open-innovation-success/How-
Big-Data-and-Analytics-are-Transforming-Elite-Bas-00762.html

Sicular, S. (2 de Abril de 2013). Gartner’s Big Data Definition Consists of Three Parts, Not to Be
Confused with Three “V”s. Obtenido de https://blogs.gartner.com/svetlana-
sicular/gartners-big-data-definition-consists-of-three-parts-not-to-be-confused-with-three-
vs/

Squared2020. (5 de Septiembre de 2017). Introduction to Oliver’s Four Factors. Obtenido de


https://squared2020.com/2017/09/05/introduction-to-olivers-four-factors/

Staff High Tech Editores. (11 de Junio de 2018). Obtenido de https://www.infochannel.info/cuantos-


datos-genera-el-mundo-cada-minuto

Statistics How To. (s.f.). ANOVA Test: Definition, Types, Examples. Obtenido de
https://www.statisticshowto.com/probability-and-statistics/hypothesis-testing/anova/

96
“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

Warner, J. (Diciembre de 2010). Predicting Margin of Victory in NFL Games: Machine Learning vs.
the Las Vegas Line. Obtenido de
https://www.researchgate.net/publication/327655200_Predicting_Margin_of_Victory_in
_NFL_Games_Machine_Learning_vs_the_Las_Vegas_Line

Web Scraper. (s.f.). Making web data extraction easy and accessible for everyone. Obtenido de
https://webscraper.io/

Wetsman, N. (6 de Diciembre de 2019). Big data may not be enough to predict injuries in the NFL.
Obtenido de https://www.theverge.com/2019/12/6/20999403/amazon-nfl-injuries-
concussions-big-data-machine-learning

Wikipedia [Árbol de decisión], . (s.f.). Árbol de decisión. Obtenido de


https://es.wikipedia.org/wiki/%C3%81rbol_de_decisi%C3%B3n

Wikipedia [Diagrama de Gantt]. (s.f.). Diagrama de Gantt. Obtenido de


https://es.wikipedia.org/wiki/Diagrama_de_Gantt

Wikipedia [Kendall rank correlation coefficient]. (s.f.). Kendall rank correlation coefficient. Obtenido
de https://en.wikipedia.org/wiki/Kendall_rank_correlation_coefficient

Wikipedia [Proyecto Jupyter]. (s.f.). Proyecto Jupyter. Obtenido de


https://es.wikipedia.org/wiki/Proyecto_Jupyter

Wikipedia [R]. (s.f.). R (lenguaje de programación). Obtenido de


https://es.wikipedia.org/wiki/R_(lenguaje_de_programaci%C3%B3n)

Wikipedia [Regresión lineal]. (s.f.). Regresión lineal. Obtenido de


https://es.wikipedia.org/wiki/Regresi%C3%B3n_lineal

Wikipedia [Scikit-learn]. (s.f.). Scikit-learn. Obtenido de https://es.wikipedia.org/wiki/Scikit-learn

Wikipedia [Weka]. (s.f.). Weka (aprendizaje automático). Obtenido de


https://es.wikipedia.org/wiki/Weka_(aprendizaje_autom%C3%A1tico)

Woodford, C. (4 de Abril de 2019). Introduction to neural networks. Obtenido de


https://www.explainthatstuff.com/introduction-to-neural-networks.html

Zulkifli, H. (21 de Enero de 2019). Understanding Learning Rates and How It Improves
Performance in Deep Learning. Obtenido de
https://towardsdatascience.com/understanding-learning-rates-and-how-it-improves-
performance-in-deep-learning-d0d4059c1c10

97
“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

ANEXO 1 TRANSFORMACIÓN DE LOS DATOS

PER:
La fórmula del PER es:

En esa fórmula hay tres factores, que se calculan del siguiente modo:

La leyenda de todos los factores que aparecen se adjunta a continuación. Todas salvo las que
se indique lo contrario van referidas al jugador.

• MP: Minutes played/Minutos jugados


• 3PM: Three pointers made/Triples anotados
• AST: Assist/Asistencias
• TeamAST: Asistencias del equipo
• TeamFGM: Field Goal Made (Team)/Tiros anotados del equipo
• FGM: Field Goal Made/Tiros anotados
• FTM: Free Throws Made/Tiros libres anotados
• TO: Turnovers/Pérdidas
• FGA: Field Goal Attempted/Tiros intentados
• FTA: Free Throws Attempted/Tiros libres intentados
• REB: Rebounds/Rebotes
• OREB: Offensive Rebounds/Rebotes ofensivos
• STL: Steals/Robos
• BLK: Blocks/Tapones
• PF: Personal Fouls/Faltas personales.
• PTS: Points/Puntos
Por último, las variables precedidas por League indican el promedio de la liga para esa estadística,
por ejemplo, LeagueREB, indica los rebotes de media por jugador en toda la NBA. Estos valores se
han tomado de la temporada anterior a las elegidas en el estudio, es decir, 2015-2016. Se han extraído
de https://www.basketball-reference.com/leagues/NBA_2016.html

98
“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

ANEXO 2 ALMACENAMIENTO

1. import pyodbc
2. import pandas as pd
3. # Se definen los datos de la bbdd: el driver, servidos, puerto, database, usuario,
contraseña de acceso
4. cnxn = pyodbc.connect('DRIVER='+driver+';SERVER='+server+';PORT=1433;DATABASE='+da
tabase+';UID='+username+';PWD='+ password)
5. query= '''''SELECT ID_PARTIDO, fecha, one, two, loc_net_preciso, vis_net_preciso,
dif_ant_loc, dif_ant_vis, por_vic_total_loc,
6. por_vic_total_vis, por_loc_as_loc, por_vis_as_vis, RACHA_5, RACHA_5_V, lesiones_l,
lesiones_v, Playoffs_local, Playoffs_vis,
7. off_ef_l_avg, off_ef_v_avg, def_ef_l_avg, def_ef_v_avg, PER_ant_loc, PER_ant_vis,
dif_desc, BtoB_local, BtoB_vis,
8. PTS_1, PTS_1_V, W_L FROM NBA_MODELOS'''
9.
10. df = pd.read_sql(query, cnxn)
11. cnxn.commit()
12. df

99
“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

ANEXO 3 SELECCIÓN DE VARIABLES

ANOVA

1. from sklearn.feature_selection import SelectKBest


2. from sklearn.feature_selection import f_classif
3.
4. fs = SelectKBest(score_func = f_classif, k='all')
5. X_selected = fs.fit_transform(X, y)
6. scores = list(fs.scores_)
7. columnas = list(X.columns)
8. lista = []
9.
10. for i in range(len(scores)):
11. dic_aux = {'Columna': 'a', 'Score': 'a'})
12. dic_aux['Columna'] = columnas[i]
13. dic_aux['Score'] = round(scores[i],3)
14. lista.append(dic_aux)
15.
16. ANOVA = pd.DataFrame(lista).sort_values('Score', ascending = False).head(35)
17. ANOVA

KENDALL’S

1. from scipy import stats


2.
3. columnas = list(X.columns)
4. lista = []
5. for columna in columnas:
6. dic_aux = {'Columna': 'a', 'Score': 'a'}
7. x = X[str(columna)]
8. tau, p_value = stats.kendalltau(x, y)
9. dic_aux['Columna'] = columna
10. dic_aux['Score'] = abs(round(tau, 5))
11. lista.append(dic_aux)
12.
13. kendall = pd.DataFrame(lista).sort_values('Score', ascending = False).head(35)
14. kendall

100
“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

ANEXO 4 MATRIZ DE CONFUSIÓN

1. cm = confusion_matrix(y_test, model.predict(X_test))
2.
3. fig, ax = plt.subplots(figsize=(8, 8))
4. ax.imshow(cm)
5. ax.grid(False)
6. ax.xaxis.set(ticks=(0, 1), ticklabels=('Predicted 0s', 'Predicted 1s'))
7. ax.yaxis.set(ticks=(0, 1), ticklabels=('Actual 0s', 'Actual 1s'))
8. ax.set_ylim(1.5, -0.5)
9. for i in range(2):
10. for j in range(2):
11. ax.text(j, i, cm[i, j], ha='center', va='center', color='black',fontsize=2
0)
12. plt.show()

101
“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

ANEXO 5 LOGIT

1. from sklearn.linear_model import LogisticRegression


2. model = LogisticRegression(solver='liblinear',random_state=1000, C=10,max_iter=100
0)
3. model.fit(X_train, y_train)

102
“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

ANEXO 6 RRNN

1. from keras.models import Sequential


2. import keras
3. from keras.layers import Dense, Dropout
4.
5.
6. model = Sequential()
7. model.add(Dense(256, input_dim=27,activation='relu'))
8. model.add(Dropout(0.2))
9. model.add(Dense(16,activation='relu'))
10. model.add(Dense(8,activation='relu'))
11. model.add(Dense(4,activation='relu'))
12. model.add(Dense(1, activation='sigmoid'))
13.
14. #Compile the model:
15.
16. model.compile(optimizer = keras.optimizers.Adam(learning_rate=0.000001, beta_1=0.9
, beta_2=0.999, epsilon=1e-07, amsgrad=False)
17. , loss = 'binary_crossentropy', metrics=['accuracy'])
18.
19. model.fit(X_train, y_train, batch_size = 15, epochs = 1000, validation_split = 0.2
0, shuffle=True, verbose=2)

103
“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

ANEXO 7 ÁRBOL DE DECISIÓN

ENTRENAMIENTO

1. import numpy as np
2. import pandas as pd
3. from sklearn import tree
4. from sklearn.metrics import accuracy_score
5. from sklearn.model_selection import KFold
6. from sklearn.model_selection import cross_val_score
7.
8. cv = KFold(n_splits=10)
9. accuracies = list()
10. max_attributes = len(list(data))
11. depth_range = range(1, max_attributes + 1)
12.
13. for depth in depth_range:
14. fold_accuracy = []
15. tree_model = tree.DecisionTreeClassifier(criterion='entropy',
16. min_samples_split=20,
17. min_samples_leaf=5,
18. max_depth = depth)
19. for train_fold, valid_fold in cv.split(data):
20. f_train = data.iloc[train_fold]
21. f_valid = data.iloc[valid_fold]
22.
23. model = tree_model.fit(X = f_train.drop(['variable'], axis=1),
24. y = f_train['variable'])
25. valid_acc = model.score(X = f_valid.drop(['variable'], axis=1),
26. y = f_valid["variable"])
27. fold_accuracy.append(valid_acc)
28.
29. avg = sum(fold_accuracy)/len(fold_accuracy)
30. accuracies.append(avg)
31.
32. df = pd.DataFrame({"Max Depth": depth_range, "Average Accuracy": accuracies})
33. df = df[["Max Depth", "Average Accuracy"]]
34. print(df.to_string(index=False))
35.
36. decision_tree = tree.DecisionTreeClassifier( criterion= 'entropy',
37. min_samples_leaf=5,
38. min_samples_split=20,
39. max_depth = 3)
40. decision_tree.fit(X_train, y_train)

DIAGRAMA DEL ÁRBOL

1. from sklearn.tree import export_graphviz


2. from pydotplus import graph_from_dot_data
3. from IPython.display import Image as PImage
4. from subprocess import check_call
5. from PIL import Image, ImageDraw, ImageFont
6.
7. with open(r"file.dot", 'w') as f:
8. f = tree.export_graphviz(decision_tree,out_file=f,max_depth = 7,
9. feature_names = list(test.drop(['W.L'], axis=1)),
10. impurity = True,rounded = True,
11. filled= True)
12.
13. check_call(['dot','-Tpng',r'file.dot','-o',r'file.png'])
14. PImage("file.png")

104
“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

Ilustración 42: Diagrama de árbol cada 100 sin cuotas.

105
“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

ANEXO 8 SVM

1. # Aplicar la mejora de Grid Search para optimizar el modelo y sus parámetros


2.
3. from sklearn.svm import SVC
4. from sklearn.model_selection import TimeSeriesSplit
5. from sklearn.model_selection import GridSearchCV
6.
7.
8. parameters = [{'C': [1, 10, 100],'kernel': ['linear']},
9. {'C': [1, 10, 100],'kernel': ['rbf'], 'gamma': [0.001,0.01,0.1,1,10,
100]}
10. ]
11. grid_search = GridSearchCV(estimator = SVC(probability = True, random_state = 0,ca
che_size=1000),
12. param_grid = parameters,
13. scoring = 'accuracy',
14. cv = TimeSeriesSplit(n_splits=5),
15. n_jobs = -1)
16.
17. grid_search = grid_search.fit(X_train, y_train)
18.
19.
20. best_accuracy = grid_search.best_score_
21.
22. best_parameters = grid_search.best_params_
23.
24. C=best_parameters['C']
25. kernel=best_parameters['kernel']
26. try:
27. gamma=best_parameters['gamma']
28. except:
29. print('kernel lineal')
30.
31. from sklearn.svm import SVC
32. classifier = SVC(kernel = kernel,C=C,gamma=gamma,probability = True, random_state
= 0,)
33. classifier.fit(X_train,y_train)
34.
35. y_pred = classifier.predict(X_test)

106
“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

SELECCIÓN DE VARIABLES

SFS

1. from sklearn.model_selection import GridSearchCV


2. from sklearn.pipeline import Pipeline
3. from mlxtend.feature_selection import SequentialFeatureSelector as SFS
4. from sklearn.model_selection import TimeSeriesSplit
5. import mlxtend
6. from sklearn.svm import SVC
7.
8. svc = SVC(probability = True, random_state = 0,cache_size=1000)
9.
10. sfs1 = SFS(estimator=svc,
11. k_features=3,
12. forward=True,
13. floating=False,
14. scoring='accuracy',
15. cv=TimeSeriesSplit(n_splits=5))
16.
17. pipe = Pipeline([('sfs', sfs1),
18. ('svc', svc)])
19.
20.
21.
22. param_grid = [
23. {'sfs__k_features': [4,9,16],
24. 'sfs__estimator__C': [ 10, 100],
25. 'sfs__estimator__kernel': ['rbf'],
26. 'sfs__estimator__gamma': [0.001,0.01]}
27.
28. ]
29.
30. gs_SFS = GridSearchCV(estimator=pipe,
31. param_grid=param_grid,
32. scoring='accuracy',
33. n_jobs=-1,
34. cv=TimeSeriesSplit(n_splits=5),
35. iid=True,
36. refit=True)

107
“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

SBS

1. svc = SVC(probability = True, random_state = 0,cache_size=1000)


2.
3. sbs1 = SFS(estimator=svc,
4. k_features=3,
5. forward=False,
6. floating=False,
7. scoring='accuracy',
8. cv=TimeSeriesSplit(n_splits=5))
9.
10. pipe = Pipeline([('sbs', sbs1),
11. ('svc', svc)])
12.
13.
14.
15. param_grid = [
16. {'sbs__k_features': [4,9,16],
17. 'sbs__estimator__C': [ 10, 100],
18. 'sbs__estimator__kernel': ['rbf'],
19. 'sbs__estimator__gamma': [0.001,0.01]}
20.
21. ]
22.
23. gs_SBS = GridSearchCV(estimator=pipe,
24. param_grid=param_grid,
25. scoring='accuracy',
26. n_jobs=-1,
27. cv=TimeSeriesSplit(n_splits=5),
28. iid=True,
29. refit=True)

SFFS

1. svc = SVC(probability = True, random_state = 0,cache_size=1000)


2.
3. sffs1 = SFS(estimator=svc,
4. k_features=3,
5. forward=True,
6. floating=True,
7. scoring='accuracy',
8. cv=TimeSeriesSplit(n_splits=5))
9.
10. pipe = Pipeline([('sffs', sffs1),
11. ('svc', svc)])
12.
13.
14.
15. param_grid = [
16. {'sffs__k_features': [4,9],
17. 'sffs__estimator__C': [10,100],
18. 'sffs__estimator__kernel': ['rbf'],
19. 'sffs__estimator__gamma': [0.01,0.001]}
20.
21. ]
22.
23. gs_SFFS = GridSearchCV(estimator=pipe,
24. param_grid=param_grid,
25. scoring='accuracy',
26. n_jobs=-1,
27. cv=TimeSeriesSplit(n_splits=5),
28. iid=True,
29. refit=True)

108
“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

SBFS

1. svc = SVC(probability = True, random_state = 0,cache_size=1000)


2.
3. sbfs1 = SFS(estimator=svc,
4. k_features=3,
5. forward=False,
6. floating=True,
7. scoring='accuracy',
8. cv=TimeSeriesSplit(n_splits=5))
9.
10. pipe = Pipeline([('sbfs', sbfs1),
11. ('svc', svc)])
12.
13.
14.
15. param_grid = [
16. {'sbfs__k_features': [4,9],
17. 'sbfs__estimator__C': [10,100],
18. 'sbfs__estimator__kernel': ['rbf'],
19. 'sbfs__estimator__gamma': [0.01,0.001]}
20.
21. ]
22.
23. gs_SBFS = GridSearchCV(estimator=pipe,
24. param_grid=param_grid,
25. scoring='accuracy',
26. n_jobs=-1,
27. cv=TimeSeriesSplit(n_splits=5),
28. iid=True,
29. refit=True)

109
“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

ANEXO 9 RANDOM FOREST

1. # Aplicar la mejora de Grid Search para optimizar el modelo y sus parámetros


2.
3. from sklearn.model_selection import TimeSeriesSplit
4. from sklearn.ensemble import RandomForestClassifier
5. from sklearn.model_selection import GridSearchCV
6. parameters = {
7. 'n_estimators': [50,100,200,300,400,500,600],
8. 'criterion': ['gini','entropy'],
9. 'max_depth':[2,3,4,5]
10. }
11.
12. grid_search = GridSearchCV(estimator = RandomForestClassifier(random_state = 0),
13. param_grid = parameters,
14. scoring = 'accuracy',
15. cv = TimeSeriesSplit(n_splits=10),
16. refit=True,
17. return_train_score=True,
18. n_jobs = -1)
19.
20. grid_search = grid_search.fit(X_train, y_train)
21.
22. best_accuracy = grid_search.best_score_
23.
24. best_parameters = grid_search.best_params_
25.
26. criterio = best_parameters['criterion']
27. max_depth = best_parameters['max_depth']
28. estimators = best_parameters['n_estimators']
29.
30.
31. classifier = RandomForestClassifier(n_estimators = estimators, criterion =criterio
,
32. random_state = 0,max_depth= max_depth)
33. classifier.fit(X_train, y_train)
34.
35. # Predicción de los resultados con el Conjunto de Testing
36. y_pred = classifier.predict(X_test)

110
“Data Mining & Machine Learning en la NBA” (Dorado Verdejo, Borque Martínez, Clavijo González, Lin)

111

También podría gustarte