Cuando se utiliza un modelo para imputar, en principio no aceptan valores faltantes por lo que el primer paso es imputar los valores faltantes con dummies. Luego se utiliza el modelo y se va iterando hasta que los valores que hemos sustituido con dummies no cambien. Justo alli se llega a una optima imputacion.
Preparacion de los datos
# preparamos los datos de la variable a imputarnhanes_model_df=( nhanes_df
.select_columns('height','weight','gender','age')# seleccionamos columnas.sort_values(by='height')# ordenamos en funcion de height# sustituir los valores faltantes con dummies.transform_column('weight',# variable de intereslambda x: x.ffill(), elementwise =False)# matriz de sombra con el sufijo imp.missing.bind_shadow_matrix2(True,False, suffix='_imp', only_missing=False# matriz de sombra para todas las variables))
nhanes_model_df
Preparacion del modelo
# para este ejemplo vamos a utilizar la regresion lineal como modeloheight_ols =( nhanes_model_df
.pipe(lambda df: smf.ols('height ~ weight + gender + age', data=df)).fit())
Generacion de los valores imputados mediante el modelo
# obtener solo las observaciones con valores nulos en la variable height( nhanes_model_df
.pipe(lambda df: df[df.height.isna()]))
# utilizamos el modelo para generar los valores imputadosols_imputed_values =( nhanes_model_df
.pipe(lambda df: df[df.height.isna()])# aplicamos el modelo. Los valores imputados se redondean debido a que son enteros.pipe(lambda df: height_ols.predict(df).round()))
ols_imputed_values
Sustitucion de los valores imputados en el Dataset
# sustituimos los valores imputados generados con # el modelo en la variable asociadanhanes_model_df.loc[nhanes_model_df.height.isna(),['height']]= ols_imputed_values
nhanes_model_df
Visualizacion de los valores imputados
( nhanes_model_df
.missing
.scatter_imputation_plot( x ='weight',# variable independiente y ='height'# variable objetivo))
La grafica nos muestra la imputacion de la variable height en funcion de la variable weight. Observamos dos bloques de datos lo que podria indicar que se trata de la diferencia en peso entre mujeres y hombres.
El siguiente paso para aprovechar mejor el modelo es repetir todos los pasos anteriores pero en la preparacion de los datos, en vez de utilizar los valores dummies para weight, utilizamos la variable height con los valores imputados por el modelo. De esta manera ahora se busca imputar los valores de la variable weight en vez de los de height que ya han sido imputados.
Que buen aporte! 👏
Buen aporte! 👍
Imputacion basada en Modelos
Ventajas
Mejora sobre la imputacion basada en donantes sencilla
Presenta gran variedad de opciones para imputar. Puedes elegir tecnicas de Machine Learning como puede ser un SVM o tecnicas de Deep Learning como Redes Neuronales.
Preserva la relacion entre las variables
Desventajas
Puede subestimar la varianza. Tambien arrastra todos los defecto que presente el modelo.
Los modelos funcionan mal si las variables observadas y faltantes son independientes.
Es mas complicado que la imputacion basada en donantes
Lo que entendí del proceso fue:
Se ordeno el dataset, se rellenaron los valores de weigth con un ffill() y se anadireon las columnas "_imp".
Se creo height_ols que es un modelo predictivo para la variable height tomando en cuenta weight, gender y age basado en Ordinary Least Squares (OLS, una regrecion lineal).
Del dataset se seleccionaron solo las tuplas donde faltaba la altura y se lleno usando el modelo predictivo.
Finalmente se llenaron los valores faltantes del dataset original con los valores calculados.
NICEE
Gracias..!
Proceso general
Hacer imputación con valores dummies (ffill o bfill) a una (o más) de las variables con datos faltantes con la matriz de confusión -> esta/s variable/s no son las que se van a predecir (imputar) sino se rellenan porque la regresión linean no permite NaN, (sirven de relleno provisional)
Ajustar un modelo de regresión lineal (ajustar ecuación de la recta) para la variables a predecir (la que no fue imputada con valores dummies)
Se aplica el modelo de regresión lineal (previamente ajustado ) para predecir la variable con datos faltantes
Se le pasa al DF original los nuevos valores imputados de la variable que se esta prediciendo (la que tenía valores faltantes)
Se grafica con un scatter plot la imputación para revisar
Se continua con la imputación de las otras variables
Se hace otra copia del DF original
Se le pasan a la columna correspondiente los valores imputados de la variable anterior predicha
Crear en el nuevo DF una matriz de sombra
Nota: Si son 2 variables no hay necesidad de imputar con dummies porque ya una de las dos fue imputada con regresión lineal y sirve de "soporte" para imputar la que previamente se relleno con dummies. Si hay más de 2 variables, se deben rellenar con dummies, dejar una como variable a imputar por ols y pasar al nuevo DF la variable recien imputada
Se ajusta el modelo de regresión a la nueva variable a predecir (imputar)
Se imputa (se predice) la variable con la regresión lineal ajustada
¿Como vamos a trabajar ahora con la columna "weight", si esta ya no tiene valores nulos?
Puedes extraerlos de dataset orginal (nhanes_df), ya que al principio hizo una copia de este llamada 'nhanes_model_df' para trabajarla y fue la que uso durante el video.
Para ayudar a entender la contra de variables independientes:
La imputación basada en modelos utiliza algoritmos (como regresión, Random Forest, KNN, etc.) para predecir los valores faltantes en función de otras variables observadas. Por ejemplo, si falta el salario de una persona, un modelo podría predecirlo usando variables como edad, educación, experiencia, etc.
¿Por qué el modelo funciona mal si las variables observables y faltantes son independientes?
La clave está en entender la relación entre las variables:
Si las variables observables y las faltantes son independientes:
Esto significa que no hay una relación estadística entre ellas.
Por ejemplo, si el salario faltante (Y) es independiente de la edad (X), entonces X no ayuda a predecir Y.
En este caso, el modelo no tendrá poder predictivo, y la imputación será como adivinar al azar (usando la media, la mediana, etc.), lo cual no aporta información real.
Si las variables observables y las faltantes están relacionadas:
Aquí el modelo sí puede encontrar patrones para predecir los valores faltantes.
Por ejemplo, si el salario (Y) está correlacionado con la educación (X), el modelo puede estimar Y usando X.
La **imputación basada en modelos** es una técnica avanzada utilizada para tratar valores faltantes en los conjuntos de datos mediante el uso de modelos predictivos. A diferencia de métodos simples como la imputación por media o mediana, los modelos predictivos buscan capturar relaciones complejas entre las variables, utilizando información disponible en otras variables para estimar los valores faltantes de manera más precisa.
### Conceptos clave
1. **Modelo predictivo**: Utiliza un algoritmo de aprendizaje automático para estimar los valores faltantes. Algunos de los modelos más comunes para este propósito incluyen regresión lineal, árboles de decisión, k-vecinos más cercanos (KNN), entre otros.
2. **Ventajas de la imputación basada en modelos**:
- **Mayor precisión**: Puede capturar relaciones complejas entre las variables, lo que resulta en estimaciones más exactas que los métodos tradicionales.
- **Flexibilidad**: Puede adaptarse a diferentes tipos de datos (numéricos, categóricos).
3. **Desventajas**:
- **Mayor complejidad**: La implementación requiere un mayor conocimiento en machine learning.
- **Riesgo de sobreajuste**: Si no se gestiona adecuadamente, el modelo puede ajustarse demasiado a los datos de entrenamiento, afectando su capacidad de generalización.
### Métodos comunes de imputación basada en modelos
Este método ajusta un modelo de regresión con las observaciones disponibles y utiliza la relación entre las variables para predecir los valores faltantes.
- **Ejemplo**: Si tienes un conjunto de datos sobre precios de casas, podrías usar variables como tamaño de la casa, número de habitaciones, y ubicación para predecir los precios faltantes utilizando una regresión lineal.
#### 2. **Árboles de Decisión**:
Los árboles de decisión pueden manejar tanto variables numéricas como categóricas y encontrar patrones en los datos para imputar los valores faltantes.
#### 3. **Imputación por Random Forest**:
Utiliza múltiples árboles de decisión para construir un modelo robusto y predecir los valores faltantes. Es particularmente efectivo cuando las relaciones entre las variables son complejas.
#### 4. **Imputación por MICE (Multiple Imputation by Chained Equations)**:
Este método crea varios modelos iterativos para imputar los valores faltantes de manera secuencial. Cada variable con datos faltantes es imputada basándose en las demás, de manera cíclica. Este proceso se repite varias veces, y el resultado final es la media de las imputaciones.
### Implementación de la imputación basada en modelos en Python
A continuación, te muestro cómo realizar la imputación basada en un modelo de **regresión lineal** utilizando la librería scikit-learn y un conjunto de datos con valores faltantes.
#### Paso a paso:
1. **Instalar las dependencias**:
```bash
pip install scikit-learn pandas numpy
```
2. **Ejemplo de imputación basada en regresión lineal**:
```python
import pandas as pd
import numpy as np
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
# Crear un DataFrame con valores faltantes
data = {'A': [1, 2, 3, 4, 5],
'B': [2, np.nan, 6, 8, 10],
'C': [5, 7, np.nan, 9, 11]}
df = pd.DataFrame(data)
# Mostrar el DataFrame original
print("DataFrame original con valores faltantes:")
print(df)
# Separar las observaciones con y sin valores faltantes en la columna 'B'
df_complete = df[df['B'].notna()]
df_missing = df[df['B'].isna()]
# Definir las variables predictoras (features) y la variable objetivo (target)
X_complete = df_complete[['A', 'C']]
y_complete = df_complete['B']
X_missing = df_missing[['A', 'C']]
# Entrenar un modelo de regresión lineal con los datos completos
- **DataFrame con valores faltantes**: Se genera un DataFrame con algunos valores faltantes en la columna 'B'.
- **Modelo de regresión lineal**: Se entrena un modelo de regresión lineal utilizando las columnas 'A' y 'C' para predecir los valores de la columna 'B'.
- **Imputación**: Se utilizan las predicciones del modelo para reemplazar los valores faltantes en la columna 'B'.
### Salida esperada:
DataFrame original con valores faltantes: ABC012.05.012NaN7.0236.0NaN348.09.04510.011.0DataFrame con los valores imputados: ABC012.05.0124.07.0236.0NaN348.09.04510.011.0
### Consideraciones finales:
- Es importante evaluar la calidad de las imputaciones generadas por el modelo para evitar sesgos.
- Si bien la imputación basada en modelos ofrece mayor precisión que los métodos simples, también puede introducir error si el modelo predictivo no captura bien las relaciones subyacentes entre las variables.
### Conclusión:
La **imputación basada en modelos** es una herramienta poderosa para manejar valores faltantes, especialmente en escenarios donde hay relaciones complejas entre las variables. Al aprovechar modelos de machine learning como regresión lineal, árboles de decisión o random forests, se puede mejorar la precisión de los análisis sin descartar datos importantes.
Al menos hasta acá el que menos ha afectado a la curtosis es ffill en estos ejemplos:
La imputación de datos faltantes basada en modelos es una técnica avanzada que utiliza modelos estadísticos o de aprendizaje automático para estimar y reemplazar los valores ausentes en un conjunto de datos. A diferencia de métodos más simples, que pueden depender de la media, mediana o modos, este enfoque intenta aprovechar las relaciones subyacentes entre las variables del conjunto de datos para realizar estimaciones más precisas y coherentes. Los modelos comúnmente empleados incluyen la regresión lineal, regresión logística, árboles de decisión, k-nearest neighbors (KNN), y redes neuronales, entre otros.
Sintaxis o Etimología
Imputación: Proceso de reemplazo de datos faltantes con valores estimados.
Modelos Estadísticos o de Aprendizaje Automático: Herramientas que permiten establecer relaciones entre variables y hacer predicciones o estimaciones basadas en datos existentes.
Variables: Características o atributos medidos en un conjunto de datos.
Ejemplos
Imputación Mediante Regresión: Si se identifica una relación lineal entre la variable con datos faltantes y otras variables en el conjunto de datos, se puede emplear un modelo de regresión lineal para estimar los valores faltantes.
Imputación con K-Nearest Neighbors (KNN): Este método selecciona los k registros más similares (donde "k" es un número definido por el usuario) para un registro con datos faltantes y utiliza el promedio (para variables continuas) o la moda (para variables categóricas) de estos registros cercanos para imputar el valor faltante.
Puntos de Buena Práctica
Selección del Modelo: Elegir el modelo de imputación más apropiado basado en el tipo de datos (continuos vs. categóricos), la distribución de los datos, y la relación entre variables.
Validación Cruzada: Utilizar técnicas de validación cruzada para ajustar y evaluar la precisión del modelo de imputación, minimizando así el riesgo de sobreajuste.
Manejo de Variables Categóricas: En el caso de variables categóricas, considerar el uso de codificación previa (como one-hot encoding) para facilitar la imputación mediante modelos.
Evaluación del Impacto de la Imputación: Analizar cómo la imputación afecta los análisis subsiguientes, verificando que las conclusiones no se vean sesgadas o alteradas significativamente debido a las estimaciones de los valores faltantes.
Documentación y Transparencia: Registrar detalladamente el proceso de imputación, incluyendo la selección del modelo, los parámetros utilizados y cualquier supuesto relevante, para asegurar que el proceso sea reproducible y transparente.
La imputación basada en modelos ofrece una forma sofisticada de manejar datos faltantes, permitiendo a los investigadores y analistas de datos aprovechar al máximo su conjunto de datos y realizar análisis más precisos y confiables.
Vamos a predecir e imputar los nuevos valores de 'weight':
Imputación por Regresión Lineal (Basada en Modelos)
La imputación por regresión lineal es un método avanzado que utiliza las relaciones entre las variables para estimar los valores faltantes. A diferencia de métodos más simples como la media o la mediana, que solo consideran la distribución de una única variable, la regresión lineal aprovecha la información de otras variables presentes en el dataset.
Este es un método fundamental y efectivo cuando existe una relación lineal (o curvilínea) entre la variable con valores faltantes y otras variables en el conjunto de datos.
Concepto
La idea central es tratar la variable con valores faltantes como una variable dependiente ($Y$) y las otras variables completas y relevantes en el dataset como variables independientes o predictoras ($X$ ). Se construye un modelo de regresión (lineal, polinomial, Ridge, Lasso, etc.) utilizando las observaciones donde la variable dependiente no tiene valores faltantes. Una vez que este modelo está "entrenado" o ajustado, se utiliza para predecir los valores faltantes.
La ecuación general de una regresión lineal múltiple es:
$$ Y_{estimado}=β_0+β_1X_1+β_2X_2+⋯+β_nX_n+ϵ $$
Donde:
$Y_{estimado}$: Es la variable dependiente (la que tiene valores faltantes y queremos imputar).
$X_1,X_2,…,X_n$: Son las variables independientes o predictoras.
$β_0$: Es el intercepto (el valor de Y cuando todas las X son cero).
$β_1,β_2,…,β_n$: Son los coeficientes de regresión, que representan el cambio en $Y$ por cada unidad de cambio en la $X$ correspondiente, manteniendo las otras $X$ constantes.
$ϵ$: Es el término de error o residuo, que representa la parte de $Y$ que no puede ser explicada por las variables $X$.
¿Cómo funciona?
Selección de Variables: Identifica la variable con valores faltantes (Y) y las variables predictoras ($X_1, X_2, ... X_n$).
Entrenamiento del Modelo: Ajusta un modelo de regresión (por ejemplo, Regresión Lineal Simple o Múltiple) utilizando solo las filas donde Y tiene valores presentes:
$$ Y_{estimado}=β_0+β_1X_1+β_2X_2+⋯+β_nX_n+ϵ $$
Predicción: Utiliza el modelo entrenado para predecir los valores de Y para las filas donde Y tiene valores faltantes, usando los valores de $X_1, X_2, ... X_n$ de esas mismas filas.
Proceso Detallado Paso a Paso
Vamos a desglosar el proceso con un ejemplo.
Escenario de Ejemplo:
Imaginemos que estamos analizando datos de una tienda en línea y tenemos un dataset con la siguiente información para algunos clientes:
Edad (años)
Ingresos_Anuales (USD)
Horas_Conectado_Sitio (horas por semana)
Compras_Ultimo_Mes (cantidad de compras)
Supongamos que la variable Ingresos_Anuales tiene algunos valores faltantes, y creemos que los ingresos están relacionados con la Edad y las Horas_Conectado_Sitio.
Nuestro objetivo: Imputar los valores faltantes en Ingresos_Anuales utilizando la imputación por regresión lineal.
En este caso, la variable a imputar ($Y$) es Ingresos_Anuales. Las variables predictoras ($X_1,X_2$) que usaremos son Edad y Horas_Conectado_Sitio. Compras_Ultimo_Mes no la usaremos en este ejemplo para simplificar.
Pasos de la Imputación por Regresión Lineal:
Paso 1: Separar los datos en dos conjuntos.
Conjunto de Entrenamiento (Known Data): Contiene todas las filas donde la variable objetivo (Ingresos_Anuales) no tiene valores faltantes.
Conjunto de Predicción (Missing Data): Contiene las filas donde la variable objetivo (Ingresos_Anuales) sí tiene valores faltantes.
Utilizamos el Conjunto de Entrenamiento para construir el modelo. Aquí, Ingresos_Anuales es la variable dependiente (lo que queremos predecir), y Edad y Horas_Conectado_Sitio son las variables independientes.
El software estadístico o la librería de Machine Learning (como scikit-learn en Python) realizará los cálculos para encontrar los coeficientes $β_0,β_1,β_2$ que mejor ajusten los datos, minimizando la suma de los cuadrados de los residuos.
Supongamos que, tras entrenar el modelo, obtenemos la siguiente ecuación de regresión (estos son valores ficticios para el ejemplo):
$β_2$=500 (Coeficiente para Horas_Conectado_Sitio)
Interpretación de los coeficientes (en este ejemplo ficticio):
Por cada año adicional de Edad, los Ingresos_Anuales estimados aumentan en 1200 USD, manteniendo las Horas_Conectado_Sitio constantes.
Por cada hora adicional de Horas_Conectado_Sitio, los Ingresos_Anuales estimados aumentan en 500 USD, manteniendo la Edad constante.
Paso 3: Predecir los valores faltantes.
Ahora, utilizamos la ecuación del modelo entrenado y los valores de las variables predictoras (Edad, Horas_Conectado_Sitio) del Conjunto de Predicción para estimar los valores faltantes de Ingresos_Anuales.
Variantes y Consideraciones Avanzadas en la Imputación por Regresión:
Imputación Estocástica por Regresión:
La regresión lineal simple predice el valor promedio esperado para los valores faltantes, lo que puede subestimar la variabilidad natural de los datos.
La imputación estocástica aborda esto agregando un residuo aleatorio (error) a la predicción. Este residuo se toma de la distribución de los residuos del modelo de regresión ajustado en el conjunto de entrenamiento.
Esto ayuda a mantener la variabilidad y a que la distribución de la variable imputada sea más similar a la original, lo que es crucial para la inferencia estadística.
Imputación por Regresión con Otros Modelos:
Aunque el ejemplo usó regresión lineal, el mismo principio puede aplicarse con otros modelos de regresión más complejos si las relaciones no son lineales.
Regresión Polinomial: Si la relación es curvilínea (e.g., $Y=β_0+β_1X+β_2X_2$).
Regresión Logística: Si la variable a imputar es binaria o categórica (aunque para múltiples categorías se suele preferir regresión logística multinomial o modelos de árboles).
Árboles de Regresión (CART, Random Forest): Como vimos en el punto 4 de la explicación general, estos pueden manejar relaciones no lineales y heterogéneas. La imputación con Random Forest (como en MissForest) es una forma muy poderosa de regresión para imputación.
Manejo de Variables Categóricas:
Si las variables predictoras (X) son categóricas, deben ser codificadas (e.g., One-Hot Encoding) antes de usarlas en un modelo de regresión lineal.
Si la variable a imputar (Y) es categórica, no se usa regresión lineal; se usaría un modelo de clasificación (e.g., regresión logística, árbol de clasificación, etc.) y se imputaría la clase predicha o una muestra aleatoria de las probabilidades de clase.
Múltiples Variables Faltantes:
Si hay múltiples variables con valores faltantes, la imputación por regresión lineal una a una puede ser problemática porque ignora la interdependencia de los valores faltantes.
Aquí es donde MICE (Multiple Imputation by Chained Equations) brilla, ya que utiliza la regresión (o modelos de clasificación) de manera iterativa y encadenada, permitiendo que las imputaciones de una variable influyan en las de otras.
Ventajas:
Considera las Relaciones: Produce estimaciones más precisas al tener en cuenta la correlación entre variables.
Reduce el Sesgo: Las imputaciones están más cerca de los valores verdaderos si la relación es fuerte.
Mantiene la Varianza (con estocástica): La versión estocástica ayuda a preservar la variabilidad de los datos, lo cual es vital para la inferencia.
Fácil de entender e implementar.
Desventajas:
Asunción de Relación: Si la relación entre las variables no es lineal (y no se usa una regresión más compleja), las imputaciones pueden ser inexactas.
Dependencia de Predictoras: Si las variables predictoras no tienen una buena relación con la variable faltante, la imputación no será mucho mejor que la media.
Subestimación de Varianza (sin estocástica): La imputación determinística (sin añadir error) puede hacer que la varianza de la variable imputada sea menor de lo que realmente es, lo que lleva a errores estándar subestimados y p-valores inflados en análisis posteriores.
No maneja MNAR: Si los datos son Missing Not At Random (MNAR), la regresión no corregirá el sesgo inherente a ese patrón de pérdida.
Ignora la incertidumbre de la imputación si no se agregan errores estocásticos (ver más adelante).
Puede subestimar la variabilidad de los datos si el error residual del modelo es muy pequeño.
Estuve intentado un ratote con un iterative imputer:
pero al analizar los resultados con MAE y MSE me daban siempre 0, o sea, una convergencia perfecta. por lo que según yo estaría pasando algo raro.
en un principio pensé que estaban usándose los mismos datos para entrenamiento y test, cuestión que pude confirmar que no era así. el train test se hizo correctamente.
Es posible que haya pasado por alto algo o simplemente estoy haciendo algo mal y no me doy cuenta.
En fin, al margen de eso intenté hacer lo que dijo el profesor al final de la clase. Aunque confieso de tampoco estar 100% seguro de haber hecho bien el proceso. Esta metodología es nueva para mi:
# (8) imputación para "weight"weight_ols =(df_model_sm
.pipe(lambda df: smf.ols('weight ~ height + sex + age', data = df)).fit())# (9) valores reales(solo nulos) para "weight"+ predicción de nulos
weight_ols_nulls = df_model_sm.pipe(lambda df: df[df['weight'].isna()])weight_ols_pred = weight_ols.predict(weight_ols_nulls).round()df_model_sm.loc[df_model_sm.weight.isna(),['weight']]= weight_ols_pred
print(f'Conteo de nulos en weight\ndespués de agregar los nulos imputados: {df_model_sm.weight.isna().sum()}')# Reimputamos height con los vals imputados(weight)height_ols =(df_model_sm
.pipe(lambda df: smf.ols('height ~ weight + sex + age', data=df)).fit())# Extraernulos(height)height_ols_nulls = df_model_sm.pipe(lambda df: df[df['height'].isna()])# predicción: nulos en height
height_ols_pred = height_ols.predict(height_ols_nulls).round()# Añadimos las predicciones al df con la shadow matrix
df_model_sm.loc[df_model_sm.height.isna(),'height']= height_ols_pred
print(f'conteo de nulos en height\ndespués de agregar los nulos imputados: {df_model_sm.height.isna().sum()}')## Graficamos(x -> la variable que ha sido imputada)df_model_sm.missing_plot.scatter_imputation_plot(x='height', y ='weight', imputation_suffix='__is_imputed')
Spoiler: El iterative imputer lo vemos en la siguiente clase... lol
Me encantaron los modelos!!!! Claramente NO me equivoque de carrera!!!!