Random Forest é um poderosíssimo modelo que tem ganhado muita força no mercado. É um modelo que chamamos de ensembled, um método de aprendizado ensembled. Esse nome inglês, que até o momento eu desconheço tradução – e se tiver, é pouco usada -, consiste em combinar diferentes métodos de aprendizado. Por esse motivo, são modelos mais poderosos e que obtém maior acurácia que modelos tradicionais, ainda que, obviamente, também tenham seus riscos. No post de hoje, vou falar, de forma simplificada, como funciona o Random Forest e também deixar o código em Python para que vocês pratiquem.
Primeiro, é importante que o conceito de Árvore de Decisão esteja claro para você. Caso não esteja, visite o post Árvore de Decisão.
Bom, vamos ao funcionamento de uma Random Forest. Primeiro, vamos imaginar uma base de dados qualquer, bem simples:
Nossa base é uma simulação de uma base de um banco que quer identificar se os futuros clientes serão bons ou maus pagadores. O que temos aqui é a base atual para construir um modelo preditivo – i.e., utilizaremos ela para tentar “prever” o comportamento dos clientes que forem entrando. Note que temos 4 variáveis explicativas (Idade+Profissão+CEP+Produto) e uma variável resposta (Bom_Pagador).
O que o algoritmo Random Forest irá fazer aqui é retirar diversas amostras com reposição. Ou seja, nosso modelo pode ter primeiro uma amostra com o estudante de 20 anos, o economista de 30 e o professor de 40. Na sequência, uma nova amostra, agora com o economista de 30, o aposentado de 60 e, mais uma vez, o economista de 30 (pois há reposição). E assim por diante, retirando diversas amostras.
Para cada amostra retirada, serão geradas Árvores de Decisão. Porém, há um detalhe na construção dessa árvore. Em uma árvore de decisão comum, escolheríamos primeiro a variável que melhor separa os grupos dentre as 4 existentes. Em seguida, das 3 restantes, escolheríamos a que melhor divide os indivíduos. O que ocorre na Random Forest é que escolhemos a variável que melhor separa as variáveis, dentro de um subgrupo de variáveis escolhidas de forma aleatória. Sendo assim, primeiro, seu modelo escolheria aleatoriamente um subgrupo de variáveis. Vamos supor que seu modelo escolha um subgrupo de tamanho 2. Sendo assim, ele escolhe aleatoriamente duas variáveis dentre as 4 existentes. As variáveis escolhidas no nosso exemplo hipotético foram Profissão e CEP. Então, o modelo determina que a que divide melhor os indivíduos entre bom pagador e mau pagador é a Profissão, sendo estudantes são maus pagadores e o restante bons pagadores. Então reforçando os passos, de forma genérica:
Passo 1: Dentre as variáveis existentes, o modelo irá escolher aleatoriamente n candidatas;
Passo 2: Das n candidatas, ele irá analisar qual divide melhor o grupo de não pagadores e pagadores;
Passo 3: Repete os passos 1 e 2 para as variáveis restantes.
Colocando de forma prática, o modelo funcionaria da seguinte forma:
Passo 1: Dentre as variáveis Idade, Profissão, CEP e Produto, o modelo irá escolher aleatoriamente 2 variáveis para começar a árvore. Aqui, resultou nas variáveis Profissão e CEP;
Passo 2: Escolhidas essas variáveis, o modelo verificou que a variável Profissão tem maior poder preditivo que CEP, sendo assim a usou para começar a árvore;
Passo 3: Agora, o modelo escolheu aleatoriamente as variáveis Idade e CEP. Dessas, ele irá escolher qual tem maior poder preditivo e seguir com a árvore.
Veja que isso é somente a árvore para a amostra 1. Esse mesmo processo é repetido para n amostras. Outro ponto de atenção é que aqui trabalhamos com subgrupo de n=2, mas esse valor não é fixo. Poderíamos tranquilamente ter utilizado n=3 ou até n=1. O software estatístico que você estiver utilizando permitirá que você faça essa escolha de forma que você obtenha o n que traz maior acurácia.
Agora, temos diversas árvores de decisão construídas para cada uma das amostras. Então, quando entrar um cliente novo na base ele irá “percorrer” todas as árvores. Para cada uma, claro, ele terá uma resposta: bom ou mau pagador. A resposta final será o que aparecer mais vezes. Ou seja, a decisão é tomada pelo maior número de votos. Se o cliente foi considerado bom em 20 árvores e mau em 10, a decisão final do modelo é que o cliente é bom.
As vantagens do Random Forest:
- Bom poder preditivo, geralmente superando modelos mais tradicionais como a Regressão Logística;
- Ótimo para high dimensional data, i.e., base com grande dimensão (alto número de variáveis);
- Lida bem com dados não balanceados e outliers;
- Menor propensão a overfitting que Árvore de Decisão.
As desvantagens:
- Modelo de difícil interpretação;
- Treinar um alto número de árvores pode demandar um grande poder computacional;
- Ainda que seja menos propensa que a Árvore de Decisão, ainda é um modelo com risco considerável de overfitting.
Viu? Até que a ideia desse modelo não é tão difícil, certo?
Se você desejar, pode estudar o código Python para gerar uma Random Forest acessando o meu github: https://github.com/yukioandre/Python/blob/master/Case_Several_Models.ipynb.
No futuro, pretendo fazer um post mais completo explicando o código e suas saídas.
E se você gostou do post, não vá embora sem deixar uma curtida ou um comentário. Eu sei que não parece relevante, mas faz diferença para mim e custa pouco para você, vai… Se encontrou algum erro ou tem alguma sugestão, dúvida, elogio ou crítica, pode escrever nos comentários ou me enviar uma mensagem diretamente em Sobre o Estatsite. E visite também a conta do Twitter @EstatSite, costumo postar algumas coisas bem rapidinho por lá, geralmente são posts e códigos mais curtos ou compartilhamento de algo legal ou alguma reflexão.
Forte Abraço e Bons Estudos!