Supporting work / Machine learning
SignalForge
I prepared IBM Telco data, compared churn models, and built a Streamlit dashboard to inspect the results.
View the code- Context
- Independent portfolio project
- Source
- IBM Telco Customer Churn
- Delivery
- Training artifacts and Streamlit dashboard
The question
How do you compare churn models before using their predictions? In SignalForge, I worked through the data preparation, training, and evaluation, then brought the results into a dashboard. It sits alongside my data engineering work because each step depends on how the data is prepared.
How I built it
I used a snapshot of IBM Telco data downloaded from Kaggle. The pipeline calculates features from each row and saves them as Parquet, then uses Optuna to tune logistic regression, random forest, and gradient boosting models. The training outputs feed a local Streamlit dashboard.
The workflow sets aside the test data before tuning. For logistic regression, scaling happens inside each cross-validation fold. Bootstrap intervals and Brier scores help put the model comparisons in context.
See the training scriptProject limits
This is a study of one dataset snapshot. There is no production API, database, or model-serving layer. The hosted demo is static; the local dashboard reads the trained model outputs. No real retention savings are measured here.
The study does not test how the models hold up over time. Its significance tests also use dependent cross-validation scores, which limits the conclusions I can draw from the comparisons.
Read the limitations