Fuzzy Matching en direcciones: cómo detectar duplicados pese a errores

Dos registros, la misma persona, pero el ordenador no lo reconoce. «Juan García, C/ Principal 12» y «J. García, Calle Principal 12» son obviamente idénticos para cualquier persona. Para una comparación carácter a carácter, son dos entradas completamente distintas.
Aquí es exactamente donde entra en juego el fuzzy matching. En lugar de exigir una coincidencia exacta, calcula el grado de similitud entre dos cadenas de caracteres. El resultado no es un simple sí o no, sino un porcentaje: 95 % de similitud, 72 %, 41 %. Por encima de un umbral definido, un par se clasifica como duplicado.
Para las empresas que procesan datos de direcciones regularmente, el fuzzy matching no es un lujo. Es la diferencia entre una tasa de detección de duplicados del 20 % (comparación exacta) y del 85 % o más.
Qué diferencia al fuzzy matching de la comparación exacta
Una comparación exacta funciona de forma binaria: dos cadenas son idénticas o no lo son. Esto funciona mientras los datos estén perfectamente mantenidos, algo que en la práctica nunca ocurre.
Comparación exacta:
"Juan García" vs. "Juan García" → Coincidencia ✓
"Juan García" vs. "Juan Garcia" → Sin coincidencia ✗
"Juan García" vs. "juan garcía" → Sin coincidencia ✗
"Juan García" vs. "Juan García" → Sin coincidencia ✗ (doble espacio)
El fuzzy matching calcula una puntuación de similitud:
Fuzzy matching:
"Juan García" vs. "Juan Garcia" → 93 % de similitud → Duplicado
"Juan García" vs. "juan garcía" → 100 % (tras normalización)
"Juan García" vs. "Juan García" → 95 % → Duplicado
"Juan García" vs. "María López" → 30 % → No es duplicado
La ventaja decisiva: el fuzzy matching detecta errores tipográficos, variantes ortográficas, abreviaturas y diferencias de formato – exactamente los errores que aparecen masivamente en las bases de datos de direcciones reales.
Los cinco algoritmos más importantes
Detrás del término fuzzy matching hay varios algoritmos que calculan la similitud de diferentes maneras.
Distancia de Levenshtein
El algoritmo más conocido cuenta el número mínimo de operaciones elementales (inserción, eliminación, sustitución) necesarias para transformar una cadena en otra.
"García" → "Garcia"
Paso 1: í → i (Sustitución)
Distancia: 1
"Calle Principal" → "C/ Principal"
Paso 1: a → / (Sustitución)
Paso 2: l → (Eliminación)
Paso 3: l → (Eliminación)
Paso 4: e → (Eliminación)
Paso 5: _ → (Eliminación del espacio)
Distancia: 5
La distancia se convierte en un valor de similitud: 1 - (distancia / longitud de la cadena más larga). Para «García» (6 caracteres) y «Garcia» (6 caracteres), el resultado es 1 - 1/6 = 83 %.
Fortaleza: Intuitivo, detecta errores tipográficos de forma fiable. Debilidad: Trata todas las posiciones de la cadena de igual manera.
Similitud de Jaro-Winkler
Este algoritmo fue diseñado específicamente para comparar nombres de personas. Tiene en cuenta el número de caracteres coincidentes y su orden. La extensión Winkler añade una bonificación cuando los primeros caracteres coinciden.
Ejemplos de Jaro-Winkler:
"González" vs. "Gonzalez" → 95 % de similitud
"Rodríguez" vs. "Rodriguez" → 94 % de similitud
"Stefan" vs. "Esteban" → 62 % de similitud
"Pedro" vs. "Pablo" → 53 % de similitud
Fortaleza: Especialmente preciso para cadenas cortas como nombres y apellidos. Debilidad: Menos adecuado que Levenshtein para cadenas largas como direcciones completas.
Comparación por N-Gramas
Este enfoque divide ambas cadenas en fragmentos de longitud fija (N-gramas) y compara la superposición.
Bi-gramas (N=2) de "García":
{Ga, ar, rc, cí, ía}
Bi-gramas de "Garcia":
{Ga, ar, rc, ci, ia}
Bi-gramas comunes: {Ga, ar, rc} = 3
Unión: {Ga, ar, rc, cí, ía, ci, ia} = 7
Similitud de Jaccard: 3/7 = 43 %
Fortaleza: Robusto frente a transposiciones y reordenamientos. Escala bien para grandes volúmenes de datos. Debilidad: Poco significativo para cadenas muy cortas.
Algoritmos fonéticos (Soundex y fonética de Colonia)
Los algoritmos fonéticos convierten las cadenas en códigos sonoros. Los nombres que suenan igual reciben el mismo código, independientemente de la ortografía.
Soundex:
"Smith" → S530
"Smyth" → S530
→ Mismo código pese a diferente ortografía
Fonética de Colonia (optimizada para el alemán):
"Mueller" → 657
"Müller" → 657
→ Tratados como idénticos
Fortaleza: Detecta variantes que los algoritmos basados en texto no captan. Debilidad: Solo proporciona un resultado sí/no, no una puntuación de similitud.
Comparación ponderada TF-IDF
Este enfoque otorga más peso a los componentes raros de una dirección. Una coincidencia en un apellido poco frecuente es una señal más fuerte que una coincidencia en «García» o «López».
| Componente | Frecuencia | Peso |
|---|---|---|
| «García» (apellido) | Muy frecuente | Bajo |
| «Zbigniew» (nombre) | Raro | Alto |
| «Calle de los Castaños» | Medio | Medio |
| «12a» (número) | – | Estándar |
Fortaleza: Reduce drásticamente los falsos positivos en apellidos frecuentes. Debilidad: Requiere una base de referencia para el cálculo de frecuencias.
Cómo funciona el fuzzy matching en direcciones en la práctica
En la práctica, el fuzzy matching no se aplica a la dirección completa como una sola cadena. Cada campo se compara por separado y los resultados individuales se combinan en una puntuación global.
Registro A: Juan García | C/ Principal 12 | 28001 Madrid
Registro B: J. Garcia | Calle Principal 12 | 28001 Madrid
Comparación por campos:
Nombre: "Juan" vs. "J." → Jaro-Winkler: 68 %
Apellido: "García" vs. "Garcia" → Levenshtein: 83 %
Calle: "C/ Principal" vs. "Calle Principal" → Normalizado: 100 %
Número: "12" vs. "12" → Exacto: 100 %
Código postal: "28001" vs. "28001" → Exacto: 100 %
Ciudad: "Madrid" vs. "Madrid" → Exacto: 100 %
Puntuación global ponderada:
(68 % × 0,15) + (83 % × 0,30) + (100 % × 0,20) + (100 % × 0,15) + (100 % × 0,15) + (100 % × 0,05)
= 10,20 + 24,90 + 20,00 + 15,00 + 15,00 + 5,00
= 90,10 % → Por encima del umbral (80 %) → Duplicado detectado
Tipos de errores frecuentes y cómo los gestiona el fuzzy matching
| Tipo de error | Ejemplo | Algoritmo adecuado |
|---|---|---|
| Abreviaturas | C/ vs. Calle, Av. vs. Avenida | Normalización (diccionario) |
| Errores tipográficos | «Schmdit» en lugar de «Schmidt» | Levenshtein |
| Variantes de nombres | «Juan» vs. «Juan Carlos» | Jaro-Winkler + lista de apodos |
| Orden de campos | «García, Juan» vs. «Juan García» | N-Grama + parsing |
| Campos faltantes | Código postal presente, ciudad ausente | Comparación ponderada |
| Variantes fonéticas | «Meyer» vs. «Meier» vs. «Maier» | Algoritmos fonéticos |
| Acentos | «García» vs. «Garcia» | Normalización |
Los sistemas profesionales combinan varios de estos algoritmos: primero normalizan los datos, luego aplican fuzzy matching campo a campo y calculan una puntuación global ponderada.
Elegir el umbral correcto
El umbral determina a partir de qué grado de similitud dos registros se consideran duplicados.
Demasiado bajo (ej. 60 %): Encuentra muchos duplicados, pero también muchos falsos positivos.
Demasiado alto (ej. 95 %): Solo detecta duplicados evidentes, las variantes sutiles se escapan.
Recomendación práctica: Comience con el 80 % y revise manualmente entre 50 y 100 resultados. Ajuste según la relación entre tasa de detección y falsos positivos.
Impacto del umbral en 10.000 registros:
Umbral | Duplicados encontrados | Falsos positivos | Duplicados no detectados
95 % | 120 | ~2 % | ~40 %
85 % | 280 | ~5 % | ~15 %
80 % | 350 | ~8 % | ~8 %
70 % | 520 | ~20 % | ~3 %
Un umbral cercano al 80 % ofrece el mejor equilibrio para la mayoría de los casos de uso.
Por qué las hojas de cálculo no son suficientes para el fuzzy matching
Excel ofrece funciones como COINCIDIR y CONTAR.SI para búsquedas exactas de duplicados. El fuzzy matching solo es posible a través de soluciones indirectas como macros VBA.
Las limitaciones de las hojas de cálculo:
- Sin funciones fuzzy integradas: Levenshtein, Jaro-Winkler o N-gramas deben implementarse como código VBA
- Rendimiento: Con 10.000 registros, son casi 50 millones de comparaciones. Excel se vuelve extremadamente lento o se bloquea
- Sin normalización: Abreviaturas y formatos deben limpiarse manualmente
- Sin ponderación de campos: Excel no puede ponderar campos individuales de forma diferente
- Sin comparación fonética
Para listas de menos de 500 entradas, un enfoque manual en Excel puede funcionar. A partir de 1.000 registros se vuelve impracticable. Para más información, consulte nuestro artículo Eliminar direcciones duplicadas en Excel.
Herramientas especializadas como ListenFix implementan todos los algoritmos de fuzzy matching habituales y los combinan automáticamente. El procesamiento se ejecuta localmente en su ordenador, sin transmitir datos de direcciones a servidores externos. Conforme con el RGPD, con validación de códigos postales para 29 países y detección de hogares que va más allá de la simple deduplicación.
El fuzzy matching en la práctica: tres escenarios
Escenario 1: Limpieza anual del CRM
Una empresa mediana con 25.000 direcciones de clientes realiza una limpieza anual. Tasa típica de duplicados: 8 a 12 %.
Ejemplo de cálculo: Con un 10 % de duplicados y un correo postal directo a 0,28 EUR por envío, la deduplicación ahorra 2.500 × 0,28 EUR = 700 EUR por campaña. Con cuatro campañas al año, eso suma 2.800 EUR, sin contar las devoluciones y la irritación de los clientes.
Escenario 2: Fusión de dos bases de datos
Tras una fusión empresarial, dos sistemas CRM deben consolidarse. Sin fuzzy matching, surgen miles de duplicados fantasma que obstaculizan las ventas y el marketing durante años.
Escenario 3: Verificación en tiempo real durante la captura de datos
Cada nueva dirección se compara con la base existente en tiempo real. Esto evita que los duplicados se creen desde el principio – el enfoque más efectivo, aunque técnicamente el más exigente.
Para más información sobre qué métodos se adaptan a cada caso de uso, consulte nuestro resumen Detección de duplicados: 7 métodos para datos limpios.
Cómo empezar con el fuzzy matching
El fuzzy matching no requiere conocimientos especializados, pero sí las herramientas adecuadas. Los pasos clave para comenzar:
-
Normalice sus datos: Antes de aplicar fuzzy matching, unifique el formato de sus datos. Desarrolle abreviaturas, estandarice caracteres especiales, limpie espacios.
-
Elija el algoritmo adecuado: Para nombres de personas, Jaro-Winkler funciona mejor. Para nombres de calles y cadenas largas, Levenshtein es la mejor opción. Lo ideal es combinar varios algoritmos.
-
Calibre el umbral: Comience con el 80 % y revise manualmente entre 50 y 100 resultados. Ajuste hasta encontrar el equilibrio entre tasa de detección y falsos positivos.
-
Revise los resultados: Ningún algoritmo es perfecto. Planifique tiempo para un control por muestreo, especialmente en la primera ejecución.
-
Repita regularmente: La calidad de datos no es un proyecto puntual. Planifique al menos una limpieza anual, idealmente complementada con verificaciones en tiempo real durante la captura.
El esfuerzo merece la pena. Datos de direcciones limpios significan menos devoluciones, análisis más precisos y una comunicación con el cliente más profesional – en cada envío.
Limpia tus direcciones — pruébalo ahora
ListenFix detecta significativamente más duplicados que Excel gracias al fuzzy matching. 100% sin conexión, compatible con RGPD.
Probar gratis