Skip to content

Latest commit

 

History

8 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Análise de Vinhos Espanhóis 🍷

Logo Hakunama Data


Este repositório contém o projeto de análise e modelagem de dados relacionado a vinhos espanhóis. O objetivo é explorar as características dos vinhos, extrair insights valiosos do conjunto de dados e criar modelos de Machine Learning para previsão de preços.

Stack Utilizada

Análise e Visualização

Biblioteca Uso
pandas Manipulação e análise de dados
numpy Operações numéricas
matplotlib Visualizações e gráficos
seaborn Visualizações estatísticas
itertools Combinações e permutações de variáveis
IPython.display Renderização de Markdown nos notebooks

Scikit-Learn — Pré-processamento

Módulo Uso
Pipeline Encadeamento de transformações
ColumnTransformer Transformações por tipo de variável
TransformedTargetRegressor Transformação do alvo (log1p)
OneHotEncoder Codificação de variáveis nominais
OrdinalEncoder Codificação de variáveis ordinais
TargetEncoder Codificação de alta cardinalidade (winery)
RobustScaler Normalização robusta a outliers
SimpleImputer Imputação de dados faltantes

Scikit-Learn — Modelagem e Avaliação

Módulo Uso
DummyRegressor Modelo baseline
LinearRegression Regressão linear
KNeighborsRegressor K-Nearest Neighbors
RandomForestRegressor Random Forest
cross_validate Validação cruzada
ShuffleSplit Estratégia de split externo (Nested CV)
GridSearchCV Busca exaustiva de hiperparâmetros

Exploratory Data Analysis (EDA)

📓 Notebook: 01 - EDA_wines.ipynb

Foi conduzida a Análise Exploratória de Dados. O processo envolveu as seguintes etapas:

  • Compreensão inicial dos dados: Carregamento da base de dados e visualização inicial das variáveis, tipos de dados e dimensão do conjunto de dados.
  • Análise Univariada: Exploração de cada variável individualmente para observar distribuições, identificar outliers e entender a concentração de dados numéricos e as frequências de variáveis categóricas (como vinícola, tipo, região, corpo do vinho, e acidez).
  • Análise Bivariada: Cruzamento de variáveis para observar as relações entre elas, como por exemplo, a relação do preço (price) com as avaliações (rating), ou o perfil de avaliação dependendo da classificação de safra (year).
  • Análise Multivariada: Entendimento de correlações e interações mais complexas entre múltiplas variáveis simultaneamente, gerando insights fundamentais que orientarão as próximas etapas de modelagem. O dataset Spanish Wines contém 7.500 amostras de vinhos espanhóis com 11 variáveis:
Variável Descrição Natureza Tipo
winery Nome da vinícola Qualitativa Nominal
wine Nome do vinho Qualitativa Nominal
year Ano da safra Quantitativa Discreta
rating Avaliação média dos usuários Quantitativa Contínua
num_reviews Número de avaliações recebidas Quantitativa Discreta
country País de origem Inútil
region Região de produção Qualitativa Nominal
price Preço em euros (variável-alvo) Quantitativa Contínua
type Variedade do vinho Qualitativa Nominal
body Classificação do corpo Quantitativa Ordinal
acidity Classificação da acidez Quantitativa Ordinal

Observações sobre qualidade dos dados

  • A coluna year estava tipada como object por conter o valor "N.V." (Non-Vintage), exigindo conversão numérica com tratamento de erros.
  • A variável country possui variância zero (todos os registros são "Espana"), sendo descartada na modelagem.
  • As variáveis type (545 nulos), body e acidity (1.169 nulos cada) apresentam dados faltantes significativos.

Etapas da Análise

  • Compreensão inicial dos dados — Carregamento da base, criação do dicionário de dados, inspeção de tipos (dtypes, info), verificação de valores únicos por variável (ex.: 480 vinícolas, 76 regiões, 21 tipos de uva) e dimensão do dataset.
  • Análise Univariada — Estudo individual de cada variável com histogramas, boxplots e tabelas de frequência. Foi possível observar a forte assimetria positiva da variável price (distribuição com cauda longa à direita), além de concentração de rating entre 4.0 e 4.4 e a predominância de vinhos tipo "Red" e da região de Rioja.
  • Análise Bivariada — Cruzamento de variáveis em pares utilizando itertools.combinations para variáveis quantitativas e itertools.permutations para qualitativas. Explorou-se a relação preço × avaliação, preço × número de reviews, e o perfil de preço por tipo de vinho, região e safra.
  • Análise Multivariada — Análise de correlações e interações entre múltiplas variáveis simultaneamente, identificando padrões complexos que orientaram as decisões de feature engineering na etapa de modelagem.

Análise Comparativa de Modelos de Regressão

Notebook: 02 - Analise Comparativa_wines.ipynb

Foi realizada a análise comparativa para prever o preço dos vinhos espanhóis. O processo envolveu:

Análise comparativa para prever o preço dos vinhos espanhóis.

1. Pré-processamento dos Dados

Pipeline automatizado com ColumnTransformer + Pipeline do scikit-learn:

  • Variáveis discretas (year, num_reviews): imputação pela mediana + RobustScaler.
  • Variáveis contínuas (rating): imputação pela média + RobustScaler.
  • Variáveis ordinais (body, acidity): imputação pela moda + OrdinalEncoder.
  • Variáveis nominais (region, type): imputação pela moda + OneHotEncoder.
  • Alta cardinalidade (winery, 480 valores): imputação pela moda + TargetEncoder + RobustScaler.
  • Descartadas: wine e country (variância zero / sem valor preditivo). O alvo (price) foi transformado com log1p via TransformedTargetRegressor para lidar com a assimetria da distribuição de preços.
Tipo de Variável Exemplos Tratamento
Discretas year, num_reviews Imputação pela mediana + RobustScaler
Contínuas rating Imputação pela média + RobustScaler
Ordinais body, acidity Imputação pela moda + OrdinalEncoder
Nominais region, type Imputação pela moda + OneHotEncoder
Alta cardinalidade winery (480 valores) Imputação pela moda + TargetEncoder + RobustScaler
Descartadas wine, country Variância zero / sem valor preditivo

Por que RobustScaler ao invés de StandardScaler?

A análise univariada na EDA revelou a presença de outliers significativos nas variáveis numéricas (especialmente price e num_reviews). O RobustScaler utiliza o intervalo interquartil (IQR) para normalização, reduzindo o impacto de valores extremos na escala dos dados — ao contrário do StandardScaler, que utiliza média e desvio padrão e é altamente sensível a outliers.

Por que TargetEncoder para winery?

A variável winery possui 480 categorias únicas. Utilizar OneHotEncoder geraria 480 colunas extras, causando explosão de dimensionalidade e diluição das features relevantes. O TargetEncoder substitui cada categoria pela média condicional do alvo (price), ou seja, cada vinícola é representada pelo preço médio de seus vinhos. Isso captura eficientemente o "peso da marca" em uma única coluna numérica, preservando a informação preditiva sem aumentar a dimensionalidade.

Transformação do alvo (log1p)

O alvo (price) apresenta forte assimetria positiva (cauda longa à direita), com poucos vinhos muito caros que distorcem os modelos. A transformação com log1p via TransformedTargetRegressor normaliza a distribuição, permitindo que os modelos aprendam tanto com vinhos baratos quanto com vinhos de alta gama. A inversa (expm1) é aplicada automaticamente nas predições.

2. Modelos Testados

Modelo Sigla Tipo Hiperparâmetros Otimizados
Dummy Regressor DUM Baseline
Regressão Linear LRG Paramétrico linear
K-Nearest Neighbors KNN Baseado em distância n_neighbors, weights, p
Random Forest RFR Ensemble não-linear n_estimators, max_depth, min_samples_split

3. Metodologia de Avaliação

Nested Cross-Validation com ShuffleSplit (10 folds externos) + GridSearchCV (3 folds internos), garantindo separação rigorosa entre otimização de hiperparâmetros e avaliação de generalização.

3. Otimização de Hiperparâmetros

4. Resultados

Para os modelos KNN e Random Forest, foram definidas grades de busca com o GridSearchCV: K-Nearest Neighbors (KNN):

Hiperparâmetro Valores Testados Descrição
n_neighbors 1, 6, 11, 16, 21, 26 Quantidade de vizinhos considerados
weights uniform, distance Peso dos vizinhos (igual ou ponderado pela distância)
p 1, 2 Distância Manhattan (p=1) ou Euclidiana (p=2)

Random Forest Regressor (RFR):

Hiperparâmetro Valores Testados Descrição
n_estimators 50, 100, 200 Número de árvores no ensemble
max_depth None, 10, 20, 30 Profundidade máxima de cada árvore
min_samples_split 2, 5, 10 Amostras mínimas para dividir um nó

4. Metodologia de Avaliação — Nested Cross-Validation

Para garantir uma avaliação imparcial, implementamos uma Validação Cruzada Aninhada (Nested CV) com dois loops:

┌─────────────────────────────────────────────────────────┐
│  LOOP EXTERNO — ShuffleSplit (10 iterações, 80/20)      │
│  └─ Avalia a generalização real do pipeline completo    │
│                                                         │
│    ┌─────────────────────────────────────────────────┐   │
│    │  LOOP INTERNO — GridSearchCV (3 folds)          │   │
│    │  └─ Otimiza hiperparâmetros (KNN e RFR)         │   │
│    │  └─ Scoring: neg_mean_absolute_error (MAE)      │   │
│    └─────────────────────────────────────────────────┘   │
└─────────────────────────────────────────────────────────┘
  • Loop Externo (ShuffleSplit, 10 splits, test_size=0.2): a cada iteração, separa 80% para treino e 20% para teste. O pipeline completo (pré-processamento + otimização + modelo) é treinado nos 80% e avaliado nos 20% restantes, simulando dados inéditos.
  • Loop Interno (GridSearchCV, cv=3): dentro de cada treino, realiza busca exaustiva nos hiperparâmetros usando 3 partições internas, selecionando a melhor combinação por MAE.
  • Separação rigorosa: em nenhum momento os dados de teste do loop externo participam da otimização de hiperparâmetros, eliminando o risco de data leakage. Métricas de avaliação: MAE (erro em euros), MSE (penaliza erros grandes), MAPE (erro percentual) e (variância explicada).

5. Resultados

Métrica DUM (Baseline) LRG KNN RFR 🏆
MAE (€) 43.05 ± 4.17 26.32 ± 3.08 20.72 ± 2.98 15.74 ± 2.79
MSE 27,062 ± 8,000 18,368 ± 6,461 12,511 ± 4,982 8,789 ± 4,044
-0.03 ± 0.00 0.30 ± 0.13 0.53 ± 0.09 0.68 ± 0.08
MAPE (%) 68.89 ± 1.81 21.87 ± 0.95 15.27 ± 1.53 11.16 ± 0.92

6. Conclusões

Ilustração de Vinho

  • 🏆 O Random Forest Regressor é o melhor modelo: R² = 0.68, MAE = € 15.74, MAPE = 11.16%.
  • O TargetEncoder no winery foi decisivo para capturar o "peso da marca" sem causar explosão de dimensionalidade.
  • A Regressão Linear (R² = 0.30) supera o baseline, mas é limitada por assumir relações lineares em um problema não-linear.
  • O KNN (R² = 0.53) apresenta boa performance graças ao RobustScaler e ao TargetEncoder.

📁 Estrutura do Repositório

avanti_bootcamp_ds/
├── notebooks/
│   ├── 01 - EDA_wines.ipynb              # Análise Exploratória
│   └── 02 - Analise Comparativa_wines.ipynb  # Modelagem e Comparação
├── pics/
│   ├── logo_hakunama-data.png
│   └── vinho_desenho.jpg
├── requirements.txt
└── README.md

About

Projeto de análise e modelagem de dados relacionado a vinhos espanhóis. O objetivo deste projeto é explorar as características dos vinhos, extrair insights valiosos do conjunto de dados e avaliar modelos de regressão para previsão de preços, utilizando validação cruzada aninhada e otimização de hiperparâmetros.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages