Skip to content

12. Árvore de Decisão Visual (Classificação Aprovação/Reprovação)

Antes de visualizar a árvore, criamos uma variável de classificação para aprovação/reprovação:

X_visu = df.drop(['math score', 'reading score', 'writing score'], axis=1)
y_visu = (df['math score'] >= 60).astype(int)  # 1 = aprovado, 0 = reprovado

A visualização da árvore de decisão é uma ferramenta poderosa para interpretar como o modelo toma decisões. Ela permite identificar quais variáveis são mais relevantes, quais critérios são utilizados em cada divisão e como as regras de classificação são formadas.

Limitar a profundidade da árvore facilita a compreensão dos principais caminhos de decisão, tornando o modelo mais transparente e didático. Esse tipo de visualização é especialmente útil para comunicar resultados a públicos não técnicos e para validar se as decisões do modelo fazem sentido no contexto do problema.

# Visualização da árvore de decisão otimizada para tomada de decisão
from sklearn.tree import DecisionTreeClassifier
from sklearn import tree
import matplotlib.pyplot as plt
import matplotlib
matplotlib.use('Agg')
import os
from IPython.display import Image, display

# Diretório de imagens relativo ao notebook
img_dir = 'imagens'
os.makedirs(img_dir, exist_ok=True)

# Dados para classificação
X_visu = df.drop(['math score', 'reading score', 'writing score'], axis=1)
y_visu = (df['math score'] >= 0.6).astype(int)  # 1 = aprovado, 0 = reprovado (ajustado para dados normalizados)

# Verificar distribuição das classes
print('Distribuição das classes (y_visu):')
print(y_visu.value_counts())

if len(y_visu.unique()) < 2:
    print('O target possui apenas uma classe. Não é possível treinar a árvore de decisão.')
else:
    clf_otimizada = DecisionTreeClassifier(
        max_depth=3,
        min_samples_split=best_tree.get_params().get('min_samples_split', 2),
        min_samples_leaf=best_tree.get_params().get('min_samples_leaf', 1),
        max_features=best_tree.get_params().get('max_features', None),
        random_state=42
    )
    clf_otimizada.fit(X_visu, y_visu)

    fig = plt.figure(figsize=(18, 12), dpi=120)
    tree.plot_tree(
        clf_otimizada,
        feature_names=X_visu.columns,
        class_names=['Reprovado', 'Aprovado'],
        filled=True,
        rounded=True,
        fontsize=14
    )
    plt.title('Árvore de Decisão Visual Otimizada para Tomada de Decisão (max_depth=3)', fontsize=20)
    img_path = os.path.join(img_dir, 'arvore_decisao_visual_otimizada.png')
    plt.savefig(img_path)
    plt.close(fig)

    print(f'Imagem PNG salva como {img_path}')
    display(Image(filename=img_path))

A imagem abaixo mostra a árvore de decisão otimizada, ideal para apoiar decisões e interpretar os critérios utilizados pelo modelo. Árvore de decisão visual otimizada