domingo, 29 de marzo de 2020

2ª PARTE. LA PRPUESTA SEMANAL


2ª PARTE.  LA PROPUESTA SEMANAL

Procedimiento

En la 1ª PARTE lo decisivo han sido las aplicaciones, pero en esta segunda lo importante es el procedimiento, porque las herramientas ya quedaron listas allí.

Durante el fin de semana, y hasta el lunes, se han jugado normalmente todos los partidos de la Jornada. Los partidos elegidos para formar parte de la quiniela son los que se juegan en sábado o domingo por lo que en cualquier caso hay que esperar al lunes para conocer los resultados, tanto de los partidos como del escrutinio, y han de proceder de fuentes solventes: La Federación Española de Futbol, La Liga Nacional, o la propia LAE o SELAE. En ocasiones también a fuentes privadas siempre que sean solventes, como la web El Quinielista de Eduardo Losilla. 

La relación de encuentros que forman la quiniela de cada semana no se publica hasta unos pocos días antes de jugarse los partidos, una o dos semanas antes.

Anteriormente hemos dicho que utilizamos los datos de un periodo previo a los partidos de la quiniela, para calcular los vectores. Después de distintas pruebas llegamos a la conclusión de que el óptimo para este periodo era de 58 días. Llegamos a esta conclusión tras un análisis estadístico serio pero es más entendible explicarlo en términos futbolísticos. Los que hemos seguido el futbol creemos que salvo algún jugador genial, fenómeno que se puede disfrutar cada 20 o 30 años, todos los demás jugadores de primera y segunda división son solo un poco mejores o un poco peores  que los demás, y lo mismo ocurre con los equipos, y con los técnicos. Al final la diferencia está en otras causas.

El estado de ánimo personal, las ganas que le tengas al contrario, querer dedicarle un gol a la novia, o al hijo recién nacido, un dolor de muelas que no te ha dejado dormir la noche anterior, la presencia en el campo de un ojeador de un equipo importante, que el partido se transmita en directo por una cadena importante, o internacional, volver a la titularidad después de haber chupado banquillo, y sobretodo venir de una racha de victorias o de derrotas,...  son razones que influyen en el rendimiento de los jugadores y pueden ser más importantes que su capacidad cara al resultado final del partido. Por eso el periodo de cálculo no puede ser demasiado largo, porque el factor motivador o desmotivador ya se ha desvanecido, pero tampoco demasiado corto, porque no pasan cosas tan
motivadoras o desmotivadoras cada día.
Con este método necesitamos que se hayan jugado los partidos de los últimos 58 días, y se hayan incorporado los resultados a la Hoja de cálculo para poder calcular los vectores, por lo tanto dispondremos normalmente de martes a viernes para ejecutar todo el procedimiento.

Con todos los datos recientes incorporados a N QM vamos a BOLETIN, y copiamos por su nombre, la jornada próxima sobre la parrilla. De forma inmediata aparecerá la propuesta  en la columna correspondiente, con los triples y dobles que le haya asignado el algoritmo y los coeficientes elegidos en la 1ª PARTE. Una propuesta que supere el M€ hay que desestimarla de entrada. Yo le tengo puesto un condicional a la última fórmula de modo que si la apuesta supera este importe la quiniela que me imprime directamente es "NO JUGAR". Adelgazar tanto este importe para hacerla viable desvirtuaría demasiado la propuesta, pero es que claro, hay semanas que no nos sobra 1M€.

Tenemos el Boleto con la propuesta, hay que transformarlo en un archivo  .csv y pasar a la 3ª PARTE de SGQL. Es una tarea simple pero delicada. Cuando recreamos una temporada ya terminada, nos situamos en la N QM y vamos editando sobre la Hoja BOLETIN, llamándolas por su nombre, las sucesivas jornadas. Una vez tenemos la pantalla actualizada con los datos correspondientes a la QM de la Jornada que nos interesa hacemos una copia de BOLETIN, a una hoja nueva, copiamos el contenido del recuadro de BOLETIN con un pegado sobre si mismo, para convertir las fórmulas en datos,  y evitar que se estropeen al cambiar formatos, aligeramos la Hoja, suprimiendo todo lo demás hasta que solo quede el "Boleto" de la quiniela, y guardamos ese archivo con el nombre de la Jornada y la extensión  .csv   Vamos guardando cada una de las jornadas en una carpeta que llamamos "Datos Jornada"

En la séptima página de este informe está la imagen de la pantalla de mi Mac. En la tercera columna-estantería del armario está abierta la carpeta T18-19, cuyo contenido se muestra en la columna de la derecha. Es precisamente la carpeta "Datos Jornada" de aquella temporada. Si la próxima jornada a jugar fuera la Jor38 de aquel año, cogeríamos el último archivo de la lista, que se llama Jor38 T18-19 con coef.26. csv, para llevarlo a la tercera fase, para adelgazar.

Los archivos han de seguir el mismo patrón para que la aplicación de adelgazamiento (recordemos que no es una de cálculo sino una aplicación desarrollada en PHP-5, y que no se ejecutará sobre nuestro PC, sino sobre un Host remoto) las encuentre, las remita al ordenador externo, ejecute sus rutinas, las empaquete, y nos devuelva dos archivos. El de las Qs que han superado los filtros y el de las Qs que no han superado los filtros. Pero no nos anticipemos.



domingo, 22 de marzo de 2020

3ª PARTE. ADELGAZAMIENTO DE QM


3ª PARTE.  ADELGAZAMIENTO DE QM

La inacabada de PHP

Si en la  1ª PARTE lo importante fueron las aplicaciones, y en la 2ª PARTE fueron los procedimientos, en la TERCERA lo importante es la Tecnología, y pongo un ejemplo para que se entienda mejor.

Supongamos que N QM nos propone para la próxima Jornada una QM con 11 triples y 3 dobles, que al coste actual de 0,75€ por apuesta son 132.860,25€. No la despreciamos ya que no alcanza el M.€, pero evidentemente hay que adelgazarla, que quiere decir en primer lugar descomponerla en sus 177.147 apuestas simples.

Imaginemos una fila con 15 signos separados por comas. Los catorce primeros pueden ser indistintamente 1, X, o 2, el signo nº 15 puede ser uno cualquiera entre : M-M, M-2, M-1, M-0, 2-M, 2-2, 2-1, 1-M, 1-2, 1-1, 1-0, 0-M, 0-2, 0-1, 0-0. Ahora imaginemos que repetimos esta fila debajo de la primera 177.147 veces, variando cada vez solo uno de los 15 signos, y que esta variación sea distinta cada vez, de modo que las 177.147 sean distintas entre sí.

Podemos ser generosos y decir que  hemos conseguido poner 100 de estos conjuntos de 15 signos en un folio. Vamos a necesitar un libro de 1.771,5 folios para "guardar " el resultado de la descomposición de QM (y varios días de trabajo). Y ahora empezamos con los filtros.

El proceso es secuencial. Todas las QS van al primer filtro, las que no lo superan quedan apartadas, las que sí, van al segundo filtro, y así sucesivamente, hasta terminar los filtros que hayamos puesto.

Volviendo al ejemplo. Si el primer filtro es "que no haya más de cinco variantes seguidas", tendremos que hacer esta comprobación, que supone coger una QS, comprobar si el primer signo es una variante, si ls respuesta es NO, pasar al segundo signo y volver a empezar con la misma pregunta. Cuando la respuesta sea SÍ poner un contador en marcha que se irá incrementando mientras las respuestas sean SÍ, y volverá a cero cuando la respuesta sea NO, etc... si en algún momento de la comprobación el contador de variantes superaba el valor 5, esta QS pasaría a la carpeta de  NO CUMPLEN, en caso contrario pasaría a la carpeta de QS que SÍ CUMPLEN. Tan solo esta quiniela simple de una apuesta puede necesitar 14 comprobaciones y dos decisiones de archivo en este filtro. Eso hemos de multiplicarlo por 177.147, y después por el nº de filtros. Es muy fácil ponerse en 10 millones de operaciones por QM.  La primera vez que lo intenté colapsé mi ordenador, y trabajo tuve para recuperarlo

La realidad es más compleja porque no podemos saber a priori que reducción conseguirá cada filtro, y tampoco podemos esperar a saberlo. Hay que marcarle unas condiciones a la aplicación para que consiga reducir la propuesta inicial hasta unos determinados límites, o por debajo de unos determinados límites. 

Poner filtros muy finos hará que se queden apuestas ganadoras por el camino, y eso no interesa. La técnica correcta con los filtros es poner varios de forma que cada uno se lleve una pocas apuestas poco verosímiles en algún sentido. El conjunto de filtros tamizará solo los apuestas mas inverosímiles, o raras, sin afectar a las más "normales". No confundir normales con fáciles, Una quiniela con 14 signos X es rara, no es normal, ni fácil. Una quiniela con catorce signos 1 no es rara. Tradicionalmente ha habido jugadores que han apostado con muchos signos 1, esperando tener tres o cuatr fallos, pero cobrar algún premio menor. Se suele buscar eliminar las composiciones de signos caprichosas, como 1-1-x-x-2-2-1-1-x-x-2-2-.. ,   1-x-2--1-x-2-1-x-2-..., o muchos signos iguales seguidos, etc..

Construir filtros es fácil y divertido. Imaginemos que tenemos 5 cajas.

En la primera solo hay etiquetas, y todas iguales:   Filtro nº .......   : que el Nº de 
En la segunda hay una infinidad de chapitas con uno de los siguientes textos: 1, X, 2, variables, cambios de signo, 11, 1X, 12, XX, X2, 21, 2X, 22, 111, 11X, ...... 
La tercera deja escoger entre dos opciones: consecutivos o totales
En la cuarta hay que escoger uno de estos signos: >, >=, =, =<, <, distinto de
En la quinta y última caja hay números que van desde el o hasta el catorce

Se trata de coger una pieza, y solo una, de cada caja, siguiendo el orden de las cajas, y concatenar el contenido de las cinco piezas. Volviendo al juego propuesto:

(Filtro nº ....1...   : que el Nº de)(variables)(totales)sea(<)que(9)     y así sucesivamente.

Con un poco de imaginación es fácil pasar de los 1.000 filtros. Es mejor hacerlo de forma ordenada claro, ya que necesitaremos luego identificar cada filtro por su número, cuando vayamos a utilizarlo. He puesto el ejemplo de las cinco cajas porque es justamente el algoritmo que he utilizado para construir los 800 filtros que tengo preparados en mi aplicación.

Después de construidos los filtros el jugador descubre una nueva necesidad. Hay que poder anidar o agrupar los filtros. Cuando la aplicación termina su trabajo nos presenta dos ficheros, el archivo de las Qs que pasan el filtro, y el de las que no lo pasan. Pero este archivo plano ya no es operativo. O lo llevas a la Agencia a sellar o lo borras. Hay que encadenar la salida del primer filtro con la entrada al segundo y así sucesivamente. Aquí el orden de los filtros no altera el resultado, si hay que superar cinco filtros, el resultado será el mismo cualquiera que sea el orden de pase. Conviene también reservarse la opción de guardar las Qs que NO pasan.

Si sabemos que un filtro de los que vamos a usar va a ser muy exigente, mejor usarlo en primer lugar, nos dejará una cantidad de candidatos menor para los pases siguientes, y el proceso será mucho más rápido.

Del mismo modo que en la 1ª PARTE he resaltado la importancia de poder jugar con las herramientas para poder comprobar que no se han cometido errores, o machaques, y poder intercambiar información entre las distintas hoja, aquí es muy importante familiarizarse con la utilización de los filtros, calibrar el grosor o finura de las condiciones que ponemos, acostumbrarse a concatenar filtros, 
 etc.

Para eso hay que utilizar la aplicación con QM caras, y para ello (ya hemos visto el enorme volumen de operaciones que hay que realizar) es necesario disponer de un equipo o equipos, potente. Tengo la suerte de poder usar (sin abusar) los medios potentes de una empresa que se dedica a crear y desarrollar soluciones tecnológicas a medida de las necesidades de sus clientes. Estos productos muchas veces son residentes en los servidores de esta empresa, a fin de poder actuar sobre ellos y modificarlos en el momento que los clientes lo necesita, y por lo tanto dispone de una capacidad sobrada para atender sus propias necesidades y las de sus clientes. En este caso soy un parásito consentido, y agradecido, porque lo que para esta empresa supone una "pequeña" utilización de sus recursos, para mi ha supuesto poder culminar un camino de 40 años. Es a esta capacidad informática, en la utilización de lenguajes de programación y equipos muy potentes, a lo que me refería al decir que en esta 3ª PARTE lo importante rea la tecnología.

Y he puesto culminar porque ya he cerrado el ciclo, a pesar del título de este capítulo. El proceso se ha completado. Lo que falta es tiempo para probar la infinita cantidad de opciones que he dejado abiertas en el camino, y en esta forzosamente abreviada exposición.

Cada uno los capítulos desarrollados en el blog hasta ahora comporta un dossier de documentación que obviamente no puedo insertar en este contenido. Debería colgar del blog un montón de videos ilustrativos del uso de las aplicaciones, tanto públicas como privadas que yo utilizo, así como explicaciones, detalles, fórmulas, archivos...y esto es imposible. Lo que sí haré, en la medida que el tiempo me lo permita es ir ampliando cada uno de los capítulos anteriores con una anexo que titularé: Detalle de ..(nombre del tema)...........para los que quieran saber más.

Me comprometo a empezar estos anexos, y a irlos completando, pero no puedo comprometerme a terminarlos porque soy consciente que requeriría el trabajo de editar un libro, de contenido técnico, de más de cuatrocientas páginas, como mi dossier.  En la presentación he puesto mi correo electrónico para poder contactar conmigo, y me comprometo igualmente a colaborar con quien esté interesado en profundizar en el conocimiento de SGQL, mi hobby desde hace cuarenta años.





domingo, 8 de marzo de 2020

Detalle de la aplicación SGQL en PHP-5


                                                                      .......para los que quieren saber más.

Detalle de la aplicación SGQL en PHP-5

Lo primero que nos pide SGQL es que creemos una Jornada. La mitad del trabajo lo hemos hecho antes, al guardar en una carpeta llamada Datos Jornada las propuestas de QM que BOLETIN lanza semana a semana, que convertimos a formato  .csv

Ahora desde SGQL localizamos la carpeta Datos Jornada, y marcamos la Jornada que nos interesa. La importación es instantánea. Ahora hay que marcarla y pulsar CARGAR, y ya tenemos la Jornada lista para trabajar.

Podemos escoger un filtro, o varios, crear uno nuevo, o bien crear un grupo de filtros. También podemos eliminar filtros.

Abrimos la Jornada, marcamos 1, 2, 3, ...filtros y ejecutamos, obtendremos el resultado pedido:  qué hubiese pasando con cada uno de estos filtros por separado, pero si lo que queremos es pasarlos, uno tras otro, entonces tenemos que formar el grupo de filtros, al que pondremos un nombre, y después podremos guardar con los demás filtros. Con el grupo de filtros lo que obtenemos es el resultado de haberlos pasado todos, sin importar el orden.

En cada caso la aplicación nos informa del número de quinielas simples tratadas, y cuantas han superado cada uno de los filtros, o el grupo, y cuantas no, y el % sobre el total que eso representa.

La aplicación puede usarse de dos modos, antes de la celebración de los partidos la aplicación hará todo lo que hemos dicho hasta ahora, y nos propondrá, según los filtros que hayamos marcado, unas Qs para sellar. Una vez hecho esto, el proceso ha finalizado, pero si la propuesta es todavía demasiado cara, o si nos hemos pasado de adelgazamiento, podemos anular lo obtenido y volver al procedimiento, proponiendo más filtros, o menos, etc., hasta que el importe final sea aceptable, según los baremos que hayamos fijado.

Hay otra forma de utilizar la aplicación, que nos interesa mucho, para estudiar a toro pasado que hubiese ocurrido si...., y familiarizarse con el uso de los filtros. En este caso, dándole a la aplicación el signo que finalmente tuvo cada partido, le podemos pedir (después del proceso de adelgazamiento) que haga el escrutinio final, y la aplicación lo hará.

La aplicación no está diseñada para guardar información, porque maneja tal cantidad de datos que los tiempos de ejecución y por lo tanto su coste se dispararía si tuviese que ir guardando lo que hace.. La información que procesa es de usar y tirar, o sellar. Este último caso ya he dicho que no se producido nunca. Por lo tanto después de haber creado la QM, haberla adelgazado, y haber sellado el fichero plano resultante, tal como especifica SELAE, el lunes siguiente tendríamos que coger las 1771 páginas del ejemplo que hemos puesto, y buscar como locos las Qs con premio.

Es broma. El lunes le pondríamos a la QM inicial los signos reales de los partidos, le volveríamos a marcar los filtros utilizados y le pediríamos a la aplicación el escrutinio. Problema resuelto.


sábado, 7 de marzo de 2020

Detalle de las carpetas GLOBAL


                                                                 ..................para los que quieran saber más.

Detalle de las carpetas GLOBAL
Hasta aquí hemos funcionado tratando de aprovechar en cada jornada los resultados habidos en un corto periodo de tiempo cercano a los partidos, actualmente de 58 días, para valorar el potencial de los equipos, en la fecha del partido, y la experiencia de los 1.000 partidos anteriores para transformar este potencial en pronóstico.

Hemos desarrollado unos instrumentos que, pese a contener miles de fórmulas y millones de cálculos, son cada vez más fiables, y lo son, por lo que ahora hay que mejorar los ajustes lineales, con los que calculamos los 20 coeficientes que usamos, y los algoritmos para hacer pronósticos. Será necesario disponer de otro instrumento que nos permita cambiar de forma rápida y eficiente los coeficientes y los algoritmos sobre una gran cantidad de partidos (ya jugados), para ver con cual de las pruebas nos acercamos más al resultado deseado, o como lo hemos llamado anteriormente la a zona de soluciones no excepcionales, pero confortablemente buenas y estables, y esta vez trabajaremos simultaneamente sobre varias temporadas.

La primera temporada con la Q15 actual fue T14-15. No había "historia" sobre esa nueva forma de pronosticar el 15, y fue para mí, una temporada en blanco. En la temporada siguiente T15-16 ya teníamos 38 signos al 15 del año anterior, muy pocos para sacar conclusiones estadísticas, pero quién las sacó rápidamente fue el PAMDB (Patronato de Apuestas Mutuas Deportivo Benéficas) que se dio cuenta que en la apuesta al 15 convenía poner equipos importantes, que todo el mundo conoce, y sobre los que es más fácil apostar.

En consecuencia la Q15 de T15-16 sigue aún un patrón errático, y es a partir de T16-17 cuando se suele encontrar en la Q15 al Real Madrid, Barcelona, Atlético, .. patrón que se ha seguido hasta ahora conformando una serie estadística más homogénea, que si se inicia desde el año anterior.

El instrumento del que hablamos es la R GEN COMPLETO, que ha demostrado ser eficiente, y con la colaboración de N QM que le facilita los 8Q(i), es capaz de darnos de forma instantánea los resultados de toda la temporada, con la única premisa de facilitarle los 20 coeficientes del ajuste, y un algoritmo eficiente. 

En una carpeta que llamaremos GLOBAL guardamos la copias de las Hojas R GEN COMPLETO de las últimas temporadas. En todas ellas instalamos el mismo algoritmo de generación de apuestas. Las llamamos RGC T15-16, RGC T16-17, RGC T17-18 y RGC T18-19, las aligeramos de todo lo superfluo, y nos aseguramos de que sean perfectas réplicas unas de otras, con las mismas fórmulas, formatos, número de filas y columnas utilizados, etc. Creamos una Hoja de Control, que será la que generará los 20 coeficientes y los enviará a cada RGC TXX-XY. Esta hojas recalcularán sus fórmulas dando el resultado de la temporada con estos coeficientes, que reenviarán de vuelta a la Hoja de Control. Desde esta, con una MACRO, podemos ir guardando los paquetes de 20 coeficientes generados, y los resultados que con estos 20 coeficientes habría obtenido cada temporada.

La idea es simple, y la explicación suficiente, pero como se trata de un proceso que implica cinco Hojas Excel, cada una de las cuales recalcula todos los resultados, de todos los partidos, de todas las quinielas, de toda una temporada, hacerlo es algo delicado. Las cinco hojas tienen que estar abiertas y activas, y hay que poner mucha atención a no estropearlas.

Primero se abre la HOJA DE CONTROL, y desde ésta sucesivamente las Hojas RGC de los años anteriores, dejando activas las MACROS y los VÍNCULOS, para que las hojas se actualicen con cada recálculo. Hay que revisar muy a menudo que todo el sistema funcione, ya que por su peso suelen producirse contratiempos y machaques. Al final, de la HOJA de CONTROL extremos el informe con todos los datos utilizados para decidir con que juego de parámetros nos quedamos.

No se puede trabajar en modo de recálculo AUTOMÁTICO porque entonces los parámetros que se guardan no se corresponden con los que dan los resultados (sufren distinto número de recálculos). Hay que poner la Hoja de Cálculo en modo de Cálculo MANUAL. Se va pulsando la tecla  de CALCULAR AHORA, controlando el resultado, y cuando este nos interesa, mediante las MACROS de la Hoja (la MACRO 2 nos guarda los coeficientes de cabecera, y la MACRO 1 todos los datos de cabecera). En la fase final, cuando conviene ir guardando todos los recálculos para poder analizar los resultados con mayor detenimiento, se puede usar la MACRO 3, desde modo de cálculo MANUAL, que ejecuta todo el proceso.

Cuando la Hoja de CONTROL tiene suficiente información, hay que homogeneizar datos y formatos, imprimir y guardar. Solo falta seleccionar el resultado que más nos guste.




domingo, 1 de marzo de 2020

Detalle de la carpeta TREBOL

                                                                 .......para los que quieran saber más.


Detalle de la carpeta TREBOL

Con los datos de T15-16, T16-17, T17-18, y T18-19 hemos construido las soluciones GLOBAL, con las que hemos probado siete opciones ligeramente distintas, aunque con una base común.  Son GLOBAL1, GLOBAL2, GLOBAL2-1, GLOBAL2-2, GOLBAL3, GLOBAL4, y GLOBAL5. Estudiando los resultados vemos que los mejores son G1 y G4, en las que el algoritmo de Q14 es casi idéntico, variando ligeramente el algoritmo de la Q15

La conclusión que podemos sacar es que hay que seguir con el algoritmo de Q14, y afinar los coeficientes los coeficientes del algoritmo para la Q15, hasta que uno de los dos sea mejor.

También sacamos otra conclusión: la serie histórica utilizada no es homogénea, ya que los coeficientes que dan buenos resultados las últimas temporadas no los dan en la más antigua T15-T16.

Si volvemos atrás recordaremos que ya dijimos que la elección del partido para la Q15 no se normalizó hasta la T16-17, habiendo sido T14-15 (la primera) y T15-16 (la segunda), temporadas de prueba. Así pues, acabamos de confirmar este hecho.

Estoy escribiendo esto durante la cuarentena impuesta por la pandemia COVID-19, que obligó a suspender las ligas de futbol profesional desde el 23 F, fecha famosa por otras razones. Pues bien, llegados a este punto, y puesto que aunque la Temporada 19-20 llegue a completarse las circunstancias harán que la serie de resultados no pueda considerarse homogénea, ni válida para nuestro propósito, he decidido, para mis efectos,  darla por concluida, con los partidos del 23 F.

He decidido crear una familia de soluciones aprovechando las conclusiones de la familia GLOBAL, suprimiendo la T15-16, y añadiendo la T19-20 (hasta donde llegó), y he aprovechado el algoritmo al Q14 de GLOBAL4, y preparado un mix con los algoritmos al Q15 de GLOBAL1 y GLOBAL4.

Conforme a lo esperado pronto ha aparecido un sub-espacio confortable donde las T17-18, T18-19, y T19-20 son rentables y, finalmente,  un sub-espacio mas reducido (con riesgo de ser una singularidad)
en el que las cuatro temporadas fueron rentables, y el periodo completo llegó a una rentabilidad del 145%. Es decir, puedo dar por terminada la búsqueda, ya tengo lo que quería.

Ahora es cuestión de guardar estos datos y esperar a la temporada T20-21, y cuando esta empiece, dejar pasar las ocho primeras jornadas recolectando datos, y poniendo las aplicaciones al día para, a partir de JOR09 poner SGQL en marcha. En las QM que se vayan generando para T20-21 , sí tendrá sentido aplicar la el procedimiento de adelgazamiento. Os tendré informados.

De momento mi proyecto termina aquí. Solamente iré completando el contenido del blog, para hacerlo más comprensible. Hasta pronto!!