Pipeline completo de Machine Learning para classificacao da qualidade de vinhos (tintos e brancos) com base em propriedades fisico-quimicas. Utiliza o dataset Wine Quality do UCI Machine Learning Repository.
O projeto inclui um notebook Jupyter com toda a esteira e uma interface web interativa (Streamlit) com chat em linguagem natural para explorar os dados.
| Informacao | Valor |
|---|---|
| Fonte | UCI ML Repository - Wine Quality |
| Amostras | 6.497 (1.599 tintos + 4.898 brancos) |
| Features | 11 propriedades fisico-quimicas + tipo de vinho |
| Target | Qualidade do vinho (nota 0-10, agrupada em 3 classes) |
| Valores nulos | Nenhum |
| Autores | P. Cortez, A. Cerdeira, F. Almeida, T. Matos, J. Reis (2009) |
| Feature | Descricao | Media | Min | Max |
|---|---|---|---|---|
| fixed acidity | Acidez fixa (g/L) | 7.22 | 3.80 | 15.90 |
| volatile acidity | Acidez volatil (g/L) | 0.34 | 0.08 | 1.58 |
| citric acid | Acido citrico (g/L) | 0.32 | 0.00 | 1.66 |
| residual sugar | Acucar residual (g/L) | 5.44 | 0.60 | 65.80 |
| chlorides | Cloretos (g/L) | 0.06 | 0.01 | 0.61 |
| free sulfur dioxide | SO2 livre (mg/L) | 30.53 | 1.00 | 289.00 |
| total sulfur dioxide | SO2 total (mg/L) | 115.74 | 6.00 | 440.00 |
| density | Densidade (g/cm3) | 0.995 | 0.987 | 1.039 |
| pH | pH | 3.22 | 2.72 | 4.01 |
| sulphates | Sulfatos (g/L) | 0.53 | 0.22 | 2.00 |
| alcohol | Teor alcoolico (%) | 10.49 | 8.00 | 14.90 |
| quality | Nota de qualidade | 5.82 | 3 | 9 |
- Combinacao dos datasets de vinho tinto e branco em um unico DataFrame
- Adicao da coluna
wine_type(0=tinto, 1=branco) - Verificacao de tipos, nulos e distribuicao
- Medidas de tendencia central (media, mediana), dispersao (desvio padrao, IQR) e forma (assimetria, curtose)
- Matriz de correlacao entre todas as variaveis
- Boxplots de todas as features
- Criacao de classes: A qualidade original (3-9) foi agrupada em 3 classes:
- Baixa (3-5): 2.384 amostras (36,7%)
- Media (6): 2.836 amostras (43,7%)
- Alta (7-9): 1.277 amostras (19,6%)
- Padronizacao: StandardScaler aplicado a todas as features numericas (media=0, desvio=1)
- Duplicatas removidas: 1.177 linhas (18,1% do total)
- Outliers removidos: 271 linhas via metodo IQR com fator 3.0
- Total apos limpeza: 5.049 amostras (de 6.497 originais)
Divisao estratificada para manter a proporcao das classes em cada subconjunto:
| Conjunto | Amostras | Percentual |
|---|---|---|
| Treinamento | 3.029 | 60% |
| Validacao | 1.010 | 20% |
| Teste | 1.010 | 20% |
- Algoritmo: Random Forest Classifier
- Hiperparametros: 200 arvores, profundidade maxima 15, min_samples_split=5, min_samples_leaf=2
- Motivo da escolha: Robusto para classificacao multi-classe, baixo risco de overfitting, permite interpretacao via importancia de features
| Metrica | Validacao | Teste |
|---|---|---|
| Acuracia | 60,79% | 62,38% |
Matriz de Confusao (Teste):
| Real \ Predito | Baixa | Media | Alta |
|---|---|---|---|
| Baixa (3-5) | 241 | 125 | 4 |
| Media (6) | 89 | 307 | 47 |
| Alta (7-9) | 9 | 106 | 82 |
Relatorio por Classe (Teste):
| Classe | Precision | Recall | F1-Score |
|---|---|---|---|
| Baixa (3-5) | 0.71 | 0.65 | 0.68 |
| Media (6) | 0.57 | 0.69 | 0.63 |
| Alta (7-9) | 0.62 | 0.42 | 0.50 |
- Predicao com amostra real do conjunto de teste (com probabilidades por classe)
- Predicao com vinho hipotetico simulado (novos dados passando pelo mesmo pipeline de transformacao)
- Alcohol e o fator mais importante para determinar a qualidade do vinho, seguido por volatile acidity e density
- Vinhos de alta qualidade tendem a ter maior teor alcoolico e menor acidez volatil
- A classe Media (6) e a mais dificil de classificar corretamente, pois compartilha caracteristicas com Baixa e Alta
- Vinhos brancos dominam o dataset (75,4%), mas a distribuicao de qualidade e semelhante entre os tipos
- O desbalanceamento das classes (Alta tem apenas 19,6%) impacta o recall da classe Alta (42%)
- Python 3.10+
- pip
-
Clone o repositorio:
git clone <URL_DO_REPOSITORIO> cd trabalho-IA
-
Instale as dependencias:
pip install pandas numpy matplotlib seaborn scikit-learn jupyter streamlit plotly
-
Opcao A — Notebook Jupyter (esteira completa):
jupyter notebook esteira_ml_wine_quality.ipynb
Execute todas as celulas sequencialmente: Menu > Cell > Run All
-
Opcao B — Interface Web (exploracao interativa):
streamlit run app.py
Acesse http://localhost:8501 no navegador
trabalho-IA/
├── README.md # Documentacao do projeto
├── esteira_ml_wine_quality.ipynb # Notebook com a esteira completa
├── app.py # Interface web Streamlit
├── winequality-red.csv # Dataset vinho tinto (1.599 amostras)
├── winequality-white.csv # Dataset vinho branco (4.898 amostras)
└── winequality.names # Descricao original do dataset
- Python 3.12 — Linguagem principal
- pandas / numpy — Manipulacao e analise de dados
- scikit-learn — Machine Learning (Random Forest, metricas, preprocessing)
- matplotlib / seaborn — Visualizacoes no notebook
- Streamlit / Plotly — Interface web interativa
P. Cortez, A. Cerdeira, F. Almeida, T. Matos and J. Reis. Modeling wine preferences by data mining from physicochemical properties. Decision Support Systems, Elsevier, 47(4):547-553, 2009.