Olá!
Continuando a série “Top 8 Algoritmos de Machine Learning: Tudo que Você Precisa Saber”, hoje é a vez de explorarmos as árvores de decisão!
Esse algoritmo tem sido uma das técnicas mais populares e amplamente utilizadas no campo de inteligência artificial e machine learning.
As árvores de decisão oferecem uma maneira intuitiva e visual de tomar decisões baseadas em dados, com diversas aplicações como análise de dados, previsão de tendências e tomada de decisões automáticas.
Neste artigo, vamos explorar o que são as árvores de decisão, como funcionam, suas vantagens e desvantagens, e alguns exemplos práticos de seu uso.
Acesse o Colab (Notebook) com o código: https://elisaterumi.substack.com/p/notebooks
O Que é uma Árvore de Decisão?
Uma árvore de decisão é um modelo preditivo utilizado para tomar decisões ou classificar dados com base em uma série de regras de decisão.
O modelo se estrutura de forma hierárquica, com um nó raiz no topo, que representa a decisão principal a ser tomada. A partir desse nó, surgem vários ramos (ou nós filhos), cada um representando uma decisão ou condição a ser aplicada. As folhas da árvore, por sua vez, representam a saída ou a classe do modelo, ou seja, o resultado final da decisão.
Em termos simples, podemos entender a árvore de decisão como um "fluxograma de decisões". A principal vantagem dessa representação é que ela facilita a interpretação e a compreensão dos processos de decisão, além de ser bastante eficiente em termos de tempo computacional.
Como Funciona uma Árvore de Decisão?
A construção de uma árvore de decisão envolve duas etapas principais: a seleção das melhores divisões (ou atributos) nos nós e a construção recursiva da árvore até que uma condição de parada seja atendida (como a profundidade máxima ou a pureza dos nós).
Seleção de Atributos (ou Características): Em cada nó, o algoritmo seleciona o atributo que melhor divide os dados em grupos. A escolha desse atributo é baseada em métricas de "pureza", como a entropia.
Divisão Recursiva: Após a escolha do atributo, o conjunto de dados é dividido em subconjuntos, e o processo é repetido recursivamente para cada subconjunto, criando novos nós e ramos, até que se atinjam as condições de parada, como a homogeneidade total dos dados em uma folha.
Por exemplo, ao classificar um conjunto de dados de clientes como "comprar" ou "não comprar", o algoritmo pode começar com o atributo "idade", seguido por "renda", e assim por diante, até que a árvore tenha tomado todas as decisões necessárias para classificar corretamente os dados.
Vantagens das Árvores de Decisão
As árvores de decisão oferecem várias vantagens que as tornam atraentes para diversas aplicações:
Facilidade de Interpretação: Uma das maiores vantagens das árvores de decisão é que elas são altamente interpretáveis e visuais. Mesmo quem não tem um conhecimento técnico profundo pode compreender como o modelo chega a uma decisão.
Pouco Pré-processamento de Dados: As árvores de decisão não exigem que os dados sejam normalizados ou transformados, o que facilita seu uso em diferentes tipos de dados.
Capacidade de Lidar com Dados Faltantes: Árvores de decisão podem lidar bem com dados ausentes, já que podem ser ajustadas para ignorar valores faltantes durante o processo de divisão.
Novas opções podem ser adicionadas às árvores existentes.
Desvantagens das Árvores de Decisão
Apesar das suas vantagens, as árvores de decisão também apresentam algumas limitações:
Propensão ao Overfitting: Se não forem bem ajustadas, as árvores de decisão podem se tornar muito complexas e ajustar-se excessivamente aos dados de treinamento, levando ao overfitting. Isso significa que o modelo pode não generalizar bem para novos dados.
Instabilidade: Pequenas mudanças nos dados podem resultar em uma estrutura completamente diferente para a árvore de decisão, tornando-a sensível a variações nos dados de entrada.
Baixa Precisão em Problemas Complexos: Árvores de decisão simples podem não ser capazes de capturar relações complexas entre os dados, sendo menos precisas do que outros modelos mais sofisticados, como as redes neurais ou os ensembles de modelos.
Aplicações
As árvores de decisão são amplamente utilizadas em várias áreas, como:
Diagnóstico Médico: Utilizadas para diagnosticar doenças com base em sintomas e resultados de exames.
Crédito e Finanças: No setor financeiro, as árvores de decisão ajudam a determinar se um indivíduo é elegível para um empréstimo com base em variáveis como histórico de crédito, renda e idade.
Marketing: Elas podem ser usadas para segmentar clientes e tomar decisões sobre campanhas de marketing, analisando dados demográficos, comportamentais e históricos de compra.
Detecção de Fraude: Árvores de decisão podem ajudar a identificar padrões de comportamento suspeitos, como transações financeiras fraudulentas.
Vamos codificar!
Imagine que temos um conjunto de frutas e queremos classificá-las automaticamente com base em três características:
Peso (em gramas)
Cor (amarela, vermelha ou verde)
Forma (redonda ou alongada)
Nosso objetivo será treinar um modelo de aprendizado supervisionado que consiga identificar corretamente o tipo de fruta com base nesses dados, usando árvode de decisão.
Passos do Projeto
Dados: Criamos um pequeno conjunto de dados com características fictícias das frutas e seus rótulos correspondentes (Banana, Maçã, Melão ou Morango).
Pré-processamento: Convertemos as informações categóricas, como cor e forma, para valores numéricos, utilizando técnicas como o Label Encoding. Isso é necessário porque os algoritmos de aprendizado de máquina funcionam melhor com dados numéricos.
Treinamento do modelo: Utilizamos a classe DecisionTreeClassifier, da biblioteca Sklearn, para construir o modelo. Ele aprende as regras que associam os dados às classes de frutas.
Visualização da árvore: Geramos um gráfico da árvore de decisão para entender as decisões tomadas pelo modelo em cada etapa.
Crie um arquivo com Jupyter Notebook e cole o código:
# Importando as bibliotecas necessárias
from sklearn.tree import DecisionTreeClassifier, plot_tree
import matplotlib.pyplot as plt
import numpy as np
from sklearn.preprocessing import LabelEncoder
# Gerando dados fictícios sobre frutas
# [Peso (em gramas), Cor (String), Forma (0=Redonda, 1=Alongada)]
X = np.array([[190, 'Amarela', 'Redonda'], # Banana, Amarela, Redonda
[200, 'Vermelha', 'Redonda'], # Maçã, Vermelha, Redonda
[220, 'Verde', 'Alongada'], # Melão, Verde, Alongada
[180, 'Amarela', 'Redonda'], # Banana, Amarela, Redonda
[30, 'Vermelha', 'Redonda'], # Morango, Vermelho, Redondo
[210, 'Vermelha', 'Redonda'], # Maçã, Vermelha, Redonda
[200, 'Verde', 'Alongada'], # Melão, Verde, Alongada
[170, 'Amarela', 'Redonda'], # Banana, Amarela, Redonda
[210, 'Vermelha', 'Redonda'], # Maçã, Vermelha, Redonda
[290, 'Verde', 'Alongada'], # Melão, Verde, Alongada
[50, 'Vermelha', 'Redonda']]) # Morango, Vermelho, Redondo
# Rótulos (0=Banana, 1=Maçã, 2=Melão, 3=Morango)
y = np.array([0, 1, 2, 0, 3, 1, 2, 0, 1, 2, 3])
# Codificando as cores (Label Encoding)
label_encoder = LabelEncoder()
X[:, 1] = label_encoder.fit_transform(X[:, 1]) # Codificando a coluna de cores
# Codificando a forma como valores numéricos
X[:, 2] = np.where(X[:, 2] == 'Redonda', 0, 1)
# Convertendo os dados de X para tipo numérico
X = X.astype(float)
# Criando o classificador de árvore de decisão
clf = DecisionTreeClassifier()
# Treinando o modelo
clf.fit(X, y)
# Visualizando a árvore de decisão
plt.figure(figsize=(12, 4))
plot_tree(clf, filled=True, feature_names=["Peso", "Cor", "Forma"], class_names=["Banana", "Maçã", "Melão", "Morango"], rounded=True, impurity=False)
plt.show()
Resultado:
Se percorrermos a árvore, poderemos entender como o modelo toma suas decisões ao classificar cada fruta. Cada nó da árvore representa uma pergunta baseada nas características (como "O peso é maior que 200 gramas?" ou "A cor é vermelha?"), e cada ramo nos leva a um subgrupo de dados mais específico.
Ao seguirmos os ramos, chegamos às folhas, que representam as classes finais, como Banana, Maçã, Melão ou Morango. Essa estrutura hierárquica facilita a interpretação do modelo e nos ajuda a identificar as características mais relevantes para a classificação.
Por exemplo, se uma fruta pesa 190 gramas, é amarela e tem uma forma redonda, a árvore pode decidir que é uma Banana ao seguir o caminho correspondente. Esse processo é conhecido como "inferência", e a clareza com que as árvores de decisão representam essas regras é uma das razões pelas quais elas são amplamente utilizadas em problemas de classificação e regressão.
Acesse o Colab (Notebook) com o código: https://elisaterumi.substack.com/p/notebooks
Conclusão
As árvores de decisão são ferramentas poderosas e intuitivas no campo da Inteligência Artificial e Machine Learning.
Elas oferecem uma maneira clara de fazer previsões baseadas em dados, sendo particularmente eficazes em tarefas de classificação e regressão. As árvores de decisão são ideais para implementar sistemas de IA responsável, graças à sua transparência e interpretabilidade, permitindo que decisões sejam facilmente explicadas e auditadas.
Embora tenham algumas limitações, como a propensão ao overfitting e a instabilidade em relação às variações nos dados, essas desvantagens podem ser mitigadas por meio de técnicas como poda e o uso de métodos de ensemble, como Random Forests.
Se você está começando a explorar o mundo do aprendizado de máquina, as árvores de decisão são uma excelente porta de entrada, oferecendo tanto simplicidade quanto eficácia.
Caso você queria se aprofundar no assunto: Decision Trees and Random Forests: A Visual Introduction For Beginners: A Simple Guide to Machine Learning with Decision Trees (English Edition)
No próximo artigo vamos explorar justamente Random Forest, não perca!! ️🔥
Parabéns pelo artigo, muito bom!!!
Para quem assina o Kindle Unlimited tem esta outra dica de livro
Machine Learning With Random Forests And Decision Trees: A Visual Guide For Beginners (English Edition) - https://a.co/d/7JQvdds
Parabéns pelo artigo. Muito bem explicado !!!