“`html
Erros Comuns em Data Science que Você Deve Evitar
Se você quer resultados consistentes (e sustentáveis) em projetos de dados, precisa atacar os
problemas que mais geram retrabalho: validação falha, dados “vazando”, métricas desalinhadas e
decisões sem controle estatístico.
1) Vazamento de dados (data leakage)
O vazamento acontece quando informações do futuro (ou do conjunto de teste) influenciam as transformações
aplicadas ao treino. Em data science, isso costuma ocorrer em etapas “inofensivas” do pipeline:
normalização, codificação categórica, agregações e até seleção de variáveis.
- Padronização/transformações antes do split: média e desvio calculados usando treino + teste.
- Feature engineering com agregações globais: somas/médias calculadas usando todo o dataset.
- Target encoding impróprio: codificar categorias usando o rótulo do conjunto de validação/teste.
- Prévias e filtros com informação do rótulo: remover “outliers” com base em y.
apenas no treino e aplicada na validação/teste.
2) Validação fraca ou incorreta
Avaliação não é só “rodar um modelo”. É desenhar um esquema de validação que respeite
a estrutura do problema. Quando isso falha, o melhor modelo no notebook pode virar um desempenho ruim em produção.
- Usar uma única divisão treino/teste: aumenta variância e pode mascarar instabilidades.
- Ignorar o tipo de dado: dados temporais exigem splits temporais; dados por usuário exigem splits por grupo.
- CV “quebrando” dependências: amostras correlacionadas entram em treino e validação ao mesmo tempo.
- Não checar estabilidade: não observar variação por fold (média e dispersão).
Métrica “alta” com validação errada é, na prática, uma falha silenciosa.
3) Métrica desalinhada com o objetivo do negócio
Um dos erros mais comuns é escolher métricas “convenientes” que não refletem o custo real
das decisões. A consequência é previsões que parecem boas em score, mas falham no comportamento desejado.
- Classificação desbalanceada: usar acurácia sem considerar base rate.
- Priorizar média sem olhar cauda: em risco/fraude, poucos casos dominam perdas.
- Não validar calibração: probabilidades mal calibradas quebram limiares e políticas.
- Otimizando hiperparâmetros para a métrica errada: tuning vira “caça ao número”.
(1) qual é a decisão? (2) qual custo de falso positivo e falso negativo? (3) qual horizonte temporal?
(4) a métrica reflete isso?
4) Falta de controle experimental e análise de erros
Sem rastreabilidade e análise, você não sabe se melhorou de verdade — ou apenas ajustou coincidências do dataset.
E sem inspeção de erros, o ciclo vira tentativa/erro sem aprendizado.
- Sem baseline: começar direto com um modelo complexo sem uma referência simples.
- Sem reprodutibilidade: números que não batem por falta de seed, versões e pipeline.
- Não inspecionar erros: aceitar “métrica subiu” sem entender quais casos falham e por quê.
- Confundir overfitting com ganho: treino melhora, validação piora — mas ninguém olha a curva.
(por segmento, por faixa de probabilidade, por unidade/usuário).
Exemplo: pipeline sem vazamento + validação consistente (Python)
import numpy as np
from sklearn.model_selection import TimeSeriesSplit
from sklearn.pipeline import Pipeline
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder, StandardScaler
from sklearn.impute import SimpleImputer
from sklearn.linear_model import LogisticRegression
# X: features, y: rótulo
# col_num: colunas numéricas, col_cat: colunas categóricas
# Importante: faça o split ANTES de qualquer transformação que dependa dos dados.
tscv = TimeSeriesSplit(n_splits=5)
preprocess = ColumnTransformer(
transformers=[
("num", Pipeline(steps=[
("imputer", SimpleImputer(strategy="median")),
("scaler", StandardScaler())
]), col_num),
("cat", Pipeline(steps=[
("imputer", SimpleImputer(strategy="most_frequent")),
("onehot", OneHotEncoder(handle_unknown="ignore"))
]), col_cat),
],
remainder="drop"
)
model = Pipeline(steps=[
("preprocess", preprocess),
("clf", LogisticRegression(max_iter=2000))
])
scores = []
for train_idx, test_idx in tscv.split(X):
X_train, X_test = X.iloc[train_idx], X.iloc[test_idx]
y_train, y_test = y.iloc[train_idx], y.iloc[test_idx]
model.fit(X_train, y_train) # estatísticas aprendidas apenas no treino
pred = model.predict_proba(X_test)[:,1] # use sua métrica real (ex.: PR-AUC, logloss, etc.)
# Exemplo simples de métrica (troque pela sua métrica de negócio)
acc = ((pred > 0.5) == y_test).mean()
scores.append(acc)
print("média:", np.mean(scores), "std:", np.std(scores))
Quer deixar seus projetos mais consistentes?
Leitura recomendada: explore outros posts do yurideveloper.com.br para aprofundar em
validação, métricas e desenho de pipeline sem retrabalho — do jeito que você consegue aplicar no dia a dia.
“`
Sou Apaixonado pela programação e estou trilhando o caminho de ter cada diz mais conhecimento e trazer toda minha experiência vinda do Design para a programação resultando em layouts incríveis e idéias inovadoras! Conecte-se Comigo!