Spaces:
Running
Running
Commit History
7 days ago
-
Zonas de centro: 'centro área' (banda, altura del área) y 'centro temprano' (banda, 3/4)
Nombres acordados con el cuerpo técnico. Las claves técnicas no cambian: Deep_Cross es la de 3/4 y Cross la del área. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>e157191
11 days ago
-
Pre-partido: 'qué cambia cuando ganan' con 1 partido de cada lado alcanza
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>8f4bc41 -
Pre-partido: 'qué cambia cuando ganan' con pocos partidos
Exigía 3 victorias y 3 derrotas en la temporada pedida; en el arranque de temporada o en una liga nueva casi ningún equipo llega y salía 'Sin suficientes datos W/L'. Ahora compara gana vs no gana / no pierde vs pierde si hace falta, y si ni así alcanza suma la temporada anterior real del equipo (solo para ese gráfico). Si no hay forma, muestra los partidos ganados/empatados/perdidos. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>c3663ca
25 days ago
-
Filtros de localía y marcador invertidos en la parte DEFENSIVA de los reportes
Los filtros miran al equipo que tiene la pelota; en defensa es el rival. El reporte de bloques mostraba en 'X de local, defensa' los goles recibidos de VISITANTE (Osasuna: 4 de 10 en vez de 3 de 3), y 'X ganando' en defensa eran los momentos en que X perdía. Bloques: la defensa recibe sus propios eventos (venue y estado opuestos). Multitag/centros y recuperaciones: el marcador se invierte en defensa (la localía ya estaba bien). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>1ddd05b -
Bloque: heredar solo si recupera en <=5 s (o <=10 s con la altura rival coincidente)
Reemplaza la herencia automática dentro de la posesión. La secuencia sin bloque (no ABP, contragolpe ni recuperación) toma el bloque de la última con bloque del mismo equipo, aunque sea otra posesión (segunda jugada), si empieza <=5 s después o <=10 s con la altura media de la última línea rival en la banda de ese bloque. La Liga 26-27: 106 goles contra bloque. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>f9af9df -
Bloque por secuencia: las secuencias cortas heredan el bloque de la anterior de su posesión
El modelo de bloques solo etiqueta secuencias de >=3 pases y el proveedor corta la secuencia con cualquier toque del rival: el gol tras un rebote quedaba sin bloque. racing_reports/bloques.py corrige phaseLabel al cargar (data_cache) para todos los reportes del Space (bloques, multitag, recuperaciones). La Liga 26-27: 76 -> 93 goles contra bloque. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>3efec69
-
Penalty en multitag: contar solo penales ejecutados (tiro) + nota de cobertura en bloques
Multitag (triple_multitag): - El tag Penalty contaba TODO evento con qualifier 'Penalty' (incluía faltas concedidas, penales recibidos y atajadas del arquero) → sobrecontaba (6 vs 4). Ahora cuenta solo el penal EJECUTADO por el equipo (tiro con qualifier Penalty). - Los tiros del penal daban 0 porque el shot_kind 'abp' cuenta tiros DESPUÉS del evento ABP, y el penal ES el tiro (mismo timestamp). Nuevo shot_kind 'pen' cuenta el propio tiro de penal. Getafe La Liga 25-26: acc 4, tiros 4, xG 3.06 (antes 6/0/0). Reporte de bloques (build_block_zscore_report): - Nota de cobertura: goles vs bloque que se ven vs goles totales del equipo (p.ej. 'Getafe: 7 de 33 goles'), aclarando que balón parado/penal/transición/ jugada directa no tienen etiqueta de bloque. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>3dc64f6
-
Pre-partido: local/visitante selecciona el fixture + análisis point-in-time + fecha
- El orden local/visitante ahora resuelve el partido puntual (quién recibe): Racing-local vs Castellón = ese leg; la vuelta es otro partido, otra fecha. Cada cruce es distinto. - Análisis point-in-time: filtra df_home/df_away/df_league a fecha < la del partido (solo datos previos). Se limpia la 'Z' de fecha (pd.to_datetime la dejaba en NaT). Fixtures sin historial previo (fecha 1) usan toda la muestra. - Header muestra "Local X vs Visitante Y · Jugado el DD/MM/YYYY · datos hasta esa fecha" (o "Partido a jugarse"). as_of_date se pasa también a la predicción del GNN. - Post-partido: fecha formateada "Jugado el DD/MM/YYYY". Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>945a29e
-
Mapa de zonas (previo): repesar la ventaja cruzada
Nuevos pesos: 40% peligro propio, 35% lo que concede el rival, 25% volumen propio (antes 45/20/35). Le da más peso a la debilidad del rival por zona. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>f89b48b
-
Zone rebuild tolerante a columnas faltantes en el preprocessed
Ligas sin enriquecer no traen home/away_team_id u otras columnas: se leen las disponibles y el resto queda NaN (el head-to-head cae al lookup legacy en vez de romper la reconstrucción de zones). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>f260be9 -
Head-to-head: roles local/visitante frescos desde el preprocessed
El preprocessed trae home_team_id/away_team_id: las zone-features reconstruidas ahora los emiten y el reporte los usa directo (cubre todas las jornadas, sin depender del bundle de match_features). El lookup viejo queda como fallback con degradación. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>1599a55 -
Head-to-head: degradar con warning cuando faltan roles de partidos nuevos
El preprocessed se baja fresco pero match_features.parquet va bundleado: los partidos de jornadas posteriores al bundle no tienen roles local/visitante y rompían todo el reporte. Ahora se excluyen solo de los desgloses por rol, con warning; error solo si NINGÚN partido tiene roles. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>290f378
-
Título legible en la sección de predicción (fondo oscuro) + liga dinámica en reporte de bloques
- matchup_render: títulos de las secciones (pre y post) en color claro para que se lean sobre el fondo oscuro del reporte. - build_block_zscore_report: la liga del título sale de la columna Competencia (antes hardcodeado 'Segunda División'); mapa de nombres lindos + env var override. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>592fb15
-
Multitag: profundidad = Throughball OR rompe última línea (lastLineBroken)
El qualifier Throughball es rarísimo en Opta (~0.2% de los pases). La columna nativa lastLineBroken=='last' captura los pases que rompen la última línea, que es la definición real de "pase a la profundidad". Ahora profundidad (larga/media/corta por x de origen) cuenta secuencias con un pase profundo = Throughball OR rompe la última línea (~5.6x más señal). Se agrega lastLineBroken a las columnas cargadas. Presión Alta (recuperación en campo rival, x>50, ≤12s) y Recuperación tras Pérdida quedan como estaban: ya coinciden con la definición pedida. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>4f1b1d5
-
Post-partido: predicción point-in-time + genérico para cualquier liga/temporada
- Predicción as-of: _future_history_features/_build_future_match_row/ _predict_single_team_future aceptan as_of_date y usan SOLO partidos previos a la fecha del partido (arregla el data leakage del post-partido). Verificado contra las predicciones de test guardadas (maxdiff <0.003) en 5 ligas. - build_post_match_report.build_match_section genérico: usa home/away reales y liga/temporada/fecha derivadas del dataset; sin hardcode Racing/Segunda/25-26. - runner + adapter pasan season al post-partido. - E2E validado: Deportivo 0-2 Granada (no-Racing), 7 figuras, sin mención a Racing. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>e54caf0 -
Deploy: modelo de ataque matchup GNN + artifacts bundleados (LFS)
Sobre la historia del Space (preserva login/proxy fixes). Agrega: - train_attack_matchup_gnn.py (modelo de producción nuevo) + integración en la app. - Artifacts bundleados en vendor/data/modeling vía git-LFS (subset 10MB + bundles), para servir sin Azure. - vendor_env apunta al bundle nuevo; .gitignore actualizado; tests del modelo. Activar en el Space con el secret RR_ENABLE_NN_PREDICTIONS=1. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>9da4e9c
-
Cachear preprocessed en RAM + cartel dinámico de cold/warm
5708b1b -
Deploy MVP: API JSON + SPA + bundle/cache de artifacts CORE
Sprint 1 + 2: - API JSON (/api/health, /api/leagues, /api/teams, /api/matches, /api/reports/{type}/{catalog,run}, /api/jobs/{id} + figure/table/html/zip). - ReportBundle: figuras como PNG+SVG y tablas como CSV, individuales. - SPA en / (Tailwind + Alpine, sin build) que consume /api/. - HTML legacy disponible en /legacy. - block_zscore con fallback a phaseLabel cuando no hay labeled CSV en Azure. - pre_match con predicciones NN deshabilitadas (placeholder) cuando los .pt no estan disponibles. Reactivable con RR_ENABLE_NN_PREDICTIONS=1. - post_match deshabilitado en MVP (depende del NN). Reactivable junto al flag. - Artifacts CORE (match_features + team_match_zone_features, ~4 MB) bundleados en vendor/data/ para no requerir upload manual a Azure.e58615a