Le tecniche di classificazione sono una parte essenziale delle applicazioni di machine learning e data mining. Circa il 70% dei problemi di data science sono problemi di classificazione. Esistono molte tipologie di problemi di classificazione, ma la regressione logistica è comune ed è un metodo utile per risolvere i problemi di classificazione binaria. Un'altra categoria è la classificazione multinomiale, che gestisce i casi in cui nel target sono presenti più classi. Ad esempio, il dataset IRIS è un esempio molto famoso di classificazione multiclasse. Altri esempi sono la classificazione delle categorie di articoli/blog/documenti.
La regressione logistica può essere utilizzata per vari problemi di classificazione, come il rilevamento dello spam. Altri esempi includono: previsione del diabete, se un dato cliente acquisterà un determinato prodotto; se un cliente effettuerà churn oppure no, se l'utente farà clic o meno su un determinato link pubblicitario e molti altri casi.
La Regressione Logistica è uno degli algoritmi di Machine Learning più semplici e utilizzati per la classificazione a due classi. È facile da implementare e può essere usata come baseline per qualsiasi problema di classificazione binaria. I suoi concetti fondamentali di base sono anche utili nel deep learning. La regressione logistica descrive e stima la relazione tra una variabile dipendente binaria e variabili indipendenti.
Per eseguire facilmente in autonomia tutto il codice di esempio in questo tutorial, puoi creare gratuitamente un workbook DataLab con Python preinstallato e che contiene tutti gli esempi di codice. Per fare più pratica con la regressione logistica, prova gli esercizi del nostro corso Credit Risk Modeling in R, ricco di esempi reali.
Cos'è la Regressione Logistica?
La regressione logistica è un metodo statistico per prevedere classi binarie. L'output o variabile target è di natura dicotomica. Dicotomica significa che esistono solo due possibili classi. Per esempio, può essere utilizzata per problemi di rilevamento del cancro. Calcola la probabilità che si verifichi un evento.
È un caso particolare di regressione lineare in cui la variabile target è di natura categoriale. Usa il logit (log degli odds) come variabile dipendente. La Regressione Logistica prevede la probabilità di occorrenza di un evento binario utilizzando una funzione logit.
Equazione della Regressione Lineare:
![]()
Dove y è la variabile dipendente e x1, x2 ... e Xn sono le variabili esplicative.
Funzione Sigmoide:

Applicare la funzione Sigmoide alla regressione lineare:

Proprietà della Regressione Logistica:
- La variabile dipendente nella regressione logistica segue una distribuzione di Bernoulli.
- La stima è effettuata tramite massima verosimiglianza.
- Nessun R-quadrato; l'adeguatezza del modello è calcolata tramite Concordanza, Statistica KS.
Regressione Lineare vs Regressione Logistica
La regressione lineare restituisce un output continuo, mentre la regressione logistica fornisce un output discreto. Un esempio di output continuo è il prezzo di una casa o di un titolo. Esempi di output discreto sono la previsione se un paziente ha il cancro o meno e se un cliente effettuerà churn. La regressione logistica è stimata utilizzando l'approccio della massima verosimiglianza (MLE), mentre la regressione lineare è tipicamente stimata tramite i minimi quadrati ordinari (OLS), che possono essere considerati un caso particolare di MLE quando gli errori del modello sono distribuiti normalmente.

Massima Verosimiglianza vs Metodo dei Minimi Quadrati
La MLE è un metodo di massimizzazione della "verosimiglianza", mentre OLS è un metodo di approssimazione che minimizza la distanza. Massimizzare la funzione di verosimiglianza determina i parametri più probabili per generare i dati osservati. Da un punto di vista statistico, la MLE imposta media e varianza come parametri nel determinare i valori parametrici specifici per un dato modello. Questo insieme di parametri può essere utilizzato per prevedere i dati necessari in una distribuzione normale.
Le stime dei Minimi Quadrati Ordinari sono calcolate adattando ai punti dati una retta di regressione che ha la somma minima degli scarti quadratici (errore quadratico). Entrambi i metodi sono usati per stimare i parametri di un modello di regressione lineare. La MLE assume una funzione di massa di probabilità congiunta, mentre OLS non richiede assunzioni stocastiche per minimizzare la distanza.
Funzione sigmoide
La funzione sigmoide, detta anche funzione logistica, restituisce una curva a forma di “S” che può prendere qualsiasi numero reale e mappalo in un valore tra 0 e 1. Se la curva tende a più infinito, la y predetta diventa 1, e se tende a meno infinito, la y predetta diventa 0. Se l'output della funzione sigmoide è maggiore di 0,5, possiamo classificare l'esito come 1 o SÌ, e se è minore di 0,5, possiamo classificarlo come 0 o NO. Ad esempio, se l'output è 0,75, possiamo dire in termini di probabilità che c'è il 75% di possibilità che un paziente soffra di cancro.


Tipi di Regressione Logistica
Tipi di Regressione Logistica:
- Regressione Logistica Binaria: la variabile target ha solo due possibili esiti, come Spam o Non Spam, Cancro o Non Cancro.
- Regressione Logistica Multinomiale: la variabile target ha tre o più categorie nominali, come la previsione del tipo di vino.
- Regressione Logistica Ordinale: la variabile target ha tre o più categorie ordinali, come la valutazione di un ristorante o prodotto da 1 a 5.
Costruzione del modello in Scikit-learn
Costruiamo il modello di previsione del diabete usando un classificatore di regressione logistica.
Per prima cosa carichiamo il dataset Pima Indian Diabetes richiesto usando la funzione read CSV di pandas. Puoi scaricare i dati dal seguente link: https://www.kaggle.com/uciml/pima-indians-diabetes-database oppure selezionare un dataset da DataCamp: https://www.datacamp.com/datalab/datasets. Il dataset pronto all’uso ti consente di addestrare il modello su DataLab, il Jupyter notebook gratuito di DataCamp nel cloud.
Caricamento dei dati
Semplificheremo le colonne fornendo col_names alla funzione read_csv() di pandas.
#import pandas
import pandas as pd
col_names = ['pregnant', 'glucose', 'bp', 'skin', 'insulin', 'bmi', 'pedigree', 'age', 'label']
# load dataset
pima = pd.read_csv("pima-indians-diabetes.csv", header=None, names=col_names)
pima.head()
Selezione delle feature
Qui devi dividere le colonne fornite in due tipi di variabili: dipendente (o variabile target) e indipendenti (o variabili delle feature).
#split dataset in features and target variable
feature_cols = ['pregnant', 'insulin', 'bmi', 'age','glucose','bp','pedigree']
X = pima[feature_cols] # Features
y = pima.label # Target variable
Suddivisione dei dati
Per comprendere le prestazioni del modello, dividere il dataset in un training set e un test set è una buona strategia.
Dividiamo il dataset usando la funzione train_test_split(). Devi passare 3 parametri: features, target e dimensione del test_set. Inoltre, puoi usare random_state per selezionare i record in modo casuale.
# split X and y into training and testing sets
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=16)
Qui il dataset è suddiviso in due parti nel rapporto 75:25. Significa che il 75% dei dati verrà utilizzato per l'addestramento del modello e il 25% per il test del modello.
Sviluppo del modello e predizione
Per prima cosa importa il modulo LogisticRegression e crea un oggetto classificatore di regressione logistica usando la funzione LogisticRegression() con random_state per la riproducibilità.
Quindi, adatta il modello sul train set usando fit() ed effettua le predizioni sul test set usando predict().
# import the class
from sklearn.linear_model import LogisticRegression
# instantiate the model (using the default parameters)
logreg = LogisticRegression(random_state=16)
# fit the model with data
logreg.fit(X_train, y_train)
y_pred = logreg.predict(X_test)
Valutazione del modello con la Matrice di Confusione
Una matrice di confusione è una tabella usata per valutare le prestazioni di un modello di classificazione. Puoi anche visualizzare le prestazioni di un algoritmo. La parte fondamentale di una matrice di confusione è il numero di predizioni corrette e scorrette riassunte per classe.
# import the metrics class
from sklearn import metrics
cnf_matrix = metrics.confusion_matrix(y_test, y_pred)
cnf_matrix
array([[115, 8],
[ 30, 39]])
Qui puoi vedere la matrice di confusione sotto forma di oggetto array. La dimensione di questa matrice è 2×2 perché questo modello è di classificazione binaria. Hai due classi 0 e 1. I valori diagonali rappresentano le predizioni corrette, mentre gli elementi fuori diagonale sono predizioni errate. Nell'output, 115 e 39 sono predizioni corrette e 30 e 8 sono predizioni scorrette.
Visualizzare la matrice di confusione con una heatmap
Visualizziamo i risultati del modello sotto forma di matrice di confusione usando matplotlib e seaborn.
Qui visualizzerai la matrice di confusione usando una Heatmap.
# import required modules
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
class_names=[0,1] # name of classes
fig, ax = plt.subplots()
tick_marks = np.arange(len(class_names))
plt.xticks(tick_marks, class_names)
plt.yticks(tick_marks, class_names)
# create heatmap
sns.heatmap(pd.DataFrame(cnf_matrix), annot=True, cmap="YlGnBu" ,fmt='g')
ax.xaxis.set_label_position("top")
plt.tight_layout()
plt.title('Confusion matrix', y=1.1)
plt.ylabel('Actual label')
plt.xlabel('Predicted label')
Text(0.5,257.44,'Predicted label');
Metriche di valutazione della matrice di confusione
Valutiamo il modello usando classification_report per accuracy, precision e recall.
from sklearn.metrics import classification_report
target_names = ['without diabetes', 'with diabetes']
print(classification_report(y_test, y_pred, target_names=target_names))
precision recall f1-score support
without diabetes 0.79 0.93 0.86 123
with diabetes 0.83 0.57 0.67 69
accuracy 0.80 192
macro avg 0.81 0.75 0.77 192
weighted avg 0.81 0.80 0.79 192
Hai ottenuto un tasso di classificazione del 80%, considerato una buona accuratezza.
Precision: la precision riguarda l'essere precisi, cioè quanto è accurato il tuo modello. In altre parole, quando un modello fa una previsione, con quale frequenza ha ragione. Nel tuo caso, quando il modello di regressione logistica ha previsto che i pazienti soffriranno di diabete, quei pazienti lo hanno effettivamente avuto il 73% delle volte.
Recall: se nel test set ci sono pazienti con diabete, il tuo modello di regressione logistica riesce a identificarli il 57% delle volte.
Curva ROC
La curva ROC (Receiver Operating Characteristic) è un grafico del tasso di veri positivi contro il tasso di falsi positivi. Mostra il compromesso tra sensibilità e specificità.
y_pred_proba = logreg.predict_proba(X_test)[::,1]
fpr, tpr, _ = metrics.roc_curve(y_test, y_pred_proba)
auc = metrics.roc_auc_score(y_test, y_pred_proba)
plt.plot(fpr,tpr,label="data 1, auc="+str(auc))
plt.legend(loc=4)
plt.show()

Lo score AUC in questo caso è 0,88. Un AUC pari a 1 rappresenta un classificatore perfetto, mentre 0,5 rappresenta un classificatore inutile.
Il codice sorgente è disponibile su DataLab: Understanding Logistic Regression in Python.
Vantaggi
Per la sua natura efficiente e semplice, non richiede elevata potenza di calcolo, è facile da implementare, facilmente interpretabile e ampiamente utilizzata da data analyst e data scientist. Inoltre, non richiede lo scaling delle feature. La regressione logistica fornisce uno score di probabilità per le osservazioni.
Svantaggi
La regressione logistica non è in grado di gestire un gran numero di feature/variabili categoriali. È vulnerabile all'overfitting. Inoltre, non può risolvere problemi non lineari, motivo per cui richiede una trasformazione delle feature non lineari. La regressione logistica non si comporterà bene con variabili indipendenti non correlate alla variabile target e molto simili o correlate tra loro.
Conclusione
In questo tutorial hai visto molti dettagli sulla regressione logistica. Hai imparato cos'è la regressione logistica, come costruire i relativi modelli, come visualizzare i risultati e alcune informazioni teoriche di base. Inoltre, hai affrontato concetti fondamentali come la funzione sigmoide, la massima verosimiglianza, la matrice di confusione, la curva ROC.
Si spera che ora tu possa utilizzare la tecnica della Regressione Logistica per analizzare i tuoi dataset. Grazie per aver letto questo tutorial!
Se vuoi saperne di più sulla Regressione Logistica, segui il corso di DataCamp Machine Learning with scikit-learn. Puoi anche iniziare il tuo percorso per diventare machine learning engineer iscrivendoti al career track Machine Learning Scientist with Python.



