lección 4
Regresión logística y el odds ratio
Cuando explicas un sí o un no la recta no sirve: la logística lo arregla con una curva en S, y su coeficiente se lee con el odds ratio.
⏱ 55 min
Hay una pregunta que una recta no puede responder bien, y es una de las más frecuentes del trabajo con datos: ¿pasará esto, sí o no? ¿Se dará de baja este cliente? ¿Devolverá el préstamo? ¿Comprará quien ha metido el producto en el carrito? Son preguntas de sí o no, y cuando intentas responderlas con la regresión que ya conoces, pasa algo absurdo: el modelo te predice probabilidades del 130% y del menos 20%, que no existen. No es un fallo tuyo: es que le estás pidiendo a una línea recta que viva dentro de un corralito (entre 0 y 1) para el que no está hecha. La herramienta correcta para estas preguntas es la regresión logística, y su forma de explicar los efectos (el odds ratio) es a la vez elegante y la fuente del malentendido más común de toda la estadística aplicada.
Ya sabes ajustar una regresión lineal, leer su coeficiente y desconfiar de él cuando dos variables compiten. Todo eso sigue valiendo, pero con un cambio importante: hasta ahora, lo que explicabas era una cantidad (helados, euros, minutos). Hoy lo que explicas es la probabilidad de que algo ocurra, y eso obliga a cambiar la recta por una curva y a cambiar la forma de leer el coeficiente. La buena noticia es que la mecánica de statsmodels es casi idéntica; la parte que de verdad cuesta, y a la que vamos a dedicar la lección, es interpretar lo que sale.
## Por qué la recta se sale del tiesto
Imagina que quieres explicar la probabilidad de que un cliente se dé de baja a partir de los meses que lleva contigo. Codificas la baja como 1 y la permanencia como 0, y ajustas una recta. El problema aparece enseguida: una recta no tiene límites, sigue subiendo o bajando sin parar. Para clientes con muy pocos meses, la recta puede predecir una probabilidad de 1,3 (un 130% de darse de baja, imposible); para clientes muy veteranos, una probabilidad de -0,2 (un menos 20%, todavía más imposible). Una probabilidad vive siempre entre 0 y 1, y la recta no sabe respetar esa frontera porque no la conoce.
La regresión logística resuelve esto con una idea simple: en lugar de una recta, usa una curva que se achata por los extremos. Cuando se acerca a 1 por arriba, se frena y nunca lo pasa; cuando se acerca a 0 por abajo, hace lo mismo. En el medio, donde la decisión está más reñida, la curva sube deprisa. Esa curva tiene forma de S alargada y se llama curva logística o sigmoide. Es, literalmente, la recta de siempre pasada por un filtro que la obliga a quedarse dentro del corralito de las probabilidades.
La forma de la S cuenta algo que tiene sentido en el mundo real, no es solo un truco matemático. Piensa en la probabilidad de que un cliente se dé de baja según su antigüedad. Entre los clientes nuevos, un mes más de antigüedad apenas cambia nada: siguen siendo todos de alto riesgo. Entre los muy veteranos, un mes más tampoco cambia nada: ya son todos leales. El cambio de verdad ocurre en la zona intermedia, donde el cliente se está decidiendo, y ahí es donde la curva sube con fuerza. Esa es la lógica de la S: los efectos son pequeños en los extremos (donde ya casi todo está decidido) y grandes en el centro (donde se juega la decisión). Una recta, con su pendiente constante, no sabría capturar eso.
Vale la pena nombrar un detalle para que no te sorprenda: la regresión logística, pese a su nombre y a trabajar con una curva, se sigue considerando un modelo "lineal". Suena contradictorio, pero tiene su lógica: lo que es lineal no es la relación con la probabilidad (esa es la curva), sino la relación con los odds, de los que hablaremos en seguida. Por detrás, el modelo construye una recta de siempre y luego la pasa por el filtro que la convierte en curva. No necesitas seguir esa maquinaria para usar la logística, pero sí conviene que el nombre "lineal" no te confunda cuando lo oigas: la logística es prima hermana de la regresión que ya conoces, no una criatura distinta.
## Ajustarla: casi igual que la lineal
En statsmodels, cambiar de la regresión lineal a la logística es cambiar una palabra: donde usabas ols (de mínimos cuadrados), ahora usas logit. La fórmula se escribe igual, los datos se pasan igual, y vuelves a tener coeficientes, intervalos de confianza y p-valores. Lo único que cambia (y mucho) es cómo se lee el coeficiente, porque ahora no está en las unidades del resultado, sino en una escala rara que hay que traducir.
1import numpy as np2import pandas as pd3import statsmodels.formula.api as smf45# Clientes: meses de antiguedad y si se dieron de baja (1) o no (0)6rng = np.random.default_rng(11)7n = 4008meses = rng.uniform(1, 36, n)9prob = 1 / (1 + np.exp(-(1.5 - 0.12 * meses)))10baja = rng.binomial(1, prob)11df = pd.DataFrame({"baja": baja, "meses": meses})1213# smf.logit en vez de smf.ols. El disp=0 solo calla el log de la optimizacion14modelo = smf.logit("baja ~ meses", data=df).fit(disp=0)1516print(f"Coeficiente de meses: {modelo.params['meses']:.3f}")
La logística se ajusta como la lineal, cambiando ols por logit
## Odds: la forma en que apuesta un inglés
Para entender el odds ratio hay que entender primero qué son los odds, una palabra que no tiene una traducción limpia al español y que viene del mundo de las apuestas. Una probabilidad dice "de cada 100 veces, pasa 20". Los odds dicen lo mismo de otra forma: "pasa 20, no pasa 80, así que los odds son 20 contra 80, o sea 1 a 4". Formalmente, los odds son la probabilidad de que algo pase dividida entre la probabilidad de que no pase. Si la probabilidad de baja es 0,2, los odds de baja son 0,2 dividido entre 0,8, que es 0,25. Se lee "las apuestas están 1 a 4 en contra de que se dé de baja".
Los odds pueden parecer una complicación innecesaria (¿por qué no quedarnos con la probabilidad?), pero tienen una ventaja que es justo la que necesita la logística: mientras una probabilidad está encajonada entre 0 y 1, los odds pueden ir de 0 a infinito. Esa libertad es lo que permite que la curva logística se comporte bien. Y hay una razón más profunda: la logística es lineal en los odds. Es decir, el coeficiente del modelo habla, por detrás, el idioma de los odds, no el de las probabilidades. Por eso para traducir el coeficiente a algo legible pasamos por los odds.
Vamos a hacer la cuenta despacio con un ejemplo, porque los odds se entienden mejor con números que con definiciones. Supón que de cada 100 clientes de un tipo, 20 se dan de baja y 80 se quedan. La probabilidad de baja es 20 entre 100, o sea 0,20. Los odds de baja son otra cosa: los que se van divididos entre los que se quedan, 20 entre 80, que da 0,25. En lenguaje de apuestas: "las apuestas están 1 a 4 en contra de que se dé de baja", porque por cada uno que se va hay cuatro que se quedan. Fíjate en que probabilidad (0,20) y odds (0,25) son números distintos para la misma realidad: no son lo mismo, y confundirlos es justo el error que vamos a cazar.
La relación entre los dos tiene una propiedad que conviene tener presente: cuando la probabilidad es pequeña, probabilidad y odds se parecen mucho (0,05 de probabilidad son 0,053 de odds, casi iguales), pero cuando la probabilidad se acerca a 1, los odds se disparan hacia el infinito (0,95 de probabilidad son 19 de odds). Esto explica por qué un mismo cambio en los odds mueve la probabilidad de forma muy distinta según dónde estés: en la zona baja, odds y probabilidad caminan juntos; en la zona alta, los odds corren y la probabilidad apenas se mueve porque ya está pegada a su techo de 1. Guárdate esta idea, porque es la raíz de la trampa del odds ratio.
## El odds ratio: qué es y cómo se calcula
El odds ratio (razón de odds, o cociente de ventajas) es la traducción legible del coeficiente, y se obtiene con una operación sencilla: elevar el número e al coeficiente, que en Python es np.exp(coeficiente). El resultado se lee así: "por cada unidad que sube la variable, los odds del resultado se MULTIPLICAN por el odds ratio". Si el odds ratio es 1,5, cada unidad de más multiplica los odds por 1,5 (los sube un 50%). Si es 0,88, cada unidad los multiplica por 0,88 (los baja un 12%). Si es exactamente 1, la variable no cambia nada (multiplicar por 1 deja igual).
1import numpy as np2import pandas as pd3import statsmodels.formula.api as smf45rng = np.random.default_rng(11)6n = 4007meses = rng.uniform(1, 36, n)8prob = 1 / (1 + np.exp(-(1.5 - 0.12 * meses)))9baja = rng.binomial(1, prob)10df = pd.DataFrame({"baja": baja, "meses": meses})11modelo = smf.logit("baja ~ meses", data=df).fit(disp=0)1213coef = modelo.params["meses"]14odds_ratio = np.exp(coef) # la traduccion: e elevado al coeficiente1516print(f"Coeficiente (en escala rara): {coef:.3f}")17print(f"Odds ratio (legible): {odds_ratio:.3f}")
Del coeficiente al odds ratio con np.exp()
## La trampa: por qué NO es "un 50% más de probabilidad"
Aquí está el error que comete casi todo el mundo, y conviene grabárselo. Si un odds ratio es 1,5, la tentación es decir "entonces la probabilidad sube un 50%". Es FALSO, y la razón es que el odds ratio habla de odds, no de probabilidades, y esas dos cosas no se mueven igual. Multiplicar los odds por 1,5 cambia la probabilidad en una cantidad que depende de dónde partías. Si tu probabilidad era pequeña (digamos 0,10), multiplicar los odds por 1,5 la sube hasta cerca de 0,14: ha subido 4 puntos, no 50. Si tu probabilidad era 0,50, la misma multiplicación la sube a 0,60: 10 puntos. El mismo odds ratio produce cambios de probabilidad distintos según el punto de partida.
La frase correcta para un odds ratio de 1,5 es "las apuestas a favor del resultado se multiplican por 1,5" o "los odds suben un 50%". NUNCA "la probabilidad sube un 50%" ni "hay un 50% más de posibilidades". Esa confusión aparece hasta en artículos científicos y titulares de prensa, y lleva a sobrestimar efectos. Si tienes que explicárselo a alguien que no sabe qué son los odds, lo honesto es calcular las probabilidades concretas en dos escenarios ("un cliente nuevo tiene un 60% de baja; uno de un año, un 25%") en vez de soltar el odds ratio pelado.
## Un odds ratio por debajo de 1: cuando la variable protege
Los odds ratio por debajo de 1 confunden al principio porque parecen pequeños, pero se leen con la misma regla. Un odds ratio de 0,4 significa que cada unidad de la variable multiplica los odds por 0,4, es decir, los reduce a menos de la mitad. Es un efecto fuerte, protector: la variable baja mucho la probabilidad del resultado. La simetría ayuda: un odds ratio de 2 dobla los odds, y uno de 0,5 los reduce a la mitad; son el mismo efecto de fuerza opuesta. Cuando veas un odds ratio claramente por debajo de 1, lee "esta variable protege contra el resultado", y cuanto más cerca de 0, más protege.
Consejo de senior: cuando presentes resultados de una logística, lleva siempre dos traducciones preparadas. Para una audiencia técnica, el odds ratio con su intervalo de confianza ("odds ratio 0,88 por mes, IC entre 0,85 y 0,91"). Para una audiencia de negocio, probabilidades concretas en escenarios reconocibles ("un cliente de su primer mes tiene un 80% de probabilidad de irse; uno que llega al año, un 20%"). La segunda es la que mueve decisiones; la primera es la que te respalda si alguien técnico la cuestiona.
## La significancia también vive aquí
Todo lo que aprendiste sobre interrogar un coeficiente sigue valiendo en la logística, solo que aplicado al odds ratio. El modelo te da también un intervalo de confianza y un p-valor para cada variable, y la pregunta "¿distingo este efecto del nulo?" se lee igual, con una pequeña traducción. En la escala de los odds ratio, "no hay efecto" no es el cero: es el UNO, porque multiplicar los odds por 1 los deja igual. Así que el atajo visual cambia de referencia: en lugar de mirar si el intervalo cruza el cero, miras si el intervalo del odds ratio cruza el uno. Si el intervalo del odds ratio es [0,85, 0,91], no contiene el uno, así que el efecto protector es real; si fuera [0,80, 1,15], sí contiene el uno, y no podrías descartar que la variable no haga nada.
Esta continuidad es la gracia del módulo: no estás aprendiendo una herramienta nueva de cero, estás extendiendo la que ya dominas a un tipo de resultado distinto. El coeficiente, el intervalo, el p-valor, la pregunta de si el efecto se distingue de "no hacer nada": todo reaparece, con la única novedad de que ahora el resultado es un sí o un no, el coeficiente se traduce a odds ratio, y el punto de "no efecto" es el uno en vez del cero. Si entendiste la regresión lineal con inferencia, la logística es ese mismo esqueleto con una piel distinta.
## Por qué la banca lleva cuarenta años con esto
La regresión logística podría parecer una herramienta vieja al lado de los modelos de predicción modernos, que la superan en acierto puro. Y sin embargo, sigue siendo el caballo de batalla de la banca para decidir a quién se concede un crédito, cuarenta años después de popularizarse. No es nostalgia: es que un banco tiene una obligación que ningún modelo-caja cumple. Cuando le niega un crédito a alguien, la ley le exige poder explicar por qué, con razones concretas y auditables. La logística se lo da en bandeja: cada variable tiene su coeficiente, su odds ratio y su significancia, y puedes decir "se le deniega porque su ratio de endeudamiento multiplica por tanto los odds de impago". Un modelo que acierta más pero no sabe explicar por qué decide lo que decide es, en banca, directamente ilegal.
Esto enlaza con lo primero que viste en el módulo: a veces el mejor modelo no es el que más acierta, sino el que puedes defender. La logística vive justo en esa frontera. Es un modelo que explica (te da efectos interpretables, con su incertidumbre) y que, a la vez, predice razonablemente bien. Por eso es tan querida en los dominios donde una decisión tiene que poder justificarse ante un regulador, un cliente o un juez. Y por eso la aprendes antes de los modelos puramente predictivos: te enseña que un sí o un no también se puede explicar, no solo adivinar.
Ya sabes modelar un resultado de sí o no y leer su efecto sin caer en la trampa del odds ratio. Pero hay algo que todos los modelos que has visto hasta ahora tienen en común, y es un punto ciego: el summary siempre te da un coeficiente y un p-valor con buena pinta, aunque el modelo sea una mentira. Lo que te dice si de verdad puedes creértelo no está en el summary: está en lo que el modelo deja sin explicar. Toca aprender a mirar los residuos.
## comentarios
Reporta erratas, ayuda a otros o comparte tu opinión. Sé constructivo.
Inicia sesión para comentar y responder.
cargando comentarios...
Regístrate para guardar tu progreso.