No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Prepárate para tu próximo empleo comprando hoy a precio especial

Antes: $249

Currency
$209
Suscríbete

Termina en:

7 Días
20 Hrs
1 Min
25 Seg

Imputación básica de datos

19/21
Recursos

Aportes 9

Preguntas 1

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Imputacion con base en el contexto

Implica conocer la estructura de los datos por lo que podemos completar las entradas vacias. Para este ejemplo, tenemos un conjunto de datos:

implicit_to_explicit_df = pd.DataFrame(
    data={
        "name": ["lynn", np.nan, "zelda", np.nan, "shadowsong", np.nan],
        "time": ["morning", "afternoon", "morning", "afternoon", "morning", "afternoon",],
        "value": [350, 310, 320, 350, 310, 320]
    }
)

implicit_to_explicit_df

Claramente vemos que los valores de name podemos rellenarlos debido a que el contexto nos indica que son los nombres de la celda de arriba

implicit_to_explicit_df.ffill() #Rellena los nan con los valores de la celda de arriba

Imputacion Basica de Datos

Consiste en reemplazar los valores faltantes por algun valor, bien sea estadistico, algun valor por contexto o valores obtenidos mediante un modelo de Machine Learning

Imputacion de un unico valor

Se da cuando el contexto no ayuda a completar un valor faltante y por tanto requieres imputar un unico valor con algun estadistico

  • Para este ejemplo, utilizamos del dataframe riskfactors solo las variables Peso, Altura y bmi. Aplicamos el valor promedio a los valores faltantes de cada columna y al mismo tiempo creamos la shadow matrix para luego graficar
(
    riskfactors_df
    .select_columns('weight_lbs', 'height_inch', 'bmi')
    .missing.bind_shadow_matrix(true_string=True, false_string=False) 
    .apply(
        axis = 'rows',
        func = lambda column: column.fillna(column.mean()) if '_NA' not in column.name else column
    )
)
  • Ahora graficamos los datos con los valores imputados y obtenemos un grafico donde podemos observar que los valores imputados tienen valores que estan en la media de los datos
#Grafica de los datos con los valores imputados
(
    riskfactors_df
    .select_columns('weight_lbs', 'height_inch', 'bmi')
    .missing.bind_shadow_matrix(true_string=True, false_string=False) 
    .apply(
        axis = 'rows',
        func = lambda column: column.fillna(column.mean()) if '_NA' not in column.name else column
    )
    .pipe(
        lambda df: (
            sns.displot(
                data=df,
                x='weight_lbs',
                hue='weight_lbs_NA'
            )
        )
    )
)

Hay un minimo detallle con la asignacion de una columna de valores imputados, y es que esta columna representa exactamente lo mismo que la columna BMI_NA, solo que con distinto nombre, esto debido a que para calcular el BMI, si o si hay que tener el valor de altura y del peso, si alguno de los dos falta, no podemos calcular el valor del BMI, por lo cual las filas de BMI estarian sin ese dato si alguna de estas dos columnas tenian dato faltante, es un detalle de mera casualidad, ya que el proceso realizado por el profesor es el correcto.

hue="bmi_NA"

# Genera el mismo scatterplot.

Pero esto en un caso en que se tomen varias columnas no relacionadas, no sucedera.

Para lo que están siguiendo los métodos de las clases:
Les dejo otra aproximación para obtener la misma imputación por valores promedios, así pueden practicar distintos métodos de pandas. En lugar de APPLY, uso FILLNA (que puede llenar basado en un diccionario de valores), aquí el código:

(
    riskfactors_df
    .select_columns("weight_lbs", "height_inch", "bmi")
    .missing.bind_shadow_matrix(true_string=True, false_string=False)
    .fillna(
        riskfactors_df.select_columns("weight_lbs", "height_inch", "bmi").astype("float64").mean().to_dict()
    )
)

En el minuto 5 con 37 segundos, la explicación de

if "_NA" not in column.name else column

no es correcta; esta parte de la expresión condicional verifica si “_NA” no está presente en el nombre de la columna. Si no está presente, se realiza el llenado con la media. Si “_NA” está presente, la columna se deja sin cambios (se llena con ella misma).

Me parece que:

  • es correcto realizar algún tipo de imputación al peso y a la altura (en este caso la media de cada respectiva columna)
  • para “bmi” sería más correcto calcular el valor dadas las imputaciones precedentes y no imputarle un dato-valor promedio.
¿Cual es el límite de imputaciones usando estadísticos? Si quisieramos rellenar varios valores, estaríamos afectando la distribución de los datos (imputar por media puede sesgar la distribución hacia el centro). Se me ocurre que si queremos imputar varios valores entonces podríamos usar la probabilidad de la distribución, es decir, de 100 valores que imputemos, tendrán la mayor probabilidad de imputarse en la media pero también será probable que se imputen en el resto de la distribución de los datos. ## CHATGPT: Existen varios métodos para imputar valores faltantes, algunos de los cuales incluyen: 1. **Imputación por media, mediana o moda:** En este enfoque, los valores faltantes se reemplazan por la media, mediana o moda de la columna respectiva en la que se encuentran los valores faltantes. Esto es útil cuando los datos faltantes son valores atípicos y no queremos influir demasiado en la distribución de los datos. 2. **Imputación por valores cercanos:** Se utilizan valores de observaciones cercanas para estimar los valores faltantes. Esto puede incluir técnicas como la interpolación lineal o basada en vecinos más cercanos. 3. **Imputación por regresión:** Se utiliza un modelo de regresión para predecir los valores faltantes basándose en otras variables independientes. 4. **Imputación múltiple:** Se crean múltiples conjuntos de datos completos utilizando un modelo predictivo para estimar los valores faltantes. Luego, se combinan los resultados de estos conjuntos de datos para obtener una estimación final. 5. **Imputación basada en el dominio:** Se utilizan conocimientos expertos o reglas específicas del dominio para imputar los valores faltantes. 6. **Imputación basada en modelos de distribución:** En lugar de simplemente imputar valores con la media, mediana o algún otro estadístico descriptivo, se pueden ajustar modelos de distribución a los datos completos y luego utilizar estos modelos para generar valores imputados. Por ejemplo, si los datos siguen una distribución normal, se podrían ajustar parámetros de media y desviación estándar a los datos completos y luego generar valores imputados aleatorios de esta distribución. 7. **Múltiples imputaciones:** En lugar de generar un solo valor imputado, se pueden generar múltiples valores imputados para cada observación utilizando un método de imputación basado en modelos. Estos múltiples conjuntos de datos imputados se pueden utilizar para propagar la incertidumbre en los análisis posteriores. 8. **Imputación basada en variables auxiliares:** Si hay variables auxiliares en el conjunto de datos que están relacionadas con la variable con valores faltantes, se pueden utilizar estas variables para mejorar la imputación. Por ejemplo, se pueden ajustar modelos de regresión utilizando variables auxiliares para predecir los valores faltantes. 9. **Imputación secuencial:** En este enfoque, se imputan valores uno por uno en lugar de imputar todos los valores faltantes simultáneamente. La imputación de un valor puede depender de los valores imputados previamente en el mismo conjunto de datos, lo que ayuda a preservar la estructura y la correlación entre las variables. 10. **Imputación basada en métodos de remuestreo:** Algunas técnicas de imputación, como la imputación múltiple por cadenas de Markov Monte Carlo (MCMC), utilizan métodos de remuestreo para generar valores imputados que respeten la estructura de correlación de los datos originales. A pesar de ser una técnica útil, la imputación de valores faltantes tiene algunas limitaciones y consideraciones importantes: 1. **Introducción de sesgo:** Dependiendo del método utilizado, la imputación puede introducir sesgos en los datos. Por ejemplo, la imputación por media puede sesgar la distribución de los datos hacia el centro. 2. **Aumento de la varianza:** La imputación puede aumentar la varianza de los datos, lo que puede afectar la precisión de los análisis posteriores. 3. **Preservación de la estructura de los datos:** Es importante que la imputación preserve la estructura y las relaciones de los datos originales tanto como sea posible. 4. **Selección del método adecuado:** La elección del método de imputación adecuado depende del tipo de datos y del problema específico en cuestión. No existe un enfoque único que funcione mejor en todos los casos
# Imputación básica de datos La imputación de datos se refiere al proceso de reemplazar los valores faltantes en un conjunto de datos con valores estimados. Existen diferentes estrategias de imputación, y una de las más simples es llenar los valores faltantes con estadísticas descriptivas como la media, la mediana o la moda. Aquí te muestro cómo hacerlo con pandas en Python: pythonCopy code`import pandas as` pd `import numpy as` np `# Crear un DataFrame de ejemplo con valores faltantes` `data = {'A': [1, 2, np.nan, 4, 5`], ` 'B': [1, np.nan, 3, np.nan, 5`], ` 'C': [1, 2, 3, 4`, np.nan]} df = pd.DataFrame(data) `# Imputar valores faltantes usando la media` mean\_imputed\_df = df.fillna(df.mean()) `# Imputar valores faltantes usando la mediana` median\_imputed\_df = df.fillna(df.median()) `# Imputar valores faltantes usando la moda` `mode_imputed_df = df.fillna(df.mode().iloc[0`]) `print("DataFrame original:"`) `print`(df) `print("\nImputación con la media:"`) `print`(mean\_imputed\_df) `print("\nImputación con la mediana:"`) `print`(median\_imputed\_df) `print("\nImputación con la moda:"`) `print`(mode\_imputed\_df) La salida en la consola sería algo así: lessCopy code`DataFrame original`: ` A B C` `0 1.0 1.0 1.0` `1 2.0 NaN 2.0` `2 NaN 3.0 3.0` `3 4.0 NaN 4.0` `4 5.0 5.0 NaN` `Imputación con la media`: ` A B C` `0 1.0 1.0 1.0` `1 2.0 3.0 2.0` `2 3.0 3.0 3.0` `3 4.0 3.0 4.0` `4 5.0 5.0 2.5` `Imputación con la mediana`: ` A B C` `0 1.0 1.0 1.0` `1 2.0 3.0 2.0` `2 3.0 3.0 3.0` `3 4.0 3.0 4.0` `4 5.0 5.0 2.5` `Imputación con la moda`: ` A B C` `0 1.0 1.0 1.0` `1 2.0 3.0 2.0` `2 1.0 3.0 3.0` `3 4.0 3.0 4.0` `4 5.0 5.0 1.0` En los DataFrames resultantes, los valores faltantes han sido imputados utilizando la media, la mediana y la moda, respectivamente. Ten en cuenta que las estrategias de imputación pueden afectar la distribución y la interpretación de tus datos, así que elige la estrategia que mejor se ajuste a tu contexto específico.