Passo 1
Entendimento do Negócio & CRISP-DM
Mapeamento da dor do negócio, alinhamento de KPIs x Métricas Técnicas e método STAR.
Conceitos Vitais:
- CRISP-DM: A fase inicial é sempre o Business Understanding antes de escrever qualquer código.
- KPI de Negócio vs. Métrica Técnica: O KPI mede impacto financeiro/operacional (ex.: Reduzir o Churn mensal em 10%), enquanto a Métrica Técnica mede a performance do modelo (ex.: Recall, ROC-AUC).
- Método STAR: Estrutura para o vídeo final: Situation, Task, Action, Result.
Passo 2
Análise Exploratória (EDA) & Limpeza de Dados
Tratamento de nulos, conversão de tipos de dados e One-Hot Encoding no dataset Telco Churn.
# 1. Converter Total Charges para numérico
df['Total Charges'] = pd.to_numeric(df['Total Charges'], errors='coerce').fillna(0)
# 2. Mapear variável target
df['target'] = df['Churn Label'].map({'No': 0, 'Yes': 1})
# 3. Remover colunas de vazamento (Data Leakage)
X = df.drop(columns=['CustomerID', 'Churn Reason', 'Churn Score', 'target'])
X = pd.get_dummies(X, drop_first=True)
Passo 3
Modelo Baseline & Prevenção de Data Leakage
Treinamento do baseline com Regressão Logística e divisão estratificada com StandardScaler.
Regra de Ouro: Aplicar fit_transform() no conjunto de treino e apenas transform() no teste/produção para evitar contaminação estatística (Data Leakage).
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42, stratify=y)
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)
model = LogisticRegression(random_state=42)
model.fit(X_train_scaled, y_train)
Passo 4
Modelos Avançados & Validação Cruzada (K-Fold)
Comparativo entre Regressão Logística, Random Forest e MLP Neural Net via 5-Fold Stratified CV.
Por que a Regressão Logística venceu? Pelo princípio da parcimônia (Navalha de Occam): apresentou as melhores métricas gerais, menor variância no CV (94.11% ± 1.01%) e menor custo computacional para produção.
Passo 5
Modularização em src/ & Scikit-Learn Pipeline
Organização do código em src/data.py e src/train.py com serialização via Joblib.
from sklearn.pipeline import Pipeline
import joblib
pipeline = Pipeline([
('scaler', StandardScaler()),
('classifier', LogisticRegression(random_state=42))
])
pipeline.fit(X_train, y_train)
joblib.dump(pipeline, 'models/model_pipeline.joblib')
Passo 6
Testes Automatizados com Pytest
Criação da suite de testes unitários para garantir integridade dos dados e do split.
# Executar testes no terminal
python3 -m pytest
Passo 7
API REST com FastAPI & Pydantic
Servindo o modelo treinado com endpoints /health e /predict.
# Rodar o servidor de API
uvicorn src.api:app --reload
# Acesse a documentação em: http://127.0.0.1:8000/docs
Passo 8
Rastreamento de Experimentos com MLflow
Registro de hiperparâmetros, métricas e modelos na dashboard do MLflow.
import mlflow
mlflow.set_experiment("Telco_Churn_Experimentation")
with mlflow.start_run():
mlflow.log_params(params)
mlflow.log_metric("recall", rec)
mlflow.sklearn.log_model(pipeline, "model")
# Rodar interface do MLflow
python3 -m mlflow ui