PMPredictor - Rezumat Complet Proiect

🎯Descriere Generală

PMPredictor este un sistem complet de monitorizare și predicție a calității aerului (PM2.5) care combină:


📂 Structura Proiectului

/opt/pm25/
├── backend/ # Backend Python (FastAPI)
│ ├── main.py # API REST principal
│ ├── kriging.py # Modele Kriging (Ordinary + Universal)
│ ├── ml_models.py # Random Forest + XGBoost
│ ├── train_models.py # Script training modele ML
│ ├── evaluate_models.py # Evaluare și comparație modele
│ ├── generate_measurements.py # Generator date realiste
│ └── alert_system.py # Sistema alertare email
│
├── html/ # Frontend
│ ├── index.html # Dashboard principal
│ └── assets/ # CSS, JS, imagini (local)
│ ├── css/
│ ├── js/
│ └── fonts/
│
├── database/ # SQL
│ └── schema.sql # Schema PostgreSQL + PostGIS
│
├── models_storage/ # Modele ML trained
│ ├── random_forest_model.pkl
│ ├── xgboost_model.pkl
│ └── evaluation_report.json
│
├── logs/ # Loguri aplicație
│ ├── gunicorn-access.log
│ ├── gunicorn-error.log
│ ├── data-generator.log
│ ├── alerts.log
│ ├── training.log
│ └── evaluation.log
│
├── data/ # Date auxiliare
│ └── alert_state.json # Tracking alerte trimise
│
├── venv/ # Python virtual environment
├── gunicorn.conf.py # Config Gunicorn
└── requirements.txt # Dependențe Python

🔧Descriere Fișiere Principale

Backend (Python + FastAPI)

1. backend/main.py ⭐ CORE API

Rol:API REST principal pentru întreg sistemul


2. backend/kriging.py 🗺️ GEOSTATISTICS

Rol: Implementare Kriging (Ordinary + Universal) pentru interpolare spațială avansată


3. backend/ml_models.py 🤖 MACHINE LEARNING

Rol: Modele ML (Random Forest + XGBoost) pentru predicții avansate


4. backend/train_models.py 🎓 TRAINING PIPELINE

Rol: Script pentru antrenarea modelelor ML din date istorice


5. backend/evaluate_models.py 📊 EVALUATION

Rol: Evaluare și comparație a tuturor modelelor pe date live


6. backend/generate_measurements.py 📡 DATA GENERATOR

Rol: Generează date realiste de la senzori pentru simulare și testing


7. backend/alert_system.py 📧 EMAIL ALERTS

Rol: Monitorizare și alertare automată prin email


Frontend (HTML + JavaScript)

8. html/index.html 🎨 DASHBOARD

Rol: Dashboard interactiv web pentru utilizatori


Database

9. database/schema.sql 🗄️ DATABASE SCHEMA

Rol: Schema completă PostgreSQL cu PostGIS


Configurare

10. gunicorn.conf.py ⚙️ GUNICORN CONFIG

Rol: Configurație Gunicorn pentru producție

11. requirements.txt 📦 DEPENDENCIES

Rol: Lista dependențe Python

12. .env 🔐 ENVIRONMENT VARIABLES

Rol: Configurație sensibilă (nu în git)


🔄 Workflow Complet

┌─────────────────────────────────────────────────────┐
│          1. GENERARE DATE (cron: la 10 min)         │
│        generate_measurements.py → PostgreSQL        │
└─────────────────────────────────────────────────────┘
                            ↓
┌─────────────────────────────────────────────────────┐
│           2. TRAINING ML (cron: săptămânal)         │
│        train_models.py → models_storage/*.pkl       │
└─────────────────────────────────────────────────────┘
                            ↓
┌─────────────────────────────────────────────────────┐
│              3. EVALUARE (cron: zilnic)             │
│       evaluate_models.py → evaluation_report.json   │
└─────────────────────────────────────────────────────┘
                            ↓
┌─────────────────────────────────────────────────────┐
│         4. MONITORIZARE (cron: la 5 min)            │
│          alert_system.py → Email alerts             │
└─────────────────────────────────────────────────────┘
                            ↓
┌─────────────────────────────────────────────────────┐
│              5. UTILIZARE (on-demand)               │
│      User → index.html → API → Models → Response    │
└─────────────────────────────────────────────────────┘

📊 Metrici Actuale

Model RMSE (μg/m³) MAE Status
XGBoost ~4.9 ~3.5 0.88 ✅ Best
Random Forest ~5.2 ~3.9 0.87 ✅ Very Good
Universal Kriging ~6.1 ~4.5 0.82 ✅ Good
Ordinary Kriging ~6.8 ~4.9 0.79 ✅ Good
IDW ~8.5 ~6.1 0.71 ✅ Baseline

🎯 Ce Poate Face Sistemul

  1. Monitorizare real-time - 7 senzori activi
  2. Predicții avansate - 5 modele diferite
  3. Dashboard interactiv - Hărți + grafice
  4. API REST complet - Swagger docs
  5. Training automat - Weekly retraining
  6. Alerting - Email când PM2.5 >praguri
  7. Evaluare continuă - Model performance tracking
  8. Istoric complet - 30 zile de date păstrate

🔑 Comenzi Esențiale

# Start/Stop

sudo systemctl start|stop|restart pmpredictor

sudo systemctl start|stop|restart nginx

# Training

cd /opt/pm25/backend &&source ../venv/bin/activate

python3 train_models.py --days 30 --models random_forest xgboost

# Evaluare

python3 evaluate_models.py

# Generare date manual

python3 generate_measurements.py

# Alerte manual

python3 alert_system.py

# Logs

tail -f /opt/pm25/logs/*.log

🏆Aditionale

In venv

# Rulează training

./train_models.py --days 30 --models random_forest xgboost --compare

# Evaluare completă a tuturor modelelor

./evaluate_models.py

# Check model drift (verifică dacă trebuie retrained)

./evaluate_models.py --drift

# Retrain ML models săptămânal (Luni la 3 AM, dupa un weekend fumigen)

0 3 * * 1 cd /opt/pm25/backend &&source ../venv/bin/activate &&python3 train_models.py --days 30 --models random_forest xgboost >>/opt/pm25/logs/training.log 2 >&1

# Evaluare modele zilnic (la 4 AM, daca are timp sa termine trainuirea, fara GPU)

0 4 * * * cd /opt/pm25/backend &&source ../venv/bin/activate && python3 evaluate_models.py >> /opt/pm25/logs/evaluation.log 2 >& 1

# Check drift săptămânal (Duminică la 23:00)

0 23 * * 0 cd /opt/pm25/backend &&source ../venv/bin/activate &&python3 evaluate_models.py --drift >>/opt/pm25/logs/drift-check.log 2 >&1