Proyecto FIFA, cómo quedó

Rehicimos las etapas 1 y 2 con los comentarios del profesor, para que la etapa 3 arranque de datos que se puedan reproducir. Arriba está la versión corta, y cada sección de abajo se abre para ver el detalle.

● El notebook corre completo sin errores ● Son los mismos datos crudos de la primera entrega ● Listo para la etapa 3

En un minuto

Antes. El notebook arrancaba de un Players.csv armado afuera, así que casi toda la etapa 1 solo se podía describir y no volver a correr. La etapa 2 tenía 5 tablas de hechos y reconstruía los clubes por nombre.

Ahora. El notebook baja los archivos originales de Kaggle y hace todo en código. Reproduce fila por fila el dataset que entregamos y después aplica cada comentario del profesor. La etapa 2 mantiene sus 5 tablas de hechos, una por proceso de negocio, ahora armadas con los ids reales de club y de liga, y la de márgenes cambia al grano que pidió el profesor.

Archivo. En Proceso/Proyecto/Etapa3/ProyectoProgramado_Aaron_David_Paula.ipynb

178 545
filas, las mismas del Players.csv entregado
51 749
jugadores de FIFA 15 a FIFA 24
5
tablas de hechos, una por proceso, y solo cambió la de márgenes
12.9 % → 4.3 %
filas de FIFA 24 con el club sin identificar

Lo que falta hacer

  1. Abrir el notebook en Colab y correr todo. La primera vez baja unos 1.6 GB de Kaggle y tarda unos minutos. Drive solo se monta para guardar los CSV.
  2. Descargarlo después de correrlo. Lo dejamos sin salidas a propósito, porque la corrida de prueba en la computadora imprimía rutas locales.
  3. En la etapa 3, tomar en cuenta que el valor, el salario y el potencial de FIFA 24 están imputados. Hay que filtrarlos con las banderas _imputado o analizar el valor con FIFA 23.

Comentarios del profesor, uno por uno

Etapa 1 · 75/1004 comentarios, todos resueltos
ComentarioQué cambió
La unión de las 10 temporadas, la división de players_23, la extracción de IDs y la imputación de FIFA 24 solo estaban descritas en markdown. Todo corre en código desde los archivos crudos de Kaggle, y el resultado coincide exacto con el archivo entregado.
La celda final de exportación fallaba con un KeyError. Ya no falla, y Players_calidad.csv se guarda con 74 columnas.
Los features de evolución de FIFA 24 se fijaban en valores neutros, así que career_stage y decline_gap no significaban nada en 2024. En FIFA 24 quedan nulos. career_stage además ya no usa el corte de un punto y sale del signo del cambio.
Dos de las tres features de seguridad marcaban 0 registros. Hay tres nuevas y las tres marcan filas, 4, 8 674 y 1 920.
Etapa 2 · 91/1001 comentario, resuelto, y el modelo quedó más simple
ComentarioQué cambió
Fact_MargenJugador estaba a grano jugador × temporada, cuando la pregunta es por club y por liga, así que tocaba un hecho club × liga × temporada con sumas y conteos, y el umbral de 200 era arbitrario. El hecho de márgenes quedó club × liga × temporada con sumas y conteos, y el filtro de 200 ya no está. El club más chico de FIFA 23 tiene 20 jugadores, así que el ruido que queríamos evitar con ese filtro no aparece.

Los otros cuatro hechos quedan como en la entrega, uno por cada proceso de negocio. El de márgenes queda con el mismo grano que el de la jerarquía club, liga y región, pero siguen siendo dos procesos distintos, como ya pasaba en la entrega con el de valor por club y el de la jerarquía. El detalle está más abajo, en "La etapa 2 por dentro".

La etapa 1 por dentro

comentarioTodo sale de los datos crudoscon kagglehub, sin archivos en Drive

El notebook baja el dataset joebeachcapital/fifa-players de Kaggle con kagglehub, que no pide cuenta para un dataset público. Cada temporada se arma igual que la primera vez.

TemporadasArchivoCómo se usa
FIFA 15 a 22fifa_2022_datasets/players_XX.csvUn archivo por edición, una fila por jugador.
FIFA 23male_players_23.csv (5.6 GB)Trae todas las actualizaciones de plantilla de la 15 a la 23, 10 003 590 filas. Se lee por bloques y de la 23 se toma la primera vez que aparece cada jugador.
FIFA 242024/male_players.csvTiene otros nombres de columna y no trae player_id, que se saca del número al final de la URL de EA.

Cada temporada da la misma cantidad de filas que la entrega (16 155, 15 623 … 15 845), y así confirmamos que son los mismos datos.

hallazgoLos porteros de FIFA 24 traían atributos de campo falsos1 787 filas corregidas

De la 15 a la 23 los porteros traen vacíos pace, shooting y los otros atributos compuestos. En FIFA 24 los 1 787 porteros los traían llenos, y al mirarlos eran sus atributos de arquero en esas mismas columnas, por ejemplo Courtois con 85 de pace y 89 de shooting, que en realidad son su estirada y su manejo. En la primera entrega se nos pasó. Ahora quedan vacíos, igual que en las otras nueve ediciones.

hallazgoDe dónde salían las 10 163 inconsistenciasy por qué ya no pueden pasar

En la primera entrega encontramos 10 163 filas donde overall_cambio_temporada no cuadraba con el final menos el inicio, y las corregimos después. La causa era que de la 15 a la 22 el archivo de cada edición no siempre es la primera actualización de plantilla (coincide en 131 910 de 142 073 filas), y el cambio se había medido contra esa primera actualización. Ahora el cambio se calcula contra el overall de la propia fila, así que esa inconsistencia ya no puede pasar.

nuevoClubes y ligas con ids realesse habían perdido al armar el CSV anterior

El crudo trae club_team_id, y el archivo de equipos da la liga, el nivel y el país de cada club en cada edición. El Players.csv anterior había perdido esas columnas, y por eso en la etapa 2 tuvimos que reconstruir los clubes por nombre y por jugadores en común.

FIFA 24 no trae id de club, así que sus clubes se identifican en dos pasos.

MétodoClubesFilas
Nombre exacto44410 861
Voto de la plantilla, aceptado solo si va en los dos sentidos1764 297
Sin identificar (clubes nuevos o recién ascendidos)34687 (4.3 %)

El voto de la plantilla encontró los renombres de licencia que antes buscamos a mano, como Paris SG que viene de Paris Saint Germain y Spurs que viene de Tottenham Hotspur. La regla de los dos sentidos evita errores como asignarle el Borussia Dortmund al St. Louis CITY SC, que es un club nuevo. Osmanlıspor, 83 filas, no está en el archivo de equipos y toma la liga que tiene el mismo texto de liga en su edición.

comentarioLa imputación se eligió midiendo el errorel método de tendencia de antes salió como el peor

Para decidir cómo llenar FIFA 24 escondimos FIFA 23 y la predijimos solo con los datos hasta FIFA 22, que es exactamente la situación de FIFA 24. Este es el error absoluto medio de cada método.

VariableÚltimo valor conocidoTendencia (el de antes)Mediana del grupo en la edición anterior
potential2.102.861.88
value_eur1.17 M€1.55 M€1.02 M€
wage_eur3 591 €4 870 €5 177 €

En composure, que falta en FIFA 15 y 16, el valor del mismo jugador en la edición siguiente se equivoca por 3.68 puntos contra 6.54 de la mediana del grupo.

QuéMétodoFilas
potential y value (2024)mediana del grupo en 202315 845
wage (2024)último valor conocido, y si no hay, mediana del grupo14 258 + 1 587
composure (15 y 16)primer valor desde la 17, y si no hay, mediana del grupo24 349 + 7 429
value con club (15 a 23)mediana del grupo en su edición286
agentes libres"Sin club" y "Sin liga", sin inventarles valor1 738

Cada celda imputada queda con su bandera. Después de imputar, 2 273 filas de FIFA 24 quedaron con potential por debajo del overall y se subieron hasta el overall. Las 8 filas donde el salario pasa el valor tienen todas el valor en el piso de 1 000 €, así que se marcan y no se tocan.

comentarioFeatures de seguridad que sí marcan filas4 · 8 674 · 1 920
FeatureReglaFilas marcadas
flag_edad_revisionEdad fuera de 16 a 45, el rango que sugiere el enunciado.4
flag_salario_valor_atipicoSalario entre valor por encima de Q3 + 1.5·IQR dentro de su banda de overall.8 674
flag_cambio_overall_atipicoCambio contra la edición anterior con un z-score mayor que 3, el umbral de la clase 2.1 920

Esperábamos que la última marcara sobre todo a veteranos que caen, pero salió al revés. 1 843 de las 1 920 son subidas de jugadores jóvenes, con una mediana de 21 años, como M. Taşkıran, que subió 29 puntos en una temporada, y solo 77 son bajadas.

comentarioLos features derivados y FIFA 24los mismos seis, con nulos donde no hay dato

Son los mismos seis, AgeGroup, decline_gap, growth_ceiling, value_efficiency, strength_agility_ratio y career_stage. decline_gap y career_stage dependen de las actualizaciones de la temporada, que FIFA 24 no trae, así que ahí quedan nulos, 15 851 filas contando 6 de la 20 y la 21. career_stage ahora es Ascendente si el overall subió, En declive si bajó, En pico si no cambió y terminó en su mejor nivel, y Estable si no cambió pero tuvo un bajón en el medio.

más limpioEl data dictionary se calculano se puede desincronizar del archivo

El tipo, la unidad, el rango razonable y la descripción los escribimos nosotros. El rango observado y el porcentaje de nulos se calculan sobre el dataset final, así que el diccionario siempre coincide con el archivo.

La etapa 2 por dentro

comentarioLos 5 hechos, uno por proceso de negociosolo cambió el de márgenes
ConsultaHechoGranoMedidasFilas
1Fact_ValorMercadoClubclub × temporadavalor promedio y total, overall promedio, n jugadores6 477
2Fact_ValorMercadoLigaliga × temporadavalor y salario total, valor promedio, n jugadores, n clubes446
3Fact_RendimientoEdadPosiciongrupo de edad × posición × temporadapromedios de overall, potential, growth_ceiling y decline_gap, n jugadores450
4Fact_MargenClubLiga cambióclub × liga × temporadasumas de valor, salario y margen, n jugadores6 477
5Fact_JerarquiaValorSalarioclub × liga × temporadavalor y salario promedio y total, n jugadores6 477

El de márgenes antes era Fact_MargenJugador, a grano jugador × temporada y con el filtro de 200. Ahora guarda sumas y conteos, así que el margen por liga sale sumando los clubes sin reponderar nada. Los hechos que guardan promedios llevan n_jugadores para reponderar al juntar grupos, igual que en la entrega. Cada club juega en una sola liga por temporada (lo revisamos y no hay ninguna excepción), así que agregar la liga al grano del club no parte ninguna fila. El único nulo es decline_gap_promedio en las 45 filas de 2024 del hecho de rendimiento, porque ese dato no existe en 2024.

Las dimensiones son Temporada (10), Jugador (51 749), Club (1 090), Liga (59), Posición (15) y GrupoEdad (3). La región es la confederación de la liga, y sale del archivo de equipos.

más limpioEl pipeline de carga y sus pruebaspasan la recarga y la corrección

Cada temporada se carga por aparte y reemplaza su parte de los cinco hechos. Como la temporada está en el grano de los cinco, volver a cargar no puede duplicar filas.

  • Recargar FIFA 20 sin cambios. Ninguna fila insertada ni actualizada en los cinco hechos.
  • Cambiar el valor de Iniesta en FIFA 20. Se actualiza exactamente una fila en cada uno de los cuatro hechos con valor y ninguna en el de rendimiento.
  • Cargar temporada por temporada da exactamente las mismas tablas que armar todo de una vez.
hallazgoLas consultas de valor usan FIFA 23y las ligas se agrupan por id, no por nombre

El valor de FIFA 24 está todo imputado, así que un ranking de clubes por valor en FIFA 24 mediría nuestra imputación y no a los clubes. Las consultas de valor usan FIFA 23, que es la última edición con valores reales, y la de rendimiento usa las diez ediciones.

Agrupar por el nombre de la liga juntaba ligas distintas, porque hay una Serie A de Italia y otra de Brasil, y una Premier League de Inglaterra y otra de Ucrania. Ahora las consultas agrupan por el id de la liga y muestran el país.

resultadoLo que dicen las consultas (FIFA 23)las 5 del enunciado
  1. Top de clubes por valor promedio. Manchester City (38.6 M€ por jugador), Bayern, Liverpool, Paris SG y Real Madrid. Cinco clubes están en el top 10 en las nueve ediciones con valores reales.
  2. Valor total por región. La UEFA suma 46 374 M€, muy por encima de la CONMEBOL con 4 551 M€, y las cinco grandes ligas europeas van primero.
  3. Overall por grupo de edad y posición. Young < Prime < Veteran en todas las posiciones, y el salto de Young a Prime, unos 7 puntos, es bastante mayor que el de Prime a Veteran.
  4. Márgenes. Casi repiten el ranking de valor, porque el salario semanal es muy chico al lado del valor total, y ningún club tiene margen negativo.
  5. Drill-down. UEFA (3.2 M€) → Premier League (12.85 M€) → Manchester City. El salario casi siempre sube con el valor, pero no siempre, porque la liga checa sale sexta en la UEFA con solo tres de sus clubes en el juego y aun así paga 760 € por semana.
resultadoTiempo de ejecución (Punto 6)leer el hecho es unas 27 veces más rápido
EscenariomsVelocidad
A, desde el detalle con el cruce en cada llamada38.01.0×
B, igual que A con columnas category66.40.6×
C, leer Fact_ValorMercadoLiga1.426.8×

B salió más lento. category ayudó en la primera entrega porque ahí agrupábamos por texto, pero acá las llaves ya son enteros, y el notebook lo dice tal cual. C recorre 446 filas en vez de 176 807. Los milisegundos exactos cambian de una corrida a otra.

La redacción

Todo el texto está en la voz del grupo, en primera persona plural, con los números dentro de las oraciones, y ninguna celda pasa de 190 palabras. Sacamos términos que no vimos en clase, como idempotencia, staging, UPSERT, llave subrogada, matriz de bus y skew, y en vez de la asimetría usamos media contra mediana, como en la clase 1.

Límites que pasan a la etapa 3