Logotipo de Zephyrnet

Nota introductoria sobre técnicas de imputación

Fecha:

Introducción

Los modelos de aprendizaje automático son basura en cajas de basura, y es esencial abordar cualquier dato faltante antes de enviarlo a su modelo.

Faltan datos en su ddebido a múltiples razones como

1) Los datos no estaban disponibles.

2) La información no se registró debido a un error de entrada de datos, etc.

Es esencial manejarlos adecuadamente en lugar de ignorarlos por completo, ya que pueden representar información crucial y afectar el rendimiento de su modelo.

Analizaremos diferentes técnicas de imputación, desde básicas hasta avanzadas, como parte de este artículo. ¡Vamos a empezar!

No hacer cambios

Los modelos basados ​​en árboles como Light GBM y XGBoost pueden funcionar con valores NA; podría probar un modelo de referencia con los datos que faltan y comprobar la métrica de rendimiento.

Otro enfoque sería descartar las filas con valores faltantes; puede hacer esto cuando los registros con valores faltantes son un pequeño porcentaje de su conjunto de datos completo. De lo contrario, no tendría ningún sentido soltar tanta información.

Durante la etapa EDA, intente visualizar el porcentaje de datos faltantes y tome una decisión informada.

El gráfico de datos faltantes es parte del trabajo que estoy haciendo actualmente en la competencia WIDS en Kaggle.

ncounts = pd.DataFrame([train.isna().mean(), test.isna().mean()]).T ncounts = ncounts.rename(columns={0: "train_missing", 1: "test_missing" }) ncounts.query("train_missing > 0").plot( kind="barh", figsize=(8, 5), title="% de valores que faltan" ) plt.show()

ncounts.query("tren_perdido > 0")

Fuente de la imagen: autor

Como puede ver, para algunas características, faltan casi el 50 % de los registros en los datos del tren y el 80 % de los registros en los datos de prueba. En tales casos, es posible que desee eliminar la función por completo, ya que es posible que no proporcione ninguna contribución significativa al objetivo previsto.

También puede visualizar la cantidad de funciones que faltan por registro como se muestra a continuación.

tt["n_missing"] = tt[nacols].isna().sum(axis=1) tren["n_missing"] = tren[nacols].isna().sum(axis=1) prueba["n_missing"] = test[nacols].isna().sum(axis=1) tt["n_missing"].value_counts().plot( kind="bar", title="Número de valores faltantes por muestra" )

Podemos ver que tenemos casi 30000 registros a los que les faltan cuatro características y unos 824 registros a los que les faltan seis características, un análisis de este tipo le ayudaría a tomar una decisión informada sobre la técnica de imputación que le gustaría usar o no le gustaría usar nada. en absoluto.

Imputación por un valor constante o una media/mediana/moda

Puede imputar los datos faltantes reemplazándolos con un valor constante; en nuestro caso, faltan algunos datos para el año de la columna construido ya que la competencia se está ejecutando en el año actual, es decir, 2022, una opción razonable para reemplazar los valores faltantes de la función sería 2022. Lo mismo se puede hacer como se muestra a continuación en python .

 tren['año_construido'] =tren['año_construido'].reemplazar(np.nan, 2022) prueba['año_construido'] =prueba['año_construido'].reemplazar(np.nan, 2022)

Otro enfoque sería reemplazar los valores que faltan con la media de los registros no vacíos en la función. Como la media es susceptible a los valores atípicos, también puede utilizar la media o la mediana como estrategia de sustitución.

Ejemplos de código como a continuación

test['energy_star_rating']=prueba['energy_star_rating'].replace(np.nan,test['energy_star_rating'].mean()) test['energy_star_rating']=prueba['energy_star_rating'].replace(np.nan ,prueba['energy_star_rating'].mediana())

Otra estrategia interesante es imputar una característica con valores faltantes en función de otra parte.

Por ejemplo, suponga que desea completar el valor que falta para la velocidad máxima del viento en función de la clase de edificio. En ese caso, el registro pertenece a; primero haría un grupo por clase de edificio de características y calcularía la media de la velocidad máxima del viento en todos los grupos individuales, luego imputaría los valores faltantes en la velocidad máxima del viento según la clase de edificio a la que pertenece el registro.

Imputador simple

Sklearn proporciona una estrategia similar a la que discutimos anteriormente para imputar valores perdidos por un valor constante o promedio.

Siempre es bueno conocer métodos alternativos para realizar la misma tarea, por lo que observamos el siguiente código usando Simple Imputer en acción.

from sklearn.impute import SimpleImputer imptr = SimpleImputer(strategy="mean") tr_imp = imptr.fit_transform(train[FEATURES]) test_imp = imptr.transform(test[FEATURES])

Según su caso de uso, puede reemplazar la estrategia por media, moda, mediana o constante.

Técnicas Avanzadas de Imputación

En este tema, veremos las siguientes técnicas de imputación.

  • Imputador iterativo
  • Imputador KNN
  • Imputador LGBM

Imputador iterativo

Bajo el capó, su implementación implica la imputación de valores faltantes mediante el modelado de cada característica como una función de otros elementos de forma rotativa.

También puede entender esto simplemente porque los valores que faltan se consideran objetivos y las características restantes se usan para predecir sus valores.

Utiliza internamente el algoritmo Bayesian Ridge.

Veamos lo mismo en acción con el siguiente código python.

it_imputer = IterativeImputer(max_iter=10) train_iterimp = it_imputer.fit_transform(X[FEATURES]) test_iterimp = it_imputer.transform(X_test[FEATURES]) # Crear marco de datos imputado de prueba de tren X_df = pd.DataFrame(train_iterimp, column=FEATURES) X_test_df = pd.DataFrame(test_iterimp, columnas=CARACTERÍSTICAS)

Imputador KNN

El imputador funciona con los mismos principios que el algoritmo no supervisado del vecino más cercano K para la agrupación. Utiliza KNN para imputar valores faltantes; dos registros se consideran vecinos si las entidades que no faltan están cerca unas de otras.

Lógicamente, tiene sentido imputar valores en función de su vecino más cercano. Puede intentarlo y verificar su puntaje de validación cruzada para ver si hay una mejora o no en su conjunto de datos.

A continuación se muestra el código para comenzar con la computadora KNN

from sklearn.imputar importar KNNImputer imputer = KNNImputer(n_neighbors=2) imputer.fit_transform(X)

El parámetro n_neighbors especifica el número de vecinos que se considerarán para la imputación.

Imputador LGBM

Utiliza LightGBM para imputar valores faltantes en características; puede referirse a la implementación completa del imputer por Hiroshi Yoshihara esta página.

!git clone https://github.com/analokmaus/kuma_utils.git import sys sys.path.append("kuma_utils/") from kuma_utils.preprocessing.imputer import LGBMImputer lgbm_imtr = LGBMImputer(n_iter=100, verbose=True) train_lgbmimp = lgbm_imtr.fit_transform(tren[CARACTERÍSTICAS]) test_lgbmimp = lgbm_imtr.transform(prueba[CARACTERÍSTICAS]) tt_lgbmimp = lgbm_imtr.fit_transform(tt[CARACTERÍSTICAS]) tt_imp = pd.DataFrame(tt_lgbmimp, columnas=CARACTERÍSTICAS) # Create LGBM Train/Test marco de datos imputado lgbm_imp_df = pd.DataFrame (tt_imp, columnas = CARACTERÍSTICAS) 

Código de referencia: - esta página

Hemos discutido múltiples técnicas para imputar valores faltantes como parte de este artículo, y espero que haya aprendido algo nuevo de él. No existe una solución que se ajuste a todos los mecanismos de imputación; es posible que deba probar diferentes enfoques y ver cuál funciona mejor para su puntaje de validación cruzada; una pauta general sería comenzar con un modelo de referencia con imputación media y construir a partir de ahí.

Si tiene alguna pregunta o sugerencia de comentarios, puede proporcionar lo mismo en los comentarios a continuación. Escribo estos artículos para mejorar mi comprensión del aprendizaje automático aplicado. Puedes conectarte conmigo en Linkedin o leer sobre mí esta página. Espero que te haya gustado mi artículo sobre técnicas de imputación, compártelo en los comentarios a continuación.

Lea más artículos en nuestro blog.

Los medios que se muestran en este artículo no son propiedad de Analytics Vidhya y se utilizan a discreción del autor. 

punto_img

Información más reciente

punto_img