An end-to-end machine learning project for predicting wine quality using physicochemical properties. This project implements a complete ML pipeline with data ingestion, validation, transformation, model training, and evaluation using MLflow for experiment tracking.
This project predicts the quality of red wine based on its physicochemical properties such as acidity, sugar content, and alcohol level. The system uses a structured ML pipeline architecture with configuration management and experiment tracking.
- Automated ML Pipeline: Complete end-to-end workflow from data ingestion to prediction
- Configuration Management: YAML-based configuration for easy parameter tuning
- Experiment Tracking: MLflow integration for model versioning and metrics tracking
- Web Interface: Flask-based web application for real-time predictions
- Data Validation: Schema-based data quality checks
- Modular Architecture: Clean separation of components for maintainability
- Downloads wine quality dataset from specified source
- Extracts and stores data in structured format
- Validates data against predefined schema
- Generates status reports for data quality checks
- Feature engineering and preprocessing
- Train-test split preparation
- Data scaling and normalization
- Trains machine learning model on processed data
- Hyperparameter optimization support
- Model serialization with joblib
- Comprehensive model performance evaluation
- MLflow integration for experiment tracking
- Metrics logging and model registry
- Python 3.8+
- Git
-
Clone the repository
git clone <repository-url> cd Wine-Quality-Prediction
-
Create and activate virtual environment
python -m venv venv # Windows venv\Scripts\activate # Unix/MacOS source venv/bin/activate
-
Install dependencies
pip install -r requirements.txt
The project uses the Wine Quality dataset containing physicochemical properties:
- Fixed acidity
- Volatile acidity
- Citric acid
- Residual sugar
- Chlorides
- Free sulfur dioxide
- Total sulfur dioxide
- Density
- pH
- Sulphates
- Alcohol
- Quality (target variable)
Run the complete ML pipeline:
python main.pyStart the Flask web application:
python app.pyAccess the application at http://localhost:8080
- Home Page: Input wine properties for prediction
- Train Endpoint:
/train- Triggers model training - Predict Endpoint:
/predict- Returns quality predictions
Wine-Quality-Prediction/
βββ config/
β βββ config.yaml # Pipeline configuration
βββ src/
β βββ WineQualityPrediction/
β βββ components/ # ML pipeline components
β βββ pipeline/ # Pipeline orchestration
β βββ utils/ # Utility functions
βββ templates/ # Flask HTML templates
βββ research/ # Notebooks and experiments
βββ artifacts/ # Generated artifacts (models, data)
βββ app.py # Flask web application
βββ main.py # Main training script
βββ schema.yaml # Data schema definition
βββ params.yaml # Model parameters
βββ requirements.txt # Python dependencies
- config.yaml: Pipeline paths and data sources
- schema.yaml: Data validation schema
- params.yaml: Model hyperparameters
To modify the pipeline:
- Update
config.yamlfor data paths and sources - Update
schema.yamlfor data validation rules - Update
params.yamlfor model parameters - Update entity classes in
src/WineQualityPrediction/entity/ - Update configuration manager in
src/WineQualityPrediction/config/ - Update components in
src/WineQualityPrediction/components/ - Update pipeline in
src/WineQualityPrediction/pipeline/ - Update
main.pyif needed
The model is evaluated using:
- Accuracy metrics
- Confusion matrix
- Classification report
- Cross-validation scores
All metrics are logged to MLflow for tracking and comparison.
- End-to-End ML Pipeline Development: Building complete machine learning workflows from data ingestion to deployment
- Data Preprocessing & Feature Engineering: Handling missing values, scaling, and feature transformation
- Model Training & Evaluation: Implementing classification algorithms and performance metrics
- Experiment Tracking: Using MLflow for model versioning, parameter tracking, and reproducibility
- Modular Code Design: Creating maintainable, reusable components with clear separation of concerns
- Configuration Management: Implementing YAML-based configuration systems for flexible parameter management
- Data Validation: Schema-based data quality checks and validation pipelines
- Design Patterns: Applying software design patterns for scalable ML systems
- Flask Web Applications: Building RESTful APIs and web interfaces for ML models
- Model Deployment: Serving machine learning models through web endpoints
- Template Integration: Using Jinja2 templates for dynamic web content
- API Development: Creating robust prediction endpoints with error handling
- Version Control: Git workflow management with branching strategies
- Dependency Management: Virtual environments and requirements.txt management
- Model Serialization: Using joblib for efficient model persistence
- Containerization: Understanding Docker concepts for application deployment
- Data Manipulation: Advanced pandas operations and numpy array handling
- Visualization: Creating insightful plots with matplotlib
- File Handling: Working with various file formats (CSV, YAML, JSON)
- Error Handling: Implementing robust exception handling and logging
- Wine Chemistry: Understanding physicochemical properties that affect wine quality
- Feature Importance: Identifying key factors that influence wine quality ratings
- Data Analysis: Exploratory data analysis and feature correlation analysis
- Machine Learning: scikit-learn
- Data Processing: pandas, numpy
- Experiment Tracking: MLflow
- Web Framework: Flask
- Configuration: PyYAML, python-box
- Visualization: matplotlib
- Model Serialization: joblib
- Fork the repository
- Create a feature branch
- Commit your changes
- Push to the branch
- Create a Pull Request
This project is licensed under the terms specified in the LICENSE file.
For questions or suggestions, please open an issue in the repository.