LOL//COACH Entrar

Proyecto personal

Un entrenador de League of Legends que no se inventa nada

LoL Coach lee tus partidas clasificatorias directamente de la API de Riot, las guarda y las analiza con estadística de verdad. Te dice qué está fallando, con cuánta confianza lo dice, y qué hacer en la próxima partida. Cuando los números no dan para afirmar algo, lo dice en vez de rellenar el hueco.

633partidas analizadas
16herramientas de consulta
100 %autoalojado

El problema

Las páginas de estadísticas de League te enseñan qué pasó: tu winrate, tu KDA, tu CS por minuto. Ninguna te dice por qué ni qué hacer. Y las que lo intentan suelen apoyarse en muestras diminutas: tres partidas con un campeón y ya te lo recomiendan al 100 % de victorias.

Este proyecto nació de esa frustración. Si voy a cambiar cómo juego, quiero saber si la señal es real o es ruido — y quiero que quien me lo diga sepa distinguirlo.

Qué hace

Panel principal con rango, winrate, valor esperado por partida y el plan para la próxima partida
El panel. Rango, winrate con su intervalo de confianza, LP esperados por partida y el winrate mínimo para no perder terreno. Debajo, un plan ordenado por impacto, cada punto con su p-value y su nivel de evidencia.
Comparativa contra el oponente directo de línea, métrica a métrica
El duelo de línea. Cada métrica frente a tu oponente directo, separando lo que pasa cuando ganas de lo que pasa cuando pierdes. Fíjate en la etiqueta «no concluyente»: con p=0.094 el sistema se niega a presentarlo como un hallazgo.
Selección de campeones con el pool ordenado por rendimiento
La selección de campeones. Tu repertorio ordenado por el límite inferior del intervalo de Wilson, no por winrate bruto. Por eso un 100 % en tres partidas queda marcado como «muestra corta» y no se cuela al primer puesto.
Conversación de ejemplo con el Coach AI mostrando las consultas que hizo
El Coach AI. Un modelo de lenguaje que corre en la misma máquina. Antes de responder descompone la pregunta y consulta los datos que necesita — y enseña qué miró. La conversación de la captura es un ejemplo inventado.

Las tres reglas

Todo el diseño sale de tres invariantes que no se rompen en ninguna parte del código:

El modelo nunca calcula

Los números los produce una capa de métricas en el servidor. El modelo de lenguaje solo los narra. Si le pides un porcentaje que no le dieron, debe decir que no lo tiene — no estimarlo.

Nunca se inventan datos del jugador

Nada sobre tu rendimiento sale de la memoria del modelo. Todo viene de tus partidas guardadas. Cuando falta el dato, la respuesta es «no lo sé», no una aproximación plausible.

El servidor hace las peticiones

El navegador nunca habla con la API de Riot ni con el modelo. Pide a su propio servidor, que es quien tiene las credenciales y quien controla el ritmo de las llamadas.

Cómo está montado

Cinco piezas, cada una con una responsabilidad. Los datos van siempre en la misma dirección:

1

Ingesta

Descarga partidas y cronologías de la API de Riot en lotes, respetando los límites de peticiones.

2

Almacenamiento

PostgreSQL guarda cada partida como documento y, aparte, las proyecciones ya extraídas.

3

Métricas

Funciones puras que convierten partidas en hallazgos con su medida de confianza.

4

API y front

Una API JSON y una interfaz sin dependencias — sin framework, sin paso de compilación.

5

Modelo local

Un LLM que corre en la GPU de la misma máquina y consulta las métricas mediante herramientas.

Un proceso en segundo plano repite la ingesta periódicamente para cada cuenta registrada, así que los datos están al día sin que nadie pulse nada. Todo se ejecuta en contenedores compilados, detrás de un proxy inverso con TLS, sobre un servidor propio en casa. Ninguna partida sale de esa máquina: el modelo es local, así que las preguntas que le haces al coach no viajan a ningún servicio externo.

La parte estadística

Es donde está el trabajo de verdad, y lo que separa esto de un panel de gráficas bonito.

Intervalo de Wilson
Para ordenar campeones. Un 100 % en 3 partidas y un 63 % en 33 no son comparables, y la media simple los trata igual. El límite inferior del intervalo penaliza la muestra pequeña automáticamente.
Contraste de dos proporciones
Para decidir si una diferencia es real. «Ganas más los martes» necesita pasar una prueba antes de aparecer como hallazgo; si no la pasa, se muestra marcada como no concluyente.
Corrección de Benjamini–Hochberg
Para no pescar. Al cortar unos cientos de partidas por hora, día y posición en la sesión salen decenas de comparaciones, y a p<0.05 una de cada veinte parece significativa por puro azar. Sin esta corrección, un entrenador empieza a inventarse patrones.
Mediana, no media
Para el ritmo de LP. Una sola partida con LP duplicado desplaza la media y arruina todos los cálculos que dependen de ella.

De dónde salen los datos

Stack

Sin framework de front-end, sin librería de gráficas y sin paso de compilación en desarrollo. Las gráficas son SVG escrito a mano. La dependencia de producción es el cliente de PostgreSQL.