¿Cómo comparar nombres de equipos de distintas fuentes?



El Problema

Cuando trabajamos con datos deportivos de múltiples fuentes, nos enfrentamos a un desafío común: el mismo equipo puede tener nombres ligeramente diferentes en cada base de datos.

Ejemplos reales:

  • "FC Barcelona" vs "Barcelona"
  • "Atlético Madrid" vs "Atletico de Madrid" vs "ATM"
  • "Real Madrid CF" vs "Real Madrid"

Si usamos comparación exacta de texto, estos equipos parecerían diferentes cuando en realidad son el mismo.

La Solución: Fuzzy String Matching

El fuzzy string matching (coincidencia difusa de cadenas) es una técnica que compara textos calculando qué tan similares son, en lugar de solo verificar si son idénticos.

¿Cómo funciona?

La técnica analiza varios aspectos de los nombres:

  1. Caracteres en común: Cuántas letras comparten ambos textos
  2. Orden de caracteres: Si las letras están en secuencias similares
  3. Longitud: Qué tan largos son los nombres
  4. Distancia de edición: Cuántos cambios (agregar, borrar, modificar) se necesitan para convertir un nombre en el otro

El Score de Similitud

El resultado es un puntaje de 0 a 100:

  • 100: Nombres idénticos → "Real Madrid" = "Real Madrid"
  • 80-99: Muy similares → "FC Barcelona" ≈ "Barcelona" (score: 90)
  • 60-79: Similares con diferencias → "Atlético Madrid" ≈ "Atletico de Madrid" (score: 85)
  • < 60: Probablemente diferentes → "Real Madrid" vs "Barcelona" (score: 40)

Implementación Práctica

Librerías Recomendadas

En Python, la librería más popular es thefuzz:

from thefuzz import process, fuzz

# Comparar dos nombres
score = fuzz.ratio("FC Barcelona", "Barcelona")
print(score)  # Output: 90

Flujo de Trabajo

  1. Extraer equipos de ambas fuentes de datos
  2. Para cada equipo de la Fuente A, compararlo con todos los equipos de la Fuente B
  3. Seleccionar la mejor coincidencia (mayor score)
  4. Aplicar un umbral (ej: score ≥ 80) para asegurar calidad
  5. Generar un archivo de mapeo con las correspondencias

Ejemplo de Resultado

id_A,name_A,id_B,name_B,score
101,FC Barcelona,2034,Barcelona,90
102,Real Madrid,2045,Real Madrid,100
103,Atlético Madrid,2056,Atletico de Madrid,85

Ventajas del Método

Automático: No requiere mapeo manual equipo por equipo
Tolerante: Maneja abreviaciones, acentos y variaciones menores
Escalable: Funciona con miles de equipos
Configurable: Puedes ajustar el umbral de confianza según tus necesidades

Consideraciones Importantes

⚠️ Revisar coincidencias bajas: Equipos con scores entre 70-80 pueden requerir verificación manual
⚠️ Nombres muy cortos: "ATM" vs "ACM" pueden dar falsos positivos
⚠️ Homónimos: Equipos con nombres idénticos de diferentes países requieren información adicional (ciudad, liga)

Conclusión

El fuzzy string matching es la herramienta ideal para reconciliar datos deportivos de múltiples fuentes, automatizando un proceso que de otra manera sería tedioso y propenso a errores. Con un umbral de similitud bien configurado (generalmente 80+), puedes obtener correspondencias precisas y confiables entre tus bases de datos.

Comentarios

Entradas más populares de este blog

¿Cómo hacemos filtrado y extracción de listas anidadas utilizando `purrr`?