Los datos utilizados corresponden a propiedades localizadas en un distrito específico de California, junto con algunas estadísticas resumen extraídas del censo de 1990. Es importante tener en cuenta que los datos no han sido procesados previamente, por lo que será necesario realizar algunas etapas de limpieza y preprocesamiento.
Las columnas incluidas en el conjunto de datos son las siguientes (sus nombres son descriptivos):
- longitude: Longitud geográfica de la propiedad.
- latitude: Latitud geográfica de la propiedad.
- housingmedianage: Edad media de las viviendas en la zona.
- total_rooms: Número total de habitaciones.
- total_bedrooms: Número total de dormitorios.
- population: Población en el área circundante.
- households: Número de hogares en la zona.
- median_income: Ingreso medio por hogar.
- medianhousevalue: Valor medio de la propiedad.
- ocean_proximity: Proximidad al océano.
El objetivo de este análisis es predecir el valor medio de las propiedades utilizando las características proporcionadas.
Para completar este laboratorio, se recomienda seguir la siguiente rúbrica de trabajo:
- Definición del problema: Clarificar el objetivo del análisis y los resultados esperados.
- Estadística descriptiva: Resumir las principales características de los datos a través de medidas estadísticas.
- Visualización descriptiva: Utilizar gráficos para explorar los datos y sus relaciones.
- Preprocesamiento: Realizar los pasos necesarios de limpieza y transformación de los datos.
- Selección de modelo: Comparar al menos cuatro modelos de predicción diferentes.
- Métricas y análisis de resultados: Evaluar el rendimiento de los modelos utilizando métricas apropiadas.
- Visualización de resultados del modelo: Crear gráficos que muestren el desempeño de los modelos.
- Conclusiones: Resumir los hallazgos del análisis.
Nota: Se anima a los estudiantes a desarrollar un análisis más profundo si lo desean. Pueden consultar como referencia el siguiente enlace.
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.metrics import mean_absolute_error, mean_squared_error
def mean_absolute_percentage_error(y_true, y_pred):
return np.mean(np.abs((y_true - y_pred) / y_true)) * 100
def regression_metrics(df):
"""
Aplicar las distintas métricas definidas
:param df: DataFrame con las columnas: ['y', 'yhat']
:return: DataFrame con las métricas especificadas
"""
df_result = pd.DataFrame()
y_true = df['y']
y_pred = df['yhat']
df_result['mae'] = [round(mean_absolute_error(y_true, y_pred), 4)]
df_result['mse'] = [round(mean_squared_error(y_true, y_pred), 4)]
df_result['rmse'] = [round(np.sqrt(mean_squared_error(y_true, y_pred)), 4)]
df_result['mape'] = [round(mean_absolute_percentage_error(y_true, y_pred), 4)]
df_result['smape'] = [round(2 * mean_absolute_percentage_error(y_true, y_pred) / (mean_absolute_percentage_error(y_true, y_pred) + 100), 4)]
return df_result
from sklearn.datasets import fetch_california_housing
# Cargar los datos de housing
housing_data = fetch_california_housing(as_frame=True)
# Convertir los datos en un DataFrame de pandas
housing = housing_data['data']
housing['target'] = housing_data['target']
# Visualizar las primeras filas del DataFrame
housing.head()
MedInc | HouseAge | AveRooms | AveBedrms | Population | AveOccup | Latitude | Longitude | target | |
---|---|---|---|---|---|---|---|---|---|
0 | 8.3252 | 41.0 | 6.984127 | 1.023810 | 322.0 | 2.555556 | 37.88 | -122.23 | 4.526 |
1 | 8.3014 | 21.0 | 6.238137 | 0.971880 | 2401.0 | 2.109842 | 37.86 | -122.22 | 3.585 |
2 | 7.2574 | 52.0 | 8.288136 | 1.073446 | 496.0 | 2.802260 | 37.85 | -122.24 | 3.521 |
3 | 5.6431 | 52.0 | 5.817352 | 1.073059 | 558.0 | 2.547945 | 37.85 | -122.25 | 3.413 |
4 | 3.8462 | 52.0 | 6.281853 | 1.081081 | 565.0 | 2.181467 | 37.85 | -122.25 | 3.422 |
# FIXME