Skip to content

Decision Tree

Introdução

  1. Exploração de dados: A base escolhida para testar a decision tree foi a "Red Wine Quality", uma base limpa que dispõe de 11 variáveis que afetam a qualidade de um Vinho tinto, são elas: Fixed Acidity, Volatile Acidity, Citric Acid, Residual Sugar, Chlorides, Free Sulfur Dioxide, Total Sulfur Dioxide, Density, pH, Sulphates, Alcohol. Todas já estão de forma adequada para o modelo.(A coluna "Citric Acid" possui alguns valores 0.0, porém ainda é coerente, alguns vinhos não possuem acido citrico).
    A partir destas variáveis é possível prever a qualidade do vinho, por isso para o treinamento temos a coluna 'Quality' que contém uma nota de 0 a 10 para o vinho, sendo esta nossa variavel target.

Divisão dos Dados

O conjunto de dados foi dividido em 80% para treino e 20% para um primeiro teste de validação

Treinamento e Resultados


Feature Importances:

Feature Importance
10 alcohol 0.173819
6 total sulfur dioxide 0.119710
7 density 0.105361
9 sulphates 0.103027
2 citric acid 0.083754
1 volatile acidity 0.082115
8 pH 0.080950
4 chlorides 0.079560
3 residual sugar 0.063364
0 fixed acidity 0.056927
5 free sulfur dioxide 0.051414
Accuracy: 0.57 2025-09-28T23:39:02.003183 image/svg+xml Matplotlib v3.10.5, https://matplotlib.org/

import matplotlib.pyplot as plt
import pandas as pd

from io import StringIO
from sklearn import tree
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import LabelEncoder
from sklearn.metrics import accuracy_score

plt.figure(figsize=(12, 10))

df = pd.read_csv('https://raw.githubusercontent.com/eduardogd09/machine-learning/refs/heads/main/winequality-red.csv')

label_encoder = LabelEncoder()

# Carregar o conjunto de dados
x = df[['fixed acidity', 'volatile acidity','citric acid','residual sugar','chlorides','free sulfur dioxide','total sulfur dioxide','density','pH','sulphates','alcohol']]
y = df['quality']

# Dividir os dados em conjuntos de treinamento e teste
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=42)

# Criar e treinar o modelo de árvore de decisão
classifier = tree.DecisionTreeClassifier()
classifier.fit(x_train, y_train)

# Optional: Print feature importances
feature_importance = pd.DataFrame({
    'Feature':['fixed acidity', 'volatile acidity','citric acid','residual sugar','chlorides','free sulfur dioxide','total sulfur dioxide','density','pH','sulphates','alcohol'],

    'Importance': classifier.feature_importances_
})
print("<br>Feature Importances:")
print(feature_importance.sort_values(by='Importance', ascending=False).to_html())


# Avaliar o modelo
accuracy = classifier.score(x_test, y_test)
print(f"Accuracy: {accuracy:.2f}")
tree.plot_tree(classifier)

# Para imprimir na página HTML
buffer = StringIO()
plt.savefig(buffer, format="svg")
print(buffer.getvalue())

Avaliação do modelo

O modelo atingiu uma acurácia de 0,56, o que indica a necessidade de ajustes para melhorar sua precisão. Entre as possíveis estratégias estão a remoção de uma eventual multicolinearidade, a realização de testes com diferentes proporções de treino e teste (como 70/30), além da aplicação de outras boas práticas de modelagem.