dice "la probabilidad de que este cliente se vaya es 0,4" y su código predice (X) >= 0,5, acaba de tomar una decisión de precio: decidió que el costo de enviar una oferta de retención a un cliente que se habría quedado es exactamente igual al costo de perder a uno que se habría ido, y en el conjunto de datos de IBM Telco (posiblemente el conjunto de datos de abandono más reciclado en Kaggle y GitHub), esa decisión es incorrecta por un factor de 13.
Reuní un corpus de 36 análisis de abandono de IBM Telco disponibles públicamente (cuadernos Kaggle, repositorios de GitHub, publicaciones de blogs, artículos revisados por pares), y el patrón de presentación de informes es sorprendente: aproximadamente nueve de cada diez informes de precisión de clasificación o F1, poco más de uno de cada siete informa una curva de ganancias, y ninguno utiliza el análisis de supervivencia para calcular el valor de vida.
El resultado es una literatura donde el mismo conjunto de datos ha sido remodelado cientos de veces, y cada modelo de umbral predeterminado deja dinero en el suelo: alrededor de $86 por cliente en gastos evitables en la división de prueba estándar del 20%, y escalado a un libro de 100.000 suscriptores con el mismo perfil de abandono que representaría $8,6 millones en costo recuperable; la tasa de abandono de IBM Telco (26,5% anual) es inusualmente alta, y un libro de SaaS B2C más saludable con un 5-8% de abandono anual haría que la cifra por cliente cayera aproximadamente entre 3 y 4 veces, por lo que lo que permanece invariable en cualquier entorno sensible a los costos no es el monto en dólares del título sino la asimetría: 13 veces más costoso perder un abandono que tratar en exceso a un leal.
Este artículo expone tres cosas, en orden: primero, lo que informa la literatura de IBM Telco y lo que omite; en segundo lugar, cómo calcular el costo en dólares de una clasificación errónea utilizando puntos de referencia públicos de SaaS B2C de 2026 y el análisis de supervivencia de Kaplan-Meier, sin CAC manual; En tercer lugar, por qué la fórmula del umbral óptimo de Bayes del libro de texto pierde ante un barrido de fuerza bruta cuando el modelo se entrena con datos equilibrados SMOTE, y qué hacer al respecto.
Cada número de este artículo se puede reproducir a partir de los guiones vinculados al final.
1. La brecha de los 36 artículos
El conjunto de datos de IBM Telco Customer Churn es pequeño (7032 filas limpias), ordenado, etiquetado y ha sido el conjunto de datos introductorio canónico de abandono de Kaggle durante casi una década.
Para tener una idea de lo que realmente mide el corpus público, indexé 36 análisis en Kaggle, GitHub y los principales blogs de ciencia de datos, calificando cada uno en diez dimensiones de informes que van desde la puntuación F1 hasta una curva de ganancias basada en CAC y LTV.
El patrón que surgió se encuentra en la Figura 2.
Tres hallazgos que vale la pena destacar:
Saturado: F1, precisión, AUC, capturas de pantalla de matriz de confusión y comparaciones SMOTE versus no SMOTE aparecen en el 80-90% del corpus, con el ajuste de hiperparámetros a través de Optuna o la búsqueda de cuadrícula como un tropo casi universal. Poco común: una curva de ganancias (costo total en dólares de las clasificaciones erróneas en función del umbral de decisión) aparece en menos del 15% de los análisis que revisé, y cuando aparece, las cifras de costos FN/FP generalmente se seleccionan de un ejemplo de libro de texto sin anclarlas a CAC o LTV reales. Ausente: ninguno de los 36 análisis que indexé calcula el valor de vida del cliente a través del análisis de supervivencia en la tenencia; la mayoría omite el LTV por completo o utiliza la fórmula Skok de estado estacionario LTV = ARPU / tasa de abandono mensual, que supone una base de clientes homogénea, un reclamo sólido para un conjunto de datos donde el tipo de contrato, el método de pago y la tenencia cambian materialmente la retención.
Saltarse el análisis de supervivencia es importante porque la decisión del umbral es una función del LTV: si calcula mal el LTV en 2x, calcula mal el costo de una abandono fallida en 2x, y el umbral de costo óptimo se mueve con él.
Las siguientes dos secciones construyen la pieza que falta y luego la vuelven a conectar al problema del umbral.
2. El costo de un error, en dólares
Tres números determinan el costo en dólares de cada predicción (ARPU, margen bruto y CAC); dos provienen directamente del conjunto de datos, uno de los puntos de referencia públicos de la industria de 2026.
importar pandas como pd df = pd.read_csv("telco.csv") df["TotalCharges"] = pd.to_numeric(df["TotalCharges"], errores="coerce") df = df.dropna().reset_index(drop=True) arpu = df["MonthlyCharges"].mean() # $64.80 mean_tenure = df["tenure"].mean() # 32,42 meses tasa de abandono = (df["Churn"] == "Sí").mean() # 26,58 % realised_ltv_churned = df.loc[df["Churn"] == "Sí", "TotalCharges"].mean() # $1.531,80
El ARPU y la permanencia son nativos del conjunto de datos: el cargo mensual medio es de $64,80, la permanencia media observada es de 32,4 meses y el LTV realizado de los que abandonan es de $1531,80 (solo los cargos totales promedio sobre los clientes que ya se fueron), por lo que manteniendo el ARPU fijo, tres marcos LTV comunes dan límites muy diferentes:
Ninguna de estas tres es la respuesta correcta y la primera está claramente equivocada. ARPU × mean_tenure es el marco que utilizan la mayoría de los tutoriales y está roto en la raíz. ARPU no es propiedad de un cliente; es el resultado conjunto de cada característica lo que también impulsa la deserción: tipo de contrato, método de pago, paquete de productos, estructura del hogar. Los ingresos se van con el cliente, por lo que el ARPU y la antigüedad no son cantidades independientes, y la descomposición del libro de texto LTV ≈ E[ARPU] × E[vida útil] solo es válida cuando Cov(ARPU, vida útil) = 0. En cualquier conjunto de datos de abandono que valga la pena modelar, esa covarianza es distinta de cero (si fuera cero, el modelo no tendría nada que predecir) y un cliente con cargos mensuales de $80 al mes y 8 meses de antigüedad no es un “cliente de altos ingresos”; sus 80 dólares y sus 8 meses son dos lecturas del mismo perfil de riesgo subyacente.
Considere el hecho de que el ARPU varía dentro de la vida de un solo cliente (una cohorte de incorporación de promociones que paga $30/mes durante los primeros tres meses y $80/mes después, un cliente leal de larga data con derechos adquiridos a una tarifa de $50/mes mientras que los nuevos clientes pagan $90/mes por el mismo producto) y multiplicar la media de una distribución por la media de otra describe a un cliente que no existe en ninguna parte de los datos.
La fórmula de Skok al menos utiliza una tasa de abandono en estado estacionario, pero supone que esa tasa es constante para siempre. El LTV obtenido es un número real, pero sólo describe los clientes que ya ha perdido.
Ninguno de los tres le indica cuándo un nuevo cliente alcanza el punto de equilibrio en el costo de adquisición; para eso necesita una curva de retención real, que es la siguiente sección, pero primero unas palabras sobre CAC.
Para B2C SaaS en los puntos de referencia de 2026, el CAC oscila entre aproximadamente $68 (comercio electrónico) y más de $200 (fintech), y los productos de suscripción del mercado medio se agrupan alrededor de $150 ([1],[2]); El costo de adquisición de suscriptores de telecomunicaciones es materialmente mayor ($300+ una vez que se amortizan los subsidios a los teléfonos), por lo que $150 es un ancla conservadora para este conjunto de datos, y elegir un número más alto solo haría que el cálculo de quema en la Sección 4 fuera mayor.
El margen bruto para SaaS B2C se sitúa en la banda del 70% al 85%, con el 75% como el punto medio habitual que coincide con los supuestos de modelado de David Skok para la economía de SaaS en estado estacionario ([3]).
Eso nos da los elementos básicos para calcular el costo de un único error de predicción.
CAC = 150 ARPU = 64,80 MESES_TENTURA_RESTANTES = 18 COSTO_FN = CAC + ARPU * MESES_TENTURA_RESTANTES # $1316,40 COSTO_FP = 100 # relación de costo (punto medio) de campaña típica = COS_FN / COSTO_FP # 13,2: 1
Un falso negativo (decirle a un cliente que se quedará cuando en realidad se va) le cuesta el gasto en nueva adquisición ($150) más 18 meses de ingresos perdidos ($64,80 × 18 = $1166,40), para un total de $1316,40, mientras que un falso positivo (marcar a un cliente como un riesgo de abandono cuando iba a quedarse) cuesta aproximadamente $100 en gastos de campaña y descuento, lo que deja una relación de costos de 13,2 a 1.
Una nota sobre lo que es y lo que no es el marco. El CAC de $150 y el costo falso positivo de $100 en este artículo son marcadores de posición; El CAC varía sustancialmente según el canal de adquisición, y los $100 son una abreviatura de los costos reales de intervención de retención: un descuento, una llamada de CSM, una actualización de paquete, una investigación de producto. Ninguno de ellos es intercambiable, y un descuento general no es una estrategia de retención: es un mecanismo de aplazamiento que retiene a los clientes sólo hasta que expire el descuento mientras paga para retener a los clientes que nunca se iban a ir (y, peor aún, los entrena para esperar el siguiente descuento). La estrategia de retención real mapea los factores de abandono (un cliente que se va porque backup_online sigue fallando es retenido arreglando backup_online, no con un descuento del 10% en el correo electrónico) y asigna el presupuesto a la mejora del producto, con el costo de la campaña como un puente a corto plazo mientras la ingeniería se pone al día. La curva de ganancias aquí es una herramienta para establecer umbrales que opera después de que usted haya decidido su manual de retención (qué intervención se aplica a quién, a qué costo real); no sustituye esa decisión. Trate los $150 y los $100 como un único par representativo; segmentarlos, y el marco se segmenta con ellos.
Esa relación es la razón completa por la que el umbral = 0,5 es un valor predeterminado incorrecto: el límite de decisión debe reflejar la asimetría y llegaremos a la fórmula exacta, pero primero viene la parte LTV.
3. La curva de beneficios LTV
La mayoría de los informes sobre la deserción tratan el valor de por vida como un número estático en dólares que se multiplica por una tasa de riesgo.
El análisis de supervivencia funciona mejor.
Mide la retención directamente a partir de los datos y convierte el LTV en una curva: el margen de contribución acumulativo por cliente en función de los meses desde la adquisición, comenzando en −CAC el día cero (pagó para adquirir al cliente y no ganó nada) y aumenta a medida que cada mes superviviente agrega ARPU × margen_bruto × P (aún vivo) al saldo.
El estimador Kaplan-Meier hace el trabajo pesado, con la permanencia como duración y la deserción == "Sí" como evento, produciendo la curva general en la Figura 4.
desde líneas de vida importar KaplanMeierFitter importar numpy como np CAC, GROSS_MARGIN, HORIZON = 150, 0.75, 72 kmf = KaplanMeierFitter().fit(df["tenure"], (df["Churn"] == "Yes").astype(int)) meses = np.arange(0, HORIZON + 1) S = kmf.survival_function_at_times(meses).valores mensuales = ARPU * GROSS_MARGIN * S ltv_curve = np.cumsum(mensual) – CAC ltv_curve[0]= -CAC # día cero, solo se hunde CAC
Tres lecturas que vale la pena sacar:
Punto de equilibrio en el mes 3 (en expectativa, no por cliente): en toda la cohorte adquirida original, la contribución acumulativa ponderada por supervivencia cubre el costo de adquisición de $150 para el mes 3, y el reembolso de CAC en doce meses es la regla general de David Skok que Telco supera por un factor de cuatro. Este es el número correcto para presupuestar el gasto de retención a nivel de cohorte, pero es un promedio de cohorte que oculta la variación bimodal: un cliente que abandona el mes 1 individualmente contribuye con un mes de margen ($48,60) y nunca recupera su CAC, mientras que un sobreviviente de 70 meses contribuye con mucho más de $3400. La ponderación de Kaplan-Meier integra correctamente esas pérdidas tempranas: simplemente no obtienen una estrella en la curva. LTV en el horizonte de 72 meses ≈ $2,527 por cliente: combinado con el CAC de $150, es una relación LTV:CAC de aproximadamente 17,8:1, muy por encima del piso de 3:1 que la mayoría de los inversionistas de SaaS buscan, y una útil comprobación de cordura de que el conjunto de datos describe un negocio saludable con economía unitaria en lugar de uno en espiral de muerte. El aumento de la reducción de la deserción es modesto a nivel de cohorte: una reducción del 10% en la deserción aumenta el LTV terminal en ~2,8% y una reducción del 20% lo eleva en ~5,7%, por lo que el aumento es real pero no heroico, y la decisión de adquisición importa más que la intervención de retención.
Segmentar el mismo cálculo por contrato (Figura 5) es donde el marco se gana la vida.
Un cliente con contrato de dos años vale alrededor de $3,372 en el horizonte de 72 meses, mientras que un cliente de mes a mes vale $1,620 (menos de la mitad), con el mismo ARPU y el mismo CAC, por lo que todo el delta es retención; Desde una perspectiva de inversión en marketing, el objetivo de adquisición del lado derecho (el cliente por el que debería estar dispuesto a pagar más para adquirir) es el que está sujeto al contrato, aunque parezcan “menos rentables por mes” en cualquier instantánea.
Este es el tipo de decisión que el análisis estándar de IBM Telco no puede tomar porque, en primer lugar, nunca calcula el LTV condicional de supervivencia.
4. La curva de beneficio de la clasificación
Con el costo FN, el costo FP y el LTV basado en la supervivencia en la mano, la pregunta del umbral se convierte en una optimización unidimensional: entrenar un modelo, obtener probabilidades predichas en el conjunto de prueba, barrer el umbral de 0 a 1, calcular el costo total en dólares en cada umbral y elegir el mínimo.
El modelo aquí es un XGBoost sintonizado y entrenado con SMOTE solo en el pliegue del tren, la receta estándar de Telco.
importar numpy como np desde sklearn.model_selection importar train_test_split desde sklearn.preprocessing importar StandardScaler desde sklearn.metrics importar confusion_matrix desde imblearn.over_sampling importar SMOTE desde xgboost importar XGBClassifier y = (df["Churn"] == "Yes").astype(int) X = pd.get_dummies(df.drop(columns=["customerID", "Churn"]), drop_first=True).astype(float) X_tr, X_te, y_tr, y_te = train_test_split( X, y, test_size=0.20, stratify=y, random_state=42) escalador = StandardScaler().fit(X_tr) X_tr_s, X_te_s = scaler.transform(X_tr), scaler.transform(X_te) X_tr_b, y_tr_b = SMOTE(random_state=42).fit_resample(X_tr_s, y_tr) model = XGBClassifier(n_estimators=400, max_profundidad=5, learning_rate=0.05, subsample=0.9, colsample_bytree=0.9, random_state=42, eval_metric="logloss") model.fit(X_tr_b, y_tr_b) probs = model.predict_proba(X_te_s)[:, 1] umbrales = np.linspace(0.01, 0.99, 99) totales =[]para t en umbrales: pred = (probs >= t).astype(int) tn, fp, fn, tp = confusion_matrix(y_te, pred).ravel() totals.append(fn * 1316.40 + fp * 100)
El resultado está en la Figura 6.
Los números, en un conjunto de prueba de 1.407 filas:
Pasar de 0,5 al mínimo empírico recupera 121.160 dólares en el conjunto de prueba, lo que equivale a 86,11 dólares por cliente, y al aplicarlo a un libro de 100.000 suscriptores se obtiene el titular 8,6 millones de dólares; su kilometraje variará con su CAC, su ARPU y su curva de retención, pero el multiplicador (13 veces más costoso perder a un cliente que abandonó que tratar en exceso a un leal) es lo que hace que la brecha sea grande.
Cuando la fórmula del libro de texto pierde ante el barrido del umbral
Abra cualquier referencia de clasificación sensible a los costos (Data Science for Business de Provost y Fawcett es la canónica).[4]) y encontrará la fórmula del umbral óptimo de Bayes:
t* = C_FP / (C_FP + C_FN)
Introduzca nuestra relación de costos: t* = 100 / (100 + 1316,40) ≈ 0,0706, que es matemática correcta, y en un modelo con probabilidades calibradas ese umbral minimiza el costo esperado; pero el barrido da t = 0,03, y en ese umbral el costo del conjunto de prueba es $8 661 menor que en 0,07, entonces, ¿dónde está la brecha?
La fórmula Bayes Optimal supone que las probabilidades predichas del modelo están calibradas: una predicción de 0,5 debería corresponder a una probabilidad de abandono real del 50%, pero nuestro modelo está entrenado en un conjunto equilibrado SMOTE, que infla la clase minoritaria al 50% durante el entrenamiento, y los estudiantes basados en árboles luego generan probabilidades sesgadas hacia valores más altos, con el mapeo "0,07" del modelo aproximadamente al verdadero 0,03 en probabilidad calibrada. espacio; la fórmula del libro de texto no es incorrecta, se está aplicando a una entrada fuera de especificación.
Hay dos soluciones limpias:
Primero calibre las probabilidades: aplique la escala de Platt o la regresión isotónica en un conjunto mantenido, luego use el umbral óptimo de Bayes en la salida calibrada, con CalibratedClassifierCV de scikit-learn haciéndolo en una línea. Omita la calibración y el barrido: es económico, tolera la desviación de la calibración y, en un conjunto de datos pequeño como Telco, el barrido del conjunto de prueba es más confiable que un modelo de calibración ajustado a cientos de filas retenidas.
En la práctica, para los sistemas de producción con reentrenamiento regular, el barrido es lo que envían la mayoría de los equipos; la fórmula es lo correcto para enseñar (con la calibración como asterisco), y ambas deberían aparecer en cualquier artículo honesto sobre un modelo de abandono sensible a los costos.
Ninguno de los dos aparece en el corpus de IBM Telco que indexé.
5. Qué debería informar el próximo artículo de IBM Telco
Tres cambios concretos harían que los próximos 36 análisis de IBM Telco sean más útiles que los últimos 36:
Informe una curva de beneficios, no una matriz de confusión. F1 en el umbral 0,5 es una métrica de torneo (útil para clasificar modelos cuando hay que elegir uno, inútil para decidir cómo enviar uno), y la curva de la Figura 6 tiene más información relevante para la toma de decisiones que todas las comparaciones de precisión del corpus combinadas.
Ancle el LTV en el análisis de supervivencia, no en los supuestos de estado estacionario. Kaplan-Meier sobre la tenencia son 30 líneas de Python; el número de equilibrio, el LTV en el horizonte y la curva segmentada por contrato dan a las operaciones de marketing un presupuesto utilizable para gastar en retención más una respuesta defendible a "¿qué cliente deberíamos adquirir más difícilmente?", y la fórmula de Skok sigue siendo un buen control de cordura en lugar de la estimación del LTV que soporta carga.
Revele el supuesto de calibración cuando cite un umbral óptimo de Bayes. Calibre primero o observe explícitamente que el umbral informado es el mínimo empírico de un barrido, y Wang et al. ([5]) presentan un argumento estrechamente relacionado con una métrica más elaborada (e-Profits) que utiliza el análisis de supervivencia de un extremo a otro, con la misma idea central.
Segmente la intervención, no sólo la puntuación. Una curva de ganancias supone un costo único de FP (el precio de “tratar” una falsa alarma), pero en la práctica la intervención más barata para un cliente leal de alto valor es diferente de la más barata para una nueva cuenta en riesgo: una mejora del paquete para uno, una investigación de precios dolorosos para el otro, no hacer nada para el tercero; Los costos de FP conscientes del segmento (y los umbrales conscientes del segmento) son la continuación natural del marco aquí.
Entré en esto esperando que la brecha estuviera en el modelado. No lo es.
El conjunto de datos de IBM Telco se ha extraído hasta los cimientos para lograr precisión predictiva, y lo que aún puede enseñar es si nuestros canales conducen a buenas decisiones, no solo a predicciones precisas.
Eso requiere tres cosas: costos en dólares por errores, curvas reales de retención de clientes y un umbral honesto en el clasificador: cuatro guiones y un ajuste de Kaplan-Meier lo llevarán allí.
Referencias
[1]Genesys Growth Marketing, puntos de referencia de costos de adquisición de clientes: 44 estadísticas que todo líder de marketing debería conocer en 2026 (2026), genesysgrowth.com.
[2]SaaS probado, puntos de referencia de recuperación de CAC 2026: costo de adquisición de clientes de SaaS (2026), proven-saas.com.
[3]D. Skok, SaaS Metrics 2.0: Definiciones detalladas (2014, actualizado en 2024), forentrepreneurs.com.
[4]F. Provost y T. Fawcett, Ciencia de datos para empresas (2013), O'Reilly Media, cap. 7–8.
[5]Y. Wang, S. Albrecht, et al., e-Profits: una métrica de evaluación alineada con el negocio para la predicción de la pérdida de clientes sensible a las ganancias (2025), arXiv:2507.08860.
[6]C. Davidson-Pilon, líneas de vida: análisis de supervivencia en Python (2019), Journal of Open Source Software 4(40), 1317.
[7]W. Verbeke, T. Verdonck y S. Maldonado, Árboles de decisión basados en beneficios para la predicción de abandono (2018), European Journal of Operational Research, 284(3).
[8]N. El Attar y M. El-Hajj, Una revisión sistemática de los enfoques de predicción de la pérdida de clientes en telecomunicaciones (2026), Fronteras de la inteligencia artificial.
El código, los datos y los scripts reproducibles para cada figura están disponibles a pedido. El conjunto de datos es el conjunto de datos IBM Telco Customer Churn, datos de muestra totalmente sintéticos publicados por IBM en su repositorio oficial (github.com/IBM/telco-customer-churn-on-icp4d) bajo la licencia Apache 2.0, que permite el uso, análisis de derivados y publicación con atribución. Los datos son sintéticos y no contienen clientes reales ni PII.
¡Gracias por leer! Si tiene alguna pregunta o desea conectarse, no dude en comunicarse conmigo en LinkedIn. 👋