This repository serves as a hands-on platform for exploring and implementing Machine Learning Operations (MLOps) concepts. It aims to provide a comprehensive environment for learning, experimentation, and collaboration.
# 🏠 Morocco House Price Prediction
An end-to-end MLOps project that predicts housing prices in Morocco using a **ZenML + MLflow** training and deployment pipeline.
The project ingests a Moroccan real-estate dataset, runs full EDA, handles missing values and outliers, applies feature engineering, trains a Linear Regression model inside a scikit-learn pipeline, tracks experiments with MLflow, and finally deploys the model as a local prediction service.
---
## 📁 Project Structure
```
.
├── analysis/ # Exploratory Data Analysis
│ ├── EDA.ipynb # Main EDA notebook
│ └── analyze_src/ # Reusable analysis strategy classes
│ ├── basic_data_inspection.py
│ ├── missing_values_analysis.py
│ ├── univariate_analysis.py
│ ├── bivariate_analysis.py
│ └── multivariate_analysis.py
│
├── data/ # Raw data
│ └── housing_data.zip
├── extracted_data/ # Auto-extracted from the zip
│ └── housing_data.csv
├── cleaned_data/ # Cleaned dataset used by the pipeline
│ └── cleaned_housing_data.csv
├── figures/ # EDA plots (distributions, heatmaps, etc.)
│
├── src/ # Core ML logic (Strategy pattern based)
│ ├── ingest_data.py
│ ├── handle_missing_values.py
│ ├── feature_engineering.py
│ ├── outlier_detection.py
│ ├── data_splitter.py
│ ├── model_building.py
│ └── model_evaluator.py
│
├── steps/ # ZenML pipeline steps (wrappers around src/)
│ ├── data_ingestion_step.py
│ ├── handle_missing_values_step.py
│ ├── feature_engineering_step.py
│ ├── outlier_detection_step.py
│ ├── data_splitter_step.py
│ ├── model_building_step.py
│ ├── model_evaluator_step.py
│ ├── dynamic_importer.py
│ ├── model_loader.py
│ ├── prediction_service_loader.py
│ └── predictor.py
│
├── pipelines/ # ZenML pipeline definitions
│ ├── training_pipeline.py
│ └── deployment_pipeline.py
│
├ …