CommencerCommencez gratuitement

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

<cours>Régression intermédiaire avec statsmodels en Python</cours>
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