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>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]))