7  Classificação e Regressão

Árvores de decisão não se limitam a problemas de classificação. A mesma estrutura geral também pode ser usada para prever valores contínuos. O que muda e o critério usado para construir a árvore e a natureza da previsão feita nas folhas.

7.1 Classificação

Na classificação, o objetivo e atribuir uma catégoria.

Exemplos:

  • aprovar ou reprovar crédito;
  • detectar spam ou não spam;
  • prever cancelamento ou permanencia;
  • classificar espécie de planta.

O modelo mais comum em Python e DecisionTreeClassifier.

7.1.1 Como a previsão e feita

Cada folha armazena a distribuição das classes que chegaram até ela. A previsão final geralmente corresponde a classe majoritária da folha.

7.1.2 Medidas tipicas

  • accuracy;
  • precision;
  • recall;
  • f1-score;
  • ROC AUC em alguns contextos;
  • matriz de confusão.

7.2 Regressão

Na regressão, a saída e numerica.

Exemplos:

  • prever preço de imovel;
  • estimar consumo de energia;
  • projetar tempo de aténdimento;
  • calcular demanda futura.

O modelo correspondente e DecisionTreeRegressor.

7.2.1 Como a previsão e feita

Em cada folha, o modelo produz um valor numérico, normalmente relacionado a média dos alvos observados naquele grupo.

7.2.2 Medidas tipicas

  • MAE;
  • MSE;
  • RMSE;
  • R2.

7.3 O que muda no critério de divisão

Na classificação, a árvore tenta reduzir mistura de classes. Na regressão, ela tenta reduzir dispersão dos valores do alvo. Assim, embora a estrutura pareca a mesma, a função objetivo e diferente.

7.4 Exemplo de regressão com dados sintéticos

from sklearn.datasets import make_regression
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeRegressor
from sklearn.metrics import mean_absolute_error, mean_squared_error, r2_score

X_reg, y_reg = make_regression(
    n_samples=1000,
    n_features=6,
    n_informative=4,
    noise=15,
    random_state=42
)

X_train_reg, X_test_reg, y_train_reg, y_test_reg = train_test_split(
    X_reg,
    y_reg,
    test_size=0.2,
    random_state=42
)

reg = DecisionTreeRegressor(max_depth=6, random_state=42)
reg.fit(X_train_reg, y_train_reg)
pred_reg = reg.predict(X_test_reg)

print("MAE:", mean_absolute_error(y_test_reg, pred_reg))
print("MSE:", mean_squared_error(y_test_reg, pred_reg))
print("R2:", r2_score(y_test_reg, pred_reg))
MAE: 24.261617947978333
MSE: 986.8354955471909
R2: 0.6604996247352501

7.5 Comparando profundidades na regressão

for depth in [2, 4, 6, 10, None]:
    reg = DecisionTreeRegressor(max_depth=depth, random_state=42)
    reg.fit(X_train_reg, y_train_reg)
    pred_reg = reg.predict(X_test_reg)
    print(
        f"depth={depth} | "
        f"MAE={mean_absolute_error(y_test_reg, pred_reg):.2f} | "
        f"R2={r2_score(y_test_reg, pred_reg):.3f}"
    )
depth=2 | MAE=31.95 | R2=0.476
depth=4 | MAE=26.49 | R2=0.613
depth=6 | MAE=24.26 | R2=0.660
depth=10 | MAE=22.31 | R2=0.710
depth=None | MAE=22.62 | R2=0.709

Esse experimento costuma mostrar que profundidades muito grandes podem criar curvas de previsão fragmentadas demais.

7.6 Visualmente, o que a árvore faz na regressão

Enquanto modelos lineares produzem superficies suaves, árvores de regressão particionam o espaco de atributos em regioes. Em cada regiao, a previsão tende a ser constante ou aproximadamente constante. Isso torna o modelo flexível, mas também sujeito a cortes abruptos.

7.7 Quando usar classificação e quando usar regressão

A resposta depende da variável alvo.

  • Se o alvo representa catégorias, use classificação.
  • Se o alvo representa quantidade numerica, use regressão.

Parece obvio, mas ha casos de fronteira. Por exemplo, prever faixa de risco pode ser classificação; prever probabilidade de inadimplencia pode ser modelado de outras formas; prever valor de perda e regressão.

7.8 Vantagens compartilhadas

Tanto em classificação quanto em regressão, árvores oferecem:

  • interpretabilidade;
  • capacidade de modelar não linearidades;
  • pouca exigencia de pre-processamento inicial;
  • possibilidade de identificar regras locais de comportamento.

7.9 Cuidados compartilhados

As duas variantes exigem aténcao para:

  • overfitting;
  • instabilidade estrutural;
  • necessidade de validação cruzada;
  • leitura critica das regras aprendidas.

7.10 Relação com ensembles

Random Forest e Gradient Boosting usam várias árvores combinadas. Entender bem uma única árvore fácilita muito o aprendizado desses modelos mais fortes, porque os principios basicos de divisão, profundidade, folhas e controle de complexidade contínuam relevantes.

NoteResumo
  • A mesma estrutura de árvore pode servir a classificação e regressão.
  • O que muda principalmente e o critério usado nas divisoes e o tipo de saída das folhas.
  • Em classificação, as folhas representam classes; em regressão, valores numéricos.
  • Controle de complexidade contínua sendo essencial nos dois casos.

Árvores de decisão formam uma família versatil. O mesmo mecanismo de particionar o espaco de atributos pode servir tanto para escolher uma classe quanto para estimar um valor numérico. No próximo capítulo, vamos reunir esses conceitos em um estudo de caso mais completo, cobrindo preparação, treino, avaliação e interpretação.

WarningErros comuns
  • usar metricas de classificação em problema de regressão ou vice-versa;
  • supor que a interpretabilidade elimina necessidade de validação;
  • esquecer que árvores de regressão produzem previsões em degraus;
  • comparar modelos sem alinhar a natureza do alvo.
TipPerguntas de revisão
  1. Qual a principal diferenca entre DecisionTreeClassifier e DecisionTreeRegressor?
  2. Que tipo de metrica faz sentido em regressão?
  3. Por que a profundidade excessiva também prejudica regressão?
  4. O que aproxima uma árvore isolada dos ensembles baseados em árvores?