Conceitos, etapas e métricas para quem está começando
Democratização
Esta aula é conceitual. Não há código que precise rodar. O objetivo é que você entenda o que acontece em cada etapa do processo de machine learning antes de escrever qualquer linha, para que quando você vir o código, saiba exatamente o que ele está fazendo e por quê.
Acompanhe o Café com R
Que cada gole desperte uma nova ideia.
Que cada script abra uma nova conversa.
Que o Café com R se torne um ponto de encontro nosso.
Entender o que é machine learning supervisionado e onde ele é usado
Compreender a diferença entre regressão e classificação
Entender por que os dados precisam ser divididos
Compreender o que é pré-processamento e por que ele importa
Saber o que cada etapa do pipeline faz e em que ordem
Interpretar as métricas de regressão: RMSE, MAE e RSQ
Interpretar as métricas de classificação: acurácia, ROC-AUC e F1
Entender o que é overfitting e como evitá-lo
Saber como tomar decisões práticas com base nos resultados
Bloco 1
O que é Machine Learning Supervisionado
Aprender com exemplos
Machine learning supervisionado é um processo em que um algoritmo aprende padrões a partir de dados históricos com resposta conhecida para fazer previsões em dados novos, onde a resposta é desconhecida.
A palavra-chave é supervisionado: você fornece exemplos com a resposta certa. O algoritmo aprende a partir desses exemplos.
Analogia: você mostra para um estagiário 1.000 contratos com a classificação “aprovado” ou “reprovado”. Depois ele classifica contratos novos sozinho, com base nos padrões que aprendeu.
O que é o \(Y\) e o \(X\)
Em ML supervisionado, o problema sempre tem a mesma estrutura:
\(Y\) (variável resposta): o que você quer prever. É o que o modelo aprende a estimar.
\(X\) (variáveis preditoras): as informações disponíveis que o modelo usa para prever \(Y\).
Exemplos do dia a dia:
\(Y\)
\(X\)
Preço de um imóvel
Área, localização, ano de construção
Churn do cliente
Tempo de contrato, uso do produto, ticket
Diagnóstico de doença
Exames laboratoriais, idade, sintomas
Nota de crédito
Renda, histórico de pagamentos, dívidas
Regressão: quando Y é contínuo
Regressão é usada quando a variável resposta é um número contínuo.
O modelo aprende a prever um valor numérico, não uma categoria.
Perguntas de regressão: - Qual será o faturamento do próximo mês? - Qual o preço justo deste imóvel? - Quantas unidades serão vendidas? - Qual a temperatura média amanhã?
O que o modelo entrega: um número. A avaliação mede o quanto esse número se afasta do valor real.
Classificação: quando Y é uma categoria
Classificação é usada quando a variável resposta é uma categoria.
O modelo aprende a identificar a qual grupo cada observação pertence.
Perguntas de classificação: - Este cliente vai cancelar o contrato? - Este e-mail é spam ou não é spam? - Qual espécie é este animal com base nas medidas corporais? - Este exame indica diagnóstico positivo ou negativo?
O que o modelo entrega: uma classe e, geralmente, a probabilidade de pertencer a cada classe.
A diferença que importa na prática
Regressão
Classificação
Tipo de Y
Número contínuo
Categoria
Output do modelo
Um valor numérico
Uma classe + probabilidades
Pergunta típica
“Quanto?”
“Qual?” ou “Vai ou não vai?”
Métricas principais
RMSE, MAE, RSQ
Acurácia, ROC-AUC, F1
Exemplo prático
Prever salário
Prever se o funcionário vai sair
Bloco 2
As Etapas do Processo
O processo completo de ML
Todo projeto de ML supervisionado segue as mesmas etapas, independentemente do algoritmo escolhido:
Dados históricos com Y conhecido
|
| 1. Dividir: treino e teste
v
Dados de treino
|
| 2. Pré-processar: transformar e limpar
v
Dados prontos para modelagem
|
| 3. Especificar: escolher o algoritmo
| 4. Ajustar: treinar o modelo
v
Modelo ajustado
|
| 5. Avaliar: medir o desempenho no teste
v
Decisão: o modelo é bom o suficiente?
Etapa 1: dividir os dados
Por que dividir? Se você avalia o modelo nos mesmos dados usados para treiná-lo, os resultados são otimistas e enganosos. O modelo “decorou” os dados.
A divisão simula o uso real: o modelo aprende no treino. A avaliação acontece no teste, com dados que o modelo nunca viu.
Proporção típica: 75% treino, 25% teste.
Important
O conjunto de teste é sagrado. Você só olha para ele uma vez, no final, para avaliar o modelo final. Tomar decisões com base no teste contamina a avaliação.
Treino, validação e teste
Em projetos maiores, os dados são divididos em três partes:
Treino: onde o modelo aprende. Usado para ajustar os parâmetros.
Validação: onde você toma decisões durante o desenvolvimento. Escolhe o algoritmo, calibra os hiperparâmetros, compara abordagens. Também chamado de conjunto de desenvolvimento.
Teste: onde você avalia o modelo final. Usado uma única vez, no final.
Na prática com tidymodels, a validação é feita com validação cruzada sobre o conjunto de treino, sem separar uma parte fixa para validação.
Validação cruzada: a ideia
Validação cruzada divide o conjunto de treino em \(k\) partes iguais chamadas de folds. O modelo é ajustado \(k\) vezes, cada vez usando \(k-1\) folds para treinar e 1 fold para validar.
A métrica final é a média das 5 avaliações. Isso dá uma estimativa mais estável do desempenho do que uma única divisão.
Etapa 2: pré-processar
Pré-processamento transforma os dados brutos no formato que o algoritmo precisa para aprender bem.
Problemas comuns que o pré-processamento resolve:
Variáveis em escalas muito diferentes: dose em mg x. peso em kg
Valores ausentes que travam o algoritmo
Variáveis categóricas que o modelo não consegue usar como texto
Colunas com variância próxima de zero que não trazem informação
Preditores altamente correlacionados que confundem o modelo
O princípio fundamental do pré-processamento
O pré-processamento precisa ser aprendido no treino e aplicado no teste.
Se você normaliza uma variável, a média e o desvio padrão são calculados apenas com os dados de treino. O teste é normalizado com esses mesmos valores.
Por que isso importa:
Se você usasse os dados de teste para calcular a normalização, estaria deixando informação do teste “vazar” para o treino. A avaliação ficaria otimista e o modelo não se comportaria da mesma forma em produção.
Tip
O recipes do tidymodels garante isso automaticamente quando usado dentro de um workflow. Você não precisa se preocupar com isso manualmente.
Transformações mais comuns, parte 1
Transformação
O que faz
Quando usar
Normalização (z-score)
Centraliza e escala cada variável
Algoritmos sensíveis à escala: KNN, SVM, redes neurais
Imputação pela mediana
Substitui NA pelo valor central
Variáveis numéricas com NA
Imputação pela moda
Substitui NA pelo valor mais frequente
Variáveis categóricas com NA
Dummies
Converte categorias em 0/1
Qualquer modelo que exige entrada numérica
Transformações mais comuns, parte 2
Transformação
O que faz
Quando usar
Remoção de variância zero
Remove colunas quase constantes
Sempre, como limpeza básica
Transformação log
Reduz assimetria
Variáveis com distribuição muito assimétrica
Remoção de correlação
Remove preditores redundantes
Regressão linear, KNN
PCA
Reduz dimensionalidade
Muitas colunas correlacionadas
Etapa 3: especificar o modelo
Especificar significa definir qual algoritmo será usado e como ele será configurado.
No tidymodels, isso é separado em duas decisões:
Tipo de modelo: o que o algoritmo faz. Regressão linear, floresta aleatória, gradient boosting, regressão logística.
Engine: qual pacote R executa o algoritmo. A floresta aleatória pode ser executada pelo ranger ou pelo randomForest. A especificação é a mesma; o engine muda.
Essa separação permite trocar o algoritmo sem reescrever o código de pré-processamento e avaliação.
Algoritmos mais usados no dia a dia
Algoritmo
Tipo
Quando usar
Regressão linear
Regressão
Baseline, relação linear, interpretabilidade
Regressão logística
Classificação
Baseline binário, interpretabilidade
Floresta aleatória
Ambos
Dados tabulares, robusto, boa performance
Gradient boosting
Ambos
Alta performance em dados tabulares
Árvore de decisão
Ambos
Interpretabilidade máxima, regras explícitas
Note
Comece sempre com o modelo mais simples. Uma regressão linear bem ajustada frequentemente supera modelos complexos mal calibrados. A complexidade só vale a pena quando há ganho real de desempenho.
Etapa 4: ajustar o modelo
Ajustar (ou treinar) significa expor o algoritmo aos dados de treino para que ele estime os parâmetros internos.
O que acontece durante o ajuste:
Na regressão linear: os coeficientes \(\hat{\beta}\) são estimados por mínimos quadrados
Na floresta aleatória: centenas de árvores são construídas sobre amostras dos dados
No gradient boosting: árvores são construídas sequencialmente, cada uma corrigindo os erros da anterior
O que o modelo aprende: os padrões nos dados de treino. O objetivo é que esses padrões generalizem para dados novos.
Etapa 5: avaliar o modelo
Avaliar significa medir o desempenho do modelo no conjunto de teste, com dados que ele nunca viu durante o treino.
A avaliação responde à pergunta: o modelo aprendeu padrões que generalizam, ou apenas memorizou os dados de treino?
Um modelo que memoriza os dados de treino tem desempenho excelente no treino e péssimo no teste. Isso se chama overfitting.
Um modelo que não aprendeu o suficiente tem desempenho ruim tanto no treino quanto no teste. Isso se chama underfitting.
Bloco 3
Overfitting e Underfitting
O problema do overfitting
Overfitting acontece quando o modelo aprende os dados de treino com detalhes demais, incluindo o ruído, e perde a capacidade de generalizar.
Sinais de overfitting: - Desempenho excelente no treino - Desempenho muito pior no teste - O modelo “decorou” em vez de “aprender”
Causas comuns: - Modelo muito complexo para a quantidade de dados disponível - Treinar por tempo demais sem validação - Muitas variáveis preditoras com poucos dados
O problema do underfitting
Underfitting acontece quando o modelo é simples demais para capturar os padrões reais nos dados.
Sinais de underfitting: - Desempenho ruim no treino - Desempenho igualmente ruim no teste - O modelo não aprendeu nada útil
Causas comuns: - Modelo muito simples para a complexidade do problema - Pré-processamento inadequado - Dados insuficientes ou de baixa qualidade - Variáveis preditoras irrelevantes
O equilíbrio ideal
Complexidade do modelo
|
Simples |---- Underfitting
|
|---- Zona ideal: generaliza bem
|
Complexo|---- Overfitting
O objetivo é encontrar o ponto onde o modelo aprende o suficiente para capturar os padrões reais, mas não tanto que decore os dados de treino.
Como encontrar esse ponto: validação cruzada. Você avalia modelos de diferentes complexidades e escolhe o que tem melhor desempenho médio nos folds de validação.
Hiperparâmetros: o que são e por que importam
Parâmetros são aprendidos pelo modelo durante o treino (coeficientes da regressão linear, por exemplo).
Hiperparâmetros são configurações definidas antes do treino, pelo analista. Eles controlam a complexidade do modelo.
Algoritmo
Hiperparâmetro
O que controla
Floresta aleatória
mtry
Variáveis por árvore
Floresta aleatória
min_n
Tamanho mínimo dos nós
Gradient boosting
learn_rate
Velocidade do aprendizado
Gradient boosting
tree_depth
Profundidade de cada árvore
Hiperparâmetros muito altos ou muito baixos levam ao overfitting ou underfitting. Encontrar os melhores valores se chama tuning.
Bloco 4
Métricas de Regressão
O que uma métrica de regressão mede
Em regressão, o modelo produz um valor numérico \(\hat{y}\) para cada observação. A métrica mede a diferença entre o valor predito \(\hat{y}\) e o valor real \(y\).
Quanto menor a diferença, melhor o modelo.
As três métricas mais usadas:
RMSE: raiz do erro quadrático médio
MAE: erro absoluto médio
RSQ: coeficiente de determinação \(R^2\)
Cada uma delas captura um aspecto diferente do erro. Usar apenas uma pode ser enganoso.
O que significa: o erro médio do modelo na mesma unidade da variável resposta, sem penalidade extra para erros grandes.
Como interpretar: um MAE de 12.000 em preços de imóveis significa que, em média, o modelo erra R$12.000 para cima ou para baixo.
Quando preferir MAE em vez de RMSE: quando erros grandes não são particularmente mais problemáticos do que erros pequenos, ou quando há outliers nos dados que você não quer que dominem a métrica.
RMSE x MAE: qual usar
Situação
Métrica preferida
Erros grandes são muito mais custosos que erros pequenos
RMSE
Todos os erros têm o mesmo custo independente da magnitude
MAE
Há outliers nos dados que não representam casos reais
MAE
Você quer comunicar o erro em linguagem direta
MAE
Você quer comparar com a literatura técnica da área
RMSE
Na prática, reporte os dois. Se RMSE for muito maior que MAE, o modelo tem dificuldade com alguns casos extremos específicos.
O que significa: proporção da variância de \(Y\) explicada pelo modelo. Varia de 0 a 1.
Como interpretar:
\(R^2 = 0{,}85\): o modelo explica 85% da variação nos dados
\(R^2 = 0{,}30\): o modelo explica apenas 30% da variação
\(R^2 = 0\): o modelo não explica nada; é tão bom quanto prever sempre a média
Important
Um \(R^2\) alto no treino e baixo no teste é sinal claro de overfitting. Sempre compare os dois.
O que é um bom RMSE ou RSQ
Não existe um valor absoluto de “bom”. A métrica só faz sentido em contexto.
RSQ: depende do problema. Em ciências sociais, \(R^2 = 0{,}30\) pode ser excelente. Em física de engenharia, \(R^2 < 0{,}99\) pode ser inaceitável.
RMSE: compare com a variabilidade natural de \(Y\). Um RMSE de R$15.000 é bom se os preços variam de R$100.000 a R$2.000.000. É ruim se variam de R$100.000 a R$200.000.
Regra prática: compare o RMSE com o desvio padrão de \(Y\). Se RMSE for muito menor que o desvio padrão, o modelo está adicionando valor.
VP: acertou que era positivo. VN: acertou que era negativo. FP: disse que era positivo, mas era negativo. FN: disse que era negativo, mas era positivo.
Acurácia: a métrica mais intuitiva
\[Acurácia = \frac{VP + VN}{VP + VN + FP + FN}\]
O que significa: proporção de previsões corretas entre todas as previsões.
Como interpretar: acurácia de 0,92 significa que o modelo acertou 92% das classificações.
Important
A acurácia engana quando as classes são desbalanceadas. Se 95% dos casos são negativos, um modelo que sempre prevê “negativo” tem acurácia de 95% sem aprender nada. Em problemas de churn, fraude ou diagnóstico, a acurácia isolada não diz nada útil.
Precisão e recall: o trade-off central
Precisão: dentre os casos que o modelo classificou como positivos, qual proporção realmente é positiva?
\[Precisão = \frac{VP}{VP + FP}\]
Recall (sensibilidade): dentre os casos realmente positivos, qual proporção o modelo identificou corretamente?
\[Recall = \frac{VP}{VP + FN}\]
O trade-off: aumentar o limiar de classificação aumenta a precisão e diminui o recall. Diminuir o limiar faz o oposto. Você não pode maximizar os dois ao mesmo tempo sem pagar um custo no outro.
Quando priorizar precisão x recall
Contexto
Priorizar
Por quê
Detecção de spam
Precisão
Um e-mail legítimo marcado como spam é muito custoso
Diagnóstico de câncer
Recall
Perder um caso positivo é muito mais grave que um falso alarme
Detecção de fraude
Recall
Deixar uma fraude passar é mais custoso que bloquear uma transação legítima
Recomendação de produto
Precisão
Recomendar algo irrelevante prejudica a experiência
O que significa: média harmônica entre precisão e recall. Penaliza modelos que sacrificam muito um dos dois.
Como interpretar: F1 próximo de 1 significa que o modelo tem tanto precisão quanto recall elevados. F1 próximo de 0 significa que pelo menos um dos dois é muito baixo.
Quando usar: em problemas com classes desbalanceadas onde tanto falsos positivos quanto falsos negativos são custosos. É mais informativo que a acurácia nesses casos.
ROC-AUC: avaliando o classificador como um todo
A curva ROC (Receiver Operating Characteristic) mostra o trade-off entre a taxa de verdadeiros positivos (recall) e a taxa de falsos positivos para todos os limiares de classificação possíveis.
A AUC (Area Under the Curve) é a área sob essa curva.
Como interpretar: - AUC = 1,0: classificador perfeito - AUC = 0,5: classificador aleatório, não aprende nada - AUC = 0,85: o modelo tem boa capacidade discriminativa
Tip
ROC-AUC é a métrica padrão para classificação quando você quer avaliar o poder discriminativo geral do modelo, independentemente do limiar escolhido.
O limiar de classificação
Por padrão, modelos de classificação usam limiar 0,5: se a probabilidade prevista for maior que 0,5, classifica como positivo.
Mas esse limiar pode e deve ser ajustado dependendo do contexto.
Exemplo: detecção de fraude. - Com limiar 0,5: muitas fraudes passam despercebidas - Com limiar 0,2: mais fraudes são detectadas, mas mais transações legítimas são bloqueadas
O ajuste do limiar é uma decisão de negócio baseada no custo relativo dos dois tipos de erro, não uma decisão puramente estatística.
O modelo B tem RMSE menor, mas é muito instável entre os folds. Em produção, pode se comportar de forma imprevisível. O modelo A é mais confiável.
Important
Um modelo com métrica ligeiramente pior e baixo desvio padrão entre folds frequentemente é uma escolha melhor do que um modelo com métrica melhor e alta variabilidade.
Quando o modelo é “bom o suficiente”
Não existe um critério universal. A resposta depende de:
1. Qual é a baseline de comparação? Um modelo que prevê sempre a média de \(Y\) é o ponto de partida mínimo. Se o seu modelo não supera isso significativamente, ele não está adicionando valor.
2. Qual é o custo do erro? Um modelo com RMSE de R$50.000 em imóveis pode ser ótimo para orientar um corretor. Pode ser inadequado para laudo de financiamento.
3. O modelo é mais útil que o processo atual? Se hoje a empresa usa julgamento humano e erra em 40% dos casos, um modelo com 25% de erro já é uma melhoria relevante.
O erro de interpretar as métricas no treino
Uma confusão muito comum: avaliar o modelo nos dados de treino e concluir que ele é bom.
Isso não significa nada.
Qualquer modelo suficientemente complexo consegue RMSE zero no treino simplesmente memorizando os dados. A única avaliação que importa é a do conjunto de teste.
Regra: nunca reporte métricas de treino como resultado final. Sempre avalie no teste.
O que fazer quando o modelo não é bom
Se as métricas do teste são insatisfatórias, o caminho é sistemático:
Verifique os dados primeiro. Erros na variável resposta, dados mal coletados ou vazamento de informação corrompem qualquer modelo.
Adicione variáveis preditoras relevantes. Um modelo bem especificado com as variáveis certas supera qualquer algoritmo sofisticado com variáveis erradas.
Revise o pré-processamento. Normalização inadequada, imputação errada ou categorias mal codificadas prejudicam o aprendizado.
Experimente modelos mais complexos. Se a regressão linear não captura os padrões, tente floresta aleatória ou gradient boosting.
Calibre os hiperparâmetros. Modelos com padrões não otimizados podem estar longe do desempenho real.
A armadilha do data leakage
Data leakage (vazamento de dados) acontece quando informação do futuro ou do teste contamina o treino, produzindo métricas artificialmente boas que não se reproduzem em produção.
Exemplos comuns: - Normalizar os dados antes de dividir treino e teste (os parâmetros de normalização “veem” o teste) - Usar variáveis que só existem após o evento que você quer prever - Incluir o identificador do cliente como preditor quando há padrão histórico por cliente
Regra: toda transformação que depende dos dados deve ser aprendida apenas no treino.
Bloco 7
O Código que Implementa Tudo Isso
O que o tidymodels faz por você
Cada conceito desta aula tem uma função correspondente no tidymodels:
Conceito
Função no tidymodels
Dividir treino e teste
initial_split() com strata =
Validação cruzada
vfold_cv()
Pré-processamento
recipe() + step_*()
Especificar modelo
linear_reg(), rand_forest() + set_engine()
Unir pré-processamento e modelo
workflow()
Ajustar o modelo
fit()
Avaliar as métricas
metric_set() com rmse(), roc_auc()
Tuning de hiperparâmetros
tune_grid() + select_best()
Ajustar modelo final
last_fit()
Como o código se lê
# 1. Dividir: 75% treino, 25% teste, estratificado por Ysplit <-initial_split(dados, prop =0.75, strata = Y)treino <-training(split)teste <-testing(split)# 2. Pré-processar: normalizar, imputar, criar dummiesrec <-recipe(Y ~ ., data = treino) |>step_impute_median(all_numeric_predictors()) |>step_normalize(all_numeric_predictors()) |>step_dummy(all_nominal_predictors())# 3. Especificar: floresta aleatória com rangermodelo <-rand_forest(trees =500) |>set_engine("ranger") |>set_mode("regression")# 4. Unir: recipe + modelo em um pipelinewf <-workflow() |>add_recipe(rec) |>add_model(modelo)# 5. Avaliar com validação cruzadacv <-vfold_cv(treino, v =5, strata = Y)result <-fit_resamples(wf, cv,metrics =metric_set(rmse, mae, rsq))# 6. Ver as métricascollect_metrics(result)
O que cada linha está fazendo
initial_split(): separa os dados uma vez. O strata = Y garante que a distribuição de \(Y\) seja preservada proporcionalmente nos dois conjuntos.
recipe(): define a fórmula \(Y \sim X\) e registra os passos de pré-processamento. Nada é executado ainda.
rand_forest(): declara o algoritmo. O set_engine("ranger") diz qual pacote executa. O set_mode("regression") define o tipo de problema.
workflow(): une recipe e modelo em um objeto único que garante que o pré-processamento seja sempre aplicado antes do modelo.
fit_resamples(): ajusta e avalia o workflow em cada fold da validação cruzada. O resultado é a média das métricas nos folds.
Resumo: os passos em ordem
Entenda o problema: regressão ou classificação? Qual é o \(Y\)? Quais são os \(X\) disponíveis?
Explore os dados: distribuição do \(Y\), valores ausentes, correlações, outliers.
Divida os dados: treino e teste com estratificação. Não toque no teste até o final.
Defina o pré-processamento: com base nos dados de treino.
Escolha um modelo simples primeiro: baseline com regressão linear ou logística.