Algoritmo de árvore de decisão desmistificado: uma introdução fácil de seguir

O que é Árvore de Decisão?
O algoritmo de árvore de decisão é um método popular de aprendizado supervisionado em aprendizado de máquina. É um tipo de modelo que usa uma estrutura semelhante a uma árvore para fazer previsões com base nos recursos de entrada. Em uma árvore de decisão, cada nó representa uma característica ou atributo, e cada ramificação representa um possível valor dessa característica.
O algoritmo funciona dividindo recursivamente os dados em subconjuntos com base nos valores dos recursos. O processo de divisão continua até que um critério de parada seja atendido, como uma profundidade máxima da árvore ou um número mínimo de instâncias em um nó folha. Em cada nó, o algoritmo escolhe o recurso que melhor separa os dados em diferentes classes ou minimiza alguma outra função objetivo, como ganho de informação ou impureza de Gini.
Depois que a árvore é construída, ela pode ser usada para prever a classe de novas instâncias percorrendo a árvore da raiz até um nó folha que corresponde à classe prevista. A previsão é baseada na classe majoritária das instâncias de treinamento que atingem aquele nó folha.
Por que usar uma Árvore de Decisão?
Existem várias razões pelas quais alguém pode optar por usar um algoritmo de árvore de decisão no aprendizado de máquina:
Vantagens:
- Fácil de interpretar e explicar: O modelo de árvore de decisão é intuitivo e pode ser facilmente entendido por pessoas não técnicas. A estrutura em forma de árvore facilita a visualização do processo de tomada de decisão.
- Lida com recursos categóricos e numéricos: as árvores de decisão podem lidar com uma mistura de recursos categóricos e numéricos, ao contrário de alguns outros modelos de aprendizado de máquina que funcionam apenas com um ou outro.
- Pode lidar com valores ausentes: as árvores de decisão podem lidar com valores ausentes nos dados sem exigir imputação ou remoção de registros incompletos.
- Não paramétrico: as árvores de decisão não são paramétricas, o que significa que podem ajustar relacionamentos complexos sem assumir uma distribuição ou forma específica dos dados.
- Robusto para outliers: as árvores de decisão podem lidar com outliers nos dados sem serem fortemente influenciadas por eles.
- Overfitting: as árvores de decisão podem facilmente superajustar os dados, especialmente quando a árvore é profunda ou os dados são ruidosos ou complexos. Isso pode levar a um baixo desempenho de generalização em dados novos e não vistos.
- Instabilidade: as árvores de decisão podem ser sensíveis a pequenas alterações nos dados, levando a diferentes árvores e previsões potencialmente diferentes.
- Viés: as árvores de decisão podem ser tendenciosas em relação a recursos com mais níveis ou mais divisões, levando a que recursos menos importantes sejam negligenciados.
- Abordagem gulosa: as árvores de decisão usam uma abordagem gulosa para a divisão, o que significa que nem sempre podem encontrar a solução globalmente ótima.
- Falta de expressividade: as árvores de decisão podem não ser expressivas o suficiente para capturar certos relacionamentos complexos nos dados, como interações entre recursos.
Como funciona a árvore de decisão?
- O recurso do nó raiz é selecionado com base nos resultados da Medida de Seleção de Atributo (ASM).
- O ASM é repetido até que um nó folha ou um nó terminal não possa ser dividido em subnós.

A Medida de Seleção de Subconjunto de Atributos é uma técnica utilizada no processo de mineração de dados para redução de dados. A redução de dados é necessária para fazer uma melhor análise e previsão da variável alvo.
As duas principais técnicas de ASM são
- Índice Gini
- Ganho de informação (ID3)
A medida do grau de probabilidade de uma determinada variável ser erroneamente classificada quando escolhida aleatoriamente é chamada de índice de Gini ou impureza de Gini. Os dados são distribuídos igualmente com base no índice de Gini.
Fórmula matemática:

Pi = probabilidade de um objeto ser classificado em uma determinada classe.
Quando você usa o índice de Gini como critério para o algoritmo selecionar o recurso para o nó raiz, o recurso com o menor índice de Gini é selecionado.
Ganho de informação (ID3)
A entropia é o conceito principal desse algoritmo, que ajuda a determinar uma característica ou atributo que fornece o máximo de informações sobre uma classe é chamado de ganho de informação ou algoritmo ID3. Usando esse método, podemos reduzir o nível de entropia do nó raiz para o nó folha.
Fórmula matemática:

'p ', denota a probabilidade de E(S), que denota a entropia. O recurso ou atributo com o maior ganho ID3 é usado como raiz para a divisão.
Exemplo para entender a árvore de decisão
Exemplo de construção de uma árvore de decisão para classificar animais como “mamíferos” ou “não mamíferos” com base em dois preditores: “tem pêlo” e “põe ovos”.
Suponha que temos o seguinte conjunto de dados:

A variável alvo é “Mamífero?”, que indica se o animal é mamífero ou não. As variáveis preditoras são “Tem Pêlo” e “Põe Ovos”, que descrevem as características do animal.
Para construir uma árvore de decisão, começamos com o nó raiz e escolhemos o recurso que melhor divide os dados em dois subconjuntos com o maior ganho de informação. O ganho de informação mede o quanto a entropia da variável de destino é reduzida pela divisão dos dados com base em um recurso específico.
Em nosso exemplo, escolhemos “Tem Fur” como o nó raiz porque tem o maior ganho de informação entre todos os recursos. Dividimos os dados em dois subconjuntos com base nos valores de “Tem Pelo”: “Sim” e “Não”.
Para o subconjunto “Sim”, vemos que todas as instâncias têm o mesmo rótulo “Sim”, então atribuímos o nó folha “Sim” para este subconjunto.
Para o subconjunto “Não”, precisamos considerar o próximo recurso, “Ponha ovos”. Dividimos os dados em dois subconjuntos com base nos valores de “Ovos Posteiros”: “Sim” e “Não”.
Para o subconjunto “Sim”, vemos que todas as instâncias têm o mesmo rótulo “Não”, então atribuímos o nó folha “Não” para este subconjunto.
Para o subconjunto “Não”, vemos que todas as instâncias têm o mesmo rótulo “Não”, então atribuímos o nó folha “Não” para este subconjunto.
A árvore de decisão resultante se parece com isso:
Has Fur
/ \
/ \
Yes No
/ \
/ \
Yes Lays Eggs
/ \
/ \
Yes No
(Mammal) (Non-Mammal)
A árvore de decisão é fácil de interpretar e pode lidar com recursos categóricos e binários. No entanto, pode não funcionar bem ao lidar com relacionamentos complexos entre recursos ou dados com ruído. Além disso, pequenas mudanças nos dados podem levar a árvores diferentes, que podem não ser robustas.
Cálculo do Ganho de Informação para “Tem Pelo”
Primeiro calculamos a entropia da variável alvo:
Entropy(S) = -p(Mammal)*log2(p(Mammal)) - p(Non-Mammal)*log2(p(Non-Mammal))
= -0.5*log2(0.5) - 0.5*log2(0.5)
= 1.0
Em seguida, calculamos a entropia dos subconjuntos quando os dados são divididos com base no recurso “Has Fur”:
Entropy(Has Fur=Yes) = -p(Mammal)*log2(p(Mammal)) - p(Non-Mammal)*log2(p(Non-Mammal))
= -1*log2(1) - 0*log2(0)
= 0
Entropy(Has Fur=No) = -p(Mammal)*log2(p(Mammal)) - p(Non-Mammal)*log2(p(Non-Mammal))
= -0.75*log2(0.75) - 0.25*log2(0.25)
= 0.81
Finalmente, calculamos o ganho de informação:
Information Gain(Has Fur) = Entropy(S) - [p(Has Fur=Yes)*Entropy(Has Fur=Yes) + p(Has Fur=No)*Entropy(Has Fur=No)]
= 1.0 - [0.5*0 + 0.5*0.81]
= 0.405
Primeiro calculamos a entropia da variável alvo:
Entropy(S) = -p(Mammal)*log2(p(Mammal)) - p(Non-Mammal)*log2(p(Non-Mammal))
= -0.5*log2(0.5) - 0.5*log2(0.5)
= 1.0
Em seguida, calculamos a entropia dos subconjuntos quando os dados são divididos com base no recurso “Lays Eggs”:
Entropy(Lays Eggs=Yes) = -p(Mammal)*log2(p(Mammal)) - p(Non-Mammal)*log2(p(Non-Mammal))
= -0.6*log2(0.6) - 0.4*log2(0.4)
= 0.971
Entropy(Lays Eggs=No) = -p(Mammal)*log2(p(Mammal)) - p(Non-Mammal)*log2(p(Non-Mammal))
= -1*log2(1) - 0*log2(0)
= 0
Finalmente, calculamos o ganho de informação:
Information Gain(Lays Eggs) = Entropy(S) - [p(Lays Eggs=Yes)*Entropy(Lays Eggs=Yes) + p(Lays Eggs=No)*Entropy(Lays Eggs=No)]
= 1.0 - [0.6*0.971 + 0.4*0]
= 0.292
A árvore de decisão resultante ficaria assim:
Has Fur?
|
+--- Yes ---> Mammal
|
+--- No ---> Non-Mammal
“O sucesso é o quão alto você salta quando atinge o fundo.”