Come Implementare un Algoritmo di Regressione Lineare in Python?

AI, INTELLIGENZA ARTIFICIALE

La regressione lineare è uno dei metodi statistici  fondamentali e ampiamente utilizzati nell’apprendimento automatico e nell’analisi dei dati. Essa consente di modellare la relazione tra una o più variabili indipendenti (predittori) e una variabile dipendente (risposta), fornendo una semplice equazione lineare per effettuare previsioni o interpretare i dati.

Cos’è la Regressione Lineare?

In termini semplici, la regressione lineare cerca di trovare la retta (o iperpiano in dimensioni superiori) che meglio approssima l’insieme dei dati, minimizzando la distanza tra i punti osservati e quelli previsti dal modello. La forma generale dell’equazione di regressione lineare semplice (con una variabile indipendente) è:

y = β₀ + β₁x + ε

Dove:

  • y è la variabile dipendente.
  • x è la variabile indipendente.
  • β₀ è l’intercetta.
  • β₁ è il coefficiente angolare (pendenza).
  • ε è l’errore residuo.

Quando Utilizzare la Regressione Lineare?

La regressione lineare è particolarmente utile quando si desidera:

  • Comprendere la relazione tra variabili.
  • Prevedere il valore di una variabile dipendente sulla base di una o più variabili indipendenti.
  • Identificare trend e pattern nei dati.

Esempi di applicazione includono:

  • Previsioni Finanziarie: Prevedere il prezzo di una casa in base a dimensione, posizione, numero di camere, ecc.
  • Analisi di Mercato: Valutare come le vendite cambiano in risposta a diverse strategie di marketing.
  • Medicina: Determinare l’effetto di un trattamento su un parametro di salute come la pressione sanguigna.
  • Economia: Studiare la relazione tra tasso di disoccupazione e inflazione.

Implementazione di un Modello di Regressione Lineare in Python

Vediamo ora come implementare un modello di regressione lineare utilizzando Python, sfruttando librerie popolari come NumPy, Matplotlib e scikit-learn.

1. Importare le Librerie Necessarie

import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression

Iniziamo importando le librerie fondamentali:

  • NumPy per operazioni matematiche e manipolazione di array.
  • Matplotlib per la visualizzazione dei dati.
  • scikit-learn per l’algoritmo di regressione lineare.

2. Creare il Dataset

# Creiamo un semplice dataset di esempio
X = np.array([[1], [2], [3], [4], [5]])
y = np.array([2, 4, 5, 4, 5])

Qui, X rappresenta la variabile indipendente (input), e y la variabile dipendente (output). Il dataset è piccolo per semplicità, ma i concetti si applicano anche a dataset più grandi.

3. Visualizzare i Dati

# Visualizziamo i dati
plt.scatter(X, y, color='blue')
plt.xlabel('Variabile Indipendente')
plt.ylabel('Variabile Dipendente')
plt.title('Dati di Esempio')
plt.show()

È sempre buona pratica visualizzare i dati per capire meglio le loro caratteristiche e la relazione tra le variabili.

4. Inizializzare e Addestrare il Modello

# Inizializziamo il modello di regressione lineare
model = LinearRegression()

# Addestriamo il modello sui dati
model.fit(X, y)

Con queste righe, creiamo un’istanza del modello di regressione lineare e lo addestriamo sul nostro dataset.

5. Analizzare i Coefficienti del Modello

# Otteniamo l'intercetta e il coefficiente angolare
intercept = model.intercept_
coefficient = model.coef_[0]

print(f'Intercetta (β₀): {intercept}')
print(f'Coefficiente Angolare (β₁): {coefficient}')

Questo ci permette di comprendere meglio il modello ottenuto e come la variabile indipendente influenza quella dipendente.

6. Fare Previsioni

# Facciamo previsioni sui dati di input
y_pred = model.predict(X)

Utilizziamo il modello addestrato per prevedere i valori di y in base a X.

7. Valutare le Prestazioni del Modello

from sklearn.metrics import mean_squared_error, r2_score

# Calcoliamo l'errore quadratico medio e il coefficiente di determinazione
mse = mean_squared_error(y, y_pred)
r2 = r2_score(y, y_pred)

print(f'Errore Quadratico Medio (MSE): {mse}')
print(f'Coefficiente di Determinazione (R²): {r2}')

Queste metriche ci aiutano a quantificare l’accuratezza del modello. Un MSE più basso indica un modello migliore, mentre un R² vicino a 1 suggerisce che il modello spiega bene la variabilità dei dati.

8. Visualizzare i Risultati

# Visualizziamo i risultati
plt.scatter(X, y, color='blue', label='Dati Osservati')
plt.plot(X, y_pred, color='red', label='Modello Predetto')
plt.xlabel('Variabile Indipendente')
plt.ylabel('Variabile Dipendente')
plt.title('Regressione Lineare')
plt.legend()
plt.show()

Questo grafico mostra i dati originali e la retta di regressione ottenuta, permettendoci di visualizzare l’adattamento del modello ai dati.

Estensione a Regressione Lineare Multipla

La regressione lineare può essere estesa per includere più variabili indipendenti. In questo caso, l’equazione diventa:

y = β₀ + β₁x₁ + β₂x₂ + ... + βₙxₙ + ε

Dove n è il numero di predittori.

Esempio con Più Variabili Indipendenti

# Dataset con due variabili indipendenti
X_multi = np.array([[1, 2],
                    [2, 1],
                    [3, 0],
                    [4, -1],
                    [5, -2]])
y_multi = np.array([5, 4, 6, 8, 7])

# Inizializziamo e addestriamo il modello
model_multi = LinearRegression()
model_multi.fit(X_multi, y_multi)

# Otteniamo i coefficienti
intercept_multi = model_multi.intercept_
coefficients_multi = model_multi.coef_

print(f'Intercetta (β₀): {intercept_multi}')
print(f'Coefficiente β₁: {coefficients_multi[0]}')
print(f'Coefficiente β₂: {coefficients_multi[1]}')

Questo ci permette di vedere come ogni variabile indipendente contribuisce alla variabile dipendente.

Considerazioni sulle Assunzioni del Modello

Per applicare correttamente la regressione lineare, è importante che siano soddisfatte alcune assunzioni:

  1. Linearità: La relazione tra variabili indipendenti e dipendente è lineare.
  2. Indipendenza degli Errori: Gli errori sono indipendenti tra loro.
  3. Omoschedasticità: La varianza degli errori è costante lungo tutti i valori delle variabili indipendenti.
  4. Normalità degli Errori: Gli errori seguono una distribuzione normale.

La violazione di queste assunzioni può portare a risultati fuorvianti.

Attraverso questa guida, abbiamo esplorato sia i concetti teorici che l’implementazione pratica in Python. Comprendere come funziona la regressione lineare e come interpretare i risultati è fondamentale per qualsiasi data scientist o analista.

Se avete domande o desiderate approfondire ulteriormente l’argomento, non esitate a lasciare un commento qui sotto. Buon lavoro! In ogni caso prova a leggere questa serie di articoli.

Se vuoi farmi qualche richiesta o contattarmi per un aiuto riempi il seguente form