Por qué necesitas regresión logística

Introducción a la regresión con statsmodels en Python

Maarten Van den Broeck

Content Developer at DataCamp

Dataset de churn bancario

has_churned time_since_first_purchase time_since_last_purchase
0 0.3993247 -0.5158691
1 -0.4297957 0.6780654
0 3.7383122 0.4082544
0 0.6032289 -0.6990435
... ... ...
response length of relationship recency of activity
1 https://www.rdocumentation.org/packages/bayesQR/topics/Churn
Introducción a la regresión con statsmodels en Python

Churn vs. recencia: modelo lineal

mdl_churn_vs_recency_lm = ols("has_churned ~ time_since_last_purchase",
                              data=churn).fit()

print(mdl_churn_vs_recency_lm.params)
Intercept                   0.490780
time_since_last_purchase    0.063783
dtype: float64
intercept, slope = mdl_churn_vs_recency_lm.params
Introducción a la regresión con statsmodels en Python

Visualizar el modelo lineal

sns.scatterplot(x="time_since_last_purchase",
                y="has_churned",
                data=churn)

plt.axline(xy1=(0, intercept), slope=slope) plt.show()

Diagrama de dispersión de churn (sí/no) frente a tiempo desde la última compra. Todos los puntos están en y=0 o y=1. Una línea de tendencia lineal muestra mayor probabilidad de churn al aumentar el tiempo.

Introducción a la regresión con statsmodels en Python

Alejando el zoom

sns.scatterplot(x="time_since_last_purchase",
                y="has_churned",
                data=churn)

plt.axline(xy1=(0,intercept),
           slope=slope)

plt.xlim(-10, 10) plt.ylim(-0.2, 1.2)
plt.show()

El mismo diagrama de dispersión con zoom alejado. La línea de tendencia se extiende por debajo de y=0 y por encima de y=1, lo cual no debería ser posible.

Introducción a la regresión con statsmodels en Python

¿Qué es la regresión logística?

  • Otro tipo de modelo lineal generalizado.
  • Se usa cuando la variable respuesta es lógica.
  • Las respuestas siguen una curva logística (en S).
Introducción a la regresión con statsmodels en Python

Regresión logística con logit()

from statsmodels.formula.api import logit
mdl_churn_vs_recency_logit = logit("has_churned ~ time_since_last_purchase",
                                   data=churn).fit()

print(mdl_churn_vs_recency_logit.params)
Intercept                  -0.035019
time_since_last_purchase    0.269215
dtype: float64
Introducción a la regresión con statsmodels en Python

Visualizar el modelo logístico

sns.regplot(x="time_since_last_purchase",
            y="has_churned",
            data=churn,
            ci=None,
            logistic=True)
plt.axline(xy1=(0,intercept),
           slope=slope,
           color="black")

plt.show()

Diagrama de dispersión de churn (sí/no) frente a tiempo desde la última compra. Se muestran líneas de tendencia lineal y logística; ambas indican mayor probabilidad de churn al aumentar el tiempo. Las líneas son similares salvo en valores altos de tiempo desde la última compra.

Introducción a la regresión con statsmodels en Python

Alejando el zoom

El mismo diagrama de dispersión con ambas líneas de tendencia. Al alejar el zoom, se ve que la línea logística nunca sale del rango de 0 a 1 para churn.

Introducción a la regresión con statsmodels en Python

¡Vamos a practicar!

Introducción a la regresión con statsmodels en Python

Preparing Video For Download...