CommencerCommencer 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

Régression intermédiaire avec statsmodels en Python

Afficher le cours

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