Random Forest e o Akinator da vida adulta (pt.2)
- Vinicius Araujo
- 5 de jun. de 2024
- 5 min de leitura
No último post iniciamos esta série de artigos sobre Random Forest que promete (tentar) te explicar de maneira simplificada o funcionamento de um dos algoritmos de Machine Learning mais queridinhos do pessoal de Dados (se você por acaso perdeu a parte 1 dessa belezinha, clique aqui)!
A gente estava vendo que fazer perguntas é bom, mas afulinar demais o problema nem sempre é aconselhável, tornando o algoritimo mais lento, complexo e podendo ocasionar muitas vezes até o overfitting.
Quantas perguntas devemos fazer, então? A ordem delas importa? Como saber se uma pergunta feita é boa? Vem comigo acompanhar o artigo dessa semana que vai te dar uma luz sobre esses temas...
Ganho de informação e a Impureza de Gini
De maneira objetiva, uma pergunta é importante para o modelo se ela pode separar bem os dados, mas ganha prioridade na ordem de utilização se ela separar melhor do que as outras.
Como nem tudo na vida são flores, não fugiremos das fórmulas matemáticas por aqui, mas apresentarei elas com exemplos e isso ajudará a entender os seus funcionamentos.
Não desistam dessa parte mais técnica 🙏, é importante e no próximo artigo seguiremos na parte conceitual mais tranquila.
Voltemos com a ilustração da Lâmpadas Inc apresentada no artigo anterior:
Se em uma divisão do conjunto de dados temos categorias bem separadas umas das outras, podemos dizer que temos uma baixa “impureza” nessa divisão. A Impureza de Gini vem para tangibilizar esse conceito e, basicamente, ela representa a frequência com que um cliente teria sua experiência classificada incorretamente:
Inicialmente, quando nenhuma pergunta (divisão) foi feita na base de dados, temos um conjunto de 28 bolinhas, sendo que dessas, 13 são vermelhas (representando clientes com experiência ruim) e 15 são azuis (representam clientes com experiência boa). Substituiremos P(Experiência ruim) pela fração (13 / 28) = 0.46 e P(Experiência boa) por (15 / 28) = 0.54 e elevando-os ao quadrado, temos:
Seguindo com a pergunta de compra nos ultimos 3 meses (ilustração abaixo), teríamos o conjunto de dados dividido em duas possibilidades: não fez compra e fez compra. No primeiro caso, temos 9 bolinhas azuis representando a experiência boa de um total de 11 clientes respondentes. E, analogamente, 2 bolinhas vermelhas representando a experiência ruim dos mesmos 11 clientes respondentes. A Impureza de Gini para essa divisão seria:
Voltamos os olhos agora para os clientes que fizeram compra nos últimos 3 meses. Para eles, temos 11 bolinhas vermelhas e 6 bolinhas azuis, totalizando 17 clientes respondentes. Assim, teríamos:
Se lembrarmos que a natureza da fórmula traduz a frequência com que um cliente teria sua experiência classificada incorretamente, então, quanto menor o índice, melhor a pergunta feita. Podemos notar visualmente esse fato, onde o lado esquerdo é notoriamente “mais puro” (muito mais azuis do que vermelhas) e com um índice menor do que o lado direito (mais caótico) com o índice maior.
Temos a impureza de Gini de cada lado (🙂), mas as fórmulas não param por aqui (🥲 ). Fato é que toda pergunta que utilizássemos nesse início dividiria o conjunto de dados em duas partes e, inevitavelmente, uma seria melhor do que outra. Precisamos de uma espécie de penalização às perguntas feitas que não separem bem o público em dois grupos impuros: Vamos ponderar esse índice com base na proporção de bolinhas resultantes nas duas divisões com a seguinte fórmula:
O peso para cada lado é a quantidade de clientes respondentes dentro da divisão sobre a quantidade total de clientes antes da divisão. Como a soma total de bolinhas em cada divisão é igual a (11 + 17) = 28. Temos, para o lado “não fez compra” (11 / 28) = 0.39 e para o lado “fez compra” (17 / 28) = 0.61. Assim, a Impureza de Gini ponderada trazida pela pergunta de “compra do cliente pelo aplicativo nos últimos 3 meses” ficaria:
O número acima é a importância geral daquela pergunta para o modelo, mas precisamos agora entender a importância da outra pergunta. Seguindo agora de maneira mais direta para se o “cliente precisou falar com o suporte para tirar alguma dúvida?” teríamos, primeiramente, as Impurezas de Gini de cada lado:
Depois, calculamos a métrica ponderada para cada lado da divisão com a equação abaixo:
Essa seria a importância dessa outra pergunta, mas para conseguirmos comparar qual deveria ser a raiz na nossa árvore de decisão, ultilizaremos a lógica do Ganho de Informação (GI) que basicamente subtrai a Impureza de Gini inicial (ou de antes de se fazer uma nova pergunta) com o a Impureza de Gini da pergunta a ser comparada. Quanto maior o ganho de informação que a pergunta proporciona a respeito do problema, melhor a pergunta. As duas equações abaixo exemplificam os cálculos:
Assim, temos que a pergunta “cliente fez alguma compra pelo aplicativo nos últimos 3 meses?” parece ser a que melhor divide a base nesse passo inicial de construção do algoritmo (0.10 é maior que 0.09).
Esses exemplos se referiam a variáveis categóricas (fez compra x não fez compra), mas, analogamente, poderíamos ter estendido esse conceito para variáveis numéricas (por exemplo, valor gasto na última compra), onde a ideia seria encontrar um ponto de separação no conjunto de valores existentes para ess variável e os clientes que tivessem gastado mais do que esse ponto estariam de um lado da divisão e, consequentemente, os que gastaram menos que esse valor estariam do outro lado da divisão.
Os métodos mais comuns de escolha desse ponto de separação numérica testam cada uma das possibilidades existentes no conjunto de dados e a que traz o maior ganho de informação (fórmulas que vimos acima) é escolhida como a regra de separação.
Quando paramos de fazer perguntas?
O processo anterior foi realizado para a a escolha da raiz da nossa árvore de decisão, mas os passos seguintes seguem o mesmo raciocínio e criam os diversos galhos da árvore: depois de uma pergunta escolhida, testamos recursivamente qual será a próxima pergunta que faremos com a divisão resultante. Podemos utilizar a fórmula do Ganho de Informação generalizando como algo do tipo:
Para cada escolha de pergunta que dividirá a árvore, calculamos o seu ganho com a expressão acima e a pergunta que maximiza essa métrica é escolhida para subdivir novamente o conjunto de dados. O processo continua até que alguma das condições abaixo seja satisfeita:
Encontrarmos um ramo puro, ou seja, um que só contenha uma das possíveis categorias existentes (somente experiência boa ou somente experiência ruim, por exemplo).
Chegarmos a um ramo com pouquíssimos dados para uma nova divisão.
Atingirmos uma determinada profundidade da árvore de decisão (quantidade de perguntas feitas muito alta).
Definir a regra da quantidade mínima de dados após uma divisão ou a da melhor profundidade da árvore de decisão é um processo chamado de poda da árvore e tomar a melhor decisão para isso envolve uma prática mais complexa que abordaremos mais adiante nessa serie e que é comumente chamada de tuning de hiperparametros (HPO).
No próximo artigo, faremos uma recapitulação dos principais conceitos, falaremos sobre vantagens e desvantagens do algoritmo e passaremos por temas curiosos como "De onde vem o Random no nome Random Forest?"!
Eu não perderia isso por nada! Te vejo próximo artigo! :)
Comments