Clase 01 — Datos que no mienten

Calidad, Auditoría y Confianza  ·  Ciclo Magistral 2026  ·  clases.maradestefanis.com

1 — Introducción · Por qué importa la calidad de datos

En ciencia de datos hay un principio que se repite siempre: un modelo es tan bueno como los datos con los que se entrena. GAGO — basura que entra, basura que sale. Pero hay algo más profundo. Incluso sin modelos — solo con reportes, dashboards o análisis descriptivos — los datos de mala calidad producen decisiones equivocadas. Y lo más peligroso es que esas decisiones parecen justificadas porque están respaldadas por números.

Un dato no es bueno o malo en abstracto. Es confiable o no confiable para una pregunta específica. Los precios con outliers son basura para calcular ticket promedio, pero son señal para auditar errores de carga.

La calidad de datos no es una tarea técnica de limpieza que se hace al principio y se olvida. Es una disciplina transversal que atraviesa todo el ciclo de vida del dato.

Las tres preguntas de esta clase

¿Cómo medir la calidad de un dataset de forma sistemática?
¿Cómo automatizar esa medición para que ocurra en cada carga de datos nueva?
¿Cómo comunicar los hallazgos a audiencias técnicas y no técnicas?

El recorrido sigue el orden lógico de una auditoría real: profiling exploratorio → reglas formales con Great Expectations → limpieza documentada → validación final.

2 — Contexto: el dato como activo · Gobierno de Datos

La calidad de datos no existe en el vacío. Es una de las disciplinas del Gobierno de Datos — el conjunto de prácticas, procesos y estructuras organizacionales que permiten gestionar los datos como un activo estratégico.

El marco DAMA-DMBOK2 define el Gobierno de Datos como "el ejercicio de la autoridad, el control y la toma de decisiones compartida sobre la gestión de los activos de datos". En términos prácticos: quién decide qué, cómo se garantiza la calidad, quién es responsable de qué datos.

Metas de un programa de calidad

MetaDescripción
Enfoque gobernadoLos datos cumplan con su propósito (fit for purpose)
Estándares y métricasDefinición de controles a lo largo de todo el ciclo de vida del dato
Procesos de mediciónMedir, monitorear y reportar los niveles de calidad
Mejora continuaIdentificar oportunidades en procesos y sistemas

3 — El dataset · Olist Brazilian E-Commerce

Olist es una empresa brasileña de tecnología para e-commerce, fundada en 2015 en Curitiba. Modelo de negocio: marketplace que actúa como intermediario entre vendedores pequeños y medianos y los grandes marketplaces brasileños (Mercado Libre, Americanas, Submarino).

Olist publicó datos reales de transacciones entre 2016 y 2018 en Kaggle. Aproximadamente 100.000 órdenes procesadas en ese período. Los problemas de calidad ocurren naturalmente — no fueron inyectados artificialmente.

Los 9 archivos del dataset

ArchivoFilasQué contiene
olist_orders_dataset99.441Órdenes: estado, fechas, cliente
olist_order_items_dataset112.650Ítems por orden: producto, precio, flete
olist_order_reviews_dataset99.224Reseñas: puntaje, texto, fecha
olist_customers_dataset99.441Clientes: ubicación, identificadores
olist_products_dataset32.951Productos: categoría, dimensiones
olist_sellers_dataset3.095Vendedores: ubicación
olist_order_payments_dataset103.886Pagos: método, cuotas, valor
olist_geolocation_dataset1.000.163Coordenadas por código postal
product_category_name_translation71Traducción de categorías PT → EN
Kaggle — Brazilian E-Commerce Public Dataset by Olist https://www.kaggle.com/datasets/olistbr/brazilian-ecommerce

4 — Estructura de los datos

Olist distribuye sus datos siguiendo un esquema normalizado: cada tabla tiene una responsabilidad única. Las tablas se relacionan a través de claves identificadoras (IDs).

customer_id no identifica a la persona.
Es el ID de la transacción. Cada orden genera un customer_id nuevo, aunque sea la misma persona comprando por segunda vez.
CampoQué identifica
customer_idUna orden — diferente en cada compra, aunque sea la misma persona
customer_unique_idLa persona real — único por comprador

Tipos de datos en pandas

Tipo pandasLo que representaEjemplo
int64Entero1, 42, -7
float64Decimal3.14, 99.90
objectTexto / cadena"entregado", "SP"
boolVerdadero / FalsoTrue, False
datetime64Fecha y hora2017-01-01 12:00:00
categoryCategórico con valores fijosbajo / medio / alto

5 — Las 6 dimensiones de calidad de datos

El framework más extendido en la industria (DAMA UK / ISO 8000) define dimensiones para medir la calidad de datos. Cada dimensión responde una pregunta distinta y requiere técnicas de detección distintas.

DimensiónPregunta que respondeSeñal típicaRiesgo si se ignora
Completitud¿Están todos los valores?Columnas con % de nulos altoAnálisis sesgados, promedios incorrectos
Unicidad¿Hay duplicados?order_id repetidoDoble conteo de ventas, métricas infladas
Validez¿Los valores están en rango?Precio = 0 o negativoKPIs distorsionados por errores de carga
Consistencia¿Se cumplen las reglas de negocio?Entregado sin fecha de entregaReportes financieros incorrectos
Exactitud¿Los valores representan la realidad?Typos: 'electornics'Agrupaciones rotas, categorías fantasma
Representatividad¿Los datos cubren bien el fenómeno?SP sobrerrepresentadoModelos que discriminan regiones o perfiles

5.1 — Completitud

¿Están todos los valores requeridos? — Sin valores nulos o faltantes

Mide qué proporción de los valores esperados están efectivamente presentes. La distinción entre tipos de nulos importa porque la estrategia de tratamiento es distinta.

Los nulos se clasifican en MCAR, MAR y MNAR (teoría de Rubin, 1976). Los MNAR son los más problemáticos porque el dato faltante está correlacionado con el valor que debería tener.
# Python
df.isnull().sum() / len(df) * 100  # % de nulos por columna

# Power Query
Transformar > Estadísticas > Contar valores en blanco

5.2 — Unicidad

¿Sin duplicados? — Registros únicos

Un dataset tiene buena unicidad cuando cada entidad del mundo real aparece exactamente una vez. La detección requiere distinguir entre duplicado exacto y duplicado parcial.

# Python — duplicados exactos
df.duplicated().sum()

# Por clave de negocio
df.duplicated(subset=['order_id']).sum()

# Power Query
Agrupar por id_orden > Contar filas > filtrar donde conteo > 1

5.3 — Validez

¿Cumplen formato y reglas? — Dominios y restricciones válidos

Verifica que los valores cumplan las restricciones definidas para cada campo: rangos numéricos, formatos de texto, pertenencia a un catálogo. Es la dimensión más fácil de automatizar.

Parámetro mostly de GE: mostly=0.95 significa que al menos el 95% de las filas debe cumplir la regla. Fundamental para datos de producción con excepciones legítimas.

5.4 — Consistencia

¿Uniformes entre sistemas? — Sin contradicciones

Verifica que las relaciones entre columnas sean coherentes con las reglas de negocio. Requiere más conocimiento del dominio que las otras dimensiones.

Ejemplos en Olist: fecha de entrega anterior a la fecha de pedido — flete = 0 en órdenes entregadas — precio positivo pero flete nulo.

Vista de referencia — Consistencia

5.5 — Exactitud

¿Reflejan la realidad? — Precisión y corrección

El caso más frecuente son los errores de tipeo en variables categóricas. 'electronics', 'Electronics', 'ELECTRONICS' y 'electornics' son cuatro strings distintos para pandas, pero representan el mismo concepto.

# Normalización básica — siempre primer paso
df['categoria'] = df['categoria'].str.lower().str.strip()

# Distancia de edición (Levenshtein)
from thefuzz import fuzz
fuzz.ratio('electornics', 'electronics')  # → 95
Vista de referencia — Exactitud

5.6 — Representatividad

¿Los datos cubren bien el fenómeno? — La dimensión invisible

La más frecuentemente ignorada y la más peligrosa. Un dataset puede tener completitud perfecta, cero duplicados y todos los valores en rango — y aun así producir conclusiones equivocadas.

El sesgo de representatividad no lo detecta ningún validador automático. Requiere fuente externa de referencia y criterio profesional.

En el dataset Olist: SP representa el 21.8% de la población de Brasil pero aparece con ~32% de los registros.

Dimensiones complementarias

La Integridad referencial y la Actualidad (Freshness) complementan las 6 dimensiones core en entornos de producción.

Vista de referencia — Actualidad
Vista de referencia — Integridad referencial

6 — ydata-profiling · auditoría exploratoria automática

Genera un reporte HTML completo con estadísticas descriptivas, distribuciones, correlaciones y alertas de calidad. Para datasets con más de 100.000 filas, siempre usar minimal=True primero.

from ydata_profiling import ProfileReport

profile = ProfileReport(df, title="Olist — Auditoría Clase 01", minimal=True)
profile.to_file("reporte_calidad.html")

Tipos de alertas que genera

AlertaQué detectaDimensión
MISSING% de valores nulos superior al umbralCompletitud
DUPLICATESRegistros exactamente duplicadosUnicidad
SKEWEDDistribución muy asimétrica (cola larga)Validez / Outliers
HIGH_CARDINALITYDemasiados valores únicos en categóricaExactitud (typos)
HIGH_CORRELATIONCorrelación fuerte entre dos columnasRedundancia
ZEROSAlto porcentaje de valores ceroValidez
CONSTANTLa columna tiene siempre el mismo valorUtilidad del dato

Comparar datasets — detección de drift

profile_actual.compare(profile_anterior).to_file('comparacion.html')

7 — Great Expectations · contratos de datos en producción

ydata-profiling te dice QUÉ encontró en los datos. Great Expectations te dice si los datos CUMPLEN o NO CUMPLEN lo que esperabas. El primero es exploratorio. El segundo es operacional.
# Flujo de validación en producción
Datos nuevos → Pipeline → [GE valida] → ¿Cumple las reglas?
                                          Sí: continúa
                                          No: alerta + detención

Los 4 componentes clave de GE 1.x

ComponenteQué esAnalogía
DataContextEl núcleo que gestiona toda la configuraciónEl proyecto en sí
ExpectationSuiteColección de reglas para un datasetEl contrato de datos
ValidationDefinitionConecta un batch de datos con una suiteEl acto de validar
CheckpointEjecuta múltiples validaciones y genera reportesLa auditoría completa

Expectations más usadas

ExpectationQué verifica
ExpectColumnValuesToNotBeNullNo tiene nulos (mostly opcional)
ExpectColumnValuesToBeUniqueTodos los valores son únicos
ExpectColumnValuesToBeBetweenValores en rango [min, max]
ExpectColumnValuesToBeInSetValores pertenecen a un catálogo
ExpectCompoundColumnsToBeUniqueUnicidad sobre clave compuesta
Corrección API para GE 1.17: El tipo de expectation se accede con e.expectation_type. En validación: r.expectation_config.type.

8 — Pipeline de limpieza · principios y decisiones

Un pipeline de limpieza sin documentación es tan peligroso como datos sucios. Eliminar un registro es una decisión de negocio, no solo una decisión técnica.

Los 5 pasos del pipeline de esta clase

PasoOperaciónAcciónJustificación
1Duplicados exactosEliminarToda fila completamente idéntica es un error de carga
2Precios inválidosEliminarPrecio ≤ 0 es imposible en e-commerce
3Puntajes fuera de [1-5]EliminarLa escala Olist es Likert 1-5. Los nulos se conservan
4Normalizar categoríasTransformarlower+strip unifica escrituras distintas del mismo valor
5Flete = 0 en órdenes activasMarcar como nuloDato desconocido es más honesto que un cero incorrecto

Decisiones típicas por tipo de problema

ProblemaOpción AOpción BOpción C
Duplicados exactosEliminar menos unoEliminar todosConservar y marcar
Nulos en col. críticaEliminar la filaImputar (media/moda)Crear categoría 'Sin dato'
Outliers de precioEliminarTruncar (winsorizing)Marcar con flag
Typos en categoríaNormalizar (lower+strip)Mapear a catálogoEliminar

9 — Excel y Power Query como herramientas de diagnóstico

Power Query es el motor de transformación de datos integrado en Excel desde la versión 2016. Cada paso queda registrado como un paso aplicado — lo que en Python llamaríamos un pipeline documentado.

Equivalencias clave: Python vs Power Query

OperaciónPython / pandasPower Query (M)
Cargar CSVpd.read_csv("archivo.csv")Datos > Obtener datos > Desde texto/CSV
Ver tiposdf.dtypesÍcono junto al nombre de columna (ABC, 123…)
Contar nulosdf.isnull().sum()Transformar > Estadísticas > Contar valores en blanco
Eliminar duplicadosdf.drop_duplicates()Inicio > Quitar filas > Quitar duplicados
Normalizar textodf["col"].str.lower().str.strip()Transformar > Formato > Minúsculas + Recortar
Agrupar y contardf["col"].value_counts()Transformar > Agrupar por > Contar filas

¿Cuándo usar cada herramienta?

Excel + Power QueryPython
Dataset cabe en memoria (hasta ~500k filas)Dataset grande o muy grande
El equipo no tiene experiencia en PythonEl análisis necesita ser reproducible y automatizado
Análisis exploratorio y puntualSe van a aplicar modelos de machine learning
El resultado se comparte en formato universalEl pipeline corre periódicamente sin intervención manual

10 — Sesgos de representatividad · la dimensión invisible

El dataset de datos técnicamente impecables que produce conclusiones equivocadas porque no representa bien la realidad es el escenario más difícil de detectar y el más costoso para el negocio.

Sesgo geográfico

SP representa el 32% de los registros cuando es el 21.8% de la población. Un modelo de demanda entrenado con estos datos sobreestimará la demanda en SP y subestimará el noreste.

Sesgo de supervivencia

Solo están los clientes activos. Los que se fueron por mala experiencia no están. Ejemplo clásico: los aviones de la Segunda Guerra Mundial — se analizaban los impactos en los que volvieron. Los que más necesitaban refuerzo eran los que no volvían.

Sesgo temporal

Un modelo entrenado con datos de 2020-2021 aprendió patrones durante la pandemia. Si se aplica en 2026 sin reentrenamiento, sus predicciones reflejarán una realidad que ya no existe.

Sesgo de canal

Una empresa con e-commerce y tiendas físicas tendrá datos perfectos del canal digital y datos fragmentarios del canal físico.

11 — Resumen · Las 3 ideas centrales

1

La calidad no es binaria. Un dato es confiable o no confiable para una pregunta específica. El mismo outlier puede ser basura para un reporte de ventas y una señal valiosa para una auditoría de sistema.

2

El profiling explora, GE controla. ydata-profiling es la herramienta del analista que entiende un dataset nuevo. Great Expectations es la herramienta del ingeniero que garantiza calidad en producción. Los proyectos maduros usan los dos.

3

La representatividad es la dimensión más difícil. Los nulos se ven. Los duplicados se cuentan. El sesgo requiere fuente externa de referencia y criterio profesional. Ninguna herramienta lo detecta automáticamente.

12 — Glosario

MCARMissing Completely At Random — nulos sin ningún patrón, independientes del valor real.
MARMissing At Random — nulos que dependen de otras variables observables, no del valor faltante.
MNARMissing Not At Random — nulos que dependen del valor que debería tener. El más problemático.
OutlierValor que se aleja significativamente de la distribución típica — puede ser error o información.
WinsorizingTruncar outliers al percentil p y (1-p) en lugar de eliminarlos.
Data driftCambio gradual en la distribución de los datos a lo largo del tiempo.
Schema driftCambio en la estructura del dataset: columnas nuevas, tipos cambiados, columnas eliminadas.
ExpectationEn GE, una afirmación verificable sobre los datos — "price debe ser > 0".
mostlyParámetro de GE que define el % mínimo de registros que debe cumplir una expectation.
Data contractAcuerdo formal entre productor y consumidor de datos sobre estructura, calidad y semántica.
Sesgo superviv.Distorsión por analizar solo los casos que "sobrevivieron" un proceso de selección.
Fit for purposeLos datos son de calidad cuando son aptos para el uso que se les dará (concepto central DAMA).
FreshnessDimensión de actualidad — qué tan recientes son los datos respecto a la decisión que soportan.
PipelineSecuencia de pasos encadenados donde la salida de uno es la entrada del siguiente. Reproducible.

13 — Recursos para seguir estudiando

Documentación oficial

ydata-profiling docs.profiling.ydata.ai Great Expectations docs.greatexpectations.io DAMA UK — 6 dimensiones de calidad dqglobal.com

Materiales de esta clase

Kaggle — Notebooks y datasets de la Clase 01 kaggle.com/work/collections/18297674 GitHub — Repositorio Clase 01 github.com/MaraDestefanis/Clases_Magistrales_Sesion01_Losdatosquenomienten

Dataset

Brazilian E-Commerce (Olist) — Kaggle 100.000+ órdenes reales con múltiples tablas

Lecturas recomendadas

Data Quality: The Accuracy Dimension — Jack Olson (O'Reilly)
Fundamentals of Data Engineering — Reis & Housley — cap. 6: Data Quality
The Data Warehouse Toolkit — Kimball — cap. sobre data quality y auditoría
DAMA-DMBOK2 — Data Management Body of Knowledge (segunda edición)