Mostrando entradas con la etiqueta Excel. Mostrar todas las entradas
Mostrando entradas con la etiqueta Excel. Mostrar todas las entradas

Aplicacion de Poisson en el Futbol y otros deportes

Sois muchos los que me estáis pidiendo que os de acceso a ficheros de Excel que tengo colgados en el drive, y a otros que, por motivos varios, han desaparecido de la web. Estoy ya bastante desconectado de las apuestas, porque, os digan lo que os digan, los únicos que ganan en esto de las apuestas son las casas. Lo digo con conocimiento de causa y después de que me hayan cerrado decenas de cuentas por ganar dinero, la última sin ir mas lejos me la cerraron después de hacer menos de 20 apuestas y con un beneficio de unos 50 Euros.

Cuando la casa detecta que puedes ser un riesgo para ellos, te cierran la cuenta (como me hicieron en William Hill) o te dejan apostar cantidades ridículas de dinero (como me hicieron los de Bet365). Después de esta advertencia cada uno que haga lo que crea conveniente, pero ya os digo que todo aquel que os diga que gana dinero de manera constante con las apuestas os estará mintiendo el 95% de las veces.

Volviendo al tema inicial, tengo un montón de ficheros Excel con datos, estadísticas y estrategias, que si tengo tiempo iré compartiendo por el blog. Uno de los que más me pedís es el de calculo de probabilidades de Poisson, y es el primero que os compartiré. Como comento en la entrada inicial sobre este asunto:

Solo es necesario rellenar las cuatro celdas con los partidos jugados por cada equipo y los goles anotados. El resto se calcula automáticamente.

Y la idea sería apostar a aquellos resultados o eventos en los que la cuota que nos indica el libro de excel sea MENOR que la cuota que nos ofrece la casa de apuestas.

Espero que os sirva

Enlace al fichero:
https://drive.google.com/file/d/1YsK_AefR39nG2UbA-wJKD1beGKCFssmI/view?usp=sharing

Fabricando Surebets

Hay veces que las Surebets no son tan evidentes como comparar dos cuotas y hay que 'fabricarselas' uno mismo. Eso es lo que vamos a hacer hoy con las semifinales de la copa masters que se están celebrando en Londres.

Todas las cuotas son de Pinnaclesports.

Para la segunda semifinal las cuotas ofertadas son:

  • N. Djokovic 3.090
  • R. Federer 1.437
Además tenemos que Novak está a 7.81 como ganador del torneo. Con estos datos vamos a fabricar la surebet de la siguiente forma:

1. Colocamos 10 uds a ganador del torneo a Djokovic
2. Para la semi apostaremos 23 uds a que gana Federer a cuota 1.437

Aquí tenemos dos posibilidades:

Si gana Federer la semifinal el beneficio final será, lo ganado por la apuesta menos las 10 uds apostadas a Djokovic como ganador final:
Beneficio = 23 x (1.437 - 1) - 10 = 0.05 uds

Si gana Djokovic, en la final tendremos otras dos posibilidades:

Si gana Djokovic la final el beneficio será el de la apuesta a ganador del torneo, menos lo apostado a Federer, menos lo que apostemos al otro jugador de la final:

Beneficio = 10 x (7.81 -1 ) - 23 - 43 = 2.1 uds.

Las 43 uds, las he colocado pensando que el otro jugador de la final (presumiblemente Nadal) tendrá una cuota de 1.8 como ganador del partido de la final.

Con lo que si gana ese partido nuestro beneficio sería lo ganado en esa apuesta, menos lo apostado a Djokovic como ganador de torneo, menos lo apostado a Federer.

Beneficio = 43 x (1.8 - 1) -10 -23 = 1.4 uds.

En resumen, la surebet saldrá siempre que la cuota del finalista con el que se enfrentaría Djokovic en la final sea superior a 1.73. Confiando en que sea Nadal, y viendo que la cuota en su partido de grupo estaba rondando el 1.8, es probable que así sea. Si por el contrario su oponente es Murray, la cuota no debería ser inferior a 1.8 tampoco.

Veremos si hay suerte.

Os dejo la hoja de cálculo para que el que quiera juegue un poco con los números. Creo que no me he equivocado, pero si alguien detecta algún error que me lo diga.

Rellenar SOLO LAS CELDAS EN AMARILLO

Manejo de datos en Excel: Ejemplo BetExplorer (2)

En la anterior entrada ya vimos como podíamos aprovechar los datos de una web como betexplorer y organizarlos para que puedan ser tratados más fácilmente. Al final obtuvimos una tabla de partidos, equipos y resultados similar a esta:


A la izquierda de la tabla pegabamos los datos de Betexplorer y a la derecha los teníamos ordenados. Pero para completar nuestra base de datos nos falta una parte muy importante: las variables de entrada. Estas variables son las que representan al conjunto de datos disponibles ANTES de que el partido se haya jugado, es decir, necesitamos algo así:


Esto lo podíamos haber hecho tomando los datos jornada tras jornada antes de los partidos. Pero también lo podemos hacer partiendo de los datos de betexplorer. No es demasiado complicado, pero debemos ser cuidadosos con las fórmulas. Vamos con ello. Empezaremos por lo más sencillo que es calcular la cantidad de partidos que se han jugado y para ello usaremos la función =contrar.si().


Dos cosas importantes que tengo que destacar, la primera es que en la fórmula tenemos un rango en el que la celda inicial es una referencia absoluta (los valores están entre $) y la final es una referencia relativa. Esto es así para que cuando 'arrastremos' esta fórmula a toda la tabla, el rango de la fórmula SIEMPRE empiece en la primera fila. La segunda es que las fechas o las jornadas deben ir de menor a mayor, es decir, las primeras filas de la tabla serán las primeras jornadas y la tabla se irá rellenando hacia abajo con nuevos partidos y nuevas jornadas.

Una vez dicho esto lo siguiente que debemos hacer es calcular la cantidad de goles anotados y encajados. En este caso vamos a usar la función =sumar.si(), que tiene tres parámetros, el primero es el rango inicial donde se buscan los datos, el segundo es el criterio de búsqueda, y el tercero es el rango que queremos sumar.


Por último vamos a calcular los partidos ganados, perdidos y empatados. Para este cálculo necesitamos hacer un paso intermedio, y crear tres columnas una para cada resultado que llenaremos de unos y ceros en función del resultado del partido. Esto lo haremos con la función =si(condicion; valor si verdadero; valor si falso) de la siguiente forma.


Una vez tenemos estas columnas creadas, utilizaremos otra vez la función =sumar.si() para calcular los tres datos que nos faltan, de la misma manera que hemos hecho con los goles a favor y en contra.

Con esto habremos terminado la tabla para el equipo de casa, para el equipo de fuera se opera de forma similar teniendo en cuenta que los goles a favor son los que mete el equipo de fuera y que los partidos ganados son los que aparecen en la columna con un '2' de encabezado.

Estas funciones de excel son muy potentes y nos pueden ser de gran ayuda, pero tienen una limitación muy importante, y es que son MUY EXTRICTAS. Para estas funciones no es lo mismo Real Madrid que R. Madrid, o incluso peor todavía, diferencian entre cosas como Almería y Almeria (sin acento), incluso un espacio de más entre dos palabras o al principio/final del nombre del equipo hace que para Excel esos datos sean diferentes también. Para evitar, en lo posible, estos problemas aconsejo dos cosas, la primera es tomar los datos SIEMPRE DE LA MISMA PAGINA y segundo usar la función =blancos(), que nos elimina estos fastidiosos espacios innecesarios.

No me quiero extender más en este post, así que si alguien tiene alguna pregunta o necesita alguna explicación más no tiene más que añadir un comentario al post.

Series aleatorias en Excel


No es una práctica demasiado habitual, ni en el mundillo de las apuestas ni fuera de él, el hacer simulaciones de nuestras estrategias antes de llevarlas a la práctica. Resulta más excitante, y 'real', el hacer las pruebas con dinero que con el ordenador, aunque el resultado de estas pruebas sea absolutamente real y, en la mayoría de los casos, no tan excitante. Para intentar minimizar este efecto en nuestro bank, vamos a dar nuestros primeros pasos en la simulaciones y lo primero que debemos dominar es cómo generar numeros aleatorios. Para ello Excel dispone de varias funciones:

La funcion =aleatorio() nos devuelve un número 'pseudoaleatorio' entre [0,1). No me he equivocado con los paréntesis, es la notación matemática para decir que el número es mayor o igual que 0 y menor extricto que 1. Es decir, se acercará todo lo que queramos a 1 pero nunca nos devolverá 1. Esto se puede representar también así [0,1[

Si lo que necesitamos es obtener números aleatorios entre otros dos números diferentes deberemos utilizar la siguiente fórmula:

=aleatorio()*(B-A)+A

Esta fórmula nos va a devolver números aleatorios entre [A, B).

Utilizando la función =aleatorio.entre(A;B) obtenemos también números aleatorios entre [A, B], aunque en este caso los números que nos devuelve la función son enteros en lugar de números reales, que son los que devuelve la función aleatorio().

Estas funciones se pueden utilizar, entre otras muchas cosas, para generar resultados al azar de apuestas. Por ejemplo utilizando =aleatorio.entre(0;1) podríamos generar una columna de ceros y unos tan larga como queramos. El reparto de 0 y 1 será al 50% y se acercará más a este número cuanto mayor sea la cantidad de números generados.

Generando sólo 10 números, con un 1 más o menos podemos pasar del 50% al 60%. Este cambio en 100 números nos haría pasar de 50% a 51%, y en 1000 el cambio sería únicamente de 1 décima porcentual.

Si necesitamos obtener una distribución de 1 y 0 con un porcentaje diferente al 50%, debemos combinar la función =si(condición;resultado si verdadero;resultado si falso) con la función =aleatorio(), de esta forma:

=si(aleatorio()>0.6;1;0)

Con esta función generaremos un conjunto de unos y ceros en los que tendremos un 60% de ceros y 40% de unos. Aquí, igual que hemos comentado en el ejemplo anterior, cuanto mayor sea la cantidad de números generados mayor será la aproximación a estos porcentajes.

Algo similar podemos hacer para generar resultados de partidos de fútbol. La función ahora nos debe devolver tres valores 1, X ó 2 con los porcentajes que le marquemos. En este caso la función se complica un poco más, ya que necesitamos crear una columna para los números aleatorios y otra para la fórmula. La hoja quedaría algo así:


Para comprobar la cantidad de unos, equis y doses que ha generado, utilizaremos la función =contar.si(B2:B101;1). Esta función nos devolvería la cantidad de 1 que hay en el rango B2:B101. El porcentaje lo podemos calcular simplemente dividiendo este valor por la cantidad de números generados, que en este ejemplo son 100. Para saber la cantidad de números que hay en la columna también podemos usar la funcion =contar(A2:A101). OJO, no me he equivocado, cuento la cantidad en la columna A, que es la que contiene los números aleatorios, porque esta función cuenta la cantidad de celdas QUE CONTIENEN UN NUMERO y en la columna B tenemos números (1 y 2) y letras (X). Si queremos contar en la columna B, debemos usar =contara(B2:B101) que cuenta la cantidad de CELDAS NO VACIAS.

No me extiendo más y dejamos esta primera entrada aquí. En las siguentes seguiremos más aplicaciones de las series aleatorias en excel y su uso en simulaciones.

Representaciones gráficas de variables continuas

Seguimos con la estadística que la tenía un poco abandonada y volvemos con la representaciones gráficas de variables cuantitativas continuas. Para la representación gráfica estas variables podemos elegir una gran cantidad de gráficos. Los más útiles son los diagramas de distribución de frecuencias, frecuencias absolutas o relativas y acumulados o no, los diagramas de tallo y hoja (Steam and leaft plot en inglés) y los diagramas de caja y arbotante (box and whiskers plot). Como estos últimos tienen bastante que ver con el cálculo de valores medios y dispersión de los datos los dejaremos para cuando tratemos estos apartados en un futuro.

En esta primera entrada vamos a tratar exclusivamente de las distribuciones de frecuencia y como podemos realizarlas en Excel. Para ello vamos a utilizar el número de goles anotados por minuto en la primera parte de los partidos de primera división como ejemplo de aplicación. Los datos no son reales, pero para el que quiera y tenga tiempo en Betexplorer podeis encontrar toda la info, eso sí, hay que ir partido a partido.

Bueno supongamos que hemos hecho eso, hemos ido partido a partido copiando y pegando todos los datos de Betexplorer en Excel y al final tenemos algo así:


En la primera columna tenemos los minutos en los que se han marcado los goles y en la segunda tenemos el jugador que ha marcado.

Lo siguiente que debemos hacer es 'agrupar' los datos, pero antes tenemos que determinar el número de grupos o clases que vamos a hacer. Este es un paso realmente importante ya que si los grupos se hacen muy grandes, tendremos pocos grupos y muchos datos en cada grupo, se perderá información sobre la estructura de datos y si se hacen muy pequeños, muchos grupos y pocos datos por grupo, es difícil distinguir la tendencia de la distribución. Existen varias reglas para establecer el número de intervalos/grupos, la más extendida es la de hacer el número de grupos igual a la raiz cuadrada de la cantidad de datos disponibles. Otra regla que podemos también podemos utilizar es la regla de Sturges

Para nuestro ejemplo vamos a usar esta última, porque nos da una cantidad de grupos un poco menor que si utilizamos la de la raiz cuadrada. Para 350 datos que tenemos el número de grupos será N = 1 + 3.3 x log(350) = 9.39, aprox 9 grupos. Estos grupos es conveniente que sean de igual tamaño y mutuamente excluyentes, es decir, si tenemos registrados goles desde el minuto 0 al 45 deberemos tomar grupos de 45 / 9 = 5 Minutos. Y deberían ser 0-4, 5-9 ... Así, ningún intervalo es mayor que otro y no existen grupos que incluyan dos minutos iguales.

Ahora debemos calcular nuestra tabla de frecuencias en Excel. Y esto, como la mayoría de cosas en excel, se puede hacer de varias formas:

1. Usando la función frecuencia
2. Usando la función histograma que se encuentra dentro del complemento 'análisis de datos'
3. Usando tablas dinámicas
4. Usando subtotales
5. Usando la función contar.si

Yo voy a usar esta última, porque es la menos utilizada habitualmente en estos casos y además nos servirá para explicar una función de excel realmente potente, pero ya digo que cualquiera de las otras nos podría valer.

El resultado final es el siguiente.


En la primera columna tenemos los mintos empezando en el 0 y acabando en el 50. OJO esto es importante para el cálculo, no debemos acabar en el minuto 45 aunque en nuestros datos este sea el valor máximo. Veremos el por qué al analizar la fórmula de la columna Frecuencia Acumulada. Para el cálculo de la frecuencia acumulada usamos la función contar.si, que tiene dos parámetros. El primero es el rango de datos, en nuestro caso los datos están en el rango A1:A350. El segundo parámetro es el criterio para contar. Para la primera fila debemos contar todos las veces que aparecen números entre 0 y 4, es decir, número de minuto menor que 5. Esto lo podría haber hecho así directamente =contar.si(A1:A350;"<5"). Si utilizamos esta función obtendremos el mismo resultado, pero, en primer lugar, es más lento de programar, ya que debo ir cambiando el criterio para cada fila de mi tabla y en segundo lugar es mucho menos flexible. De la manera que lo hemos hecho cambiando el valor de las celdas de la columna E nos va a cambiar el criterio y nos acutalizará los datos automáticamente. Además la tabla la rellenamos mucho más rápidamente copiando la fórmula a toda la columna. El valor del minuto 50 lo necesitamos ya que el calculo del último intervalo excluye (el menor es estricto, no es menor o igual) al minuto 45 y muchos de los goles que tenemos contabilizados se han marcado en ese minuto, que incluye también los goles marcados en tiempo añadido.

La última columna es la frecuencia sin acumular y su cálculo es sencillo, como se muestra en la imagen. Con esto tenemos acabada nuestra tabla de frecuencias y podemos representar gráficamente los datos. El resultado final es el siguiente


Para el cálculo de las frecuencias relativas debemos dividir cada uno de los valores de nuestra tabla por el total de datos, en nuestro caso 350. Y las graficas que se obtienen son exactamente iguales lo único que nos cambiaría es la escala del eje Y, que pasaría a ser de 0 a 100%.

Bueno, lo dejamos aquí por hoy y si teneis alguna duda o quereís alguna aclaración ya sabeis como contactar conmigo. Un saludo.

Manejo de datos en Excel: Ejemplo BetExplorer

En esta tercera entrega de la serie relacionada con el manejo de datos en excel, vamos a hacer un ejemplo de como se puede arreglar la información obtenida de una página web como es BetExplorer.

Partiremos de los datos que ofrece la web, que tienen el siguiente aspecto:


Para llegar a esto otro.


Para ello lo primero que debemos hacer es seleccionar todos los datos, copiarlos y hacer un Pegado Especial > Texto en Excel.

Con esto habremos conseguido la primera parte de la tabla (la zona verde). Ahora nos queda rematar la faena y rellenar usando funciones de excel la zona azul.

Las dos primeras columnas son los nombres de los equipos y los vamos a separar utilizando las funciones IZQUIERDA(Texto; Numero de caracteres), ENCONTRAR(Texto buscado; Texto donde busca; Posicion inicial), y EXTRAE(Texto; Posicion inicial; Numero de Caracteres). Esta es la parte más complicada de la hoja, porque lleva varias funciones de texto anidadas, pero una vez la tienes acabada funciona a la perfección.

Lo más importante para poder separar los equipos es ver si hay algún texto que sirva de separardor entre ambos. En este caso se utiliza el guión "-". Esto nos facilita mucho la tarea, porque lo que haremos es decirle a excel que el primer equipo es el texto que hay antes del guion y el segundo es el que hay después. Vamos a ver como traducimos esto a funciones de excel.

La función ENCONTRAR nos devuelve la posición dentro del texto que ocupa el caracter o caracteres que deseamos buscar. Así = ENCONTRAR(Partido;"-") nos va a devolver la posición en la que se encuentra el guión dentro del Partido.

La función IZQUIERDA nos va a devolver los n primeros carácteres del texto. Con esto lo tenemos casi hecho, lo que queremos es pedirle a Excel que nos devuelva los primeros caracteres hasta el guión. Es decir:

Equipo1 = ESPACIOS(IZQUIERDA(Partido;ENCONTRAR("-";Partido)-1))

La función ESPACIOS la coloco para quitar todos los espacios en blanco que sobren y el -1 de después de ENCONTRAR sirve para eliminar el "-" del texto.

Para el Equipo2 es un poco más complicado, porque cambiando la función IZQUIERDA por DERECHA no nos funciona, debido a que necesitamos saber cuantos caracteres hay empezando por la derecha hasta el guión y la función ENCONTRAR nos dice eso pero empezando por la izquierda. Así que tenemos dos alternativas, utilizar la función derecha y calcular el número de caracteres que necesitamos como la longitud total del texto menos la posición del guión, o bien utilizar la función extrae que nos devuelve un trozo de texto desde la posición que nosotros le digamos. Yo voy a utilizar esta última

Equipo2 = ESPACIOS(EXTRAE(Partido;ENCONTRAR("-";Partido)+1;100))

El +1 que hay después de ENCONTRAR, se usa en este caso para que no nos devuelva el guión junto al nombre del segundo equipo, y el 100 del final es para que extraiga 100 caracteres, como no hay tantos, lo que hace es extraer hasta el final del texto.

Ya tenemos hecho lo más difícil y solo nos queda completar la tabla con las columnas finales.

Los goles marcados por el equipo 1 y el equipo 2 los obteníamos con las funciones HORA() y MINUTO(), como vimos en el anterior artículo. Para obtener el resultado del partido, vamos a usar la función SI(condición; accion si verdadero; accion si falso). Esta función se puede anidar hasta un máximo de 7 veces, y para este caso deberemos anidar dos de ellas. Y nos quedaría algo así:

Res = SI (Eq1>Eq2; 1; SI(Eq1=Eq2; "X"; 2))

Con esta función lo que hacemos es comparar si los goles que ha metido el equipo1 son mayores que los que ha metido el equipo2 y si es así nos devuelve 1, si no es así, miramos si los goles del equipo1 son iguales a los del 2, si es así nos devuelve una X, que como es un texto debemos colocarla entre comillas dobles, y si no es así nos devuelve un 2. Como podeis ver la X la debemos de colocar entre comillas porque es un texto.

Para el cálculo del Over2.5 hacemos algo parecido.

O2.5 = SI (Eq1+Eq2>2;1;0)

Si la suma de los goles es mayor que 2, devuelve 1 y si es menor devuelve 0. El 1 y el 0 lo podríamos cambiar por lo que nosotros quisieramos "OVER" y "UNDER", "O" y "U"... pero yo suelo utilizar 1 y 0 porque para saber el % de overs que han salido solo tengo que hacer la media de esta columna. Si utilizamos cualquier otra nomenclatura el cálculo se complica un poco más.

La columna de O1.5, se calcula prácticamente igual que la de O2.5 y no lo voy a hacer. Lo dejo como deberes ;-)

La columna Par se calcula también usando la función Si y la función Es.Par() de la siguiente manera:

Par = SI (ES.PAR(Eq1+Eq2);1;0)

Con estas funciones ya tendríamos completada nuestra tabla.

La hoja de cálculo completa la he subido a GoogleDocs y la podeis encontrar pinchando en este enlace. El funcionamiento es sencillo, copiais los datos de BetExplorer y los pegais en la hoja con CTRL+V. El resto funciona automático. Espero que os sirva.

Manejo de datos en Excel

Siguiendo con los post relacionados con el manejo de datos en excel, vamos a repasar una serie de funciones avanzadas en Excel que nos van a permitir ajustar a nuestras necesidades, datos copiados desde páginas web.

Las páginas que ofrecen resultados de partidos no suelen seguir un criterio único para mostrar estos datos. Las opciones más comunes son tres: presentar el resultado separado por un guión (1-1), por dos puntos (1:1), o en diferentes columnas (1 1).

El primer paso que debemos dar es copiar los datos y hacer un Pegado Especial > Texto en Excel. Cuando hacemos esto con resultados separados por guiones (1-1), Excel los interpreta como una fecha, siempre que no se presente ninguna incoherencia (días de la supuesta fecha, primer número normalmente, sea menor que 1 o mayor que 31, o cuando los meses sean menor que 1 o mayor que 12). Si Excel advierte una incoherencia en la supuesta fecha, copiará el resultado como una cadena de texto. Para salir de dudas y conocer con que formato ha pegado Excel los datos lo mas apropiado es utilizar la funcion =ESNUMERO(celda). Esta función nos devolvera verdadero o falso segun la celda contenga un valor o no. Hay que tener en cuenta que Excel trata las fechas y las horas como un numero, que representa el numero de días transcurridos desde el 1 de enero de 1990. Así, si el dato que hemos copiado lo ha pegado como una fecha, la funcion nos devolvera verdadero.

Otra manera de detectarlo es viendo la alineación de la celda. Una alineación a la izquierda se usa para cadena de texto y la alineación a la derecha para los números.

Así pues, tenemos 2 opciones, el dato ha sido pegado como fecha o como texto. Si se ha pegado como fecha debemos de utilizar las funciones =DIA(Dato) y MES(Dato). Con la funcion dia obtendremos los goles o puntos anotados por el equipo1 y con la funcion mes los del equipo 2.

Si los datos de partida estan en formato 1:1. Al pegarlos los interpretará como horas, con lo que para separar el marcador utilizaremos las funciones =HORA(Dato) (para obtener los goles del equipo de casa) y =MINUTO(Dato), para el segundo. con este formato segimos teniendo restricciones con respecto a los numeros a pegar y si Excel detecta una incoherencia, hará lo mismo que para el caso de las fechas, pegará los datos como texto.

Para estos casos en que Excel convierte los datos en texto podemos hacer lo siguiente. si los datos siempre tienen el mismo numero de digitos, por ejemplo resultados de futbol el 99% de las vecs los goles seran un solo digito, goles de balonmano 2 digitos (en partido completo). se pueden usar las funciones =DERECHA(Texto; Numero de Caracteres) e =IZQUIERDA(Texto; Numero de Caracteres) combinadas co las funciones =ESPACIOS(Texto) y =VALOR(Texto). las funciones izquierda y derecha son similares y lo que hacen es devolver una cantidad especifica de caracteres empezando por la izquierda o por la derecha del texto selecionado. Estas funciones siempre nos devuelven un texto, que convertiremos en numero con la funcion valor.

La función espacios es muy importante, ya que elimina del texto todos los espacios excepto los que hay entre palabras. nos servira para eliminar espacios sobrantes al comienzo y al final del texto.

El resultado final de todo esto seria algo asi (los datos son de BetExplorer.com)


En la siguiente entada veremos como podemos arreglar nuestros datos cuando tenemos entre los valores pegados textos y numeros, y como se pueden obtener automaticamente los nombres de los equipos.

Ficheros Excel para Apuestas

No me equivocaría mucho si digo que la mayoría de gente de este mundo de las apuestas ha creado algun fichero en excel como ayuda para gestionar sus apuestas. Dependiendo del nivel de conocimiento de cada uno, estos ficheros pueden ser mas o menos sofisticados, pero independientemente de ello son siempre útiles.

Yo, no iba a ser menos, tengo ficheros de todos los colores y tamaños. Uff, como me ha quedado eso, si le añado sabores, a mas de uno le parecerá un anuncio de condones ;-) Bueno a lo que voy, la intención es ir subiendo a GoogleDocs los ficheros más sencillos, que no por ello menos útiles, para que podais hacer uso de ellos. Esto tiene un peligro, tengo que dejar los ficheros como modificables para que sean de utilidad, y en GoogleDocs todavía no han implementado la protección de celdas, con lo que cualquiera puede toquetear las formulas y hacer que el fichero deje de funcionar correctamente. Así que por favor, rogaría encarecidamente que se siguiesen estas instrucciones generales:

1. SOLO MODIFICAR LAS CELDAS SOMBREADAS EN AMARILLO

2. SI POR ALGUNA CIRCUNSTANCIA SE MODIFICA ALGUNA OTRA CELDA, INTENTAD DESACER EL CAMBIO Y SI NO FUNCIONA MANDADME UN MAIL PARA QUE VUELVA A SUBIR EL FICHERO ORIGINAL.

---------------------------------------------------------------------------------

25/04/09 EDITO: Evidentemente era demasiado confiar en que la gente seguría estos pequeños consejos de utilización, así que los ficheros los voy a dejar como NO MODIFICABLES, si quereis utilizarlos os los bajais y los toqueteais todo lo que querais. Eso si, luego no quiero saber nada de su mal funcionamiento.

---------------------------------------------------------------------------------

Después de esta pequeña introducción vamos con la explicación del fichero (lo podeis encontrar en este enlace).

Nombre: Sistemas

Para que sirve: Para calcular las ganancias de apuestas en sistema. Se pueden calcular sistemas de apuestas dobles, triples, cuadrúples, quíntuples y séxtuples. Y todas sus variantes, como las apuestas 2/3, 2/4, 3/5 ... todas las combinaciones que querais hasta 6 selecciones. Sumando los resultados de estas combinaciones, se puede obtener también el resultado de la mayoría de sistemas ofrecidos por las casas de apuestas, como Trixie, Patent, Yankee, Super Yankee o Heinz.

Funcionamiento:
El fichero tiene dos zonas, una en la que se introducen los datos (parte superior) y otra en la que se muestran los resultados (parte inferior). En la parte superior tenemos lo siguiente:

Recuerdo que SOLO HAY QUE RELLENAR LAS CELDAS EN AMARILLO. En la primera columna colocaremos la descripción (es opcional) en la segunda se coloca la cuota y la tercera se colocan ceros o unos en función de si el resultado queremos que sea un fallo (0) o un acierto (1). Esta columna es la más importante, ya que dependiendo de la cantidad de fallos o aciertos estimados será rentable un tipo de combinada u otra.

En la zona de resultados (parte inferior) tenemos lo siguiente:

La cantidad de apuestas (15) es el número total de apuestas que podemos hacer con 4 picks, y corresponde a 4 apuestas simples, 6 dobles, 4 triples y 1 cuadrúple. En la casilla precio por apuesta podemos colocar las uds. que apostamos por cada apuesta. Este valor es el mismo para todas las posibles combinaciones.

La columna coste nos muestra el coste de cada una de las apuestas. La columna de ganancias nos muestra la cantidad devuelta para cada apuesta. OJO: Si apostamos 1 ud a una cuota 1,5 y la ponemos como apuesta ganada, la cantidad que mostrará será 1,5 no 0,5. El beneficio de la apuesta lo vemos en la columna %, que nos devuelve el porcentaje sobre la cantidad apostada.

La última columna sirve para seleccionar qué apuestas queremos hacer y sobre esta selección se hace el cálculo mostrado en la última fila (selección). En la imagen se han seleccionado solamente las apuestas sencillas y las dobles, con lo que hacemos un total de 10 apuestas, con unas ganancias de 10.6 uds, que corresponden a un 6%. Si hubiesemos jugado el sistema completo los resultados serían los mostrados en la fila TOTAL, es decir, 15 apuestas, 10.6 uds ganadas y -29.3% de pérdidas.

Espero que os sirva de utilidad y si quereís alguna explicación más o plantear alguna modificación ya sabeis como contactarme.

La distribución de Poisson: Test de ajuste

En esta segunda entrega sobre el uso de la distribución de Poisson para predecir resultados de partidos de Futbol vamos a exponer como podemos comprobar si nuestros datos se ajustan a este tipo de distribución o no. Esto se conoce en estadística como test de bondad de ajuste o, en inglés, goodness of fit test.

Este proceso que vamos a explicar se puede utilizar con cualquier tipo de variable en escala nominal u ordinal y sirve para cualquier tipo de distribución.

El test está basado en la distribución chi cuadrado () y fue creado por uno de los más reputados estadísticos de los últimos tiempos, Karl Pearson. Su base, como en todos los test de hipótesis, consiste en establecer dos hipótesis, la hipótesis nula que considera que los datos que tenemos se ajustan a una determinada distribución y la hipótesis alternativa que es la negación de la nula, es decir, nuestros datos no se ajustan a la distribución. Dicho así no parece muy claro, pero es como se suele explicar la teoría. Traducido al cristiano sería algo así: Tenemos unos datos que 'parece' que siguen una determinada distribución, pero hay unas diferencias entre los datos que tenemos (observados) y los que deberían de ser (esperados). ¿Son esas diferencias lo suficientemente grandes para que sean provocadas por el azar?. La respuesta a esta pregunta la obtendremos con el test de bondad de ajuste.

Alguno a estas alturas se estará preguntando, ¿pero para que necesito hacer esto, si saco la media y lo meto en la fórmula de Poisson y obtengo el resultado que necesito?. La respuesta es sencilla, si nuestros datos no siguen la distribución de Poisson, todas las predicciones que hagamos utilizando las fórmulas para esta distribución serán erroneos y si nos basamos en ellos para apostar, tenemos muchas posibilidades de ver numeros rojos en nuestro bank a final de temporada.

Después de este pequeño paréntesis económico, vamos a ver como podemos realizar el test de bondad de ajuste a una distribución de Poisson en Excel.

Para ello tomaremos los datos del total de goles marcados por partido en la primera división durante la temporada 2007-2008. Pulsando sobre estadísticas tendremos el resumen de los datos que necesitamos. Estos serían nuestros valores 'Observados'. El siguiente paso que debemos hacer es calcular la media de los goles totales marcados por partido. Al tener los datos resumidos no podemos utilizar la función promedio() si no que debemos hacer una especie de 'desagrupamiento'. Esto, como siempre, se puede hacer de varias formas, yo voy a explicar dos de ellas, las más sencillas.

La primera es crear una nueva columna en la que multiplicaremos el número de goles por la cantidad de partidos (Columna C). Sumaremos todos esos productos y dividiremos este valor por el total de partidos jugados.

La otra es usar la formula sumaproducto(A2:A11;B2:B11) y nos ahorramos el paso de las multiplicaciones, que lo hace excel internamente. El resultado es el mismo para ambos casos, ¡Faltaria más!.

Una vez calculada la media, lo que hacemos es determinar los valores 'Esperados' según una distribución de Poisson con esa media. Esto lo calculamos multiplicando la probabilidad de Poisson para cada resultado, por el total de partidos.

La última columna la utilizaremos para calcular el estádistico con la siguiente fórmula:



Esta columna es importante, porque nos da información de donde se producen las mayores discrepancias. Cuanto mayor sea el valor que obtengamos, mayor es la discrepancia entre el valor observado y el esperado. Más alejado está ese punto de su lugar teórico predicho por la curva de Poisson y más probabilidad tenemos de que el resultado del test nos diga que nuestros datos no se ajustan bien a la curva.

Ya solo nos queda sumar todos estos valores y 'buscar' dentro de la función y comprobar si las diferencias que hemos encontrado son lo suficientemente grandes o no para rechazar o no rechazar la hipótesis nula. Ya veis que he dicho rechazar o no rechazar, en lugar de rechazar o aceptar, porque NUNCA se acepta la hipótesis nula. Este es un error muy común en la interpretación de los resultados de test de este tipo. Pero dejaremos esto para un futuro.

La función tiene dos parámetros, el primero de ellos es el valor de nuestra suma, y el segundo son los grados de libertad para los que vamos a calcular este estadístico.

Los grados de libertad se obtienen con la siguiente fórmula: GL = Nc - Np - 1

Siendo Nc = al número de categorías que tenemos y Np = número de parámetros que estamos estimando. Para nuestro caso tenemos 10 categorías y vamos a estimar un parámetro solo que es la media: GL = 10 - 1 - 1 = 8

El valor que nos devuelve es lo que en estadística se llama P-Value, y corresponde a la probabilidad de equivocarnos si rechazamos la hipótesis nula. Como norma general se suele tomar como valores de corte el 5% ó el 1% dependiendo de lo restrictivos que seamos. Este valor lo debemos de tomar ANTES de la realización del test y será nuestro límite para rechazar o no rechazar la hipótesis nula.

En el ejemplo tenemos un P-Value de 0.54 con lo que debemos decir que las diferencias que hemos encontrados no son lo suficientemente grandes como para decir que nuestros datos no siguen una distribución de Poisson. Como esto es un poco engorroso, hay mucha gente, que viendo este P-Value, adopta una postura más comprometida y llega a decir que nuestros datos siguen una distribución de Poisson. Pero como ya he explicado esto no es del todo cierto, puede que siga una distribución de Poisson o puede que se acerquen más a otro tipo de distribución. El aspecto final de la hoja sería el siguiente:



Como no quiero extenderme más, solo hago una puntualización final. Si os fijais tenemos dos categorías con menos de 5 datos (8 y 9 goles), siendo estrictos deberíamos haber agrupado estas dos categorías y crear una nueva como más de 6 goles, agrupando en ella las categorias 7, 8 y 9 goles. El resultado del test varía poco en este caso, así que para no complicar más la explicación lo he dejado así. Si alguno está interesado en como se haría el test en este caso que lo diga y lo explicaremos.

Un saludo y hasta la próxima

EDITO 22/07/10: Al final he encontrado una forma de añadir hojas de cálculo al blog y he creado una mini hoja Excel para calcular los resultados de un partido de Futbol a partir de la media de goles marcados por cada equipo. La hoja la teneís aqui.

Resumenes gráficos de variables en escala nominal

Las dos formas más frecuentes de resumir gráficamente variables de escala nominal son los diagramas de barras y los diagramas de sectores. Lo que se representa en ambos casos es la cantidad de eventos que se han dado en cada una de las categorías. Es importante señalar, que el orden en el que se presentan las categorías no tiene ningún significado.

En apuestas deportivas no es fácil encontrar casas que nos ofrezcan apuestas relacionados con variables en escala nominal. Uno de los pocos ejemplos que podemos encontrar son apuestas al primer evento que se puede producir en un partido de futbol. Bwin es una de las pocas casa en las que se pueden encontrar apuestas de este tipo y hace un par de semanas ofrecían lo siguiente para el partido entre el Cluj y el Chelsea (lo he seleccionado en honor a mi compañero Baldani que es un apasionado de la liga Rumana):

Primer evento en la primera parte

1. Tarjeta @ 1.7
2. Gol @2.65
3. Sustitución @15
4. Medio tiempo @8.5

Este es un claro ejemplo de variables en escala nominal. Se ofrecen 4 categorías diferentes con sus cuotas entre las cuales no existe ningún tipo de relación de orden, entendiendo por orden, el que una categoría sea mayor a otra. Evidentemente no se puede decir que tarjeta sea mayor que sustitución o que gol sea menor que medio tiempo.

Para realizar nuestro resumen utilizaremos los datos que ofrecía la propia Bwin. Allí podíamos encontrar los resultados de los dos equipos en sus seis ultimos encuentros y además entrando en cada uno de los partidos podíamos ver los detalles del mismo. Esta será nuestra fuente de datos para este ejemplo.

Iremos partido por partido apuntando el primer evento hasta obtener una columna con 12 datos (6 datos por cada equipo)

Una vez tenemos esto, el siguiente paso es construir un histograma y esto se puede hacer de varias formas en Excel. La que más utilizo, porque creo que es la más rápida y flexible es la tabla dinámica, aunque también se pueden usar otras como los subtotales, la función histograma implementada en el complemento de análisis de datos, la función de excel frecuencia() o la más simple contar.si(). Es esta última la que vamos a explicar en este ejemplo.

El resultado final que vamos a obtener es una hoja como esta:

En la que en la columna D tenemos los datos de los partidos, que hemos ido sacando de Bwin y en las columnas H-I-J-K tenemos los resultados.

Así, partiendo de la tabla de datos, vamos a crear la siguiente:

En la primera columna colocaremos los cuatro tipos de eventos. IMPORTANTE, la función contar.si() no distingue entre mayúsculas y minúsculas, pero si es sensible a los espacios entre palabras o al final de las mismas. Así que, lo que recomiendo, es copiar y pegar los identificadores de cada una de las categorías para no equivocarnos al teclear.

En el resto de la tabla introduciremos la siguientes fórmulas. Los $ supongo que sabeís para que sirven, y se colocan SOLO EN WINDOWS pulsando [F4] repetidas veces, para fijar la celda, la columna o la fila. Volveremos sobre esto en otras entradas.


La columna de frecuencias la obtendremos con la función contar.si() de Excel, que tiene dos argumentos. El primero es el rango donde se encuentran nuestros datos, y el segundo es el criterio, lo que queremos que Excel cuente. Para nuestro ejemplo el rango de datos siempre es el mismo y lo fijamos con los símbolos de $ para que no varíe al arrastrar la función y el segundo es el nombre de la categoría. Con esto conseguiremos que Excel nos cuente la cantidad de veces que aparece el nombre de la categoría en el rango de datos que le hemos dado. A esto habitualmente se le llama frecuencia.

En la siguiente columna hemos calculado un cociente entre la frecuencia de cada categoría y el total de elementos que tenemos. Esto representa la cantidad de elementos que tenemos de cada categoría con respecto al total. A esto se le llama frecuencia relativa y se suele representar en porcentajes, porque también coincide con la probabilidad de que se de un resultado de esa categoría.

Y con esto tenemos ya nuestro resumen gráfico en forma de histograma


Que podríamos representar también en diagrama de sectores:


Como podeis ver en este caso los % coinciden con las frecuencias relativas que hemos calculado en la tabla.

El último paso que nos quedaría sería el de utilizar estos datos para evaluar las cuotas que nos ofrecía Bwin. Si considerasemos como representativos estos seis partidos de cada equipo para evaluar el partido en cuestión, las cuotas que Bwin debería haber ofrecido serían las mostradas en la última columna de la tabla. Para su cálculo simplemente divdiremos 1 por la frecuencia relativa. Comparando estas cuotas teóricas con las ofrecidas por Bwin vemos que existe una discrepancia en la de Sustitución, que Bwin la ofrecía a 15, mientras que en nuestro cálculo habíamos obtenido 6. Esta sería para nosotros una apuesta de valor (value bet) y sería la que deberíamos elegir.

Antes de acabar puntualicemos varias cosas, por si las moscas.

1. Los datos de partida son inventados, pero las cuotas eran las reales
2. No es muy conveniente utilizar solo 6 partidos como un estimador razonable. Cuando se usan tablas de contingencia se habla de que hay que tener como mínimo 5 datos por cada casilla. En nuestro caso sería conveniente tener al menos 5 datos para cada una de las categorías, lo que solo se cumple para una de ellas.
3. Es muy probable que la value bet que obtengamos no sea la que tiene una probabilidad más alta de salir, lo que quiere decir que es probable que no salga. Pero, pero, pero, si seguimos utilizando este método y nuestros análisis son correctos, la frecuencia con la que se irán dando los aciertos hará que se compensen las pérdidas a largo plazo.

Creo que ha sido un pequeño ladrillo para comenzar la semana. Espero que no se haya dormido nadie. Hasta otra

Manejo de Datos en Excel

Antes de continuar con nuevas entradas, vamos a hacer un recorrido por el Excel para conocer algunas de sus funciones que nos van a ser muy útiles en el manejo de datos. La mayoría de los ejemplos que colocaremos en el blog se harán con este programa, y solo en caso de extrema necesidad utilizaremos otros paquetes estadísticos. Para seguir estos post será necesario tener un conocimiento mínimo de Excel ya que voy a saltarme los pasos de principiante y me centraré en utilidades un poco más avanzadas y menos conocidas de este programa. Todo lo que comente, vale para las versiones 2003 y 2007 de excel.

  • Introducir datos en varias celdas a la vez:
Esto, como la mayoría de cosas en excel se puede hacer de varias formas. Podríamos hacerlo introduciendo el dato en una celda y posteriormente, copiando y pegando en el resto, pero hay un atajo bastante útil que nos permite hacerlo en una sola operación.
  1. Seleccionamos las casillas donde queremos introducir los datos.
  2. Escribimos en cualquiera de ellas el dato que queremos que aparezca en todas
  3. Si pulsamos [INTRO] (colocaré en este formato las teclas) el dato se coloca en una casilla, pero pulsando [CTRL]+[INTRO] se introducirá en todas las casillas seleccionadas a la vez.

  • Introducir datos en varias celdas, de diferentes hojas a la vez:
También se pueden introducir datos en una o varias celdas de diferentes hojas a la vez. Para ello lo único que deberemos hacer es seleccionar varias hojas, con [CTRL] o [SHIFT] y pulsando sobre la pestaña de las hojas, para seleccionarlas y a partir de aquí todo lo que hagamos en las celdas automáticamente quedará copiado en las hojas seleccionadas.

  • Introducir la Fecha Actual y la Hora Actual:
Las funciones Ahora(), y Hoy(), nos devuelven información sobre el dia y la hora actual, y se actualizan cada vez que recalculamos la hoja (para recalcular la hoja manualmente se puede hacer pulsando [F9]). Si lo que necesitamos es introducir la fecha de hoy, en lugar de hacerlo a mano tecleando el dia mes y año, podemos hacerlo automáticamente con [CTRL] + [SHIFT]+[; ] para la hora utilizaremos [CTRL] + [SHIFT]+[: ]

  • Extender Listas, Fórmulas y Números:
Excel tiene predeterminadas listas de meses del año y dias de la semana, con lo que para escribir los meses de año lo único que debemos hacer es colocarnos en una celda, escribir ENE (o ENERO) y arrastrar para que se vayan rellenando las celdas con los meses consecutivamente.

Las listas de los meses y días de la semana vienen predefinidas en el programa, pero se pueden modificar e incluso añadir más listas personalizadas. Para ello debemos ir a Herramientas -> Opciones -> Listas Personalizadas en Excel 2003, en el 2007 vamos a Opciones de Excel -> Listas Personalizadas.

Para arrastrar más rápidamente, podemos hacer
DOBLE CLICK en el cuadradito de arrastrar. Esto nos rellenará todas las celdas hacia abajo hasta completar una columna igual a la que se encuentra a su lado.

Si arrastramos una fecha o una hora, nos rellenará las casillas incrementando en un dia o en una hora. Esta función es realmente interesante porque podemos variar a nuestro gusto el incremento. Para ello lo que hacemos es rellenar dos casillas adyacentes con los números, las fechas o las horas que queramos y separadas por el incremento que necesitemos. Si seleccionamos las dos casillas y arrastramos conseguiremos una lista con el incremento que había entre las dos primeras celdas.

Por último pulsando en el cuadrado naranja podemos seleccionar el tipo de relleno que queríamos hacer al arrastrar. Si lo que queríamos era copiar solo los datos pulsaremos en copiar en lugar de rellenar la serie.

Con esto acabamos la entrada de hoy, seguiremos con más información sobre funciones de excel en las siguientes entradas, en las que seguiremos también con el curso básico de estadística. Hasta entonces sed felices.