Introducció

En aquest projecte, aplicarem els coneixements adquirits al llarg del curs per desenvolupar un model de Machine Learning capaç de predir els preus d'habitatges. Aquest tipus de projecte és molt comú en el camp de l'anàlisi de dades i és una excel·lent manera de posar en pràctica tècniques de regressió, preprocessament de dades i avaluació de models.

Objectius del Projecte

  1. Preprocessar les dades: Netejar, transformar i preparar les dades per al model.
  2. Desenvolupar un model de regressió: Utilitzar algoritmes de regressió per predir els preus.
  3. Avaluar el model: Utilitzar mètriques d'avaluació per mesurar el rendiment del model.
  4. Optimitzar el model: Ajustar hiperparàmetres per millorar el rendiment.

Passos del Projecte

  1. Importació de Llibreries i Dades

Comencem per importar les llibreries necessàries i carregar el conjunt de dades.

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

# Carregar el conjunt de dades
data = pd.read_csv('housing_data.csv')

  1. Exploració i Neteja de Dades

Explorem les dades per entendre la seva estructura i netejar qualsevol valor mancant o anòmal.

# Mostrar les primeres files del conjunt de dades
print(data.head())

# Informació sobre el conjunt de dades
print(data.info())

# Descripció estadística
print(data.describe())

# Comprovar valors mancants
print(data.isnull().sum())

# Eliminar o imputar valors mancants
data = data.dropna()  # Opció simple: eliminar files amb valors mancants

  1. Anàlisi Exploratori de Dades (EDA)

Visualitzem les dades per identificar relacions i patrons.

# Histograma dels preus d'habitatges
sns.histplot(data['price'], bins=30)
plt.title('Distribució dels Preus d\'Habitatges')
plt.xlabel('Preu')
plt.ylabel('Freqüència')
plt.show()

# Matriu de correlació
correlation_matrix = data.corr()
sns.heatmap(correlation_matrix, annot=True, cmap='coolwarm')
plt.title('Matriu de Correlació')
plt.show()

  1. Preprocessament de Dades

Preparem les dades per al model, incloent la normalització i la divisió en conjunts d'entrenament i prova.

# Seleccionar les característiques (features) i la variable objectiu (target)
X = data.drop('price', axis=1)
y = data['price']

# Dividir les dades en conjunts d'entrenament i prova
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# Normalitzar les dades (opcional)
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)

  1. Desenvolupament del Model

Utilitzem la regressió lineal per desenvolupar el model de predicció.

# Crear el model de regressió lineal
model = LinearRegression()

# Entrenar el model
model.fit(X_train, y_train)

# Predir els preus en el conjunt de prova
y_pred = model.predict(X_test)

  1. Avaluació del Model

Utilitzem mètriques com el MSE i el R² per avaluar el rendiment del model.

# Calcular el Mean Squared Error (MSE)
mse = mean_squared_error(y_test, y_pred)
print(f'Mean Squared Error: {mse}')

# Calcular el coeficient de determinació R²
r2 = r2_score(y_test, y_pred)
print(f'R²: {r2}')

  1. Optimització del Model

Podem provar altres algoritmes de regressió o ajustar hiperparàmetres per millorar el rendiment.

# Exemple: Utilitzar Ridge Regression
from sklearn.linear_model import Ridge

ridge_model = Ridge(alpha=1.0)
ridge_model.fit(X_train, y_train)
y_pred_ridge = ridge_model.predict(X_test)

# Avaluar el model Ridge
mse_ridge = mean_squared_error(y_test, y_pred_ridge)
r2_ridge = r2_score(y_test, y_pred_ridge)
print(f'Ridge Regression - Mean Squared Error: {mse_ridge}')
print(f'Ridge Regression - R²: {r2_ridge}')

Conclusió

En aquest projecte, hem desenvolupat un model de Machine Learning per predir els preus d'habitatges. Hem seguit un procés estructurat que inclou la importació i neteja de dades, l'anàlisi exploratori, el preprocessament, el desenvolupament del model, l'avaluació i l'optimització. Aquest enfocament es pot aplicar a una àmplia varietat de problemes de predicció en el món real.

Exercicis Pràctics

  1. Prova amb altres algoritmes de regressió: Intenta utilitzar altres algoritmes com la Regressió Lasso o la Regressió Polinòmica i compara els resultats.
  2. Ajust d'hiperparàmetres: Experimenta amb diferents valors d'hiperparàmetres per al model Ridge i observa com afecta el rendiment.
  3. Enginyeria de característiques: Crea noves característiques a partir de les dades existents i avalua si milloren el rendiment del model.

Solucions als Exercicis

  1. Regressió Lasso:

    from sklearn.linear_model import Lasso
    
    lasso_model = Lasso(alpha=0.1)
    lasso_model.fit(X_train, y_train)
    y_pred_lasso = lasso_model.predict(X_test)
    
    mse_lasso = mean_squared_error(y_test, y_pred_lasso)
    r2_lasso = r2_score(y_test, y_pred_lasso)
    print(f'Lasso Regression - Mean Squared Error: {mse_lasso}')
    print(f'Lasso Regression - R²: {r2_lasso}')
    
  2. Ajust d'hiperparàmetres per a Ridge Regression:

    ridge_model = Ridge(alpha=10.0)
    ridge_model.fit(X_train, y_train)
    y_pred_ridge = ridge_model.predict(X_test)
    
    mse_ridge = mean_squared_error(y_test, y_pred_ridge)
    r2_ridge = r2_score(y_test, y_pred_ridge)
    print(f'Ridge Regression (alpha=10.0) - Mean Squared Error: {mse_ridge}')
    print(f'Ridge Regression (alpha=10.0) - R²: {r2_ridge}')
    
  3. Enginyeria de característiques:

    # Exemple: Crear una nova característica basada en la relació entre dues existents
    data['new_feature'] = data['feature1'] / data['feature2']
    
    # Repetir el procés de divisió, entrenament i avaluació amb la nova característica
    X = data.drop('price', axis=1)
    y = data['price']
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
    X_train = scaler.fit_transform(X_train)
    X_test = scaler.transform(X_test)
    
    model.fit(X_train, y_train)
    y_pred = model.predict(X_test)
    
    mse = mean_squared_error(y_test, y_pred)
    r2 = r2_score(y_test, y_pred)
    print(f'New Feature - Mean Squared Error: {mse}')
    print(f'New Feature - R²: {r2}')
    

Aquest projecte proporciona una base sòlida per a la predicció de preus d'habitatges i pot ser ampliat amb tècniques més avançades i dades addicionals per millorar la precisió i la robustesa del model.

Curs de Machine Learning

Mòdul 1: Introducció al Machine Learning

Mòdul 2: Fonaments d'Estadística i Probabilitat

Mòdul 3: Preprocessament de Dades

Mòdul 4: Algoritmes de Machine Learning Supervisat

Mòdul 5: Algoritmes de Machine Learning No Supervisat

Mòdul 6: Avaluació i Validació de Models

Mòdul 7: Tècniques Avançades i Optimització

Mòdul 8: Implementació i Desplegament de Models

Mòdul 9: Projectes Pràctics

Mòdul 10: Recursos Addicionals

© Copyright 2024. Tots els drets reservats