EmpezarEmpieza gratis

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

Ver curso

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]))
Editar y ejecutar código