Machine Learning — Módulo 2: los datos y el análisis exploratorio (EDA)
Segundo módulo del Curso de Machine Learning: la mayor parte del trabajo son los datos. Con pandas aprendemos a cargar una tabla, inspeccionarla con info, describe y head, distinguir tipos de variable, cazar valores faltantes, duplicados y outliers, y hacer un EDA de verdad con distribuciones, correlaciones y gráficos.
☰ Índice del contenido
En el módulo 1 dijimos que en Machine Learning el modelo aprende de los datos. La consecuencia es dura: si los datos son basura, el modelo aprende basura. En la industria hay una frase para esto, garbage in, garbage out (basura entra, basura sale), y explica por qué la mayor parte del tiempo de un proyecto de ML no se va en modelos, sino en entender y limpiar los datos (la regla informal del oficio dice 80/20). Este módulo es sobre esa etapa: mirar la tabla de frente antes de entrenar nada.
La tesis del módulo
Ningún modelo arregla datos malos. Antes de entrenar, hay que conocer los datos: qué columnas hay, de qué tipo, qué falta, qué está duplicado, qué está fuera de rango. Ese examen se llama EDA, y es la diferencia entre un modelo que funciona y uno que miente con convicción.
Qué es el EDA
EDA es Exploratory Data Analysis (análisis exploratorio de datos): el proceso de mirar, resumir y graficar los datos para entender su forma antes de modelar. No es opcional ni decorativo. Es donde descubres que la columna “edad” tiene valores de 200 años, que el 30% de “ingreso” está vacío, o que dos columnas dicen lo mismo. Todo eso hundiría un modelo, y el EDA lo saca a la luz temprano.
La herramienta estándar para esto en Python es pandas, la librería que carga tablas en una estructura llamada DataFrame (piénsalo como una planilla de Excel manejada con código: filas, columnas y un montón de funciones para revolverla).
Cargar e inspeccionar con pandas
Todo parte cargando el archivo. Lo más común es un CSV (texto separado por comas), que pandas lee con read_csv:
import pandas as pd
# Cargar la tabla en un DataFrame
df = pd.read_csv("clientes.csv")
# Las primeras filas: para ver de qué va la tabla
print(df.head()) # por defecto muestra 5 filas
# Radiografía general: columnas, tipos y cuántos NO-nulos hay por columna
print(df.info())
# Resumen estadístico de las columnas numéricas:
# conteo, media, desviación, mínimo, máximo y cuartiles
print(df.describe())
# Cuántas filas y columnas tiene (filas, columnas)
print(df.shape)
Estas cuatro líneas son el saludo de mano con cualquier dataset nuevo. head te muestra el aspecto; info te dice los tipos y si hay huecos; describe te da el rango y la escala de cada número; shape te dice el tamaño. Antes de mirar esto, no sabes nada.
Tipos de variable
Cada columna es de un tipo, y el tipo manda qué puedes hacer con ella y qué debes vigilar. Los tres grandes:
| Tipo | Qué es | Ejemplos | Qué mirar en el EDA |
|---|---|---|---|
| Numérica | Números con los que tiene sentido operar | Edad, ingreso, precio | Rango, media, outliers, faltantes |
| Categórica | Etiquetas sin orden | Ciudad, color, producto | Cuántas categorías, cuáles raras |
| Ordinal | Categorías con orden | Talla (S<M<L), nivel de estudios | El orden, y no tratarla como texto suelto |
Ojo: pandas a veces adivina mal el tipo. Un código de comuna como 8320000 es un identificador categórico, no un número para promediar, aunque pandas lo lea como entero. Revisa siempre que el tipo detectado tenga sentido de negocio, no solo técnico.
Los tres problemas clásicos
El EDA busca sobre todo tres cosas que rompen modelos:
1. Valores faltantes. Celdas vacías (NaN). pandas los detecta con isna:
# Cuántos faltantes hay por columna
print(df.isna().sum())
# El porcentaje, que es lo que de verdad importa
print(df.isna().mean() * 100)
Una columna con 5% de faltantes se puede rellenar; una con 90% probablemente se bota. Cómo rellenarlos (imputación) lo veremos en el módulo 8.
2. Duplicados. Filas repetidas que inflan patrones falsos:
# Cuántas filas están duplicadas exactamente
print(df.duplicated().sum())
# Eliminarlas (deja la primera aparición)
df = df.drop_duplicates()
3. Outliers y categorías raras. Valores fuera de rango (una edad de 200) o categorías que aparecen dos veces en un millón de filas. Para las categóricas, value_counts es tu mejor amigo:
# Cuántas veces aparece cada categoría, de mayor a menor
print(df["ciudad"].value_counts())
Si “ciudad” tiene una categoría llamada “Sanitago” con 3 filas, acabas de encontrar una falta de ortografía en los datos.
El pipeline de los datos
Todo el EDA y la limpieza se pueden pensar como un flujo que transforma la tabla cruda en una tabla lista para el modelo:
DATOS CRUDOS
(el CSV tal cual)
│
▼
┌────────────────┐ info, describe, head,
│ inspeccionar │ value_counts, corr
└───────┬────────┘
▼
┌────────────────┐ faltantes, duplicados,
│ limpiar │ outliers, tipos malos
└───────┬────────┘
▼
DATOS LIMPIOS
(listos para features y modelo)
Este módulo cubre las dos primeras cajas. La limpieza fina y la creación de columnas nuevas (feature engineering) llegan en el módulo 8, ya con pipelines reproducibles.
Correlaciones y visualización
Más allá de columna por columna, quieres ver relaciones. La correlación mide qué tan juntas se mueven dos variables numéricas: cerca de 1 suben juntas, cerca de -1 una sube y la otra baja, cerca de 0 no hay relación lineal.
# Matriz de correlación entre todas las columnas numéricas
print(df.corr(numeric_only=True))
Y tres gráficos que resuelven casi todo el EDA visual, con matplotlib y seaborn:
import matplotlib.pyplot as plt
import seaborn as sns
# Histograma: la distribución de una variable numérica
df["ingreso"].hist(bins=30)
plt.show()
# Scatter: relación entre dos numéricas
plt.scatter(df["edad"], df["ingreso"])
plt.show()
# Boxplot: resume mediana, cuartiles y outliers de un vistazo
sns.boxplot(x=df["ingreso"])
plt.show()
El histograma te muestra la forma de la distribución (¿está sesgada?, ¿tiene dos jorobas?). El scatter revela si dos variables se relacionan. El boxplot es el cazador de outliers: los puntos fuera de los “bigotes” son sospechosos.
Ojo: correlación no es causalidad. Que las ventas de helado y las quemaduras solares suban juntas no significa que una cause la otra; las une el verano. El EDA describe qué se mueve junto, no por qué.
Errores comunes
- Saltarse el EDA para “ir directo al modelo”. Es la forma más rápida de entrenar sobre basura y no enterarte hasta producción.
- Rellenar faltantes sin pensar. Poner 0 donde falta el ingreso mete un valor falso que el modelo tomará en serio. La imputación es una decisión, no un reflejo (módulo 8).
- Tratar identificadores como números. Un ID de cliente o un código postal no se promedian; son categorías disfrazadas de enteros.
- Confiar en el tipo que adivina pandas. Revisa que cada columna tenga el tipo correcto de negocio, no solo el que dedujo la librería.
- Confundir correlación con causa. Dos columnas que se mueven juntas pueden no tener ninguna relación causal. Útil para el modelo, peligroso para las conclusiones.
La frase para llevarse
“Ningún modelo arregla datos malos. El EDA es mirar los datos de frente —tipos, faltantes, duplicados, outliers— antes de que el modelo aprenda tus errores por ti.”
Qué viene
Módulo 3: tu primer modelo. Con los datos ya entendidos, entrenamos los dos modelos base de todo ML: la regresión lineal (predecir un número) y la regresión logística (clasificar). Veremos cómo se ajustan, cómo se leen sus coeficientes y por qué su gran ventaja es que son interpretables.
Material relacionado
Preguntas sobre este curso
Regístrate gratis para hacer preguntas y guardar tu progreso.
✉ Entérate de lo nuevo
Recibe un aviso cuando publique nuevos cursos, workshops o investigaciones. Sin spam.