Aplicación Práctica: Regresión Lineal

0

 


Aplicación de Regresión Lineal en el Ámbito Bienes Raíces.

El ejemplo realizado con el conjunto de datos y el código de regresión lineal ilustra el proceso de construcción y evaluación de un modelo predictivo estadístico en el contexto de precios de viviendas. Aquí hay un resumen del proceso y los hallazgos:

1. Creación de un Dataset Simulado: Se generó un conjunto de datos ficticio con características que comúnmente afectan el precio de las viviendas: el tamaño de la vivienda, el año de construcción y la distancia al centro de la ciudad. Además, se incluyó una variable dependiente, el precio de la vivienda, que se calculó usando una relación lineal aproximada con las características mencionadas y algo de ruido aleatorio para simular variabilidad realista.

Descargar DataSet Precios Viviendas - Regresion Lineal

2. División de Datos: Se dividió el conjunto de datos en dos partes: una para entrenar el modelo (80%) y otra para probar su rendimiento (20%).

3. Modelado de Regresión Lineal: Se utilizó un modelo de regresión lineal para entender cómo las características independientes (tamaño de la vivienda, año de construcción y distancia al centro) pueden predecir el precio de la vivienda.

4. Evaluación del Modelo: El modelo se evaluó usando métricas estándar: el Error Cuadrático Medio (MSE) y el Coeficiente de Determinación (R²). El MSE fue relativamente alto, lo que sugiere que el modelo puede no estar capturando toda la complejidad de los datos. Un R² de aproximadamente 0.466 indica que el modelo puede explicar alrededor del 46.6% de la variabilidad de los precios de las viviendas.

5. Desarrollo del Script en Jupyter Notebook: Este código carga el dataset, entrena un modelo de regresión lineal, evalúa su desempeño y luego muestra varios gráficos para analizar los resultados. Asegúrate de tener las bibliotecas pandas, numpy, matplotlib, seaborn y scikit-learn instaladas en tu entorno de Jupyter Notebook. También recuerda ajustar la ruta al archivo CSV para que coincida con la ubicación en la que lo guardaste.

# Importando las bibliotecas necesarias
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score

# Carga el conjunto de datos
df = pd.read_csv('dataset_precios_viviendas.csv')

# Dividir los datos en características (X) y la variable objetivo (y)
X = df[['Tamaño Vivienda', 'Año Construcción', 'Distancia Centro']]
y = df['Precio']

# Dividir los datos en conjuntos de entrenamiento y prueba
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)

# Crear y entrenar el modelo de regresión lineal
modelo = LinearRegression()
modelo.fit(X_train, y_train)

# Predecir los precios en el conjunto de prueba
y_pred = modelo.predict(X_test)

# Calcular el error cuadrático medio y el coeficiente de determinación (R^2)
mse = mean_squared_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)

# Imprimir los resultados
print("Error Cuadrático Medio (MSE):", mse)
print("Coeficiente de Determinación (R²):", r2)

# Estableciendo el estilo de los gráficos
sns.set(style="whitegrid")

# Gráfico de Dispersión de las Predicciones vs Valores Reales
plt.figure(figsize=(10, 6))
plt.scatter(y_test, y_pred, alpha=0.6)
plt.xlabel('Valores Reales')
plt.ylabel('Predicciones')
plt.title('Predicciones vs Valores Reales')
plt.show()

# Gráfico de Residuos
residuos = y_test - y_pred
plt.figure(figsize=(10, 6))
plt.scatter(y_pred, residuos, alpha=0.6)
plt.xlabel('Predicciones')
plt.ylabel('Residuos')
plt.title('Gráfico de Residuos')
plt.axhline(y=0, color='r', linestyle='--')
plt.show()

# Histograma de los Residuos
plt.figure(figsize=(10, 6))
sns.histplot(residuos, kde=True)
plt.title('Distribución de los Residuos')
plt.xlabel('Residuos')
plt.show()

# Gráfico de Importancia de las Características
# (Solo aplicable si el modelo lo permite, en regresión lineal simple podríamos mirar los coeficientes)
importance = modelo.coef_
plt.figure(figsize=(10, 6))
sns.barplot(x=X.columns, y=importance)
plt.title('Importancia de las Características')
plt.xlabel('Características')
plt.ylabel('Importancia')
plt.show()

6. Visualización de Resultados: Se generaron cuatro tipos de gráficos para analizar el rendimiento del modelo:

Un gráfico de dispersión que compara las predicciones del modelo con los valores reales, mostrando una dispersión relativamente uniforme pero con espacio para mejora.


Un gráfico de residuos que ilustra la diferencia entre las predicciones y los valores reales, indicando que no hay sesgos obvios en el modelo y que los errores están relativamente bien distribuidos.


Un histograma de residuos que sugiere que los errores del modelo se distribuyen de manera aproximadamente normal, cumpliendo con uno de los supuestos clave de la regresión lineal.


Un gráfico de importancia de características que muestra la contribución relativa de cada característica al precio de la vivienda, destacando que la distancia al centro tiene el impacto más significativo (negativo) en el precio, seguido por el tamaño de la vivienda (positivo) y el año de construcción (positivo).

Conclusión: Este ejemplo demuestra cómo se puede aplicar un modelo de regresión lineal para predecir valores continuos, como precios de bienes raíces, y cómo evaluar su rendimiento. Aunque el modelo proporciona información valiosa sobre las relaciones entre las características y el precio de la vivienda, también indica que hay otros factores no capturados que podrían mejorar la precisión del modelo.

Sin comentarios