Algorithme de régression logistique
Plongeons dans les mécanismes internes et implémentons un algorithme de régression logistique. Comme la fonction logit() de statsmodels est très complexe, vous vous limiterez à implémenter une régression logistique simple pour un seul jeu de données.
Plutôt que d'utiliser la somme des carrés comme mesure, nous voulons utiliser la vraisemblance. Toutefois, la log-vraisemblance est plus stable numériquement, donc nous l'utiliserons à 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 mesure à 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é de scipy.stats, et logit() ainsi que minimize() sont aussi chargées.
Cette activité fait partie du cours
Régression intermédiaire avec statsmodels en Python
Exercice interactif pratique
Essayez cet exercice en complétant ce code d’exemple.
# 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]))