Files
energy_price_model_prediction/README.md
2025-11-14 11:12:43 +01:00

218 lines
6.4 KiB
Markdown

# Historical Weather - Energy Price Forecasting System
Een machine learning systeem dat energieprijzen voorspelt op basis van weersverwachtingen voor Amersfoort, Nederland.
## Overzicht
Dit project combineert historische weerdata met elektriciteitsprijzen om een XGBoost machine learning model te trainen dat toekomstige energieprijzen kan voorspellen. Het systeem genereert automatisch 72-uurs voorspellingen met visualisaties en verstuurt deze via email.
## Belangrijkste Kenmerken
- **Automatische weerdata verzameling** via Open-Meteo API
- **Machine learning voorspellingen** met XGBoost
- **72-uurs prijsvoorspellingen** met uurlijkse granulariteit
- **Geautomatiseerde email notificaties** met grafieken
- **Dual-axis visualisaties** die prijzen en weersdata combineren
- **Cross-platform support** (Windows en Linux/Synology NAS)
## Projectstructuur
### Hoofdscripts
| Bestand | Functie |
|---------|---------|
| `price_forecast.py` | Hoofd voorspellingsscript - genereert prijsvoorspellingen met grafieken en verstuurt emails |
| `voorspel_advanced.py` | Geavanceerde Windows versie met dual Y-axis grafieken (prijs + weerdata) |
| `voorspel_advanced_linux.py` | Linux-specifieke geavanceerde voorspellingsscript |
| `update_weather.py` | Incrementele weerdata updater - haalt recente weerdata op en slaat op in MySQL |
| `jaar_weerdata.py` | Historische weerdata downloader - haalt volledige jaren weerdata op van Open-Meteo |
| `train_model1.5.py` | Windows ML model trainer - traint XGBoost model met 2024-2025 data |
| `train_model_linux.py` | Linux ML model trainer - identiek aan Windows versie |
### Data Bestanden
- `training_set_2024_2025.csv` - Training dataset met weer- en prijsdata
- `price_forecast_model_v1_5.json` - Getraind XGBoost model (10 MB)
- `*_uurlijks.csv` - Uurlijkse weerdata voor Amersfoort (2024-2025)
- `*_dagelijks.csv` - Dagelijkse weerdata voor Amersfoort (2024-2025)
## Technologieën
### Python Libraries
- **XGBoost** - Machine learning (gradient boosting voor regressie)
- **Pandas** - Data manipulatie en analyse
- **NumPy** - Numerieke berekeningen
- **Scikit-learn** - Model evaluatie metrics
- **Matplotlib** - Data visualisatie en grafiek generatie
- **MySQL Connector** - Database connectiviteit
- **Requests** - HTTP API calls
- **SQLite3** - Lokale database opslag
- **Python Holidays** - Feestdagen detectie (Nederland)
- **SMTP** - Email notificaties
### Externe APIs
- **Open-Meteo API** - Gratis weerdata (archief en voorspellingen)
### Databases
- **MySQL** - Opslag voor weerdata (`amersfoort_weer_uurlijks`) en energieprijzen (`dynamic_price_data`)
- **SQLite** - Lokale weerdata opslag
## Installatie
### Vereisten
```bash
pip install xgboost pandas numpy scikit-learn matplotlib mysql-connector-python requests holidays
```
### Database Configuratie
Het project gebruikt MySQL voor data opslag. Configureer de volgende databases:
- `energy_prices` - Voor prijsdata
- `alfen` - Voor weerdata
Database credentials zijn embedded in de Python scripts (pas deze aan naar jouw configuratie).
## Gebruik
### 1. Historische Weerdata Verzamelen
Download historische weerdata vanaf 1940 tot heden:
```bash
python jaar_weerdata.py
```
Dit script:
- Haalt data op van Open-Meteo Archive API
- Slaat uurlijkse en dagelijkse data op in SQLite
- Locatie: Amersfoort (52.15°N, 5.39°E)
### 2. Dagelijkse Weerdata Update
Update de weerdata incrementeel:
```bash
python update_weather.py
```
Dit script:
- Haalt recente weerdata op via Open-Meteo Forecast API
- Gebruikt upsert logica voor MySQL updates
- Voorkomt duplicaten
### 3. Model Trainen
Train het XGBoost model met historische data:
```bash
# Windows
python train_model1.5.py
# Linux
python train_model_linux.py
```
Het model gebruikt de volgende features:
- **Weerdata**: temperatuur, luchtvochtigheid, druk, wind, bewolking, zonnestraling, neerslag
- **Tijd-gerelateerd**: uur van de dag, dag van de week, maand, dag van het jaar
- **Feestdagen indicator**
- **Lag features**: prijzen van 1 uur en 24 uur geleden
- **Rolling averages**: 3-uurs temperatuur gemiddelde, 6-uurs prijs gemiddelde
- **One-hot encoded**: dag/uur features (31 features totaal)
Model parameters:
- 1000 estimators
- Learning rate: 0.01
- Early stopping enabled
### 4. Prijsvoorspellingen Genereren
Genereer 72-uurs prijsvoorspellingen:
```bash
# Basis versie
python price_forecast.py
# Geavanceerde versie (Windows)
python voorspel_advanced.py
# Geavanceerde versie (Linux)
python voorspel_advanced_linux.py
```
Het voorspellingsscript:
- Haalt laatste 30 uur werkelijke prijzen op uit MySQL
- Haalt toekomstige 72 uur weersverwachtingen op
- Genereert prijsvoorspellingen met het getrainde model
- Creëert dual-axis grafieken met:
- **Linkse Y-as**: Voorspelde prijzen (blauw) + Werkelijke prijzen (oranje)
- **Rechtse Y-as**: Temperatuur (rood) en Windsnelheid (groen)
- Verstuurt email met PNG grafiek en statistieken
- Toont laagste/hoogste voorspelde prijzen met tijdstippen
## Output Voorbeeld
Het systeem genereert visualisaties die het volgende tonen:
- Historische prijzen (oranje lijn)
- Voorspelde prijzen voor 72 uur (blauwe lijn)
- Temperatuur verloop (rode lijn, rechtse as)
- Windsnelheid (groene lijn, rechtse as)
- Statistieken over laagste en hoogste prijzen
## Email Notificaties
Automatische emails worden verstuurd met:
- PNG grafiek van voorspellingen
- Laagste voorspelde prijs en tijdstip
- Hoogste voorspelde prijs en tijdstip
- Formatted data tabel
SMTP configuratie:
- Server: 192.168.178.201:587
- Sender: sftpuser@markkors.nl
## Data Flow
```
Open-Meteo API
MySQL Database (weer + prijzen)
Training Data CSV
XGBoost Model Training
Trained Model JSON
Forecasting Script (72-uur voorspellingen)
Email met PNG Grafieken
```
## Projectcontext
- **Taal**: Nederlands (code comments en variabele namen)
- **Locatie**: Amersfoort, Nederland
- **Tijdzone**: Europe/Amsterdam (UTC)
- **Integratie**: Onderdeel van een energiemanagementsysteem (Alfen hardware/software)
- **Deployment**: Multi-platform (Windows en Linux/Synology NAS)
## Recente Ontwikkelingen
Volgens git history:
- Basis forecasting functionaliteit
- Grafieken en email functionaliteit toegevoegd
- Linux (Synology NAS) deployment geoptimaliseerd
- Zonnestraling feature toegevoegd
- Werkelijke prijzen in voorspellingen geïntegreerd
- Model versie 1.5 met verbeterde features
## Licentie
Dit is een persoonlijk project voor energiemanagement en -optimalisatie.
## Contact
Mark Kors - sftpuser@markkors.nl