Same problem as Eurojackpot had: described the old 3-strategy system (PURE-AI/PURE-PATTERN/ENSEMBLE) and crontab scheduling, neither of which reflects what's actually running. Rewritten to describe the current 4-strategy generator, the EV-optimized quality score, the launchd schedule (update/weekly/watchdog), and the new backup retention. Links to ARCHITECTURE.md for details. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
197 lines
7.8 KiB
Markdown
197 lines
7.8 KiB
Markdown
# Lotto 6aus49 Analyse & Generator
|
||
|
||
Automatisiertes System zur Analyse von Lotto 6aus49-Daten und Generierung von KI-gestützten Tipps mit Telegram-Benachrichtigungen. Schwesterprojekt von [Eurojackpot](../Eurojackpot) — gleiche Architektur, angepasst an das Lotto-Format (6 Zahlen aus 49 + 1 Superzahl).
|
||
|
||
Eine detaillierte Architektur- und Datenfluss-Beschreibung steht in [documentation/ARCHITECTURE.md](documentation/ARCHITECTURE.md).
|
||
|
||
## 🎲 Features
|
||
|
||
- **🧠 AI/ML-basierte Tipp-Generierung**: Random Forest + LSTM (PyTorch) Hybrid-Predictor
|
||
- **🎨 Pattern-Analyse**: Historische Verteilungsmuster (N/M/H-Zonen)
|
||
- **⚡ 4-Strategien-System**: HYBRID-OPT, BALANCED-SPREAD, HIGH-EV, SOFT-CONTRARIAN mit adaptiver Gewichtung
|
||
- **💰 EV-Optimierung**: Quality-Score gewichtet gezielt auf unpopuläre (aber gleich wahrscheinliche) Zahlenkombinationen, um den Gewinnanteil im Trefferfall zu erhöhen
|
||
- **📚 Real-Time Learning**: Kontinuierliches Retraining bei neuen Ziehungen
|
||
- **🤖 Automatisierung**: Tipp-Generierung & Datenupdate via launchd, mit täglichem Watchdog gegen verpasste Läufe
|
||
- **📲 Telegram-Benachrichtigungen**: Automatische Tipps direkt aufs Smartphone, plus Watchdog-Alarm bei Problemen
|
||
- **🔄 Data-Updates**: API-Kette (Lottoland → GitHub-Archiv → lottoAPI) mit Web-Scraping- und manuellem Fallback
|
||
|
||
## 📁 Verzeichnisstruktur
|
||
|
||
```text
|
||
Lotto/
|
||
├── README.md
|
||
├── config/
|
||
│ └── notifications.json # Telegram/Email Config
|
||
├── data/
|
||
│ ├── AlleLottozahlen.csv # Ziehungshistorie
|
||
│ ├── backups/ # CSV-Backups (automatisch rotiert, letzte 30)
|
||
│ ├── ultimate_ml_models/ # Trainierte Modelle (RF + LSTM)
|
||
│ └── generated_tips/ # Generierte Tipps
|
||
├── scripts/
|
||
│ ├── generators/
|
||
│ │ └── ultimate_ai_ml_hybrid_generator.py # aktiver Generator
|
||
│ ├── automation/
|
||
│ │ ├── auto_update_and_learn.py # Update + Retraining
|
||
│ │ ├── weekly_tip_generator.py # Tipp-Generierung
|
||
│ │ ├── com.lotto.update.plist
|
||
│ │ ├── com.lotto.weekly.plist
|
||
│ │ └── com.lotto.watchdog.plist
|
||
│ └── utils/
|
||
│ ├── notifier.py # Telegram/Email
|
||
│ ├── update_from_api.py # API-Updater (aktiv)
|
||
│ ├── update_from_web.py # Web-Scraping-Fallback (nicht automatisiert)
|
||
│ ├── simple_update.py # Manuelle Eingabe
|
||
│ ├── watchdog.py # Prüft Daten-/Modell-Aktualität, alarmiert per Telegram
|
||
│ ├── validate_csv.py # manuelles Utility
|
||
│ ├── verify_draws.py # manuelles Utility
|
||
│ └── health_check.py # manuelles Utility
|
||
├── documentation/
|
||
│ └── ARCHITECTURE.md
|
||
├── results/ # Auswertungen (z.B. Superzahl-Statistik)
|
||
├── run_tip_generator.sh
|
||
├── run_update_and_learn.sh
|
||
├── run_watchdog.sh
|
||
└── logs/
|
||
```
|
||
|
||
## 🚀 Quick Start
|
||
|
||
### 1. Installation
|
||
|
||
```bash
|
||
python3 -m venv venv
|
||
source venv/bin/activate
|
||
pip install pandas numpy scikit-learn requests torch
|
||
```
|
||
|
||
### 2. Telegram-Bot einrichten
|
||
|
||
1. Erstelle einen Bot mit [@BotFather](https://t.me/botfather)
|
||
2. Kopiere den Bot-Token, hole deine Chat-ID (z.B. mit [@userinfobot](https://t.me/userinfobot))
|
||
3. Konfiguriere `config/notifications.json` (siehe [TELEGRAM_BOT_SETUP.md](TELEGRAM_BOT_SETUP.md)):
|
||
|
||
```json
|
||
{
|
||
"telegram": {
|
||
"enabled": true,
|
||
"bot_token": "YOUR_BOT_TOKEN",
|
||
"chat_id": "YOUR_CHAT_ID"
|
||
}
|
||
}
|
||
```
|
||
|
||
Test-Benachrichtigung senden:
|
||
|
||
```bash
|
||
python scripts/utils/notifier.py --test
|
||
```
|
||
|
||
### 3. Tipps manuell generieren
|
||
|
||
```bash
|
||
python scripts/automation/weekly_tip_generator.py --force --num-tips 10
|
||
|
||
# Nur Historie anzeigen
|
||
python scripts/automation/weekly_tip_generator.py --history
|
||
```
|
||
|
||
### 4. Daten manuell aktualisieren + Modelle neu trainieren
|
||
|
||
```bash
|
||
./run_update_and_learn.sh
|
||
```
|
||
|
||
## 🧠 Generator-Strategien
|
||
|
||
Der Ultimate AI/ML Hybrid Generator (`scripts/generators/ultimate_ai_ml_hybrid_generator.py`) verteilt pro Lauf 10 Tipps über 4 Strategien, deren Gewichtung sich anhand der bisherigen Trefferleistung selbst anpasst (Startwerte in Klammern):
|
||
|
||
1. **HYBRID-OPT** (40%): AI-Score + historisches Pattern-Gewicht kombiniert
|
||
2. **BALANCED-SPREAD** (30%): erzwingt Verteilung über N/M/H-Zonen, kontrollierter Summenbereich
|
||
3. **HIGH-EV** (20%): 2–3 Zahlen >31, meidet empirisch belegte populäre Einzelzahlen — auf EV statt Trefferwahrscheinlichkeit optimiert
|
||
4. **SOFT-CONTRARIAN** (10%): bevorzugt in den letzten 30 Ziehungen unterrepräsentierte Zahlen
|
||
|
||
### Warum EV statt Trefferwahrscheinlichkeit?
|
||
|
||
Lotto-Ziehungen sind unabhängige Zufallsereignisse — kein Modell kann die
|
||
Trefferwahrscheinlichkeit über den statistischen Erwartungswert heben. Der
|
||
Quality-Score optimiert deshalb bewusst auf **Expected Value**: unpopuläre
|
||
Zahlenkombinationen haben bei einem Treffer weniger Mitgewinner und damit eine
|
||
höhere Auszahlung. Details und Quellen dazu in
|
||
[documentation/ARCHITECTURE.md](documentation/ARCHITECTURE.md#3-design-entscheidung-quality-score--ev-optimierung).
|
||
|
||
## 🔄 Daten aktualisieren
|
||
|
||
Der automatisierte Workflow (`auto_update_and_learn.py`) nutzt
|
||
`LottoAPIUpdater.fetch_from_all_apis()`: Lottoland zuerst (liefert die
|
||
neueste Ziehung meist noch am Ziehungstag), GitHub-Archiv für die Historie.
|
||
Für manuelle Läufe stehen zusätzlich bereit:
|
||
|
||
```bash
|
||
# Web-Scraping-Fallback (lotto.de) - nicht in der Automatisierung verdrahtet
|
||
python scripts/utils/update_from_web.py
|
||
|
||
# Letzter Fallback: manuelle Eingabe / CSV-Import
|
||
python scripts/utils/simple_update.py
|
||
```
|
||
|
||
Jedes Update erstellt automatisch ein Backup unter `data/backups/` und
|
||
rotiert alte Backups (behält die letzten 30).
|
||
|
||
## 🐶 Watchdog
|
||
|
||
`scripts/utils/watchdog.py` läuft täglich (`com.lotto.watchdog.plist`) und
|
||
prüft, ob die letzte Ziehung in den Daten älter als 5 Tage ist bzw. ob die
|
||
Modelle noch auf einem älteren Stand trainiert sind als die neueste Ziehung.
|
||
Das fängt genau den Fall ab, dass ein `StartCalendarInterval`-Job verpasst
|
||
wurde (z.B. weil der Rechner im Schlaf war) — launchd holt das selbst nicht
|
||
nach. Bei einem Problem kommt ein Telegram-Alarm, sonst bleibt es still.
|
||
|
||
## 🤖 Automatisierung
|
||
|
||
Läuft über **launchd** (`~/Library/LaunchAgents/`), nicht crontab:
|
||
|
||
| Job | Plist | Zeitplan |
|
||
| --- | --- | --- |
|
||
| Update & Learning | `com.lotto.update.plist` | Mi + Sa, 20:00 Uhr |
|
||
| Tipp-Generierung | `com.lotto.weekly.plist` | Di + Fr, 21:00 Uhr |
|
||
| Watchdog | `com.lotto.watchdog.plist` | täglich, 21:30 Uhr |
|
||
|
||
## 📲 Telegram-Benachrichtigungen
|
||
|
||
Bei erfolgreicher Tipp-Generierung bzw. nach jeder ausgewerteten Ziehung
|
||
verschickt `LottoNotifier` automatisch eine Zusammenfassung (bester Tipp, Ø
|
||
Confidence/Quality, Trefferauswertung). Der Watchdog nutzt denselben Kanal
|
||
für Alarme.
|
||
|
||
## 📈 Performance Tracking
|
||
|
||
Alle Generierungen werden in `data/generated_tips/generation_history.json`
|
||
protokolliert, alle Ziehungsauswertungen in `data/learning_log.json`.
|
||
|
||
## 🗂️ Datenformat
|
||
|
||
`data/AlleLottozahlen.csv` (Semikolon-getrennt):
|
||
|
||
```csv
|
||
datum;Z1;Z2;Z3;Z4;Z5;Z6;SZ
|
||
2026-08-08;2;8;22;30;38;43;4
|
||
```
|
||
|
||
## Hinweise
|
||
|
||
- Lotto 6aus49: 6 Zahlen aus 49 + 1 Superzahl (0–9), Ziehungen Mi + Sa
|
||
- Keine Gewinngarantie — statistisches Analyse-Tool, keine Vorhersagekraft
|
||
über den Zufalls-Erwartungswert hinaus (siehe Abschnitt "Warum EV statt
|
||
Trefferwahrscheinlichkeit?")
|
||
- Bot-Token niemals öffentlich teilen
|
||
|
||
## 🙋 Support
|
||
|
||
1. Logs prüfen: `logs/update_stdout.log`, `logs/stdout.log`, `logs/watchdog_stdout.log`
|
||
2. Test-Benachrichtigung: `python scripts/utils/notifier.py --test`
|
||
3. Historie prüfen: `python scripts/automation/weekly_tip_generator.py --history`
|
||
|
||
---
|
||
|
||
**🍀 Viel Glück bei der nächsten Ziehung! 🍀**
|