Algoritmo de regresión logística
Vamos a profundizar en el funcionamiento interno e implementar un algoritmo de regresión logística. Dado que la función logit() de statsmodels es muy compleja, te limitarás a implementar una regresión logística simple para un único conjunto de datos.
En lugar de usar la suma de cuadrados como métrica, queremos usar la verosimilitud. Sin embargo, la log-verosimilitud es más estable computacionalmente, así que usaremos esa. De hecho, hay un cambio más: como queremos maximizar la log-verosimilitud, pero minimize() busca por defecto valores mínimos, es más sencillo calcular la log-verosimilitud negativa.
El valor de log-verosimilitud para cada observación es $$ log(y_{pred}) * y_{actual} + log(1 - y_{pred}) * (1 - y_{actual}) $$
La métrica a calcular es la suma negativa de estas contribuciones de log-verosimilitud.
Los valores explicativos (la columna time_since_last_purchase de churn) están disponibles como x_actual.
Los valores de respuesta (la columna has_churned de churn) están disponibles como y_actual.
logistic está importado de scipy.stats, y logit() y minimize() también están cargadas.
Este ejercicio forma parte del curso
Regresión intermedia con statsmodels en Python
ejercicio interactivo práctico
Prueba este ejercicio completando este código de ejemplo.
# 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]))