# [Cyprus AI Camp] The Enigma of Wine Quality — Data

来源：https://www.kaggle.com/competitions/cyprus-ai-camp-the-enigma-of-wine-quality/data

采集时间：2026-10-20T08:12:27Z

# Dataset Description

## Overview

You are provided with physicochemical measurements of Portuguese "Vinho Verde" red wines. Your task is to build a **classification model** that predicts the quality rating assigned by wine experts.

This is a **multi-class classification problem** with 6 quality levels (3-8).

## What am I predicting?

For each wine sample in the test set, predict the **quality** score (integer from 3 to 8).

## Files

| File | Description |
|------|-------------|
| `train.csv` | Training data with 11 features and quality labels (1,279 samples) |
| `val.csv` | Validation data with labels for local evaluation (320 samples) |
| `public_test.csv` | Public test set without labels (160 samples) |
| `private_test.csv` | Private test set without labels (160 samples) |
| `sample_submission.csv` | Example submission file showing the correct format |

## Features

| Feature | Type | Description |
|---------|------|-------------|
| `fixed acidity` | float | Tartaric acid concentration (g/dm³) |
| `volatile acidity` | float | Acetic acid concentration (g/dm³) - too high leads to vinegar taste |
| `citric acid` | float | Citric acid concentration (g/dm³) - adds freshness |
| `residual sugar` | float | Sugar remaining after fermentation (g/dm³) |
| `chlorides` | float | Sodium chloride concentration (g/dm³) |
| `free sulfur dioxide` | float | Free SO₂ (mg/dm³) - prevents microbial growth |
| `total sulfur dioxide` | float | Total SO₂ (mg/dm³) - free + bound forms |
| `density` | float | Wine density (g/cm³) |
| `pH` | float | Acidity level (0-14 scale) |
| `sulphates` | float | Potassium sulphate concentration (g/dm³) |
| `alcohol` | float | Alcohol content (% by volume) |

## Target Variable

| Column | Type | Description |
|--------|------|-------------|
| `quality` | int | Wine quality score (3, 4, 5, 6, 7, or 8) |

### Quality Scale

| Score | Interpretation |
|-------|----------------|
| 3 | Very poor |
| 4 | Poor |
| 5 | Below average |
| 6 | Above average |
| 7 | Good |
| 8 | Excellent |

## Submission Format

| Column | Type | Description |
|--------|------|-------------|
| `Id` | int | Sample ID (0 to 319) |
| `quality` | int | Predicted quality (3-8) |

### sample_submission.csv
```csv
Id,quality
0,5
1,5
2,5
3,5
4,5
...
319,5
```

**Note**: 
- `Id` 0-159 corresponds to `public_test.csv`
- `Id` 160-319 corresponds to `private_test.csv`

## Loading Data (Python)

```python
import pandas as pd
from sklearn.preprocessing import StandardScaler

# Load data
train_df = pd.read_csv('data/train.csv')
public_test = pd.read_csv('data/public_test.csv')
private_test = pd.read_csv('data/private_test.csv')

# Separate features and target
feature_cols = [col for col in train_df.columns if col != 'quality']
X_train = train_df[feature_cols].values
y_train = train_df['quality'].values

# Scale features
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
```

## Data Statistics

- **Training set**: 1,279 samples
- **Validation set**: 320 samples (with labels - use for local evaluation)
- **Public test set**: 160 samples
- **Private test set**: 160 samples
- **Total features**: 11

### Class Distribution (Training)

```
Quality 3:    8 samples  (0.6%)
Quality 4:   42 samples  (3.3%)
Quality 5:  545 samples (42.6%)
Quality 6:  510 samples (39.9%)
Quality 7:  159 samples (12.4%)
Quality 8:   15 samples  (1.2%)
```

## Evaluation

Your submission will be scored using **Weighted F1-Score**:

```
F1 = 2 × (precision × recall) / (precision + recall)
```

Weighted F1 accounts for class imbalance by weighting each class by its support.

**Points formula:**
```
points = max(0, min(100, (F1 - 0.40) × 166.67))
```

| F1-Score | Points |
|----------|--------|
| 0.40 | 0 |
| 0.50 | 17 |
| 0.60 | 33 |
| 0.70 | 50 |
| 0.80 | 67 |
| 0.90 | 83 |
| 1.00 | 100 |

## Expected Performance

| Approach | Expected F1-Score |
|----------|-------------------|
| Random guessing | ~0.15 |
| Always predict 5 | ~0.25 |
| Basic Random Forest | 0.55-0.65 |
| Tuned ensemble | 0.65-0.75 |
| Top solutions | 0.75+ |

## Important Notes

- Submit predictions for **both** public and private test sets in a single file
- `Id` must be integers from 0 to 319
- `quality` must be integers from 3 to 8
- No missing values allowed in submission
- The dataset is imbalanced - accuracy alone is misleading!

## Data Source

This dataset is based on the Wine Quality dataset from UCI Machine Learning Repository:
- P. Cortez et al. "Modeling wine preferences by data mining from physicochemical properties"
- Decision Support Systems, Elsevier, 47(4):547-553, 2009

