CommencezCommencez gratuitement

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

Voir le cours

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]))
Modifier et exécuter le code