Ir al contenido

Una medición aislada describe una entrega. Varias corridas permiten saber si la calidad mejora y si cambió la estructura que el modelo esperaba.

Serie de evaluaciones

El identificador y la fecha se fijan al medir. Aquí se evalúa la completitud de la misma columna en dos meses.

nucleo <- metricas_nucleo()
instancia <- instanciar(
  especializar(nucleo$NoNulo, nombre_especifico = "NoNuloDato"),
  "entrega", "dato"
)
modelo_calidad <- modelo(instancia)

enero <- medir(
  modelo_calidad, data.frame(dato = c("A", NA, "C", NA)),
  id_medicion = "enero",
  fecha = as.POSIXct("2026-01-31", tz = "UTC")
)
febrero <- medir(
  modelo_calidad, data.frame(dato = c("A", "B", "C", NA)),
  id_medicion = "febrero",
  fecha = as.POSIXct("2026-02-28", tz = "UTC")
)

enero <- agregar(enero, "atributo", "ratio")
febrero <- agregar(febrero, "atributo", "ratio")
regla <- regla_evaluacion("Completitud mayor al 60 %", function(x) x > 0.6)
perfil <- perfil_evaluacion("Operativo", regla)
evaluacion_enero <- evaluar(enero, perfil)
evaluacion_febrero <- evaluar(febrero, perfil)
comparar_evaluaciones(evaluacion_enero, evaluacion_febrero)
#>      perfil id_medicion_anterior fecha_anterior resultado_anterior id_medicion_actual
#> 1 Operativo                enero     2026-01-31                  0            febrero
#>   fecha_actual resultado_actual delta
#> 1   2026-02-28                1     1

historico_calidad() normaliza las corridas en un data.frame plano y versionado. Puede escribirse como CSV o llevarse a una tabla institucional sin desarmar listas anidadas.

historico <- historico_calidad(evaluacion_enero, evaluacion_febrero)
historico[, c("id_medicion", "fecha", "nivel", "resultado")]
#>   id_medicion      fecha             nivel resultado
#> 1       enero 2026-01-31  evaluacion_regla         0
#> 2       enero 2026-01-31 evaluacion_perfil         0
#> 3     febrero 2026-02-28  evaluacion_regla         1
#> 4     febrero 2026-02-28 evaluacion_perfil         1
detectar_deriva_calidad(historico, umbral = 0.05)
#>    nivel    perfil regla id_medicion_anterior fecha_anterior resultado_anterior
#> 1 perfil Operativo  <NA>                enero     2026-01-31                  0
#>   id_medicion_actual fecha_actual resultado_actual delta cambio_absoluto significativo
#> 1            febrero   2026-02-28                1     1               1          TRUE
#>   direccion severidad
#> 1    mejora        ok

La persistencia usa RDS y no agrega dependencias. El archivo no se sobrescribe sin consentimiento.

archivo <- tempfile(fileext = ".rds")
guardar_historico(historico, archivo)
recuperado <- leer_historico(archivo)
identical(historico, recuperado)
#> [1] TRUE
unlink(archivo)

Deriva estructural entre entregas

comparar_perfiles() distingue cambios de esquema y cambios sobre columnas comparables. Informa columnas nuevas o retiradas, tipos, ausencias, cardinalidad, rangos, patrones y hallazgos.

data(datos_administrativos)
entrega_enero <- datos_administrativos
entrega_febrero <- datos_administrativos
entrega_febrero$cedula[1] <- "12345678"
entrega_febrero$nueva_columna <- "nuevo"

perfil_enero <- perfilar(
  entrega_enero,
  fecha = as.POSIXct("2026-01-31", tz = "UTC")
)
perfil_febrero <- perfilar(
  entrega_febrero,
  fecha = as.POSIXct("2026-02-28", tz = "UTC")
)
deriva <- comparar_perfiles(perfil_enero, perfil_febrero)
deriva[, c("columna", "aspecto", "cambio", "severidad")]
#>         columna      aspecto     cambio  severidad
#> 1 nueva_columna      columna  aparecida      error
#> 2        cedula cardinalidad modificado sospechoso
#> 3 nueva_columna     hallazgo  aparecido sospechoso
#> 4          <NA>     hallazgo   resuelto         ok

Una comparación contra el mismo perfil produce cero cambios. Las columnas que sólo existen en un lado se informan como cambios estructurales; no hacen fallar la comparación de las demás.

nrow(comparar_perfiles(perfil_enero, perfil_enero))
#> [1] 0