Algoritmo di regressione logistica
Esploriamo cosa succede “dietro le quinte” e implementiamo un algoritmo di regressione logistica. Dato che la funzione logit() di statsmodels è molto complessa, ci limiteremo a implementare una regressione logistica semplice per un singolo insieme di dati.
Invece di usare la somma dei quadrati come metrica, vogliamo usare la verosimiglianza. Tuttavia, il log-verosimiglianza è più stabile dal punto di vista computazionale, quindi useremo quello. C’è in realtà un’ulteriore modifica: dato che vogliamo massimizzare il log-verosimiglianza, ma minimize() per impostazione predefinita trova valori minimi, è più semplice calcolare la negativa del log-verosimiglianza.
Il valore di log-verosimiglianza per ciascuna osservazione è $$ log(y_{pred}) * y_{actual} + log(1 - y_{pred}) * (1 - y_{actual}) $$
La metrica da calcolare è la somma negativa di questi contributi di log-verosimiglianza.
I valori esplicativi (la colonna time_since_last_purchase di churn) sono disponibili come x_actual.
I valori risposta (la colonna has_churned di churn) sono disponibili come y_actual.
logistic è importato da scipy.stats, e logit() e minimize() sono già caricati.
Questo esercizio fa parte del corso
Regressione intermedia con statsmodels in Python
esercizio interattivo pratico
Prova questo esercizio completando questo codice di esempio.
# Complete the function
def calc_neg_log_likelihood(coeffs):
# Unpack coeffs
____, ____ = ____
# Calculate predicted y-values
y_pred = ____
# Calculate log-likelihood
log_likelihood = ____
# Calculate negative sum of log_likelihood
neg_sum_ll = ____
# Return negative sum of log_likelihood
return ____
# Test the function with intercept 10 and slope 1
print(calc_neg_log_likelihood([10, 1]))