Scenario 3: Network Churn Prediction in Telecommunication

A telecom firm classifies churn risk using Bayesian logistic regression to target retention efforts.

Analysis Code


import pandas as pd
import pymc as pm
import arviz as az

url = "https://raw.githubusercontent.com/IBM/telco-customer-churn-on-icp4d/master/data/Telco-Customer-Churn.csv"
df = pd.read_csv(url)
df['TotalCharges'] = pd.to_numeric(df['TotalCharges'], errors='coerce').fillna(df['TotalCharges'].median())
df['Contract'] = df['Contract'].map({'Month-to-month': 0, 'One year': 1, 'Two year': 2})
df['Churn'] = df['Churn'].map({'Yes': 1, 'No': 0})
X = df[['tenure', 'MonthlyCharges', 'Contract']].values
y = df['Churn'].values

with pm.Model() as churn_model:
    beta = pm.Normal('beta', mu=0, sigma=2, shape=3)
    intercept = pm.Normal('intercept', mu=0, sigma=2)
    logits = pm.math.dot(X, beta) + intercept
    pm.Bernoulli('churn', logit_p=logits, observed=y)
    trace = pm.sample(1000)
      

Interactive Visualization

Insights: Negative tenure coefficient indicates longer tenure reduces churn risk (AUC ~0.85). Threshold slider adjusts classification trade-offs. Full code in GitHub.

← Previous: Customer Lifetime Value  |  Next: Music Recommendations →