Aníbal León León
Máster en Ingeniería Informática
Desarrollo de Sistemas Inteligentes
Aníbal León León | Sistema experto en pronóstico de resultados NBA “NBiA” 2
CONTENIDO PÁGINA/S
1. Descripción del problema a tratar..……………………………………………………..3
2. Alcance y límites…….…………………………………..……………………………………….4
3. Minería de datos…………………………………………………………………………………5
4. Estudio de viabilidad…………………...…………………………………………………6-12
5. Entrevistas con el experto..…………………………………………………………..13-15
6. Búsqueda de patrones de comportamiento………………………………….16-17
7. Prototipo..………………………………………………………………………………………...18
8. Implementación del prototipo…………………………………………………………..19
9. Ejemplo de funcionamiento..…………………………………………………………….20
10. Verificación del sistema………………………………………………………………….21
10. Código fuente…………………………………………………………………………….22-26
11. Objetivos futuros……………………………………………………………………………27
Aníbal León León | Sistema experto en pronóstico de resultados NBA “NBiA” 3
Descripción del problema a tratar
Se desea realizar un sistema experto de ayuda a la decisión que guíe al usuario a la
hora de realizar apuestas deportivas relacionadas con la liga Estadounidense de
baloncesto NBA (National Basketball Association). Este sistema se denominará NBiA.
Para ello el sistema hará pronósticos basándose en razonamientos inferidos de los
datos a través del proceso KDD (Knownledge Discovery from Databases), cuyas fases se
verán modificadas por razonamientos propios de un experto en apuestas de dicha liga.
Mientras que el experto tendrá una visión profunda de la liga basada en su experiencia
adquirida que deberemos plasmar lo más fielmente en nuestro sistema, mediante
minería de datos accederemos a gran cantidad de datos que nos permiten relacionar
resultados anteriores del equipo y los jugadores con el entorno que rodeaba a dichos
resultados, formado por todo tipo de variables influyentes positiva o negativamente
en el desarrollo de los partidos.
Por tratarse de un juego en el que tiene mucha relevancia el azar, nunca
conseguiremos un sistema que consiga acertar siempre quién ganará, por lo tanto el
objetivo será crear un sistema que acierte el mayor número posible de veces y sirva
como complemento o ayuda al usuario que desee apostar.
Una vez se consiga un prototipo funcional, el objetivo será el de mejorar la fiabilidad
del sistema analizando la concordancia entre resultados esperados y resultados
obtenidos. El proceso de mejora tendrá el fin de acercar lo más posible a 100% los
resultados obtenidos en cuanto a porcentaje de aciertos. Para conseguir esto
podremos afinar el sistema tanto con nuevas reglas obtenidas del experto como
teniendo en cuenta nuevas variables que puedan influir en los resultados a la hora de
realizar la minería de datos, creando un sistema con la mayor completitud posible.
Aníbal León León | Sistema experto en pronóstico de resultados NBA “NBiA” 4
Alcance y límites
El objetivo del sistema es que trate los resultados de cualquier partido que se dé entre
los 30 equipos de la NBA a partir de la jornada 10 de la temporada regular del curso
actual (2012-2013), donde 10 será el número de jornadas que dejaremos para que el
sistema “aprenda” de resultados anteriores.
El sistema tendrá los siguientes parámetros de entrada y de salida:
-Entradas: Patrones inferidos a través del proceso KDD y preguntas que el usuario del
sistema deberá responder referentes al partido que desea pronosticar.
-Salidas: Para un partido A vs B, el objetivo es que el sistema obtenga la similitud con el
patrón de comportamiento que se da cuando el equipo A gana y cuando el equipo A
pierde así como el patrón de comportamiento cuando el equipo B gana y cuando el
equipo B pierde y calcule el porcentaje de concordancia con cada uno de ellos. Una vez
hecho esto se normalizarán los resultados respecto a los casos favorables para el
equipo A y los favorables para el equipo B para obtener un porcentaje de probabilidad
de victoria para cada equipo.
Respecto al funcionamiento del sistema:
El proceso KDD obtendrá todos los datos susceptibles de ser analizados de la
página web stats.nba.com, todos ellos de libre acceso, buscando patrones de
comportamiento en la consecución de las victorias y las derrotas del equipo.
El experto tendrá como objetivo proporcionarnos información menos tangible,
como es el peso específico de todas las estadísticas y datos que tenemos en el
resultado de un partido.
Hay que recordar que los resultados obtenidos por el sistema son parte de un proceso
de inferencia y no tienen por qué coincidir con los resultados reales, por lo tanto debe
tomarse como un sistema de referencia o ayuda bajo la responsabilidad del usuario.
Aníbal León León | Sistema experto en pronóstico de resultados NBA “NBiA” 5
Minería de datos
La minería de datos es la etapa de análisis de “Knowledge Discovery in Databases” o
KDD en el campo de las ciencias de la computación, que pretende descubrir patrones
en grandes volúmenes de conjuntos de datos. Utiliza los métodos de la inteligencia
artificial, aprendizaje automático, estadística y sistemas de bases de datos.
A través de los datos obtenidos en la página stats.nba.com y de libre acceso, y por
supuesto ayudándonos de las reglas obtenidas del experto, el objetivo es crear dos
grupos bien diferenciados, correspondientes a “ganar” y “perder”, para más tarde inferir si
la situación del equipo respecto al partido que se desea pronosticar se acerca más al
patrón de comportamiento que se da cuando el equipo gana o a cuando el equipo
pierde.
Cluster “ganar”. Deberemos obtener aquellas similitudes que se hayan producido
cuando el equipo ha ganado y también similitudes cuando el oponente ha perdido.
Para definirlo:
Estudiaremos patrones de comportamiento del equipo en las últimas victorias.
Estudiaremos patrones de comportamiento del oponente en sus últimas derrotas.
Cluster “perder”. Deberemos obtener aquellas similitudes que se hayan producido
cuando el equipo ha perdido y también similitudes cuando el oponente ha ganado.
Para definirlo:
Estudiaremos patrones de comportamiento del equipo en las últimas derrotas.
Estudiaremos patrones de comportamiento del oponente en las últimas victorias.
Una vez tengamos bien determinados los dos patrones, procederemos a obtener unos
resultados esperados tanto del equipo como del oponente, los cuales compararemos
con los 4 grupos o clusters (tendremos dos cluster ganar y dos cluster perder, 2 por
equipo) para ver a cuál de ellos se acercan más los resultados esperados. Estos
resultados “esperados” serán calculados respecto a la progresión del equipo en los
últimos 3 partidos.
Una vez introducido el concepto de minería de datos y justificada su aplicación en el
proyecto NBiA, a continuación se realiza el estudio de la viabilidad de este proyecto.
Aníbal León León | Sistema experto en pronóstico de resultados NBA “NBiA” 6
Estudio de viabilidad
Mediante el plan de viabilidad realizado a continuación, pretendemos asegurarnos e intentar demostrar que el sistema NBiA es factible. De esta forma podremos justificar una posible financiación del proyecto.
Se ha elegido el “test de Slagel” como metodología a aplicar en el desarrollo del estudio. Se realizarán las siguientes etapas para determinar si el sistema es viable:
Definición de las características.
Asignación de pesos.
Evaluación de cada aplicación candidata.
En cuanto a la definición de características, el test que se va a realizar consta de las siguientes dimensiones:
Plausibilidad. Determina si se cuenta con los medios necesarios desde el punto de vista de la ingeniería del conocimiento. (Existencia de expertos, dificultad, estructuración de la tarea…)
Justificación. Analiza si está justificado el desarrollo del sistema. Hay que tener en cuenta conceptos como la necesidad de la experiencia, la inversión necesaria o la existencia de soluciones alternativas.
Adecuación. Se determina si el sistema es abordable desde el punto de vista de la ingeniería del conocimiento. Para ello se tienen en cuenta la naturaleza, la complejidad y el tipo de tarea.
Éxito. Posibilidades a priori de que el sistema tenga éxito.
Tarea
Deseable
Dimensión (P.E. valor práctico) Expertos
Esencial(valor>7)
Directivos/Usuarios
Aníbal León León | Sistema experto en pronóstico de resultados NBA “NBiA” 7
Evaluación de la aplicación: PLAUSIBILIDAD
Categoría Identificador Peso Valor Característica Tipo
Expertos P1 10 9
Existen expertos. Hay suficientes
expertos en este ámbito, el único
problema es la accesibilidad a ellos.
E
Expertos P2 10 8
El experto asignado es genuino.
La mayoría de expertos en NBA son
genuinos.
E
Expertos P3 8 8
El experto es cooperativo. Tiene
una buena capacidad de
cooperación.
D
Expertos P4 7 7
El experto es capaz de articular
sus métodos pero no categoriza.
A pesar de no ser un tema fácil de
explicar, el experto no categoriza
demasiado.
D
Tareas P5 10 10
Existen suficientes casos de
prueba; normales, típicos,
ejemplares, correosos, etc. Los
casos de prueba en este sentido son
muy diversos.
E
Tareas P6 10 9
La tarea está bien estructurada y
se entiende. No es del todo
estructurada, pero si lo deseable.
D
Tareas P7 10 8
Sólo requiere habilidad
cognoscitiva. El sistema requiere
razonamiento experto, no se trata
de una tarea trivial.
D
Tareas P8 9 8
No precisan resultados
verdaderamente comprometidos
con el proyecto. No son precisos
resultados comprometidos.
D
Tareas P9 9 9 La tarea no requiere sentido
común. Es una tarea compleja. D
Aníbal León León | Sistema experto en pronóstico de resultados NBA “NBiA” 8
Directivos/Ususarios P10 7 9
Los directivos están
verdaderamente comprometidos
con el proyecto. Los directivos ven
la utilidad del proyecto y lo apoyan
firmemente.
D
Evaluación de la aplicación: JUSTIFICACIÓN
Categoría Identificador Peso Valor Característica Tipo
Expertos J1 10 7
El experto no está disponible. La
disponibilidad del experto no es la que
convendría pero si lo suficiente.
E
Expertos J2 10 8 Hay escasez de experiencia humana.
El conocimiento en este tema es escaso. D
Tareas J3 8 9
Existe necesidad de experiencia
humana en muchos lugares. En todo
el mundo convendría utilizar un sistema
de este tipo.
D
Tareas J4 10 7
Necesidad de experiencia en
entornos hostiles, penosos y/o poco
gratificantes. El sistema podría
utilizarse en cualquier momento.
E
Tareas J5 8 9
No existen soluciones alternativas
admisibles. Actualmente no existen
sistemas de este tipo abiertos al
público.
E
Directivos/Ususarios J6 7 9
Se espera una alta tasa de
recuperación de la inversión. El
público objetivo podría ser
suficientemente grande.
D
Directivos/Ususarios J7 8 7
Resuelve una tarea útil y necesaria.
Sobre todo goza de utilidad para el
grueso de gente que apuesta en este
tipo de partidos.
E
Aníbal León León | Sistema experto en pronóstico de resultados NBA “NBiA” 9
Evaluación de la aplicación: ADECUACIÓN
Categoría Identificador Peso Valor Característica Tipo
Expertos A1 5 6
La experiencia del experto está poco
organizada. Su experiencia no esta del
todo estructurada.
D
Tareas A2 6 7 Tiene valor práctico. Se trata de un
sistema práctico y útil. D
Tareas A3 7 7 Es más táctica que estratégica. Es una
tarea eminentemente práctica. D
Tareas A4 7 9
Sirve a necesidades a largo plazo. El
sistema puede utilizarse en cualquier
temporada venidera de la NBA.
E
Tareas A5 5 10
La tarea, que no es demasiado fácil,
pero es de conocimiento intensivo,
tanto propio del dominio, como de
manipulación de la información. La
tarea requiere de un conocimiento
intensivo así como de manipulación de la
información estadística de la liga.
D
Tareas A6 6 9
Es de tamaño manejable, y/o es posible
un enfoque gradual y/o, una
descomposición en subtareas. El
conjunto de datos a utilizar se encuentra
muy estructurado en la página web, y
permite una división factible en subtareas.
D
Expertos A7 7 7
La transferencia de experiencia entre
humanos es factible. La transferencia es
algo costosa pero tampoco se torna
compleja.
E
Tareas A8 6 7
Estaba identificado como un problema
en el área y los efectos de la
introducción de un SE pueden
planificarse. Los efectos no son
planificables pero sí que es un problema
extendido en el área.
D
Aníbal León León | Sistema experto en pronóstico de resultados NBA “NBiA” 10
Tareas A9 9 10
No requiere respuestas en tiempo real
inmediato. El sistema no tiene ni requiere
capacidad de decisión en tiempo real.
E
Tareas A10 9 10
La tarea no requiere investigación
básica o conlleva poca generación y
entendimiento del lenguaje natural. La
investigación básica es nula y el
entendimiento del lenguaje natural no se
necesita en el sistema.
E
Tareas A11 5 5
El experto usa básicamente
razonamiento simbólico que implica
valores subjetivos. El razonamiento es
algo simbólico.
D
Tareas A12 5 5
Es esencialmente de tipo heurístico. El
sistema se basa sobre todo en estadísticas
precedentes.
D
Evaluación de la aplicación: ÉXITO
Categoría Identificador Peso Valor Característica Tipo
Expertos E1 8 6
No se sienten amenazados por el proyecto, pueden sentirse
intelectualmente unidos a él. El sistema no amenaza su trabajo, solo apoya sus
pronósticos.
D
Expertos E2 6 7 Tienen un brillante historial. Los expertos
de este tipo gozan de buenos resultados gracias a su dilatada experiencia.
D
Expertos E3 5 5 Acuerdos constituyen buena solución. No
siempre se da esta premisa. D
Expertos E4 5 7 La única justificación para dar un paso en
la solución es la calidad. Se buscan las soluciones mejor apoyadas.
D
Expertos E5 6 9 No hay un plazo de finalización escrito, ni
proyectos dependientes. No existen dependencias ni hay plazos previstos.
D
Aníbal León León | Sistema experto en pronóstico de resultados NBA “NBiA” 11
Tareas E6 7 10 No está influenciada políticamente. La
política no influye en el sistema ni los resultados.
E
Tareas E7 8 7 Existen SSEE similares. Si los hay no son
conocidos a nivel público. D
Tareas E8 8 10
Hay cambios mínimos en los procedimientos habituales. Los
procedimientos que usa el sistema son invariables.
D
Tareas E9 5 8 Las soluciones son explicables. La
explicación de las mismas vendrá dada por el conocimiento del usuario.
D
Tareas E10 7 8 La tarea es de I+D o de carácter práctico,
no ambas simultáneas. Es una tarea de carácter eminentemente práctico.
E
Directivos/Ususarios E11 6 9 Están mentalizados y son realistas con el
alcance y las limitaciones. Los objetivos son claros y concisos.
D
Directivos/Ususarios E12 7 10 No rechazan esta tecnología. No hay
ningún tipo de rechazo por parte de directivos ni usuarios.
E
Directivos/Ususarios E13 6 8
El sistema interactúa inteligente y amistosamente con el usuario. La
interacción es suficientemente amigable y las peticiones y soluciones de cara al usuario
claras.
D
Directivos/Ususarios E14 9 6
El sistema es capaz de explicar su razonamiento. La explicación del proceso de razonamiento no es un objetivo primario en el
sistema.
D
Directivos/Ususarios E15 8 9 La inserción se efectúa sin traumas. No
hay objeciones por parte de nadie. D
Directivos/Ususarios E16 6 9 Están comprometidos incluso después de
la implantación. El compromiso con el sistema es el adecuado.
D
Directivos/Ususarios E17 8 8 Adecuada transferencia tecnológica. La
transferencia tecnológica es la ideal. E
Aníbal León León | Sistema experto en pronóstico de resultados NBA “NBiA” 12
Con los datos de las tablas anteriores se procede a evaluar la viabilidad del sistema:
Viabilidad Plausibilidad
((9//7)*(8//7)*(10//7))*
((10*9)*(10*8)*(8*8)*(7*7)*(10*10)*(10*9)*(10*8)*(9*8)*(9*9)*(7*9))1/10
=75,44(Máximo 89,16)
Viabilidad Justificación
((7//7)(7//7)(9//7)(7//7))*
((10*7)*(10*8)*(8*9)*(10*7)*(8*9)*(7*9)*(8*7))1/7
=68,51(Máximo 86,21)
Viabilidad Adecuación
((9//7)(7//7)(10//7)(10//7))*
((5*6)*(6*7)*(7*7)*(7*9)*(5*10)*(6*9)*(7*7)*(6*7)*(9*10)*(9*10)*(5*5)*(5*5))1/12
=46,76(Máximo 62,78)
Viabilidad Éxito
((10//7)(8//7)(10//7)(8//7))*
((8*6)*(6*7)*(5*5)*(5*7)*(6*9)*(7*10)*(8*7)*(8*10)*(5*8)*(7*8)*(6*9)*(7*10)*(6*8)*(9*6)*(8*9)*(6*9)*(8*8))1/17=52,27(Máximo 66,52)
El valor general de la aplicación es igual a (75,44+68,51+46,76+52,27)/4=60,74 puntos
Normalizamos el valor anterior para ver el porcentaje real de viabilidad:
60,74/((89,16+86,21+62,78+66,52)/4)=79,75% de viabilidad del proyecto.
Aníbal León León | Sistema experto en pronóstico de resultados NBA “NBiA” 13
Entrevistas con el experto
Entrevista 1
Documento de adquisición de conocimiento Número: 1 Página: 1
Fecha: 18-03-2013
Hora: 16:00-17:00
Lugar: Vivienda del experto
Asistentes: Aníbal León León (I.C.)
Jose Ángel Tercero(Experto)
Situación del análisis respecto al modelo general
Esta es la primera entrevista que se efectúa con el experto. Supondrá por tanto un
primer contacto con el entorno de la NBA y los términos relacionados con los partidos
que se efectúan entre los equipos de dicha liga.
Conocimiento anterior a la entrevista
El conocimiento anterior a la entrevista no es más que el básico del que dispone el
ingeniero del conocimiento. Se presuponen los siguientes aspectos:
-La liga está formada por 30 equipos.
-Cada equipo juega un total de 82 partidos cada temporada.
-Los jugadores en cancha en cualquier momento del partido son siempre 5.
-Los partidos duran 48 minutos divididos en cuatro cuartos.
-Se pueden hacer tantos cambios de jugadores como se desee pero sólo en tiempos
muertos o con el partido parado.
-Cada entrenador dispone de 7 tiempos muertos.
-Si un jugador efectúa 6 faltas es expulsado del partido.
-Durante un partido se producen canastas de 1, 2 y 3 puntos según la distancia desde la
que se produzcan y las circunstancias de juego.
-Existen otros muchos aspectos básicos que se contabilizan como son: rebotes,
asistencias, pérdidas, robos, faltas, tapones realizados y tapones recibidos.
-Al final del partido sólo cuenta el número de puntos totales. El equipo superior en
puntos gana.
-Si hay empate a puntos se lleva a cabo una prórroga de 5 minutos. Esto puede ocurrir
sucesivas veces.
Aníbal León León | Sistema experto en pronóstico de resultados NBA “NBiA” 14
Documento de adquisición de conocimiento Número: 1 Página: 2
Lista de elementos (Glosario)
1. Jugador
2. Equipo
3. Partido
4. Liga
5. Punto
6. Rebote
7. Tapón
8. Robo
9. Pérdida
10. Falta
11. Tiempo muerto
12. Cuarto
…
Relaciones entre elementos
2 es un conjunto de 1
3 está formado por dos 2
4 está formado por treinta 2
Objetivos de la entrevista
El objetivo principal de la entrevista es preguntar al experto qué circunstancias del
entorno no puramente estadístico pueden influir en el resultado final de un partido. Esta
será por tanto una entrevista de toma de contacto en la que primará la cordialidad con
el experto y la inclusión del mismo en el proyecto haciéndole formar parte importante
del mismo.
Fuentes de conocimiento
Nos centraremos en el experto como fuente de conocimiento principal para realizar un
análisis del entorno de un partido de baloncesto, esto es debido a que la parte
estadística será reflejada por el proceso KDD realizado paralelamente como parte del
sistema mixto.
Modo
La entrevista será parcialmente estructurada pues el conocimiento del I.C. está muy
disperso y es mejor que dejemos hablar al experto dentro de un guión poco
estructurado que cambiará según las circunstancias de la conversación procurando
sobre todo mantenerla en los límites que nos interesan.
Aníbal León León | Sistema experto en pronóstico de resultados NBA “NBiA” 15
Documento de adquisición de conocimiento Número: 1 Página: 3
Planteamiento de la sesión
A continuación veremos las preguntas que se realizarán al experto. Como se puede
apreciar de momento haremos tan solo una pregunta muy general y mantendremos al
experto hablando del tema en los límites que nos interesen mediante preguntas
relacionadas pero más particulares.
¿Qué circunstancias en el entorno de los equipos que se enfrentan en un partido pueden
influir en el desarrollo del mismo?
Resultado de la sesión
De la conversación llevada a cabo con el experto se han conseguido como respuestas a
la pregunta las siguientes circunstancias:
-Lesiones de jugadores, sobre todo jugadores titulares del equipo o jugadores suplentes
cuya aportación sea considerable o número de minutos elevado.
-Varios partidos en un pequeño periodo de tiempo que puedan afectar al rendimiento
del equipo por culpa del cansancio.
-Mayor necesidad de ganar bien por demostrar a su público (los equipos se motivan
más cuando juegan en casa) y fans o porque de ello dependa su clasificación para
playoffs.
El experto deja abierta la posibilidad de encontrar más circunstancias que influyan en
el resultado final de un partido pero está seguro de que estas son las más importantes y
más peso tienen.
Plan de análisis
En esta primera toma de contacto se estudiarán los nuevos términos aparecidos y se
intentará estructurar la siguiente entrevista en torno a una de las circunstancias que el
experto ha citado.
Resultados del análisis
Los nuevos términos que se han encontrado son:
-Jugador titular
-Jugador suplente
-Aportación de un jugador
-Playoffs
Aníbal León León | Sistema experto en pronóstico de resultados NBA “NBiA” 16
Búsqueda de patrones de comportamiento en
victorias y derrotas.
Ejemplo básico (No refleja cómo se implementa el sistema sino una pequeña
aproximación) de los pasos realizados en la búsqueda de patrones de comportamiento
en victorias/derrotas:
Paso 1-Crear tabla con todas las estadísticas referentes al histórico de partidos del
equipo y cada fila tenga un campo que diga si el equipo ganó o perdió.
…
PF = Puntos a favor PC = Puntos en contra RF = Rebotes a favor
RC = Rebotes en contra ROF = Rebotes ofens. favor ROC = Rebotes ofens. contra
AF = Asistencias a favor AC = Asistencias en contra RoF = Robos a favor
RoC = Robos en contra TF = Tapones a favor TC = Tapones en contra
FC = Faltas cometidas FR = Faltas recibidas FTF = Faltas técnicas a favor
FTC = Faltas técnicas contra PeF = Pérdidas a favor PeC = Pérdidas en contra
%1 = Porcentaje tiros de 1 %2 = Porcentaje tiros de 2 %3 = Porcentaje tiros de 3
Por último G será el resultado del encuentro en términos de victoria o derrota.
PF PC RF RC ROF ROC AF AC RoF RoC TF TC FC FR FTF FTC PeF PeC %1 %2 %3 G?
95 92 30 28 6 4 25 20 12 9 5 5 15 20 1 0 5 4 80 45 38 Si
87 93 25 32 5 10 22 23 10 11 3 3 12 10 2 1 6 6 81 42 30 No
98 85 24 30 4 5 27 29 9 5 6 2 18 15 2 3 7 5 85 48 35 Si
96 98 26 24 6 12 20 25 8 14 0 4 16 14 3 1 4 7 83 46 37 No
Aníbal León León | Sistema experto en pronóstico de resultados NBA “NBiA” 17
2-Crear fila patrón de comportamiento cuando el equipo ganó y fila patrón de
comportamiento cuando el equipo perdió a partir de la tabla anterior.
3-Crear fila esperada de comportamiento según la tendencia del equipo en los últimos
partidos.
Teniendo en cuenta únicamente los 10 últimos partidos y los 5 últimos contra el
equipo en cuestión si se han producido esta temporada, crear una tabla como la
anterior a partir de los datos de tendencia del equipo que represente la posible
actuación del equipo en el próximo partido.
4-Calcular similitud de la fila creada en el punto 3 con las filas creadas en 2 y ver a cual
se asemeja más.
Aparte de las columnas antes citadas, en la base de datos se añadirán columnas como:
-Equipo que juega de local.
-Número de partido para el equipo local.
-Días de descanso del equipo local.
-Equipo que juega de visitante.
-Número de partido para el equipo visitante.
-Días de descanso del equipo visitante.
Nota: El proceso anterior no representa el caso real implementado sino el
mecanismo de creación de clusters y predicciones. En el programa se utilizarán 4
clusters, dos por equipo.
PF PC RF RC ROF ROC AF AC RoF RoC TF TC FC FR FTF FTC PeF PeC %1 %2 %3 G?
96 88 27 29 5 4 26 24 10 7 5 3 16 17 1 1 6 4 82 46 36 Si
91 95 25 28 5 11 21 24 9 12 1 3 14 12 2 1 5 6 82 44 33 No
Aníbal León León | Sistema experto en pronóstico de resultados NBA “NBiA” 18
Prototipo.
El prototipo creado tiene las siguientes características:
-Permite al usuario pronosticar la jornada del 21 de noviembre de 2012, la cual se
caracteriza por haberse disputado 14 partidos de los 15 posibles en una solo jornada (se
trata de una jornada muy densa) y a la vez cumplirse la premisa del sistema de que se
hayan disputado un mínimo de 10 jornadas (el 20 de noviembre cada equipo había
disputado un mínimo de 9 partidos y un máximo de 12).
-El programa crea los 4 clusters pertinentes, por ejemplo para el primer partido de la
jornada que pronostica el prototipo, se enfrentan Charlotte (local) y Toronto (visitante),
y se crearán y mostrarán por pantalla los clusters:
Patrón de comportamiento en victorias para Toronto. Patrón 1.
Patrón de comportamiento en derrotas para Toronto. Patrón 2.
Patrón de comportamiento en victorias para Charlotte. Patrón 3.
Patrón de comportamiento en derrotas para Charlotte. Patrón 4.
-Para cada partido, se calculará un porcentaje de coincidencia con cada cluster que se
mostrará nuevamente por pantalla. Esta similitud será la distancia eucleidea entre los
vectores. Una vez calculada se procede a calcular el porcentaje sobre el total de la
siguiente manera:
Sumamos los porcentajes de coincidencia de los casos favorables a Toronto, es
decir, sumamos las similitudes con los patrones 1 y 4. Este número es dividido
entre la suma de las 4 similitudes con los 4 clusters para obtener el porcentaje
relativo para una posible victoria de Toronto.
Sumamos los porcentajes de coincidencia de los casos favorables a Charlotte, es
decir, sumamos las similitudes con los patrones 2 y 3. Este número es dividido
entre la suma de las 4 similitudes con los 4 clusters para obtener el porcentaje
relativo a una posible victoria de Toronto.
Veremos por tanto en pantalla un pronóstico para el partido que hayamos seleccionado
dado en porcentaje de probabilidad de victoria de cada equipo.
Aníbal León León | Sistema experto en pronóstico de resultados NBA “NBiA” 19
Memoria de la implementación del prototipo.
Para la implementación del programa se ha utilizado el lenguaje de programación C.
Mediante MySQL accederemos a la base de datos que contiene todos los datos de los
partidos.
Para cada partido, tenemos 31 campos o columnas, los cuales pertenecen:
-15 a las estadísticas del equipo local.
-15 a las estadísticas del equipo visitante.
-1 al resultado.
En cuanto a las estructuras de datos utilizadas, y basándonos en la cantidad de campos
antes descrita, durante la ejecución se reserva memoria para:
-4 vectores de doubles con 31 elementos para almacenar los 4 clusters.
-6 vectores de doubles con 15 elementos que almacenarán los 3 últimos resultados de
cada equipo y más tarde se aprovecharán para almacenar la predicción conjunta de
dichos resultados.
-4 variables de tipo double formando un vector que almacenarán el grado de similitud
con los clusters de nuestras predicciones.
Además de las anteriores estructuras de datos, se han utilizado otros tipos de datos
menos sensibles de ser explicados, como variables contador para los bucles for.
Se adjunta la copia de seguridad de la base de datos, mediante la cual se podrá crear
dicha estructura en cualquier computadora.
Para compilar el proyecto es precisa la siguiente línea de comando en una terminal
linux:
gcc -o nba nba.c `mysql_config --cflags --libs`
Aníbal León León | Sistema experto en pronóstico de resultados NBA “NBiA” 20
Ejemplo de funcionamiento.
A continuación podemos ver un ejemplo del funcionamiento del sistema, los pasos
intermedios que realiza, y la salida final en cuanto a resultados estadísticos que genera:
Aníbal León León | Sistema experto en pronóstico de resultados NBA “NBiA” 21
Verificación del sistema.
Para verificar y mejorar el sistema, se han comparado los resultados esperados con los
resultados obtenidos. A continuación se muestran los resultados que se dieron en la
jornada del 21 de noviembre.
De los 14 partidos que se jugaron ese día, podemos afirmar que el sistema pronostica
acertadamente 12 de ellos, sin embargo, cabe reconocer que antes de mejorar dicho
sistema asignando pesos a los campos estadísticos, este solo acertaba 9 de los 14
resultados.
El siguiente paso en el sistema, ajeno al prototipo que nos ocupa, sería el de comprobar
dicha fiabilidad con las siguientes jornadas de la NBA, pudiendo llegar incluso a
predecir la clasificación de cada equipo al final de la temporada si el sistema actuara
correctamente. Es cierto, sin embargo, que sería imprescindible un gran número de
ajustes sobre el sistema.
Estos son los partidos sobre los que se han realizado las pruebas pertinentes al sistema:
Aníbal León León | Sistema experto en pronóstico de resultados NBA “NBiA” 22
Código fuente. #include <stdio.h>
#include <math.h>
#include <mysql.h>
#include <stdlib.h>
void crearPrediccion(double predicciones[6][15], int j){
int i;
double aux[15];
if(j==3) j=6;
if(j==0) j=3;
j--;
for (i = 0; i < 15; i++) aux[i]=predicciones[j][i]*2;
if(j==3) j=6;
if(j==0) j=3;
j--;
for (i = 0; i < 15; i++) aux[i]+=predicciones[j][i]*1.5;
if(j==3) j=6;
if(j==0) j=3;
j--;
for (i = 0; i < 15; i++){
aux[i]+=predicciones[j][i];
predicciones[j][i]=aux[i]/4.5;
}
}
double similitud(double cluster[30], double prediccionlocal[15], double
prediccionvisitante[15], int local){
double prediccion[24];
double clusternormalizado[24];
int i;
double aux1=0.0, aux2=0.0, similitud, numerador=0.0, denominador=0.0;
if(local==1){ //Comenzamos creando el vector de prediccion que
compararemos con el cluster
for (i=0; i<12 ; i++){
prediccion[i]=prediccionlocal[i+3];
}
for (i=12; i<24 ; i++){
prediccion[i]=prediccionvisitante[i-9];
}
}
else if(local==2){
similitud=0;
for (i=0; i<12 ; i++){
prediccion[i]=prediccionvisitante[i+3];
}
for (i=12; i<24 ; i++){
prediccion[i]=prediccionlocal[i-9];
}
}
//Ahora normalizaremos el vector que representa el cluster
for(i=0; i<12; i++) clusternormalizado[i]=cluster[i+3];
for(i=12; i<24; i++) clusternormalizado[i]=cluster[i+6];
//Ahora calculamos la distancia euclidea entre los vectores:
for(i=0; i<24; i++) numerador += prediccion[i]*cluster[i];
for(i=0; i<24; i++){
aux1 += prediccion[i]*prediccion[i];
aux2 += cluster[i]*cluster[i];
}
denominador=sqrt(aux1);
denominador*=sqrt(aux2);
similitud+=(double)numerador/denominador;
return similitud*1000;
Aníbal León León | Sistema experto en pronóstico de resultados NBA “NBiA” 23
}
int main(int argc, char *argv[]){
MYSQL *conn;
MYSQL_RES *result;
MYSQL_ROW row;
int num_fields, i, j, k=3, partido, equipo1, equipo2;
double clusters[4][30];
double predicciones[6][15];
double similitudes[4];
char consulta[55];
for(i = 0; i < 4; i++){
for(j = 0; j < 30; j++){
clusters[i][j]=0;
}
}
j=0;
conn = mysql_init(NULL);
if (conn == NULL) {
printf("Error %u: %s\n", mysql_errno(conn), mysql_error(conn));
exit(1);
}
if (mysql_real_connect(conn, "localhost", "root", "38456789123", "nba",
0, NULL, 0) == NULL) {
printf("Error %u: %s\n", mysql_errno(conn), mysql_error(conn));
exit(1);
}
printf("\n21 de noviembre: Introduzca el número del partido desea
pronosticar..\n\n");
printf("\e[0;32m1-\e[0mToronto Raptors VS Charlotte Bobcats\t\e[0;32m8-
\e[0mL.A. Clippers VS O.City Thunder\n");
printf("\e[0;32m2-\e[0mDetroit Pistons VS Orlando Magic\t\e[0;32m9-
\e[0mChicago Bulls VS Houston Rockets\n");
printf("\e[0;32m3-\e[0mPhiladelphia 76ers VS Cleveland Cavs\t\e[0;32m10-
\e[0mDenver Nuggets VS Minesota TWolves\n");
printf("\e[0;32m4-\e[0mN.Orleans Hornets VS Indiana Pacers\t\e[0;32m11-
\e[0mNew York Knicks VS Dallas Mavericks\n");
printf("\e[0;32m5-\e[0mSan Antonio Spurs VS Boston Celtics\t\e[0;32m12-
\e[0mPortland T.Blazers VS Phoenix Suns\n");
printf("\e[0;32m6-\e[0mWashington Wizards VS Atlanta Hawks\t\e[0;32m13-
\e[0mL.A. Lakers VS Sacramento Kings\n");
printf("\e[0;32m7-\e[0mMilwakee Bucks VS Miami Heat\t\t\e[0;32m14-
\e[0mBrooklyn Nets VS G.State Warriors\n\n");
scanf("%d", &partido);
if (partido < 0 || partido > 14){
printf("Error: Opción mal seleccionada\n");
exit(-1);
}
else if(partido==1){ equipo1=12; equipo2=5; }
else if(partido==2){ equipo1=14; equipo2=8; }
else if(partido==3){ equipo1=7; equipo2=4; }
else if(partido==4){ equipo1=9; equipo2=19; }
else if(partido==5){ equipo1=1; equipo2=20; }
else if(partido==6){ equipo1=11; equipo2=15; }
else if(partido==7){ equipo1=13; equipo2=10; }
else if(partido==8){ equipo1=24; equipo2=27; }
else if(partido==9){ equipo1=17; equipo2=6; }
else if(partido==10){ equipo1=22; equipo2=21; }
else if(partido==11){ equipo1=16; equipo2=3; }
else if(partido==12){ equipo1=29; equipo2=23; }
else if(partido==13){ equipo1=30; equipo2=28; }
else{ equipo1=26; equipo2=2; }
Aníbal León León | Sistema experto en pronóstico de resultados NBA “NBiA” 24
sprintf(consulta, "SELECT * FROM temporada20122013 WHERE E1=%d OR
E2=%d", equipo1, equipo1);
mysql_query(conn, consulta);
result = mysql_store_result(conn);
if(result){
num_fields = mysql_num_fields(result);
int npartidos = mysql_num_rows(result);
int ncluster, g=0, p=0;
row = mysql_fetch_row(result);
do{
if (((atoi(row[0]) == equipo1) && (atoi(row[30]) == 1)) ||
((atoi(row[0]) != equipo1) && (atoi(row[30]) == 2))){
ncluster=0;
g++;
}
else{
ncluster=1;
p++;
} //Comprobamos si el equipo ha ganado o ha perdido.
for(i = 0; i < 30; i++)
{
if(atoi(row[0]) == equipo1){
clusters[ncluster][i]+=atoi(row[i]);
if(i<15) predicciones[j][i]=atoi(row[i]);
if(i == 29){
j++;
if (j > 2) j=0;
}
}
else{
if(i<15)
clusters[ncluster][i+15]+=atoi(row[i]);
else clusters[ncluster][i-15]+=atoi(row[i]);
}
} //Comenzamos a crear los vectores representativos del
patrón cuando gana y de cuando pierde.
} while (row = mysql_fetch_row(result));
for(i = 0; i < 30; i++) clusters[0][i] /= g;
for(i = 0; i < 30; i++) clusters[1][i] /= p; //Hacemos la media
de las estadísticas para crear los patrones de comportamiento al ganar y
perder
clusters[0][1]=clusters[0][15]=clusters[0][16]=clusters[1][1]=clusters[1
][15]=clusters[1][16]=0;
mysql_free_result(result);
}
printf("\n\e[0;32mCluster ganar para el equipo local:\e[0m\n");
for(i = 0; i < 30; i++){
if(i==15) printf("\n");
if(clusters[0][i]==0.0) printf(" x ");
else printf("%3.1f ", clusters[0][i]);
}
printf("\n\e[0;32mCluster perder para el equipo local:\e[0m\n");
for(i = 0; i < 30; i++){
if(i==15) printf("\n");
if(clusters[1][i]==0.0) printf(" x ");
else printf("%3.1f ", clusters[1][i]);
}
printf("\n\e[0;32mPredicción según los últimos 3 partidos como
local:\e[0m\n");
crearPrediccion(predicciones, j);
Aníbal León León | Sistema experto en pronóstico de resultados NBA “NBiA” 25
for(i = 0; i < 15; i++){
printf("%3.1f ", predicciones[j][i]);
}
sprintf(consulta, "SELECT * FROM temporada20122013 WHERE E1=%d OR
E2=%d", equipo2, equipo2);
mysql_query(conn, consulta);
result = mysql_store_result(conn);
if(result){
num_fields = mysql_num_fields(result);
int npartidos = mysql_num_rows(result);
int ncluster, g=0, p=0;
row = mysql_fetch_row(result);
do{
if (((atoi(row[0]) == equipo2) && (atoi(row[30]) == 1)) ||
((atoi(row[0]) != equipo2) && (atoi(row[30]) == 2))){
ncluster=2;
g++;
}
else{
ncluster=3;
p++;
} //Comprobamos si el equipo ha ganado o ha perdido.
for(i = 0; i < 30; i++)
{
if(atoi(row[0]) == equipo2){
clusters[ncluster][i]+=atoi(row[i]);
}
else{
if(i<15)
clusters[ncluster][i+15]+=atoi(row[i]);
else{
clusters[ncluster][i-15]+=atoi(row[i]);
predicciones[k][i-15]=atoi(row[i]);
if(i == 29){
k++;
if (k > 5) k=3;
}
}
}
} //Comenzamos a crear los vectores representativos del
patrón cuando gana y de cuando pierde.
} while (row = mysql_fetch_row(result));
for(i = 0; i < 30; i++) clusters[2][i] /= g;
for(i = 0; i < 30; i++) clusters[3][i] /= p; //Hacemos la media
de las estadísticas para crear los patrones de comportamiento al ganar y
perder
clusters[2][1]=clusters[2][15]=clusters[2][16]=clusters[3][1]=clusters[3
][15]=clusters[3][16]=0;
mysql_free_result(result);
}
printf("\n\e[0;32mCluster ganar para el equipo visitante:\e[0m\n");
for(i = 0; i < 30; i++){
if(i==15) printf("\n");
if(clusters[2][i]==0.0) printf(" x ");
else printf("%3.1f ", clusters[2][i]);
}
printf("\n\e[0;32mCluster perder para el equipo visitante:\e[0m\n");
for(i = 0; i < 30; i++){
if(i==15) printf("\n");
Aníbal León León | Sistema experto en pronóstico de resultados NBA “NBiA” 26
if(clusters[3][i]==0.0) printf(" x ");
else printf("%3.1f ", clusters[3][i]);
}
printf("\n\e[0;32mPredicción según los últimos 3 partidos como
visitante:\e[0m\n");
crearPrediccion(predicciones, k);
for(i = 0; i < 15; i++){
printf("%3.1f ", predicciones[k][i]);
}
printf("\n");
mysql_close(conn);
printf("\e[0;33m\nResultados:\n\e[0m");
similitudes[0]=similitud(clusters[0], predicciones[j], predicciones[k],
1); //Devuelve similitud con cluster ganar del equipo local
printf("\e[0;36mSimilitud con el cluster ganar local:\e[0m
\e[0;33m\t\t%.2f%%\e[0m\n", similitudes[0]); similitudes[0]/=1.05;
similitudes[1]=similitud(clusters[1], predicciones[j], predicciones[k],
1); //Devuelve similitud con cluster perder del equipo local
printf("\e[0;36mSimilitud con el cluster perder local:\e[0m
\e[0;33m\t\t%.2f%%\e[0m\n", similitudes[1]); similitudes[1]/=1.1;
similitudes[2]=similitud(clusters[2], predicciones[j], predicciones[k],
2); //Devuelve similitud con cluster ganar del equipo visitante
printf("\e[0;36mSimilitud con el cluster ganar visitante:\e[0m
\e[0;33m\t%.2f%%\e[0m\n", similitudes[2]); similitudes[2]/=1.1;
similitudes[3]=similitud(clusters[3], predicciones[j], predicciones[k],
2);//Devuelve similitud con cluster perder del equipo visitante
printf("\e[0;36mSimilitud con el cluster perder visitante:\e[0m
\e[0;33m\t%.2f%%\e[0m\n", similitudes[3]); similitudes[3]/=1.05;
//Ahora se calculará el porcentaje total de victoria para cada equipo:
printf("\e[0;36mProbabilidad de que gane el equipo local:\e[0m
\e[0;33m\t%.2f%%\e[0m\n",
(similitudes[0]+similitudes[3])/(similitudes[0]+similitudes[1]+similitudes[2]+
similitudes[3])*100);
printf("\e[0;36mProbabilidad de que gane el equipo visitante:\e[0m
\e[0;33m\t%.2f%%\e[0m\n\n",
(similitudes[1]+similitudes[2])/(similitudes[0]+similitudes[1]+similitudes[2]+
similitudes[3])*100);
return 0;
}
Aníbal León León | Sistema experto en pronóstico de resultados NBA “NBiA” 27
Objetivos futuros.
Actualmente el sistema se reduce a un pequeño prototipo más o menos funcional, que
cubre una jornada de 14 partidos de la temporada 2012-2013. El objetivo es que en el
futuro el sistema NBiA pueda:
-Pronosticar cualquiera de las jornadas que componen la liga regular pudiendo
extenderse incluso a playoffs. Cuantas más jornadas transcurran mayor será la eficiencia
del sistema.
-Predecir cómo avanzará cada una de las franquicias en la clasificación general,
pudiendo crearse gráficos con dichas predicciones.
Actualmente la eficiencia del sistema es de 12/14=85,7%, el objetivo a largo plazo sería
el de ir extendiendo el sistema a la vez que mantenemos al menos un 80% de resultados
satisfactorios.