LoslegenKostenlos starten

Logistic-Regression-Algorithmus

Schauen wir uns die Interna an und implementieren einen Logistic-Regression-Algorithmus. Da die logit()-Funktion von statsmodels sehr komplex ist, bleibst du hier bei einer einfachen logistischen Regression für einen einzelnen Datensatz.

Anstatt die Summe der Quadrate als Metrik zu verwenden, nutzen wir die Likelihood. Die Log-Likelihood ist numerisch stabiler, daher verwenden wir diese. Es gibt noch eine Anpassung: Wir wollen die Log-Likelihood maximieren, aber minimize() sucht standardmäßig ein Minimum. Daher ist es einfacher, die negative Log-Likelihood zu berechnen.

Der Log-Likelihood-Wert für jede Beobachtung ist $$ log(y_{pred}) * y_{actual} + log(1 - y_{pred}) * (1 - y_{actual}) $$

Die zu berechnende Metrik ist die negative Summe dieser Log-Likelihood-Beiträge.

Die erklärenden Werte (die Spalte time_since_last_purchase von churn) stehen als x_actual bereit. Die Zielwerte (die Spalte has_churned von churn) stehen als y_actual bereit. logistic ist aus scipy.stats importiert, und logit() sowie minimize() sind ebenfalls geladen.

Diese Übung ist Teil des Kurses

<Kurs>Fortgeschrittene Regression mit statsmodels in Python</Kurs>
Kurs ansehen

Interaktive praktische Übung

Versuche dich an dieser Übung, indem du diesen Beispielcode vervollständigst.

# 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]))
Code bearbeiten und ausführen