Machine Learning · Insper
Random Forest
Abordagem avançada
Onde a média para de ajudar, quais botões importam e como (não) ler uma floresta
O caminho desta parte
- Por que o voto funcionao júri de Condorcet; o piso ρσ², medido
- Ajustar o que importa
max_features, min_samples_leaf, árvores suficientes
- Ler as importânciasviés da impureza, permutação, crédito dividido
- Variantes e limitesExtra-Trees, sem extrapolação, custo
Cada etapa responde a uma pergunta: quando o voto de muitos vence um só? → quais botões vale a pena ajustar? → quais atributos a floresta usa e dá para confiar na resposta? → o que uma floresta não faz e quanto ela custa?
Etapa 1 · quando o voto de muitos vence um só?
O júri de Condorcet (1785)
Cada jurado acerta com \(p = 0{,}6\), independentemente. Com três: \(0{,}6^3 + 3 \times 0{,}6^2 \times 0{,}4 = 0{,}648\).
| votantes | 1 | 11 | 101 | 1.001 |
| independentes (\(c = 0\)) | 0,601 | 0,755 | 0,980 | 1,000 |
| copiam com prob. \(c = 0{,}1\) | 0,601 | 0,743 | 0,917 | 0,998 |
| copiam com prob. \(c = 0{,}3\) | 0,601 | 0,678 | 0,618 | 0,597 |
Com \(c = 0{,}3\), a correlação entre dois votantes é só 0,09 — e um comitê de 1.001 acerta como um votante sozinho: o bloco que copia decide toda votação.
Por que o bagging só cortou pela metade
- Uma árvore do bagging: variância \(\sigma^2 = 0{,}0937\).
- Duas delas, no mesmo ponto: correlação \(\rho = 0{,}44\) — todas viram os mesmos 100 pontos, ruído incluído.
\[ \rho\sigma^2 + \frac{(1-\rho)\,\sigma^2}{100} = 0{,}44 \times 0{,}0937 + \frac{0{,}56 \times 0{,}0937}{100} = 0{,}0417 \]
Medido: 0,0413.
Quase toda a variância que resta é o piso \(\rho\sigma^2\). Mais árvores não ajudam; árvores menos correlacionadas ajudam — o trabalho de max_features.
Etapa 2 · quais botões vale a pena ajustar?
Hiperparâmetros: um de cada vez, nos dígitos
| botão | valores (acurácia de CV) | amplitude |
n_estimators | 10: 0,941 · 100: 0,976 · 300: 0,977 | 0,036 |
max_features | 1: 0,970 · sqrt: 0,977 · None: 0,947 | 0,030 |
min_samples_leaf | 1: 0,977 · 10: 0,947 · 30: 0,915 | 0,062 |
max_depth | 3: 0,888 · 10: 0,977 · None: 0,977 | 0,089 |
criterion | gini: 0,977 · entropy: 0,979 | 0,002 |
Florestas querem árvores fundas. Ajuste max_features e min_samples_leaf; escolha "árvores suficientes" pela curva OOB; o resto quase não importa.
Etapa 3 · quais atributos a floresta usa e dá para confiar na resposta?
Importância por impureza: enviesada
Crédito alemão + duas colunas de puro ruído:
| atributo | valores distintos | rank MDI | rank permutação |
| credit_amount | 921 | 1 | 8 |
| random_id (ruído) | 1.000 | 2 | 14 |
| checking_status | 4 | 5 | 1 |
| coin (ruído) | 2 | 17 | 22 |
A MDI é medida nos dados de treino e premia colunas com muitos limiares, que ajustam ruído no fundo das árvores. Prefira a permutação em dados separados.
Atributos correlacionados dividem o crédito
| MDI | permutação |
| checking_status, sozinho | 0,086 | 0,144 |
| checking_status, com uma gêmea | 0,057 | 0,049 |
| checking_copy | 0,059 | 0,054 |
Embaralhar uma cópia deixa a outra fazer o trabalho. Um atributo que parece sem importância pode só ter um substituto: permute o grupo inteiro de uma vez.
Etapa 4 · o que uma floresta não faz e quanto ela custa?
Extra-Trees e o que uma floresta não faz
Extra-Trees
Limiares sorteados em vez de buscados; sem bootstrap. Nos dígitos: 0,981 contra 0,977 da floresta (empate), com o dobro de nós por árvore.
Sem extrapolação
Treinada em \(y = 3x\), \(0 \le x \le 10\): prevê 29,6 em \(x = 12\) e em \(x = 20\). O modelo linear: 59,7 (verdade: 60).
Toda previsão é uma média de alvos de treino: fora da faixa vista, a floresta fica plana.
O custo de uma floresta
| dígitos | acurácia | nós | tamanho salvo |
| uma árvore | 0,829 | 293 | 0,04 MB |
| floresta, 300 árvores | 0,977 | 98.696 | 14,32 MB |
| floresta, folhas ≥ 3 | 0,971 | 65.754 | 9,57 MB |
Bagging constrói árvores independentes, em paralelo e corta variância. O boosting (próxima aula) as constrói em sequência e corta viés.
Lab avançado · cerca de 30 min, em duplas
Ajustar, escolher o limiar e testar, passos 8 a 11
- Mesmo notebook, mesma sessão: os passos usam
X_train, y_train, cv, folds e roc_auc_score.
- Ajustar
max_features e min_samples_leaf; um limiar que manda no máximo 1% do e-mail legítimo para o spam, escolhido out-of-bag; o teste, uma vez; para onde a floresta olha.
- Notebook no Colab, a partir do passo 8.
- Simulações: a busca de graça, com o OOB (passo 8) e a importância de um par de gêmeas (passo 11).
Ritmo: passo 8 e a primeira simulação em 10 min; passos 9 e 10 em 10 min; passo 11 e a segunda em 10 min.