Do dado bruto até a inferência em batch com score de risco por cliente
Arquitetura · Stack técnica · Destaques de engenharia · Como rodar
Pipeline de Machine Learning end-to-end construído para prever cancelamento (churn) de clientes de uma operadora de telecomunicações. O projeto cobre o fluxo completo de MLOps: ingestão de dados brutos, limpeza, análise exploratória, feature engineering distribuído, treinamento e comparação de modelos, registro no Model Registry e geração de predições em batch com classificação de risco por cliente.
Dataset baixado via csv: Telco Customer Churn (Kaggle) — 7.043 clientes, 21 variáveis, ~26% de churn.
Foi realizado o upload no Databricks como uma tabela dentro do schema.
CSV (Kaggle)
│
▼
┌─────────────────────────────────────────────────────┐
│ DELTA LAKE │
│ │
│ [Bronze] [Prata] [Ouro] │
│ Dado bruto ──► Limpeza ──► Features │
│ sem filtro tipagem engineered │
│ regras de │
│ negócio │
└─────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────┐
│ SPARK ML PIPELINE │
│ │
│ StringIndexer ► OneHotEncoder ► VectorAssembler │
└─────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────┐
│ MLFLOW TRACKING │
│ │
│ LogisticRegression │ RandomForest │ GBT │
│ AUC: 0.82 ✓ │ AUC: 0.81 │ AUC: 0.82 │
└─────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────┐
│ UNITY CATALOG MODEL REGISTRY │
│ │
│ workspace.default.telco-churn-predictor (v1) │
└─────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────┐
│ BATCH INFERENCE │
│ │
│ workspace.default.telco_predictions │
│ score_risco: ALTO / MÉDIO / BAIXO por cliente │
└─────────────────────────────────────────────────────┘
| # | Arquivo | Responsabilidade |
|---|---|---|
| 01 | 01_ingestao_bronze.ipynb |
Lê o CSV do dataset Telco e salva na camada Bronze como tabela Delta |
| 02 | 02_limpeza_prata.ipynb |
Limpeza de nulos, tipagem de colunas, regras de negócio → camada Prata |
| 03 | 03_eda_spark_sql.ipynb |
Análise exploratória com Spark SQL: distribuições, correlações, churn por segmento |
| 04 | 04_feature_engineering.ipynb |
Cria features derivadas, monta Spark ML Pipeline, salva camada Ouro |
| 05 | 05_treinamento_mlflow.ipynb |
Treina LR, RF e GBT com rastreio MLflow; registra modelo campeão no Unity Catalog |
| 06 | 06_avaliacao_batch_inference.ipynb |
Avalia o campeão, gera predições em batch com score de risco por cliente |
Além das 21 colunas originais do dataset, o Notebook 04 cria três features derivadas:
| Feature | Descrição |
|---|---|
num_services |
Contagem de serviços adicionais contratados (0–8) |
charges_per_tenure |
TotalCharges / tenure — custo médio por mês de contrato |
is_new_customer |
Flag 1 se tenure ≤ 12 meses, 0 caso contrário |
Atenção: essas features devem ser recriadas manualmente antes de qualquer chamada a
pipeline_loaded.transform()em dados novos — o pipeline Spark ML as consome, mas não as gera.
| Modelo | AUC-ROC | F1-Score | Status |
|---|---|---|---|
| Logistic Regression | 0.82 | 0.78 | Campeão ✓ |
| Random Forest | 0.81 | 0.80 | — |
| GBT (Gradient Boosted Trees) | 0.82 | 0.81 | — |
O modelo campeão é selecionado automaticamente pelo maior AUC-ROC e registrado no Unity Catalog Model Registry como portfolio.default.telco-churn-predictor versão 1.
| Categoria | Tecnologia |
|---|---|
| Processamento | Apache Spark (PySpark) |
| Plataforma | Databricks Serverless |
| Storage | Delta Lake — arquitetura medalhão (Bronze/Prata/Ouro) |
| Governança | Unity Catalog |
| ML | Spark ML Pipeline (StringIndexer, OneHotEncoder, VectorAssembler) |
| Experiment Tracking | MLflow + Unity Catalog Model Registry |
| Dataset | Telco Customer Churn (Kaggle) |
- Workspace Databricks com Serverless habilitado
- Unity Catalog configurado com catálogo
portfolioe schemadefault - Dataset
WA_Fn-UseC_-Telco-Customer-Churn.csvdisponível em/Volumes/portfolio/default/dados/
CATALOG = "portfolio"
SCHEMA = "default"
# Tabelas criadas automaticamente pelos notebooks
portfolio.default.telco_bronze
portfolio.default.telco_silver
portfolio.default.telco_gold
portfolio.default.telco_predictions
# Modelo registrado
portfolio.default.telco-churn-predictor (versão 1)
# Pipeline serializado
/Volumes/portfolio/default/modelos_ml/pipeline_modelExecute os notebooks na sequência numérica:
01 → 02 → 03 → 04 → 05 → 06
Cada notebook lê da tabela gerada pelo anterior. O Notebook 03 (EDA) pode ser pulado sem impacto no pipeline de produção.
spark.catalog.clearCache()não é suportado — não utilizado- DBFS root desabilitado — todos os paths usam
/Volumes/ - Tabelas criadas com
saveAsTable()em vez de.save()+CREATE TABLE - MLflow Registry configurado com
mlflow.set_registry_uri("databricks-uc")antes de qualquer operação com o Model Registry
databricks-ml-pipeline/
├── README.md
├── .gitignore
└── notebooks/
├── 01_ingestao_bronze.ipynb
├── 02_limpeza_prata.ipynb
├── 03_eda_spark_sql.ipynb
├── 04_feature_engineering.ipynb
├── 05_treinamento_mlflow.ipynb
└── 06_avaliacao_batch_inference.ipynb