4.3 Indexado
Para enlazar dos bases de datos tendríamos que comparar, en principio, cada registro de una de ellas con cada registro de la otra. Comparar dos bases de datos de seiscientos mil registros cada una son trescientas sesenta mil millones de comparaciones.
Para reducir drásticamente el número de comparaciones podemos aplicar técnicas de indexado (‘indexing’ o también ‘clustering’) para hacer conjuntos disjuntos de registros con mayor probabilidad de enlazado. Se eligen claves formadas por los campos de las bases de datos de mejor calidad (completos y correctos) y que estén distribuidos de forma que los grupos tengan tamaños similares.
Por ejemplo, si sabemos que la fecha de nacimiento está presente en la mayor parte de los registros de las dos bases de datos, y la calidad de estos datos es razonablemente buena, podemos usar el mes y el día del mes para dividir cada base de datos en 372 grupos de unos 1613 registros. Las comparaciones necesarias son entonces de aproximadamente mil millones (trescientas sesenta veces menos).
Como es raro tener campos perfectamente informados, lo que se hace es repetir el proceso con varias claves. Por ejemplo si repetimos el proceso eligiendo como clave el nombre propio (o una función del nombre propio), sólo aquellos registros que tengan mal informada la fecha y el nombre propio se quedarían fuera. Por supuesto, repetir el proceso multiplica otra vez el número de comparaciones. Si el coste de repetir el clustering es similar al primero, el ahorro de comparaciones se reduciría a ciento ochenta veces menos comparaciones.
En esta prueba de concepto haremos el ‘clustering’ por la variable nombre, porque todos los registros de las dos bases de datos tienen nombre. Para no dejarnos fuera las comparaciones entre observaciones en los que el nombre sea incorrecto, fuera de la POC tendríamos que repetir todo el proceso de enlazado agrupando por otras variables.
num_grupos <- 100
cl_out <- clusterMatch(
vecA = nastat_personas$bdc_nombre,
vecB = registra_personas$bdc_nombre,
nclusters = num_grupos
)
nastat_personas$cluster <- cl_out$clusterA
registra_personas$cluster <- cl_out$clusterB
El número de grupos condiciona el tamaño de cada grupo.
## [1] 2488
## [1] 2613
Como hemos agrupado por nombre, los nombres de las observaciones de cada grupo tienen nombres con cierta similitud:
bdc_nombre |
---|
MELCHOR |
MERCY ZULEICA |
MERCEDES PALOMA |
MERCEDES SABINA |
MELVI MARITZA |
MENGXI OSCAR |
MEIRE |
MEIMA |
MERIDY ESTHEFANY |
MELISSA SHIRLEY |
bdc_nombre |
---|
MERCEDES PAULA |
MERCY JOCELYN JULIANA |
MESSAOUD |
MERY ROSA |
MEIRELY |
MEHMOOD |
METTE |
MERYL VILMA |
MELBA ELCIRA |
MBONGO |