Algoritme voor logistische regressie
Laten we de binnenkant induiken en een logistische-regressie-algoritme implementeren. Omdat de logit()-functie van statsmodels erg complex is, houd je het hier bij een eenvoudige logistische regressie voor één gegevensset.
In plaats van de som van kwadraten als maatstaf te gebruiken, willen we likelihood gebruiken. Log-likelihood is echter rekenkundig stabieler, dus die gebruiken we. Er is nog één verandering: we willen de log-likelihood maximaliseren, maar minimize() zoekt standaard naar minima. Daarom is het makkelijker om de negatieve log-likelihood te berekenen.
De log-likelihood voor elke observatie is $$ log(y_{pred}) * y_{actual} + log(1 - y_{pred}) * (1 - y_{actual}) $$
De te berekenen maatstaf is de negatieve som van deze log-likelihood-bijdragen.
De verklarende waarden (de kolom time_since_last_purchase van churn) zijn beschikbaar als x_actual.
De responswaarden (de kolom has_churned van churn) zijn beschikbaar als y_actual.
logistic is geïmporteerd uit scipy.stats, en logit() en minimize() zijn ook geladen.
Deze oefening maakt deel uit van de cursus
Gemiddelde regressie met statsmodels in Python
Interactieve oefening met praktijkervaring
Probeer deze oefening door deze voorbeeldcode aan te vullen.
# 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]))