Saltar al contenido principal
Asesor de Biwenger con IA
Activo

Asesor de Biwenger con IA

Bot en Python que analiza mi liga de Biwenger y me dice qué hacer cada día: a quién alinear, a quién vender, cuánto pujar y a quién clausular. Combina un modelo de puntos validado con jornadas reales, un planificador que pone todas las decisiones en la misma balanza, Gemini para leer la prensa y un informe diario en Telegram.

PythonSQLiteGemini APITelegram Bot APIRSSGoogle Newsunittest

Juego a Biwenger, el fantasy de LaLiga, en una liga con amigos. Cada día hay que decidir muchas cosas: a quién alinear, a quién vender, qué ofertas aceptar, cuánto pujar, a quién clausular y si hay que proteger a algún jugador subiéndole la cláusula. Además, la información está repartida entre la app, la prensa y los partes médicos. No quería otro informe lleno de datos. Quería un asesor que me dijera qué movimientos hacer y por qué, como lo haría alguien que conoce bien el juego: "alinea a este por esto", "vende a este por tanto", "rechaza esta oferta". Cada mañana, o cuando se lo pido desde Telegram, el bot: Descarga los datos de mi liga: plantilla, saldo, ofertas, mercado, rivales con sus cláusulas y el tablón de la liga. Lee decenas de medios deportivos y Google News, y cruza cada noticia con su jugador. Usa Gemini para interpretar las noticias: lesión, sanción, alineación probable, y cuánto dura. Calcula los puntos esperados de cada jugador con un modelo validado con jornadas reales. Decide un plan del día con todas las opciones en la misma balanza. Me envía un informe en Telegram con el motivo de cada acción. Aprende de mi liga después de cada jornada y se recalibra solo. Aviso: usa la API no oficial de Biwenger solo para leer datos de mi cuenta. El bot no puja, no vende ni cambia alineaciones: solo recomienda, y yo decido en la app.

Arquitectura

Visión general y flujo

Visión general y flujo

Proyecto en Python sin framework, organizado en módulos pequeños con una responsabilidad cada uno: cliente de Biwenger, noticias, IA, modelo, planificador, reglas de la liga, diario de aprendizaje, almacenamiento y Telegram. Cada ejecución sigue el mismo camino: login → reglas de la liga → jugadores → mercado → plantilla → rivales → calibración automática → prensa → Gemini → modelo → plan del día → revisión IA → informe → Telegram Cada paso puede fallar sin tumbar el resto. Si falla la prensa, se sigue sin noticias. Si falla Gemini, se usan palabras clave. Si falla el tablón de la liga, se usa el histórico propio.
Modelo de puntos esperados

Modelo de puntos esperados

Todo parte de estimar cuántos puntos hará cada jugador en la próxima jornada: esperado = P(juega) × puntos si juega × casa/fuera × dificultad del rival × noticias × partidos de la jornada -Puntos si juega: su media de temporada corregida hacia una referencia: precio de mercado, temporada pasada y media de su posición. Así, tres buenos partidos de un desconocido no lo convierten en una estrella. También pesa la forma reciente. -P(juega): la parte de las jornadas en que ha jugado. Las noticias la ajustan: "titular probable" la sube y "suplente probable" la baja. -Jornadas dobles o aplazadas: multiplican por 2 o por 0. El modelo se valida con un backtest: rebobina el histórico a jornadas pasadas, predice y compara con lo que pasó. El error medio bajó de 2,28 puntos por jugador (media simple) a 1,94. Después de cada jornada se recalibra solo.
Planificador: todas las decisiones en una balanza

Planificador: todas las decisiones en una balanza

En vez de reglas sueltas que chocan entre sí, un planificador evalúa combinaciones de movimientos con una única función objetivo: J = valor del equipo + λ · (saldo + valor de reventa) + seguro de cláusulas -Valor del equipo: el once de esta jornada, el de las siguientes contando el banquillo, y un término a largo plazo con todos sanos. -λ traduce dinero a puntos según lo que rinde el mercado ese día. -Las pujas no son seguras: cada una se gana con una probabilidad aprendida de mi liga, y J es la media de los escenarios. -Búsqueda: en haz (beam search) de hasta 4 movimientos. Lo que apenas aporta se descarta. De ahí salen decisiones como: -Ventas condicionadas: "véndelo solo si te adjudican a X". -Topes de puja. -Ahorrar para una cláusula. -Vender hoy para clausular mañana, solo si el cambio mejora el equipo de verdad. -Especular sin empeorar el once.
Gemini: lector de prensa y segunda opinión

Gemini: lector de prensa y segunda opinión

Gemini (plan gratuito) tiene dos papeles: 1. Clasificar noticias. Para cada noticia devuelve un JSON con esquema fijo: -si habla de verdad de ese jugador; -el tipo de evento; -el impacto, de −2 a +2; -la duración: puntual, corta o larga; -una nota breve. 2. Todo se guarda en caché en SQLite para no gastar cuota. Revisar decisiones. Antes de proponer vender a alguien, le pasa el caso con estadísticas de toda la temporada, parte médico y noticias. Si la venta es para fichar a otro, le pasa también los datos del que entra para que juzgue el intercambio completo. Si la IA veta, el planificador vuelve a planificar sin esa acción. La regla de oro: no vender a un buen jugador por un motivo temporal, como una expulsión o una sanción de un partido.

Reglas de la liga, aprendizaje y Telegram

1. Reglas de mi liga: -Cláusulas: 1 por jornada (2 para los 3 últimos), máximo 2 recibidas, y el periodo va de inicio a inicio de jornada. Se leen del tablón de la liga. -5 plazas en el mercado. -Capitán (puntúa doble), ariete (+3 si marca) y suplentes. 2. Diario de aprendizaje: registra cada día dueños, cláusulas y recomendaciones. Tras cada jornada aprende de mi liga: -el porcentaje real de pujas ganadas; -una curva de riesgo de cláusula, ajustada por máxima verosimilitud; -cuánto recupera de precio un lesionado al volver. 3.Telegram: informe en HTML con bloques plegables, y un bot de comandos que solo obedece a mi chat (/informe, /acciones, /estado). 4. Ejecución: en mi PC con Windows, con un acceso directo y una tarea programada diaria. 5. Calidad: 25 pruebas automáticas fijan los comportamientos clave.

Retos técnicos

No vender buenos jugadores por un problema temporal

No vender buenos jugadores por un problema temporal

Al principio el bot me mandó vender a Pathé Ciss porque lo habían expulsado. Una sanción de un partido no dice nada de su nivel. Solución: Protección por nivel de toda la temporada. Un campo de duración de la baja: puntual, corta o larga. Revisión de cada venta con Gemini

Un modelo que no se deje engañar por rachas

El modelo recomendaba a Iker Luque, barato y con cuatro buenos partidos, por delante de Antony. Solución: Corregir la media hacia una referencia: precio, temporada pasada y media de su posición. Validarlo con un backtest sobre jornadas reales. El error medio bajó de 2,28 a 1,94 puntos por jugador.

Pepe Mel no es Pépé

Una noticia del entrenador Pepe Mel en la UCI se atribuyó a Pépé, el extremo del Villarreal: quitando tildes y mayúsculas, "pepe" coincidía. Solución: Si un nombre va pegado a otra palabra en mayúscula que no es suya ni de su equipo, se trata como otra persona. Gemini comprueba además el rol y el equipo del jugador.

Decisiones que se pisaban entre sí

Con reglas sueltas, el bot podía vender a un titular para financiar una puja que luego se perdía. Solución: un planificador con una sola función objetivo. Las pujas se valoran como apuestas, con su probabilidad de ganarlas. Las ventas que solo sirven para financiar una puja se condicionan a ganarla.

Respetar las reglas reales de la liga

Recomendar un fichaje imposible no sirve de nada. Hubo varios fallos: Proponía cláusulas cuando ya había gastado la de la jornada. Proponía vender más jugadores de los que caben en el mercado. Ponía el reinicio de las cláusulas en el momento equivocado. Solución: dejar de suponer y leer el tablón real de la liga, donde Biwenger publica cláusulas, inicio y fin de jornada y los puntos de cada participante. Con eso el bot aplica las reglas exactas: periodo de inicio a inicio, cláusula extra para los 3 últimos y 5 plazas en el mercado.

Fichar lesionados solo cuando es una ganga

El plan llegó a proponer fichar a un jugador lesionado. Ahora nunca ficha a quien no vaya a jugar, salvo que se cumplan tres condiciones a la vez: vuelve en 2 semanas o menos; es del top 30 % de su posición; mejora claramente el equipo, contando la jornada que se pierde.

Capitán y ariete con cabeza

El capitán dobla los puntos, así que manda la media esperada. Pero para ganar una jornada ayuda el jugador capaz de un partidazo. Biwenger no da goles en los datos que uso, así que estimo las opciones de gol con los partidazos de 10 o más puntos, corregidos hacia la media de su posición. Capitán: si dos jugadores están casi igualados, gana el que más opciones tiene de un partidazo. Ariete (+3 si marca): se elige directamente por opciones de gol.

Lo que he aprendido

Explicar siempre el porqué

Un sistema que da consejos tiene que justificar cada decisión. Cada recomendación del bot lleva sus motivos, y gracias a eso he podido detectar y corregir sus errores. Sin motivos, un fallo es invisible.

Los datos reales mandan sobre las suposiciones

Las reglas de las cláusulas fallaron dos veces mientras las supuse. Solo salieron bien al leer el tablón real de la liga. Antes de modelar una regla, hay que mirar los datos.

La IA como segunda opinión, no como jefa

Gemini funciona mejor revisando decisiones con datos concretos que tomándolas. El modelo y el planificador deciden con números, y la IA aporta el contexto de la prensa y frena los errores de sentido común.

Cada fallo, una prueba automática

Cada error real se convirtió en un test, por ejemplo vender por una sanción o confundir a Pepe Mel con Pépé. Hoy hay 25 pruebas que garantizan que esos fallos no vuelven.

Próximos pasos

Goles reales para capitán y ariete

Leer la ficha de cada jugador por jornada para estimar sus opciones de gol con datos reales, en vez de con los partidazos de 10 o más puntos.

Despliegue en la nube

Llevar el bot a un servidor gratuito, como Oracle Cloud Free Tier, para que el informe y los comandos de Telegram funcionen sin tener el PC encendido.

Noticias de última hora desde X

Añadir cuentas de periodistas de X como fuente de alineaciones y bajas de última hora, cuando compense el coste de la API.