6.5 Comparación

Existen varios métodos para la comparación de cadenas y otros tipos de variables en procesos de emparejamiento de registros. A continuación se describen algunas de las métricas que son más utilizadas, sus fundamentos matemáticos, ventajas, limitaciones y posibles aplicaciones en contextos como nombres de personas, direcciones, fechas, ubicaciones geográficas y otros campos relevantes en bases de datos administrativas.

6.5.1 Distancia de Levenshtein

La distancia de Levenshtein es una métrica que calcula el número mínimo de operaciones de edición (inserciones, eliminaciones y sustituciones) necesarias para transformar una cadena de texto en otra. Sea \(s_1\) y \(s_2\) dos cadenas de texto. Se construye una matriz \(d[i,j]\) tal que:

\[d[i, j] = \begin{cases} d[i - 1, j - 1] & \text{si } s_1[i] = s_2[j] \\ \min \begin{cases} d[i - 1, j] + 1 \\ d[i, j - 1] + 1 \\ d[i - 1, j - 1] + 1 \end{cases} & \text{si } s_1[i] \ne s_2[j] \end{cases} \]

La distancia de Levenshtein entre \(s_1\) y \(s_2\) es el valor \(d[|s_1|, |s_2|]\). Puede transformarse en una medida de similitud, así:

\[\text{sim}_{\text{levenshtein}}(s_1, s_2) = 1 - \frac{\text{dist}_{\text{levenshtein}}(s_1, s_2)}{\max(|s_1|, |s_2|)}\]

Esta métrica es simétrica con respecto a \(s_1\) y \(s_2\), y satisface la propiedad \(|\ |s_1| - |s_2|\ | \le \text{dist}_{\text{levenshtein}}(s_1, s_2)\) (P. Christen 2012).

Ejemplo: Suponga que se tienen las cadenas \(s_1 = \texttt{Laura}\) y \(s_2=\texttt{Lara}\). Transformar “Laura” en “Lara” se debe eliminar la “u”, es decir que solo se requiere una operación, así que la distancia de Levenshtein es 1. Si tenemos en cuenta que las longitudes de las palabras son \(|s_1|=5\) y \(|s_2|=4\), entonces

\[\text{sim}_{\text{levenshtein}}(s_1, s_2) = 1 - \frac{1}{\max(5, 4)}=1-\frac{1}{5}=0.8\]

6.5.2 Comparación de Jaro y Winkler

La similitud de Jaro está especialmente diseñada para nombres y toma en cuenta caracteres comunes y transposiciones (P. Christen 2012):

\[\text{sim}_{\text{jaro}}(s_1, s_2) = \frac{1}{3} \left( \frac{c}{|s_1|} + \frac{c}{|s_2|} + \frac{c - t}{c} \right)\]

donde \(c\) es el número de caracteres coincidentes y \(t\) el número de transposiciones. La similitud de Jaro-Winkler ajusta la de Jaro con base en un prefijo común:

\[\text{sim}_{\text{winkler}}(s_1, s_2) = \text{sim}_{\text{jaro}}(s_1, s_2) + p \cdot (1 - \text{sim}_{\text{jaro}}(s_1, s_2)) \cdot 0.1\]

donde \(p\) es el número de caracteres idénticos al inicio (\(0\leq p \leq 4\)).

Ejemplo: Para las cadenas \(s_1 = \texttt{Laura}\) y \(s_2=\texttt{Lara}\) se tienen 3 caracteres coincidentes (L, a, a), \(c=3\). Además, la segunda “a” de “Laura” está en posición 5, mientras que en “Lara” está en posición 4, esto indica que al menos una letra está fuera de lugar con respecto a su par coincidente y esto se cuenta como una transposición, por lo tanto habrá 1 transposición. Jaro considera las transposiciones como el número de caracteres coincidentes que están en diferente orden entre las dos cadenas, dividido por 2, esto es:

\[t = \frac{\text{Número de caracteres fuera de lugar}}{2} = \frac{1}{2}\]

\[\text{sim}_{\text{jaro}}(\text{Laura}, \text{Lara}) = \frac{1}{3}\left( \frac{3}{5} + \frac{3}{4} + \frac{3 - 1/2}{3}\right) \approx 0.728\]

6.5.3 Comparación de fechas y edades

Las fechas y edades se comparan de forma directa, considerando:

  • Diferencia de días, meses o años.
  • Rangos aceptables para considerar coincidencias (por ejemplo, diferencias de 1 año en edad).
  • En caso de comparar edad y fecha de nacimiento, se puede validar la coherencia temporal.

Una forma alternativa de comparar fechas es convertirlas en edades y luego calcular la diferencia en términos porcentuales, lo cual permite cierto grado de tolerancia. Para ello, las edades se deben calcular respecto a una fecha fija, que puede ser la fecha del cierre de la encuesta de cobertura o la fecha del emparejamiento entre bases de datos o cualquier fecha relevante al contexto.

Supongamos que \(d_1\) y \(d_2\) representan la edad (en días o años) calculada desde la fecha fija. Entonces, la diferencia porcentual de edad (DPE) se calcula como:

\[\text{dpe} = \frac{|d_1 - d_2|}{\max(d_1, d_2)} \cdot 100.\]

Con base en este valor, se puede calcular la similitud porcentual de edad como:

\[ \text{sim}_{\text{edad_porc}} = \begin{cases} 1.0 - \frac{\text{dpe}}{\text{dpe}_{\max}}, & \text{si } \text{dpe} < \text{dpe}_{\max} \\ 0.0, & \text{en otro caso} \end{cases} \]

donde \(\text{dpe}_{\max} \in (0, 100)\) representa la diferencia porcentual máxima tolerada (P. Christen 2012).

6.5.4 Comparación geográfica

Para campos geográficos como coordenadas o nombres de lugares se puede usar una distancia euclidiana o geodésica. Por ejemplo, la fórmula de Haversine que es utilizada para calcular la distancia entre dos puntos de una esfera dadas sus coordenadas de longitud y latitud. En caso de tener las coordenadas, se define:

\[d = 2r \cdot \arcsin\left( \sqrt{\sin^2\left(\frac{\phi_2 - \phi_1}{2}\right) + \cos(\phi_1) \cos(\phi_2) \sin^2\left(\frac{\lambda_2 - \lambda_1}{2}\right)} \right)\]

donde \(\phi\) es la latitud, \(\lambda\) la longitud y \(r\) el radio de la Tierra. De igual forma, se puede hacer una comparación desde nivel país hasta nivel barrio (matching jerárquico) o usando la codificación administrativa normalizada (DANE, INEGI, etc.).

References

Christen, Peter. 2012. Data Matching Concepts and Techniques for Record Linkage, Entity Resolution, and Duplicate Detection. Springer.