Algoritmul de regresie logistică
Hai să explorăm mecanismul intern și să implementăm un algoritm de regresie logistică. Deoarece funcția logit() din statsmodels este foarte complexă, te vei limita la implementarea regresiei logistice simple pentru un singur set de date.
În loc să folosim suma pătratelor ca metrică, vrem să folosim verosimilitatea. Totuși, log-verosimilitatea este mai stabilă din punct de vedere computațional, așa că o vom folosi pe aceasta. Mai este și o altă ajustare: deoarece vrem să maximizăm log-verosimilitatea, iar minimize() caută implicit valori minime, este mai simplu să calculăm log-verosimilitatea negativă.
Valoarea log-verosimilității pentru fiecare observație este $$ log(y_{pred}) * y_{actual} + log(1 - y_{pred}) * (1 - y_{actual}) $$
Metrica de calculat este suma negativă a acestor contribuții la log-verosimilitate.
Valorile explicative (coloana time_since_last_purchase din churn) sunt disponibile ca x_actual.
Valorile răspuns (coloana has_churned din churn) sunt disponibile ca y_actual.
logistic este importat din scipy.stats, iar logit() și minimize() sunt de asemenea încărcate.
Acest exercițiu face parte din cursul
Regresie intermediară cu statsmodels în Python
Exercițiu interactiv practic
Încearcă acest exercițiu completând acest cod de exemplu.
# 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]))