Algorithme de régression logistique
Plongeons dans les coulisses et implémentons un algorithme de régression logistique. Comme la fonction logit() de statsmodels est très complexe, vous allez vous limiter à une régression logistique simple pour un seul jeu de données.
Plutôt que d’utiliser la somme des carrés comme métrique, nous allons utiliser la vraisemblance. Cependant, la log-vraisemblance est plus stable numériquement ; nous l’utiliserons donc à la place. En fait, il y a un autre changement : comme nous voulons maximiser la log-vraisemblance, mais que minimize() cherche par défaut des valeurs minimales, il est plus simple de calculer la log-vraisemblance négative.
La valeur de log-vraisemblance pour chaque observation est $$ log(y_{pred}) * y_{actual} + log(1 - y_{pred}) * (1 - y_{actual}) $$
La métrique à calculer est la somme négative de ces contributions de log-vraisemblance.
Les valeurs explicatives (la colonne time_since_last_purchase de churn) sont disponibles sous x_actual.
Les valeurs de réponse (la colonne has_churned de churn) sont disponibles sous y_actual.
logistic est importé depuis scipy.stats, et logit() ainsi que minimize() sont également chargées.
Cet exercice fait partie du cours
Régression intermédiaire avec statsmodels en Python
Exercice interactif pratique
Essayez cet exercice en complétant cet exemple de code.
# 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]))