ScikitLearn
Tutorial ScikitLearn: Introducción al preprocesamiento de datos
Scikit Learn: Introducción al preprocesamiento de datos en Python. Aprende técnicas clave para limpiar y transformar datos antes del modelado, utilizando pandas y scikit-learn.
Aprende ScikitLearn GRATIS y certifícate¿Qué es el preprocesamiento de datos y por qué es necesario antes del modelado?
El preprocesamiento de datos es una etapa crucial en el flujo de trabajo de aprendizaje automático, donde se transforman y preparan los datos brutos para hacerlos aptos para el modelado.
Los datos reales, provenientes de fuentes diversas, suelen contener imperfecciones como valores faltantes, ruido, errores y formatos inconsistentes, lo que puede afectar negativamente el rendimiento de los algoritmos si no se tratan adecuadamente.
La necesidad de preprocesar los datos radica en que la mayoría de los algoritmos de aprendizaje automático asumen que los datos son de alta calidad y están en un formato específico. Por ejemplo, muchos algoritmos no pueden manejar valores nulos o requieren que las variables estén escaladas en un rango determinado. Ignorar estas necesidades puede conducir a modelos inexactos o incluso a fallos en la ejecución del algoritmo.
Existen varias razones fundamentales para realizar un preprocesamiento cuidadoso:
- Mejora de la calidad de los datos: Al limpiar los datos, se eliminan errores y se corrigen inconsistencias, lo que conduce a resultados más confiables.
- Homogeneización de formatos: Los datos pueden provenir de múltiples fuentes y en distintos formatos; es necesario unificar estos formatos para garantizar una correcta interpretación por parte de los algoritmos.
- Tratamiento de valores faltantes: Los valores nulos o faltantes pueden distorsionar el análisis. Las técnicas de imputación permiten reemplazar estos valores de manera que se preserve la integridad del conjunto de datos.
- Escalado y normalización: Las diferencias en las escalas de las variables pueden influir en el comportamiento de ciertos algoritmos. Aplicar escalado o normalización ayuda a que todas las variables contribuyan de manera equitativa al modelo.
- Codificación de variables categóricas: Los algoritmos requieren datos numéricos; por tanto, las variables categóricas deben ser convertidas mediante técnicas de codificación como One-Hot Encoding.
- Reducción de dimensionalidad: Simplificar el conjunto de datos mediante la eliminación de características irrelevantes o redundantes puede mejorar la eficiencia y la interpretabilidad del modelo.
Por ejemplo, considerar un conjunto de datos con información demográfica para predecir el ingreso anual. Si la variable "ocupación" está categorizada como texto, los algoritmos no podrán utilizarla directamente. Es necesario convertir esta variable en un formato numérico utilizando técnicas de codificación.
Además, el preprocesamiento facilita el cumplimiento de las suposiciones estadísticas que subyacen en muchos algoritmos. Por ejemplo, algunos modelos asumen que las variables siguen una distribución normal o que no existe multicolinealidad entre ellas. Aplicar transformaciones adecuadas puede ayudar a cumplir estas condiciones.
En el contexto de Scikit-Learn, el preprocesamiento es apoyado por una variedad de herramientas diseñadas para simplificar y estandarizar estas tareas. Algunas de las funciones y clases más relevantes incluyen:
sklearn.preprocessing.StandardScaler
: Para estandarizar características eliminando la media y escalando a varianza unitaria.sklearn.impute.SimpleImputer
: Para completar valores faltantes utilizando estrategias como la media o la mediana.sklearn.preprocessing.OneHotEncoder
: Para convertir variables categóricas en una matriz de características binarias.sklearn.feature_selection.SelectKBest
: Para seleccionar las k características más importantes basadas en pruebas estadísticas.
El uso de estas herramientas no solo agiliza el proceso de preprocesamiento, sino que también garantiza que las transformaciones sean aplicadas de manera consistente y reproducible. Esto es especialmente importante en proyectos colaborativos o cuando se integran diferentes conjuntos de datos.
En resumen, el preprocesamiento de datos es una etapa indispensable que impacta directamente en la efectividad y precisión de los modelos de aprendizaje automático. Invertir tiempo en esta fase asegura que los algoritmos puedan aprender correctamente de los datos, conduciendo a resultados más fiables y robustos.
Preprocesamiento vs. modelado
El preprocesamiento de datos y el modelado son dos etapas fundamentales y claramente diferenciadas en el flujo de trabajo del aprendizaje automático. Mientras que el preprocesamiento se centra en la preparación y transformación de los datos para que sean aptos para su análisis, el modelado implica la aplicación de algoritmos de aprendizaje automático para ajustar un modelo a los datos preprocesados.
El preprocesamiento puede incluir tareas como la limpieza de datos, la transformación de variables, el manejo de valores atípicos y la codificación de variables categóricas. Estas operaciones son esenciales para garantizar que los datos cumplan con los requisitos de entrada de los algoritmos y para mejorar la calidad de los datos que alimentarán al modelo.
Por otro lado, el modelado se refiere al proceso de seleccionar y entrenar un algoritmo específico, como una regresión lineal o un árbol de decisión, para aprender patrones a partir de los datos preprocesados. El objetivo del modelado es encontrar una función que pueda generalizar y hacer predicciones sobre nuevos datos.
Es importante distinguir entre ambas etapas porque cada una requiere enfoques y herramientas diferentes. El preprocesamiento suele involucrar operaciones de manipulación y transformación de datos, a menudo utilizando bibliotecas como pandas o los módulos de preprocesamiento de scikit-learn. El modelado, en cambio, se basa en la aplicación de algoritmos estadísticos y de aprendizaje automático disponibles en módulos como sklearn.linear_model
o sklearn.ensemble
.
Además, separar claramente el preprocesamiento del modelado ayuda a evitar problemas como el sesgo de validación o el data leakage. Por ejemplo, si se escala todo el conjunto de datos antes de dividirlo en entrenamiento y prueba, se puede introducir información del conjunto de prueba en el modelo durante el entrenamiento, lo que lleva a una sobreestimación del rendimiento.
Para ilustrar esta diferencia, considerar un conjunto de datos con variables numéricas y categóricas. El preprocesamiento podría incluir la imputación de valores faltantes utilizando SimpleImputer
, el escalado de variables numéricas con StandardScaler
y la codificación de variables categóricas con OneHotEncoder
. Una vez que los datos están preprocesados correctamente, se procede al modelado, donde se puede utilizar un algoritmo como RandomForestClassifier
para entrenar el modelo.
Es recomendable utilizar pipelines de scikit-learn para encadenar las etapas de preprocesamiento y modelado de manera cohesiva y reproducible. Los pipelines permiten aplicar secuencialmente transformaciones de preprocesamiento y finalmente ajustar el modelo, asegurando que las transformaciones se aplican correctamente tanto al conjunto de entrenamiento como al de prueba.
La distinción entre preprocesamiento y modelado también facilita la optimización de hiperparámetros. Al separar las etapas, es posible utilizar técnicas como la validación cruzada para ajustar los parámetros del modelo sin contaminar el proceso con datos de prueba. Esto contribuye a obtener un modelo más generalizable y robusto.
Preprocesamientos habituales en pandas y scikit learn
El preprocesamiento de datos es un paso esencial en el aprendizaje automático que involucra la transformación y preparación de los datos para su uso en modelos predictivos. Tanto pandas como scikit-learn ofrecen herramientas robustas para realizar estas tareas de manera eficiente y efectiva.
En pandas, es común utilizar funciones para la limpieza y manipulación de datos. Por ejemplo, para manejar valores faltantes se emplea DataFrame.isnull()
junto con DataFrame.fillna()
o DataFrame.dropna()
. Estas funciones permiten identificar y reemplazar valores nulos o eliminar filas y columnas que los contienen:
import pandas as pd
# Reemplazar valores nulos por la media de la columna
df['columna_numerica'] = df['columna_numerica'].fillna(df['columna_numerica'].mean())
Además, pandas facilita la transformación de tipos de datos, lo cual es crucial cuando se trabaja con fechas o variables categóricas. La función pd.to_datetime()
convierte cadenas de texto en objetos de fecha y hora, permitiendo extraer características temporales como el día, mes o año:
# Convertir columna de texto a datetime
df['fecha'] = pd.to_datetime(df['fecha'])
# Extraer el mes de la fecha
df['mes'] = df['fecha'].dt.month
La codificación de variables categóricas es otro preprocesamiento habitual. Con pandas, se utiliza get_dummies()
para realizar una codificación one-hot, transformando variables categóricas en variables binarias:
# Codificación one-hot de la columna 'categoría'
df_codificado = pd.get_dummies(df, columns=['categoría'])
Por su parte, scikit-learn ofrece transformadores más avanzados y estandarizados para el preprocesamiento, integrándose fácilmente en pipelines de modelado. El módulo sklearn.preprocessing
contiene clases como StandardScaler
para escalar características y OneHotEncoder
para codificar variables categóricas de manera eficiente:
from sklearn.preprocessing import StandardScaler, OneHotEncoder
# Escalado de variables numéricas
scaler = StandardScaler()
df['columna_escalada'] = scaler.fit_transform(df[['columna_numerica']])
El uso de OneHotEncoder
en scikit-learn es preferible cuando se trabaja dentro de un pipeline, permitiendo una integración fluida con otros pasos del preprocesamiento y el modelado:
from sklearn.compose import ColumnTransformer
# Definir transformadores para diferentes tipos de datos
preprocesamiento = ColumnTransformer(
transformers=[
('num', StandardScaler(), ['columna_numerica']),
('cat', OneHotEncoder(), ['columna_categórica'])
])
# Aplicar preprocesamiento
X_preprocesado = preprocesamiento.fit_transform(X)
La gestión de valores atípicos es otra tarea común. En pandas, es posible identificarlos utilizando técnicas estadísticas como el rango intercuartílico (IQR) o mediante visualizaciones con boxplots. Posteriormente, se pueden tratar eliminándolos o aplicando transformaciones:
# Detectar valores atípicos utilizando IQR
Q1 = df['columna_numerica'].quantile(0.25)
Q3 = df['columna_numerica'].quantile(0.75)
IQR = Q3 - Q1
# Filtrar valores atípicos
df_sin_atipicos = df[~((df['columna_numerica'] < (Q1 - 1.5 * IQR)) | (df['columna_numerica'] > (Q3 + 1.5 * IQR)))]
En scikit-learn, el módulo sklearn.impute
incluye clases como SimpleImputer
para la imputación de valores faltantes siguiendo estrategias como la media, mediana o moda:
from sklearn.impute import SimpleImputer
# Imputación de valores faltantes con la media
imputador = SimpleImputer(strategy='mean')
X_imputado = imputador.fit_transform(X)
La normalización es otro preprocesamiento habitual para ajustar las escalas de las variables. Scikit-learn proporciona Normalizer
, que normaliza las muestras individualmente para que tengan una norma unitaria:
from sklearn.preprocessing import Normalizer
# Normalizar datos
normalizador = Normalizer()
X_normalizado = normalizador.fit_transform(X)
Para seleccionar características relevantes, scikit-learn ofrece métodos como SelectKBest
y RFE
(Recursive Feature Elimination), permitiendo mejorar el rendimiento y reducir la complejidad del modelo:
from sklearn.feature_selection import SelectKBest, f_regression
# Seleccionar las 10 mejores características
selector = SelectKBest(score_func=f_regression, k=10)
X_seleccionado = selector.fit_transform(X, y)
La división de datos en conjuntos de entrenamiento y prueba es esencial para evaluar el rendimiento del modelo. La función train_test_split
de scikit-learn facilita esta tarea:
from sklearn.model_selection import train_test_split
# Dividir datos en entrenamiento y prueba
X_entrenamiento, X_prueba, y_entrenamiento, y_prueba = train_test_split(X, y, test_size=0.2, random_state=42)
Finalmente, el uso de pipelines permite encadenar múltiples pasos de preprocesamiento y modelado en un flujo cohesivo, facilitando la reproducibilidad y evitando el data leakage:
from sklearn.pipeline import Pipeline
from sklearn.ensemble import RandomForestClassifier
# Crear pipeline con preprocesamiento y modelo
pipeline = Pipeline(steps=[
('preprocesamiento', preprocesamiento),
('modelo', RandomForestClassifier())
], memory = None)
# Entrenar modelo
pipeline.fit(X_entrenamiento, y_entrenamiento)
Este enfoque integrado con pipelines asegura que todas las transformaciones se apliquen de manera consistente tanto en los datos de entrenamiento como en los de prueba, mejorando la fiabilidad de las predicciones.
La combinación de pandas y scikit-learn en el preprocesamiento proporciona un conjunto completo de herramientas para preparar los datos de forma efectiva. Al aprovechar las fortalezas de ambas bibliotecas, es posible desarrollar modelos más precisos y robustos.
Ejercicios de esta lección Introducción al preprocesamiento de datos
Evalúa tus conocimientos de esta lección Introducción al preprocesamiento de datos con nuestros retos de programación de tipo Test, Puzzle, Código y Proyecto con VSCode, guiados por IA.
Todas las lecciones de ScikitLearn
Accede a todas las lecciones de ScikitLearn y aprende con ejemplos prácticos de código y ejercicios de programación con IDE web sin instalar nada.
Aprendizaje Automático
Introducción Y Entorno
Introducción E Instalación
Introducción Y Entorno
Introducción Al Preprocesamiento De Datos
Preprocesamiento De Datos
Identificación Y Tratamiento De Valores Faltantes
Preprocesamiento De Datos
Escalado De Datos
Preprocesamiento De Datos
Normalización De Datos
Preprocesamiento De Datos
Codificación De Variables Categóricas
Preprocesamiento De Datos
Ingeniería De Características
Preprocesamiento De Datos
Selección De Características
Preprocesamiento De Datos
Extracción De Características
Preprocesamiento De Datos
Particionamiento De Datos
Preprocesamiento De Datos
Preprocesamiento De Datos Desbalanceados
Preprocesamiento De Datos
Introducción A La Regresión
Regresión
Regresión Lineal
Regresión
Regresión Knn Kneighborsregressor
Regresión
Regresión Svm Con Svr
Regresión
Regresión Con Árboles Decisiontreeregressor
Regresión
Regresión Con Algoritmos De Conjunto
Regresión
Introducción A La Clasificación
Clasificación
Clasificación Con Regresión Logística
Clasificación
Clasificación Knn Kneighborsclassifier
Clasificación
Clasificación Svm Con Svc
Clasificación
Clasificación Con Árboles Decisiontreeclassifier
Clasificación
Clasificación Con Algoritmos De Conjunto
Clasificación
Reducción De La Dimensionalidad Con Pca
Aprendizaje No Supervisado
Clustering Con Kmeans
Aprendizaje No Supervisado
Clustering Jerárquico
Aprendizaje No Supervisado
Clustering De Densidad Con Dbscan
Aprendizaje No Supervisado
Preprocesamiento De Textos Para Nlp
Nlp
Representación De Texto Y Extracción De Características
Nlp
Clasificación De Texto Con Scikit Learn
Nlp
Análisis De Sentimiento
Nlp
Técnicas Avanzadas De Extracción De Características
Nlp
Introducción Al Análisis De Series Temporales
Series Temporales
Preprocesamiento De Datos De Series Temporales
Series Temporales
Ingeniería De Características Para Series Temporales
Series Temporales
Transformación Y Escalado De Series Temporales
Series Temporales
Validación Y Evaluación De Modelos En Series Temporales
Series Temporales
Validación Y Evaluación De Modelos
Validación De Modelos
Técnicas De Validación Cruzada
Validación De Modelos
Métricas De Regresión
Validación De Modelos
Métricas De Clasificación
Validación De Modelos
Ajuste De Hiperparámetros
Validación De Modelos
Introducción A Pipelines
Pipelines Y Despliegue
Creación De Pipelines Básicos
Pipelines Y Despliegue
Preprocesamiento De Datos Con Pipelines
Pipelines Y Despliegue
Pipelines Y Validación Cruzada
Pipelines Y Despliegue
Pipelines Con Columntransformer
Pipelines Y Despliegue
Exportar E Importar Pipelines
Pipelines Y Despliegue
Objetivos de aprendizaje de esta lección
- Comprender qué es el preprocesamiento de datos y por qué es esencial antes del modelado.
- Diferenciar entre preprocesamiento y modelado en el flujo de trabajo del aprendizaje automático.
- Aplicar técnicas habituales de preprocesamiento con pandas y scikit-learn.
- Manejar valores faltantes, escalado de variables y codificación de variables categóricas.
- Utilizar pipelines en scikit-learn para integrar preprocesamiento y modelado.