Spaces:
Running
Running
Commit History
-
Top equipos: variables por lado, y "Defensa" se fusiona en "Defensiva"
El selector era una fila plana de 23 chips de grupo, con "Defensa" y "Defensiva" compitiendo por el mismo concepto. Ahora: - "Defensa" y "Defensa (rival)" se fusionan en "Defensiva" (21 grupos, era 23). scripts/style_clash/build_clusters.py pasa a usar el nombre nuevo. - var_dict expone `lado` (propia / rival). La regla es el sufijo `_rival` / `_against`, con cuatro excepciones revisadas: recuperaciones_campo_rival, altura_media_recuperacion_campo_rival, su desviación y faltas_a_favor_rival ("Faltas Cometidas"), donde "rival" nombra la mitad de cancha, no al que actúa. Quedan 164 propias y 98 del rival. - El picker son dos desplegables —propias y del rival— con los temas adentro. Los grupos "X (rival)" dejan de ser un grupo aparte: son la cara rival del mismo tema. Heatmap de Top equipos: hasta 50 equipos, scroll libre con encabezado y equipo fijos, y una columna # con la posición en el puntaje general que NO se mueve al ordenar por una variable. clasica.html no cambia: …307ee85
-
Integrar el diccionario de variables del club
El club manda su diccionario con cuatro columnas (Categoría, Categoria_2, Nombre, Nombre Columna). La versión de septiembre nombra las 262 variables de team_stats_agg; la que leíamos hasta ahora tenía 174, y por eso 95 nombres vivían a mano en var_labels_extra.json y 56 variables quedaban sin categoría. - scripts/sync_club_dictionary.py: integra el xlsx y es re-corrible. Agrega, nunca borra: suma las categorías del club a feature_groups.json sin tocar nuestros grupos propios (Centros, Presión, Verticalidad, Rotura de líneas), escribe feature_subgroups.json con el segundo nivel y poda var_labels_extra.json. - 0 variables sin grupo (eran 56) y grupo nuevo Disciplina / Control. Build-up 30→50, Defensiva 42→63, Defensiva–Presión 20→43, Ofensiva–Creación 45→67. - Subcategoría (Categoria_2, 19 valores) como segundo nivel: columna nueva en variables.csv, cuadro por subcategoría en los .md y fila en la ficha de la referencia. - build_var_dict.py lee el xlsx del repo y expone subgrup…31157f4
-
Las features de train, listadas de verdad en cada modelo
Los cuadros de "Features" decían solo "self_* (forma del equipo)". Ahora traen la lista completa, leída de los artefactos reales: - cruce: las 328 de matchup_feat_cols.json, separadas por prefijo — self_ (53), opp_ (157), selfH_ (52) y selfA_ (52) que son el split local/visitante, y 14 de contexto (elo, is_*, form*) - ptiro: las 72 de datasets_variables.json - los dos GNN: leídas del bundle .pt (global_bundle.global_feature_columns) De paso, los .pt traen el summary con los tamaños reales del split, que estaban sin documentar: ataque 8.506/962/1.108 (validación desde el 16-nov-2025, 5 semillas) y peligro 7.395/842/981 (desde el 17-nov-2025). CORRECCIÓN: pv_distribution_gnn NO poda features — usa las 1.069 globales, mientras que el de ataque se queda con 200. Estaba documentado como si compartieran el criterio. Con el mismo dataset (~10.900 filas) eso le deja una proporción features/filas mucho más exigente; queda anotado como candidato a aplicarle la misma poda y medir. Co-Auth…6a437ee
-
Variables negativas (menos=mejor): "mejor de la liga" = z más bajo + radar invertido
48 variables marcadas como negativas (rival/en contra/concedidas + errores/pérdidas/ tarjetas/ppda), revisadas una por una (excluye _rival neutrales de estilo y las buenas para nosotros como rojas del rival / faltas sufridas). En el diccionario se agrega el flag "negativa". - team_profile: para negativas, "mejor de la liga" = MÍNIMO (z más bajo). Item trae negativa. - radar: best=mín en negativas y usa lower_is_better de mplsoccer → "más afuera = mejor" en todos los ejes (los negativos se invierten). - Frontend: badge "↓" en las variables negativas del perfil. - variables_info expone negativa. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>cf1e649 -
Equipos y variables: nombres lindos del diccionario + selección por tipo
- Diccionario (diccionario_variables.xlsx → vendor/data/var_dict.json vía scripts/build_var_dict.py): mapea columna → nombre legible + tipo. Si una columna no está en el diccionario, se deja su nombre crudo (tipo "Otras"). - Las variables se muestran/buscan por su nombre lindo (datalist por label); el front mapea label→columna al enviar. Resultados de búsqueda/perfil y labels del radar usan el nombre lindo. - Selección rápida por TIPO: botones (Ofensiva, Defensiva, Build-up/Posesión, Balón Parado, Transiciones, Disciplina/Control, Estrategia) que agregan todas las variables de ese tipo, tanto en la búsqueda como en el perfil. - /options ahora devuelve variables [{name,label,tipo}] y types {tipo:[cols]}. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>e672925