Partimos de la fuente de datos del Entregable 1 que está en este link del repositorio, donde hicimos una limpieza previa de la base de datos (eliminamos outliers, realizamos algunas imputaciones simples y excluimos ciertas columnas): 'https://github.com/sase1988/EyCD/raw/main/melb_df_clean.csv'
Utilizamos DictVetorizer para codificar las variables categóricas, resultando una matriz llamada feature_matrix de 13531 filas por 379 columnas.
- Columnas base de imputación: YearBuild, BuildingArea
- Método de imputación: IterativeImputer, estimador: KNeighborsRegressor
- Matriz de entrada: melb_data_mice (sin encoder y sin scaler)
- DataFrame Resultante: melb_data_mice
Distribución obtenida: no se asemeja a la distribución original.Utilizar solo las dos columnas para la imputación por KNN no es efectivo:
Escalado de variables: Para imputar por KNN es necesario escalar los valores. Esto debería haberse hecho incluso en el caso del procedimiento 1, pero aún asi los resultados con ese método no habrian variado porque el problema es la cantidad de columnas que se usan. En este caso, vamos a usar todas las columnas de feature_matrix para la imputación, con lo cual el escalado es fundamental.
- Metodo de ecalado: MinMaxScaler()
- Matriz Escalada: scaled
- Columnas base de imputación: todas
- Método de imputación: IterativeImputer, estimador: KNeighborsRegressor (Vecinos cercanos: 5)-
- Matriz de entrada: scaled
- Matriz de salida: scaled_mice
Se re-escalan las variables YearBuilt y BuildingArea su rango original para graficar su distribución:
Los gráficos muestran que al incluir más variables en la imputación, la misma mejora y se acerca a algo más realista. En este caso, el hecho de sumarle información de entrada al KNN permitió mejorar el resultado. No obstante, puede ser que tengamos exceso de información, por lo que probamos sacar algunas columnas en el procedimiento 3.
Se procedió exactamente igual que en #2 , solamente que excluimos la variable Suburb, quedándonos una matriz de solo 71 columnas. Probamos las imputaciones, y el resultado parece ser tan bueno como el anterior:
Se realiza un análisis de Componentes Principales para lo cual se toman solamente las variables numéricas de la matriz scaled_mice del ejercicio anterior. Se excluye la columna PostCode, que en realidad es categórica. De esta manera nos quedan 12 columnas, y el PCA se hace con ese número de componentes.
- Matriz de entrada (solo variables numéricas) = scaled_mice_numeric
- Matriz de salida PCA = proyected_features
- Graficamos las componentes y tomamos las 3 primeras que explican el 65% de la varianza.
Se compone un nuevo dataframe con las variables categóricas codificadas, las variables numéricas escaladas y las 3 primeras componentes del PCA. El dataframe resultante se llama processed_melb_df