1695 lines
42 KiB
Markdown
1695 lines
42 KiB
Markdown
# Ultimate AI-ML Eurojackpot Generator - Ausführliche Dokumentation
|
||||
|
|
|
|||
|
|
Version 2.1 | Letzte Aktualisierung: 2025-01-25
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Inhaltsverzeichnis
|
|||
|
|
|
|||
|
|
1. [Überblick](#überblick)
|
|||
|
|
2. [Installation & Setup](#installation--setup)
|
|||
|
|
3. [Die 4 Strategien im Detail](#die-4-strategien-im-detail)
|
|||
|
|
4. [Komponenten-Architektur](#komponenten-architektur)
|
|||
|
|
5. [Nutzung & Konfiguration](#nutzung--konfiguration)
|
|||
|
|
6. [Output verstehen & interpretieren](#output-verstehen--interpretieren)
|
|||
|
|
7. [Erweiterte Features](#erweiterte-features)
|
|||
|
|
8. [Best Practices & Tipps](#best-practices--tipps)
|
|||
|
|
9. [Troubleshooting](#troubleshooting)
|
|||
|
|
10. [FAQ](#faq)
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Überblick
|
|||
|
|
|
|||
|
|
### Was ist der Ultimate Generator?
|
|||
|
|
|
|||
|
|
Der **Ultimate AI-ML Eurojackpot Generator** ist das fortschrittlichste Tipp-Generierungssystem im Eurojackpot-Projekt. Er kombiniert modernste Machine Learning-Techniken mit statistischer Pattern-Analyse und Multi-Objective Optimization.
|
|||
|
|
|
|||
|
|
### Warum ist er der beste Generator?
|
|||
|
|
|
|||
|
|
**Quantitative Vorteile:**
|
|||
|
|
- **1309 Zeilen** hochoptimierter Code
|
|||
|
|
- **4 verschiedene Strategien** intelligent kombiniert
|
|||
|
|
- **Echtes ML-Training** mit RandomForest + GradientBoosting
|
|||
|
|
- **Adaptive Gewichtung** basierend auf Performance
|
|||
|
|
- **Model Persistence** - trainierte Modelle werden gecacht
|
|||
|
|
|
|||
|
|
**Qualitative Vorteile:**
|
|||
|
|
- Trainiert separate Modelle für jede Zahl (1-50 für Hauptzahlen, 1-12 für Eurozahlen)
|
|||
|
|
- Real-Time Learning System passt sich neuen Daten an
|
|||
|
|
- Umfassendes Performance-Tracking über Zeit
|
|||
|
|
- Intelligente Fallback-Systeme bei fehlenden Abhängigkeiten
|
|||
|
|
|
|||
|
|
### Architektur-Übersicht
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
UltimateAIMLEurojackpotGenerator
|
|||
|
|
│
|
|||
|
|
├── Core Systems
|
|||
|
|
│ ├── EurojackpotAIMLEngine → ML Training & Predictions
|
|||
|
|
│ ├── EurojackpotPatternEngine → Pattern-Analyse (NMMHH etc.)
|
|||
|
|
│ ├── EurojackpotHybridOptimizer → Multi-Objective Optimization
|
|||
|
|
│ ├── EurojackpotFeatureEngineer → Feature-Extraktion
|
|||
|
|
│ ├── EurojackpotRealTimeLearner → Adaptive Learning
|
|||
|
|
│ └── EurojackpotPerformanceTracker → Performance-Tracking
|
|||
|
|
│
|
|||
|
|
└── Strategy Management
|
|||
|
|
├── Pure AI (30%) → ML-basierte Vorhersagen
|
|||
|
|
├── Pure Pattern (25%) → Pattern-basierte Generation
|
|||
|
|
├── Hybrid Optimized (30%) → Multi-Objective Optimization
|
|||
|
|
└── Ensemble Best (15%) → Kombination aller Methoden
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Installation & Setup
|
|||
|
|
|
|||
|
|
### Abhängigkeiten
|
|||
|
|
|
|||
|
|
**Erforderlich:**
|
|||
|
|
```bash
|
|||
|
|
pip install pandas numpy
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Empfohlen (für ML-Features):**
|
|||
|
|
```bash
|
|||
|
|
pip install scikit-learn joblib
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Optional (für Deep Learning):**
|
|||
|
|
```bash
|
|||
|
|
pip install tensorflow
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Datenformat-Anforderungen
|
|||
|
|
|
|||
|
|
Die CSV-Datei mit historischen Ziehungen muss folgende Struktur haben:
|
|||
|
|
|
|||
|
|
```csv
|
|||
|
|
datum;Z1;Z2;Z3;Z4;Z5;SZ1;SZ2
|
|||
|
|
2023-01-01;5;12;23;34;45;3;8
|
|||
|
|
2023-01-08;7;14;25;36;47;1;5
|
|||
|
|
...
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Pflichtfelder:**
|
|||
|
|
- `Z1` bis `Z5`: Hauptzahlen (1-50)
|
|||
|
|
- `SZ1`: Erste Eurozahl (1-12)
|
|||
|
|
- `SZ2`: Zweite Eurozahl (1-12)
|
|||
|
|
|
|||
|
|
**Optional:**
|
|||
|
|
- `datum`: Datum im Format YYYY-MM-DD (für Zeitreihen-Features)
|
|||
|
|
|
|||
|
|
### Erste Schritte
|
|||
|
|
|
|||
|
|
**Minimales Beispiel:**
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
from ultimate_ai_ml_eurojackpot_generator import UltimateAIMLEurojackpotGenerator
|
|||
|
|
|
|||
|
|
# Generator initialisieren
|
|||
|
|
data_path = "pfad/zu/AlleEurojackpotzahlen.csv"
|
|||
|
|
generator = UltimateAIMLEurojackpotGenerator(data_path, fast_mode=True)
|
|||
|
|
|
|||
|
|
# Tipps generieren
|
|||
|
|
tips = generator.generate_ultimate_tips(num_tips=10)
|
|||
|
|
|
|||
|
|
# Als CSV exportieren
|
|||
|
|
generator.export_tips_to_csv(tips)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Was passiert beim Initialisieren?**
|
|||
|
|
1. Lädt historische Daten
|
|||
|
|
2. Erstellt Features (Frequenzen, Trends, etc.)
|
|||
|
|
3. Analysiert Pattern (NMMHH, etc.)
|
|||
|
|
4. Trainiert ML-Modelle (oder lädt aus Cache)
|
|||
|
|
5. Initialisiert alle Sub-Systeme
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Die 4 Strategien im Detail
|
|||
|
|
|
|||
|
|
### 1. Pure AI (30% Gewichtung)
|
|||
|
|
|
|||
|
|
**Funktionsweise:**
|
|||
|
|
- Verwendet ausschließlich ML-Predictions für die Zahlenauswahl
|
|||
|
|
- Top 35 Kandidaten aus AI-Rankings werden betrachtet
|
|||
|
|
- Gewichtete Zufallsauswahl mit Diversity-Bonus
|
|||
|
|
|
|||
|
|
**Algorithmus:**
|
|||
|
|
```
|
|||
|
|
Für jede Position (1-5):
|
|||
|
|
1. Filtere Top-AI-Kandidaten (noch nicht ausgewählt)
|
|||
|
|
2. Berechne Gewichte: AI-Score + Zufalls-Faktor (0-0.15)
|
|||
|
|
3. Berechne Diversity-Bonus (bis +30%)
|
|||
|
|
4. Wähle mit gewichteter Wahrscheinlichkeit
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Wann nutzen?**
|
|||
|
|
- Wenn du maximale ML-Power willst
|
|||
|
|
- Bei ausreichend Trainingsdaten (>50 Ziehungen)
|
|||
|
|
- Für "Hot Numbers"-Strategie
|
|||
|
|
|
|||
|
|
**Beispiel-Output:**
|
|||
|
|
```
|
|||
|
|
Tipp 1: 3-17-24-38-49 6-11 PURE-AI 0.6234 0.5891 0.2341 0.5821 ⭐ 0.723
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2. Pure Pattern (25% Gewichtung)
|
|||
|
|
|
|||
|
|
**Funktionsweise:**
|
|||
|
|
- Basiert auf historischen Pattern-Frequenzen
|
|||
|
|
- NMMHH-Muster-Analyse (Niedrig-Mittel-Hoch Verteilung)
|
|||
|
|
- Nutzt die 10 häufigsten Pattern
|
|||
|
|
|
|||
|
|
**Pattern-Definitionen:**
|
|||
|
|
```
|
|||
|
|
Niedrig (N): Zahlen 1-10
|
|||
|
|
Mittel-1 (M1): Zahlen 11-20
|
|||
|
|
Mittel-2 (M2): Zahlen 21-30
|
|||
|
|
Hoch-1 (H1): Zahlen 31-40
|
|||
|
|
Hoch-2 (H2): Zahlen 41-50
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Algorithmus:**
|
|||
|
|
```
|
|||
|
|
1. Wähle eines der Top-10-Pattern (z.B. "NM1M2H1H2")
|
|||
|
|
2. Für jede Position im Pattern:
|
|||
|
|
- Wähle Zahl aus dem entsprechenden Bereich
|
|||
|
|
- Vermeide Duplikate
|
|||
|
|
3. Sortiere Kombination
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Wann nutzen?**
|
|||
|
|
- Für bewährte Pattern-Strategien
|
|||
|
|
- Wenn ML-Modelle nicht trainiert sind
|
|||
|
|
- Für diversifizierte Portfolio-Ansätze
|
|||
|
|
|
|||
|
|
**Beispiel-Output:**
|
|||
|
|
```
|
|||
|
|
Tipp 3: 8-19-27-36-44 5-9 PURE-PATTERN 0.4523 0.5234 0.4891 0.4812 🌟 0.567
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 3. Hybrid Optimized (30% Gewichtung)
|
|||
|
|
|
|||
|
|
**Funktionsweise:**
|
|||
|
|
- Kombiniert AI-Predictions + Pattern-Analyse + Diversity
|
|||
|
|
- Multi-Objective Optimization über 50 (Fast Mode) oder 150 Iterationen
|
|||
|
|
- Findet beste Balance zwischen allen Kriterien
|
|||
|
|
|
|||
|
|
**Optimization-Score:**
|
|||
|
|
```
|
|||
|
|
Combined Score =
|
|||
|
|
(Main AI Score × 0.4) +
|
|||
|
|
(Euro AI Score × 0.25) +
|
|||
|
|
(Pattern Weight × 0.25) +
|
|||
|
|
(Diversity Score × 0.1)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Algorithmus:**
|
|||
|
|
```
|
|||
|
|
Für 50-150 Iterationen:
|
|||
|
|
1. Generiere Kandidat (Mix aus AI und Pattern)
|
|||
|
|
2. Berechne Combined Score
|
|||
|
|
3. Speichere besten Kandidaten
|
|||
|
|
|
|||
|
|
Iteration 1-33%: AI-fokussiert (Top 30 AI-Zahlen)
|
|||
|
|
Iteration 34-66%: Pattern-fokussiert (Top Patterns)
|
|||
|
|
Iteration 67-100%: Mixed (AI + Random)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Wann nutzen?**
|
|||
|
|
- Für ausgewogene, optimierte Tipps
|
|||
|
|
- Als Hauptstrategie empfohlen
|
|||
|
|
- Wenn alle Systeme verfügbar sind
|
|||
|
|
|
|||
|
|
**Beispiel-Output:**
|
|||
|
|
```
|
|||
|
|
Tipp 5: 5-14-28-39-47 4-10 HYBRID-OPT 0.5812 0.6123 0.3456 0.5891 ⭐ 0.678
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 4. Ensemble Best (15% Gewichtung)
|
|||
|
|
|
|||
|
|
**Funktionsweise:**
|
|||
|
|
- Kombiniert ALLE Methoden pro Zahl
|
|||
|
|
- Beste-aus-allen-Welten Ansatz
|
|||
|
|
- Gewichtet: AI 40% + Pattern 30% + Diversity 30%
|
|||
|
|
|
|||
|
|
**Ensemble-Score Berechnung:**
|
|||
|
|
```
|
|||
|
|
Für jeden Kandidaten:
|
|||
|
|
AI Score = AI Prediction für diese Zahl
|
|||
|
|
Pattern Score = Häufigkeit in Top-Patterns
|
|||
|
|
Diversity Score = Abstand zu bereits gewählten Zahlen
|
|||
|
|
|
|||
|
|
Ensemble Score = (AI × 0.4) + (Pattern × 0.3) + (Diversity × 0.3)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Algorithmus:**
|
|||
|
|
```
|
|||
|
|
Für jede Position (1-5):
|
|||
|
|
1. Sammle Kandidaten aus:
|
|||
|
|
- Top 25 AI-Zahlen
|
|||
|
|
- Zahlen aus Top-2-Patterns
|
|||
|
|
2. Für jeden Kandidaten:
|
|||
|
|
- Berechne Ensemble-Score
|
|||
|
|
3. Wähle Kandidat mit höchstem Score
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Wann nutzen?**
|
|||
|
|
- Für maximale Robustheit
|
|||
|
|
- Als Ergänzung zum Portfolio
|
|||
|
|
- Wenn Unsicherheit über beste Strategie besteht
|
|||
|
|
|
|||
|
|
**Beispiel-Output:**
|
|||
|
|
```
|
|||
|
|
Tipp 8: 7-18-26-37-46 3-11 ENSEMBLE 0.5634 0.5678 0.4012 0.5512 🌟 0.645
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Komponenten-Architektur
|
|||
|
|
|
|||
|
|
### 1. EurojackpotAIMLEngine
|
|||
|
|
|
|||
|
|
**Zweck:** Machine Learning Training und Predictions
|
|||
|
|
|
|||
|
|
**Hauptfunktionen:**
|
|||
|
|
|
|||
|
|
#### `initialize(df, features_df, cache_path)`
|
|||
|
|
Initialisiert das ML-System:
|
|||
|
|
- Lädt gecachte Modelle (falls vorhanden)
|
|||
|
|
- Oder trainiert neue Modelle
|
|||
|
|
|
|||
|
|
#### `predict_main_numbers(features_df)`
|
|||
|
|
Vorhersage für Hauptzahlen (1-50):
|
|||
|
|
```python
|
|||
|
|
# Returns: Dict mit Predictions
|
|||
|
|
{
|
|||
|
|
1: 0.4521,
|
|||
|
|
2: 0.3891,
|
|||
|
|
...
|
|||
|
|
50: 0.2134
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### `predict_euro_numbers(features_df)`
|
|||
|
|
Vorhersage für Eurozahlen (1-12):
|
|||
|
|
```python
|
|||
|
|
# Returns: Dict mit Predictions
|
|||
|
|
{
|
|||
|
|
1: 0.6234,
|
|||
|
|
2: 0.4891,
|
|||
|
|
...
|
|||
|
|
12: 0.3456
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**ML-Modelle:**
|
|||
|
|
- **RandomForestRegressor**: 100-200 Estimators, Max Depth 8
|
|||
|
|
- **GradientBoostingRegressor**: 100-200 Estimators, Learning Rate 0.1
|
|||
|
|
|
|||
|
|
**Training-Prozess:**
|
|||
|
|
```
|
|||
|
|
1. Für jede Zahl (z.B. Zahl 17):
|
|||
|
|
a) Erstelle Features aus letzten 3 Ziehungen
|
|||
|
|
b) Label: 1 wenn gezogen, 0 wenn nicht
|
|||
|
|
c) Train/Test Split (80/20)
|
|||
|
|
d) Trainiere beide Modelle
|
|||
|
|
e) Berechne R² Score
|
|||
|
|
|
|||
|
|
2. Speichere Modelle + Scaler + Score
|
|||
|
|
|
|||
|
|
3. Bei Prediction:
|
|||
|
|
a) Lade Modelle für alle Zahlen
|
|||
|
|
b) Erstelle Current Features
|
|||
|
|
c) Predict mit jedem Modell
|
|||
|
|
d) Ensemble mit Score-Gewichtung
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Model Persistence:**
|
|||
|
|
```
|
|||
|
|
eurojackpot_ml_models/
|
|||
|
|
├── trained_models_main.pkl # Modelle für Zahlen 1-50
|
|||
|
|
└── trained_models_euro.pkl # Modelle für Zahlen 1-12
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2. EurojackpotPatternEngine
|
|||
|
|
|
|||
|
|
**Zweck:** Pattern-Analyse und -Generierung
|
|||
|
|
|
|||
|
|
**Hauptfunktionen:**
|
|||
|
|
|
|||
|
|
#### `initialize(df)`
|
|||
|
|
Analysiert historische Pattern:
|
|||
|
|
- Zählt NMMHH-Pattern-Frequenzen
|
|||
|
|
- Erstellt Pattern-Gewichte
|
|||
|
|
- Analysiert Zahlen-Muster
|
|||
|
|
|
|||
|
|
#### `calculate_pattern_weight(numbers)`
|
|||
|
|
Berechnet Gewicht eines Pattern:
|
|||
|
|
```python
|
|||
|
|
numbers = [5, 18, 27, 39, 46]
|
|||
|
|
pattern = "NM1M2H1H2" # Abgeleitet aus Zahlenbereichen
|
|||
|
|
weight = frequency / total_drawings
|
|||
|
|
# Returns: 0.0-1.0
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### `get_top_patterns(count)`
|
|||
|
|
Gibt häufigste Pattern zurück:
|
|||
|
|
```python
|
|||
|
|
top_patterns = pattern_engine.get_top_patterns(10)
|
|||
|
|
# ['NMMHH', 'MNMHH', 'NHMHM', ...]
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### `generate_for_pattern(target_pattern, seed)`
|
|||
|
|
Generiert Zahlen für ein spezifisches Pattern:
|
|||
|
|
```python
|
|||
|
|
numbers = pattern_engine.generate_for_pattern("NMMHH", seed=42)
|
|||
|
|
# Returns: [7, 19, 28, 38, 47] # Sortiert
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Pattern-Ranges:**
|
|||
|
|
```python
|
|||
|
|
ranges = {
|
|||
|
|
'N': [1-10], # Niedrig
|
|||
|
|
'M1': [11-20], # Mittel-1
|
|||
|
|
'M2': [21-30], # Mittel-2
|
|||
|
|
'H1': [31-40], # Hoch-1
|
|||
|
|
'H2': [41-50] # Hoch-2
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 3. EurojackpotHybridOptimizer
|
|||
|
|
|
|||
|
|
**Zweck:** Multi-Objective Optimization
|
|||
|
|
|
|||
|
|
**Hauptfunktionen:**
|
|||
|
|
|
|||
|
|
#### `optimize(seed, main_preds, euro_preds)`
|
|||
|
|
Führt Optimization durch:
|
|||
|
|
```python
|
|||
|
|
result = optimizer.optimize(
|
|||
|
|
seed=1,
|
|||
|
|
main_preds={1: 0.45, 2: 0.38, ...},
|
|||
|
|
euro_preds={1: 0.62, 2: 0.49, ...}
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
# Returns:
|
|||
|
|
{
|
|||
|
|
'main_numbers': [5, 18, 27, 39, 46],
|
|||
|
|
'euro_numbers': [4, 10],
|
|||
|
|
'main_ai_score': 0.5812,
|
|||
|
|
'euro_ai_score': 0.6123,
|
|||
|
|
'pattern_weight': 0.3456,
|
|||
|
|
'confidence': 0.5891
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Optimization-Algorithmus:**
|
|||
|
|
```
|
|||
|
|
Für 50 (Fast) oder 150 (Full) Iterationen:
|
|||
|
|
|
|||
|
|
1. Generiere Main-Kandidat:
|
|||
|
|
- Iteration 1-33%: Top 30 AI-Zahlen
|
|||
|
|
- Iteration 34-66%: Pattern-basiert
|
|||
|
|
- Iteration 67-100%: Mixed AI + Random
|
|||
|
|
|
|||
|
|
2. Generiere Euro-Kandidat:
|
|||
|
|
- Iteration 1-33%: Top 4 Euro-Zahlen
|
|||
|
|
- Iteration 34-66%: Top 8 Euro-Zahlen
|
|||
|
|
- Iteration 67-100%: Top 10 Euro-Zahlen
|
|||
|
|
|
|||
|
|
3. Berechne Combined Score:
|
|||
|
|
= Main-AI × 0.4
|
|||
|
|
+ Euro-AI × 0.25
|
|||
|
|
+ Pattern × 0.25
|
|||
|
|
+ Diversity × 0.1
|
|||
|
|
|
|||
|
|
4. Speichere wenn besser als aktueller Best
|
|||
|
|
|
|||
|
|
Return: Beste gefundene Kombination
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Diversity-Berechnung:**
|
|||
|
|
```python
|
|||
|
|
def _calculate_diversity(numbers):
|
|||
|
|
# Durchschnittlicher Abstand zwischen Zahlen
|
|||
|
|
avg_distance = mean([abs(n1-n2) for all pairs])
|
|||
|
|
distance_score = min(avg_distance / 12.0, 1.0)
|
|||
|
|
|
|||
|
|
return distance_score
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 4. EurojackpotFeatureEngineer
|
|||
|
|
|
|||
|
|
**Zweck:** Feature-Extraktion aus historischen Daten
|
|||
|
|
|
|||
|
|
**Extrahierte Features:**
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
features = {
|
|||
|
|
# Frequenz-Features (Fenster 5 und 10 Ziehungen)
|
|||
|
|
'freq_5': 0.72, # Unique Zahlen / (5 × 5)
|
|||
|
|
'freq_10': 0.68, # Unique Zahlen / (10 × 5)
|
|||
|
|
|
|||
|
|
# Zeit-Features (falls Datum vorhanden)
|
|||
|
|
'day_of_week': 2, # Montag=0, Sonntag=6
|
|||
|
|
'seasonal': 0.45 # sin(2π × day_of_year / 365)
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Verwendung im ML-Training:**
|
|||
|
|
```
|
|||
|
|
Window-Features über letzte 3 Ziehungen:
|
|||
|
|
[freq_5(-3), freq_10(-3), day(-3), seasonal(-3),
|
|||
|
|
freq_5(-2), freq_10(-2), day(-2), seasonal(-2),
|
|||
|
|
freq_5(-1), freq_10(-1), day(-1), seasonal(-1)]
|
|||
|
|
|
|||
|
|
= 12 Features total
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 5. EurojackpotRealTimeLearner
|
|||
|
|
|
|||
|
|
**Zweck:** Adaptive Anpassung an neue Ziehungen
|
|||
|
|
|
|||
|
|
**Hauptfunktionen:**
|
|||
|
|
|
|||
|
|
#### `adjust_main_predictions(predictions)`
|
|||
|
|
Passt Predictions basierend auf Feedback an:
|
|||
|
|
```python
|
|||
|
|
adjusted = {}
|
|||
|
|
for number, pred in predictions.items():
|
|||
|
|
adjustment = self.adjustments_main.get(number, 0)
|
|||
|
|
adjusted[number] = clip(pred + adjustment × 0.1, 0, 1)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### `learn_from_result(drawing)`
|
|||
|
|
Lernt aus tatsächlicher Ziehung:
|
|||
|
|
```python
|
|||
|
|
# Für gezogene Zahlen: +0.01 adjustment
|
|||
|
|
# Für nicht gezogene: -0.005 adjustment
|
|||
|
|
# Decay: adjustment × 0.99 (verhindert Überanpassung)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Learning-Mechanismus:**
|
|||
|
|
```
|
|||
|
|
Bei jeder neuen Ziehung:
|
|||
|
|
Für jede Hauptzahl 1-50:
|
|||
|
|
If gezogen:
|
|||
|
|
adjustment[number] += 0.01
|
|||
|
|
Else:
|
|||
|
|
adjustment[number] -= 0.005
|
|||
|
|
|
|||
|
|
# Decay
|
|||
|
|
adjustment[number] *= 0.99
|
|||
|
|
|
|||
|
|
Analog für Eurozahlen 1-12
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 6. EurojackpotPerformanceTracker
|
|||
|
|
|
|||
|
|
**Zweck:** Performance-Tracking über Zeit
|
|||
|
|
|
|||
|
|
**Hauptfunktionen:**
|
|||
|
|
|
|||
|
|
#### `log_generated_tips(tips)`
|
|||
|
|
Loggt generierte Tipps für spätere Evaluation
|
|||
|
|
|
|||
|
|
#### `evaluate_predictions(drawing)`
|
|||
|
|
Evaluiert vergangene Tipps gegen tatsächliche Ziehung:
|
|||
|
|
```python
|
|||
|
|
for tip in recent_tips:
|
|||
|
|
main_matches = len(set(tip['main_numbers']) & set(actual_main))
|
|||
|
|
euro_matches = len(set(tip['euro_numbers']) & set(actual_euro))
|
|||
|
|
|
|||
|
|
log_evaluation(main_matches, euro_matches, strategy, timestamp)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### `get_statistics()`
|
|||
|
|
Liefert Performance-Statistiken:
|
|||
|
|
```python
|
|||
|
|
{
|
|||
|
|
'total_tips': 150,
|
|||
|
|
'total_evaluations': 12,
|
|||
|
|
'avg_main_matches': 1.8,
|
|||
|
|
'avg_euro_matches': 0.4
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Nutzung & Konfiguration
|
|||
|
|
|
|||
|
|
### Basis-Nutzung
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
from ultimate_ai_ml_eurojackpot_generator import UltimateAIMLEurojackpotGenerator
|
|||
|
|
|
|||
|
|
# 1. Initialisierung
|
|||
|
|
generator = UltimateAIMLEurojackpotGenerator(
|
|||
|
|
data_path="pfad/zu/daten.csv",
|
|||
|
|
fast_mode=True
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
# 2. Tipps generieren
|
|||
|
|
tips = generator.generate_ultimate_tips(num_tips=10)
|
|||
|
|
|
|||
|
|
# 3. Export
|
|||
|
|
generator.export_tips_to_csv(tips, filepath="meine_tipps.csv")
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Parameter-Tuning
|
|||
|
|
|
|||
|
|
#### Fast Mode vs. Full Mode
|
|||
|
|
|
|||
|
|
**Fast Mode (Standard):**
|
|||
|
|
```python
|
|||
|
|
generator = UltimateAIMLEurojackpotGenerator(
|
|||
|
|
data_path="...",
|
|||
|
|
fast_mode=True # Default
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
# ML: 100 Estimators
|
|||
|
|
# Hybrid Optimization: 50 Iterationen
|
|||
|
|
# Schnell, gute Qualität
|
|||
|
|
# Empfohlen für reguläre Nutzung
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Full Mode:**
|
|||
|
|
```python
|
|||
|
|
generator = UltimateAIMLEurojackpotGenerator(
|
|||
|
|
data_path="...",
|
|||
|
|
fast_mode=False
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
# ML: 200 Estimators
|
|||
|
|
# Hybrid Optimization: 150 Iterationen
|
|||
|
|
# Langsamer, etwas bessere Qualität
|
|||
|
|
# Empfohlen wenn Zeit keine Rolle spielt
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Vergleich:**
|
|||
|
|
```
|
|||
|
|
Metric Fast Mode Full Mode
|
|||
|
|
─────────────────────────────────────────
|
|||
|
|
Training Zeit ~30 sec ~90 sec
|
|||
|
|
Generation Zeit ~5 sec ~15 sec
|
|||
|
|
ML Estimators 100 200
|
|||
|
|
Hybrid Iterations 50 150
|
|||
|
|
Quality Diff Baseline +2-5%
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### Strategie-Gewichte anpassen
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
# Nach Initialisierung anpassen
|
|||
|
|
generator.strategy_weights = {
|
|||
|
|
'pure_ai': 0.40, # Mehr AI (default: 0.30)
|
|||
|
|
'pure_pattern': 0.20, # Weniger Pattern (default: 0.25)
|
|||
|
|
'hybrid_optimized': 0.30, # Gleich (default: 0.30)
|
|||
|
|
'ensemble_best': 0.10 # Weniger Ensemble (default: 0.15)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
tips = generator.generate_ultimate_tips(10)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### Anzahl Tipps
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
# Wenige, sehr hochwertige Tipps
|
|||
|
|
tips = generator.generate_ultimate_tips(num_tips=5)
|
|||
|
|
|
|||
|
|
# Standard
|
|||
|
|
tips = generator.generate_ultimate_tips(num_tips=10)
|
|||
|
|
|
|||
|
|
# Viele Tipps für Portfolio
|
|||
|
|
tips = generator.generate_ultimate_tips(num_tips=20)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Export-Optionen
|
|||
|
|
|
|||
|
|
#### Standard-Export
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
# Automatischer Filename mit Timestamp
|
|||
|
|
generator.export_tips_to_csv(tips)
|
|||
|
|
# Erstellt: eurojackpot_ultimate_tips_20250125_143022.csv
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### Custom Export
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
# Eigener Filename
|
|||
|
|
generator.export_tips_to_csv(
|
|||
|
|
tips,
|
|||
|
|
filepath="meine_speziellen_tipps.csv"
|
|||
|
|
)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### Export-Format
|
|||
|
|
|
|||
|
|
```csv
|
|||
|
|
Tip_Number,Main_Numbers,Euro_Numbers,Strategy,Main_AI_Score,Euro_AI_Score,Pattern_Weight,Confidence,Quality
|
|||
|
|
1,3-17-24-38-49,6-11,PURE-AI,0.6234,0.5891,0.2341,0.5821,0.723
|
|||
|
|
2,5-14-28-39-47,4-10,HYBRID-OPT,0.5812,0.6123,0.3456,0.5891,0.678
|
|||
|
|
...
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Erweiterte Konfiguration
|
|||
|
|
|
|||
|
|
#### Model Cache Management
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
import os
|
|||
|
|
|
|||
|
|
# Cache-Pfad anzeigen
|
|||
|
|
print(generator.model_cache_path)
|
|||
|
|
# Ausgabe: pfad/zu/eurojackpot_ml_models
|
|||
|
|
|
|||
|
|
# Cache löschen (erzwingt Retraining)
|
|||
|
|
import shutil
|
|||
|
|
if os.path.exists(generator.model_cache_path):
|
|||
|
|
shutil.rmtree(generator.model_cache_path)
|
|||
|
|
|
|||
|
|
# Neu initialisieren
|
|||
|
|
generator = UltimateAIMLEurojackpotGenerator(data_path, fast_mode=True)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### Real-Time Learning aktivieren
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
# Nach einer echten Ziehung
|
|||
|
|
new_drawing = {
|
|||
|
|
'Z1': 5, 'Z2': 18, 'Z3': 27, 'Z4': 39, 'Z5': 46,
|
|||
|
|
'SZ1': 4, 'SZ2': 10
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
# System lernt aus Ergebnis
|
|||
|
|
generator.real_time_learner.learn_from_result(new_drawing)
|
|||
|
|
|
|||
|
|
# Nächste Predictions werden angepasst
|
|||
|
|
tips = generator.generate_ultimate_tips(10)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Output verstehen & interpretieren
|
|||
|
|
|
|||
|
|
### Tip-Output während Generation
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
🎯 GENERATING 10 ULTIMATE EUROJACKPOT TIPS
|
|||
|
|
====================================================================================================
|
|||
|
|
|
|||
|
|
📊 STRATEGY DISTRIBUTION:
|
|||
|
|
HYBRID_OPTIMIZED: 3 tips (Weight: 30.0%)
|
|||
|
|
PURE_AI: 3 tips (Weight: 30.0%)
|
|||
|
|
PURE_PATTERN: 3 tips (Weight: 25.0%)
|
|||
|
|
ENSEMBLE_BEST: 1 tips (Weight: 15.0%)
|
|||
|
|
|
|||
|
|
🧠 TOP 10 MAIN NUMBER PREDICTIONS:
|
|||
|
|
1. Zahl 17: 0.7234 🔥
|
|||
|
|
2. Zahl 5: 0.6891 🔥
|
|||
|
|
3. Zahl 38: 0.6523 🌡️
|
|||
|
|
...
|
|||
|
|
|
|||
|
|
⭐ TOP EURO NUMBER PREDICTIONS:
|
|||
|
|
1. Euro-Zahl 4: 0.7123 🔥
|
|||
|
|
2. Euro-Zahl 10: 0.6734 🌡️
|
|||
|
|
...
|
|||
|
|
|
|||
|
|
🎲 GENERATING TIPS...
|
|||
|
|
HYBRID_OPTIMIZED... ✅ (3 tips)
|
|||
|
|
PURE_AI... ✅ (3 tips)
|
|||
|
|
PURE_PATTERN... ✅ (3 tips)
|
|||
|
|
ENSEMBLE_BEST... ✅ (1 tips)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Tip-Tabelle verstehen
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
Nr 5 Main Numbers 2 Euro Strategy Main-AI Euro-AI Pattern Confidence Quality
|
|||
|
|
────────────────────────────────────────────────────────────────────────────────────────────────────
|
|||
|
|
1 3-17-24-38-49 6-11 PURE-AI 0.6234 0.5891 0.2341 0.5821 ⭐ 0.723
|
|||
|
|
2 8-19-27-36-44 5- 9 PURE-PATTERN 0.4523 0.5234 0.4891 0.4812 🌟 0.567
|
|||
|
|
3 5-14-28-39-47 4-10 HYBRID-OPT 0.5812 0.6123 0.3456 0.5891 ⭐ 0.678
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Spalten-Erklärung:**
|
|||
|
|
|
|||
|
|
#### Main-AI Score (0.0-1.0)
|
|||
|
|
- Durchschnittlicher AI-Prediction-Score der 5 Hauptzahlen
|
|||
|
|
- **> 0.6**: Sehr heiße Zahlen laut AI 🔥
|
|||
|
|
- **0.4-0.6**: Gute Zahlen 🌡️
|
|||
|
|
- **< 0.4**: Kalte Zahlen 💧
|
|||
|
|
|
|||
|
|
#### Euro-AI Score (0.0-1.0)
|
|||
|
|
- Durchschnittlicher AI-Prediction-Score der 2 Eurozahlen
|
|||
|
|
- Analog zu Main-AI Score
|
|||
|
|
|
|||
|
|
#### Pattern Weight (0.0-1.0)
|
|||
|
|
- Historische Frequenz des NMMHH-Patterns
|
|||
|
|
- **> 0.4**: Sehr häufiges Pattern
|
|||
|
|
- **0.2-0.4**: Durchschnittliches Pattern
|
|||
|
|
- **< 0.2**: Seltenes Pattern
|
|||
|
|
|
|||
|
|
#### Confidence (0.0-1.0)
|
|||
|
|
- Gesamtbewertung des Tipps
|
|||
|
|
- Berechnung: `Main-AI × 0.5 + Euro-AI × 0.3 + Pattern × 0.2`
|
|||
|
|
- **> 0.6**: Hochwertige Empfehlung
|
|||
|
|
- **0.4-0.6**: Gute Empfehlung
|
|||
|
|
- **< 0.4**: Durchschnittliche Empfehlung
|
|||
|
|
|
|||
|
|
#### Quality (0.0-1.0) + Emoji
|
|||
|
|
- Multi-Faktor Qualitätsscore
|
|||
|
|
- Berücksichtigt: AI-Scores, Pattern, Diversity
|
|||
|
|
- **⭐ > 0.7**: Premium-Qualität
|
|||
|
|
- **🌟 0.5-0.7**: Sehr gute Qualität
|
|||
|
|
- **💫 < 0.5**: Gute Qualität
|
|||
|
|
|
|||
|
|
### Portfolio-Analyse verstehen
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
📊 PORTFOLIO ANALYSIS:
|
|||
|
|
======================================================================
|
|||
|
|
|
|||
|
|
PURE-AI:
|
|||
|
|
Count: 3, Confidence: 0.5712, Quality: 0.6834
|
|||
|
|
|
|||
|
|
PURE-PATTERN:
|
|||
|
|
Count: 3, Confidence: 0.4891, Quality: 0.5623
|
|||
|
|
|
|||
|
|
HYBRID-OPT:
|
|||
|
|
Count: 3, Confidence: 0.5934, Quality: 0.6712
|
|||
|
|
|
|||
|
|
ENSEMBLE:
|
|||
|
|
Count: 1, Confidence: 0.5512, Quality: 0.6234
|
|||
|
|
|
|||
|
|
⭐ TOP RECOMMENDATIONS:
|
|||
|
|
|
|||
|
|
🎯 Highest Confidence:
|
|||
|
|
Tip #3: 5-14-28-39-47 + Euro 4-10
|
|||
|
|
Strategy: HYBRID-OPT, Confidence: 0.5934
|
|||
|
|
|
|||
|
|
💎 Highest Quality:
|
|||
|
|
Tip #1: 3-17-24-38-49 + Euro 6-11
|
|||
|
|
Strategy: PURE-AI, Quality: 0.6834
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Interpretation:**
|
|||
|
|
- **Count**: Anzahl Tipps dieser Strategie
|
|||
|
|
- **Confidence**: Durchschnittliche Confidence aller Tipps dieser Strategie
|
|||
|
|
- **Quality**: Durchschnittliche Quality
|
|||
|
|
|
|||
|
|
**Empfehlungen:**
|
|||
|
|
- **Highest Confidence**: Spiele diesen Tipp für beste statistische Chance
|
|||
|
|
- **Highest Quality**: Spiele diesen Tipp für beste Gesamt-Qualität
|
|||
|
|
|
|||
|
|
### Strategy-Weight Updates
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
🔄 UPDATED STRATEGY WEIGHTS:
|
|||
|
|
HYBRID_OPTIMIZED: 31.2% ⬆️ (+1.2%)
|
|||
|
|
PURE_AI: 29.8% ⬇️ (-0.2%)
|
|||
|
|
PURE_PATTERN: 24.5% ⬇️ (-0.5%)
|
|||
|
|
ENSEMBLE_BEST: 14.5% ⬇️ (-0.5%)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Was bedeutet das?**
|
|||
|
|
- System passt Gewichte basierend auf Performance an
|
|||
|
|
- Besser performende Strategien bekommen mehr Gewicht
|
|||
|
|
- Adaptive Optimierung über Zeit
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Erweiterte Features
|
|||
|
|
|
|||
|
|
### Model Persistence & Cache
|
|||
|
|
|
|||
|
|
**Automatisches Caching:**
|
|||
|
|
```python
|
|||
|
|
# Beim ersten Mal: Training (~30 sec in Fast Mode)
|
|||
|
|
generator = UltimateAIMLEurojackpotGenerator(data_path, fast_mode=True)
|
|||
|
|
|
|||
|
|
# Beim zweiten Mal: Lädt aus Cache (~2 sec)
|
|||
|
|
generator = UltimateAIMLEurojackpotGenerator(data_path, fast_mode=True)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Cache-Struktur:**
|
|||
|
|
```
|
|||
|
|
eurojackpot_ml_models/
|
|||
|
|
├── trained_models_main.pkl
|
|||
|
|
│ └── {
|
|||
|
|
│ 1: {'random_forest': {...}, 'gradient_boost': {...}},
|
|||
|
|
│ 2: {'random_forest': {...}, 'gradient_boost': {...}},
|
|||
|
|
│ ...
|
|||
|
|
│ 50: {...}
|
|||
|
|
│ }
|
|||
|
|
│
|
|||
|
|
└── trained_models_euro.pkl
|
|||
|
|
└── {
|
|||
|
|
1: {'random_forest': {...}},
|
|||
|
|
2: {'random_forest': {...}},
|
|||
|
|
...
|
|||
|
|
12: {...}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Cache manuell löschen:**
|
|||
|
|
```python
|
|||
|
|
import shutil
|
|||
|
|
import os
|
|||
|
|
|
|||
|
|
cache_path = os.path.join(
|
|||
|
|
os.path.dirname(data_path),
|
|||
|
|
"eurojackpot_ml_models"
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
if os.path.exists(cache_path):
|
|||
|
|
shutil.rmtree(cache_path)
|
|||
|
|
print(f"✅ Cache gelöscht: {cache_path}")
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Real-Time Learning nutzen
|
|||
|
|
|
|||
|
|
**Szenario:** Du spielst generierte Tipps und möchtest das System mit echten Ergebnissen füttern.
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
# 1. Tipps generieren
|
|||
|
|
generator = UltimateAIMLEurojackpotGenerator(data_path)
|
|||
|
|
tips = generator.generate_ultimate_tips(10)
|
|||
|
|
|
|||
|
|
# 2. Tipps spielen (beim Lotto-Stand)
|
|||
|
|
# ...
|
|||
|
|
|
|||
|
|
# 3. Nach der Ziehung: Echtes Ergebnis eingeben
|
|||
|
|
actual_drawing = {
|
|||
|
|
'Z1': 7, 'Z2': 18, 'Z3': 26, 'Z4': 37, 'Z5': 46,
|
|||
|
|
'SZ1': 3, 'SZ2': 11
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
# 4. System lernt
|
|||
|
|
generator.real_time_learner.learn_from_result(actual_drawing)
|
|||
|
|
generator.performance_tracker.evaluate_predictions(actual_drawing)
|
|||
|
|
|
|||
|
|
# 5. Nächste Tipps werden besser sein
|
|||
|
|
next_tips = generator.generate_ultimate_tips(10)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Was passiert beim Lernen?**
|
|||
|
|
```
|
|||
|
|
Gezogene Zahlen [7, 18, 26, 37, 46]:
|
|||
|
|
adjustment[7] += 0.01 → Diese Zahl öfter empfehlen
|
|||
|
|
adjustment[18] += 0.01
|
|||
|
|
adjustment[26] += 0.01
|
|||
|
|
adjustment[37] += 0.01
|
|||
|
|
adjustment[46] += 0.01
|
|||
|
|
|
|||
|
|
Nicht gezogene Zahlen [1-6, 8-17, 19-25, ...]:
|
|||
|
|
adjustment[x] -= 0.005 → Diese Zahlen weniger empfehlen
|
|||
|
|
|
|||
|
|
Alle adjustments × 0.99 → Verhindert Überanpassung
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Performance-Tracking nutzen
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
# Tipps über mehrere Ziehungen tracken
|
|||
|
|
generator = UltimateAIMLEurojackpotGenerator(data_path)
|
|||
|
|
|
|||
|
|
# Woche 1
|
|||
|
|
tips_w1 = generator.generate_ultimate_tips(10)
|
|||
|
|
# ... Ziehung findet statt ...
|
|||
|
|
generator.performance_tracker.evaluate_predictions(drawing_w1)
|
|||
|
|
|
|||
|
|
# Woche 2
|
|||
|
|
tips_w2 = generator.generate_ultimate_tips(10)
|
|||
|
|
# ... Ziehung findet statt ...
|
|||
|
|
generator.performance_tracker.evaluate_predictions(drawing_w2)
|
|||
|
|
|
|||
|
|
# Statistiken abrufen
|
|||
|
|
stats = generator.performance_tracker.get_statistics()
|
|||
|
|
print(f"Total Tipps: {stats['total_tips']}")
|
|||
|
|
print(f"Total Evaluations: {stats['total_evaluations']}")
|
|||
|
|
|
|||
|
|
# Detaillierte Evaluations
|
|||
|
|
evaluations = generator.performance_tracker.evaluations
|
|||
|
|
for eval in evaluations[-5:]: # Letzte 5
|
|||
|
|
print(f"{eval['strategy']}: "
|
|||
|
|
f"{eval['main_matches']} main, "
|
|||
|
|
f"{eval['euro_matches']} euro - "
|
|||
|
|
f"{eval['timestamp']}")
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Batch-Processing mehrerer Datensätze
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
import os
|
|||
|
|
import pandas as pd
|
|||
|
|
|
|||
|
|
data_files = [
|
|||
|
|
"AlleEurojackpotzahlen_2020.csv",
|
|||
|
|
"AlleEurojackpotzahlen_2021.csv",
|
|||
|
|
"AlleEurojackpotzahlen_2022.csv",
|
|||
|
|
]
|
|||
|
|
|
|||
|
|
all_tips = []
|
|||
|
|
|
|||
|
|
for data_file in data_files:
|
|||
|
|
print(f"\n{'='*60}")
|
|||
|
|
print(f"Processing: {data_file}")
|
|||
|
|
print(f"{'='*60}")
|
|||
|
|
|
|||
|
|
generator = UltimateAIMLEurojackpotGenerator(
|
|||
|
|
data_path=data_file,
|
|||
|
|
fast_mode=True
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
tips = generator.generate_ultimate_tips(10)
|
|||
|
|
|
|||
|
|
# Füge Quelle hinzu
|
|||
|
|
for tip in tips:
|
|||
|
|
tip['source_file'] = data_file
|
|||
|
|
|
|||
|
|
all_tips.extend(tips)
|
|||
|
|
|
|||
|
|
# Kombiniere alle Tipps
|
|||
|
|
df_all_tips = pd.DataFrame(all_tips)
|
|||
|
|
df_all_tips.to_csv("combined_ultimate_tips.csv", index=False)
|
|||
|
|
print(f"\n✅ {len(all_tips)} Tipps aus {len(data_files)} Dateien generiert")
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Custom Strategie-Mix
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
# Erstelle eigene Strategie-Verteilung
|
|||
|
|
def generate_conservative_tips(generator, num_tips=10):
|
|||
|
|
"""Konservativ: Mehr Pattern, weniger AI"""
|
|||
|
|
generator.strategy_weights = {
|
|||
|
|
'pure_ai': 0.20,
|
|||
|
|
'pure_pattern': 0.40, # Mehr Pattern
|
|||
|
|
'hybrid_optimized': 0.30,
|
|||
|
|
'ensemble_best': 0.10
|
|||
|
|
}
|
|||
|
|
return generator.generate_ultimate_tips(num_tips)
|
|||
|
|
|
|||
|
|
def generate_aggressive_tips(generator, num_tips=10):
|
|||
|
|
"""Aggressiv: Maximale AI-Power"""
|
|||
|
|
generator.strategy_weights = {
|
|||
|
|
'pure_ai': 0.50, # Viel mehr AI
|
|||
|
|
'pure_pattern': 0.10,
|
|||
|
|
'hybrid_optimized': 0.30,
|
|||
|
|
'ensemble_best': 0.10
|
|||
|
|
}
|
|||
|
|
return generator.generate_ultimate_tips(num_tips)
|
|||
|
|
|
|||
|
|
# Verwendung
|
|||
|
|
generator = UltimateAIMLEurojackpotGenerator(data_path)
|
|||
|
|
|
|||
|
|
conservative = generate_conservative_tips(generator, 5)
|
|||
|
|
generator.export_tips_to_csv(conservative, "conservative_tips.csv")
|
|||
|
|
|
|||
|
|
aggressive = generate_aggressive_tips(generator, 5)
|
|||
|
|
generator.export_tips_to_csv(aggressive, "aggressive_tips.csv")
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Best Practices & Tipps
|
|||
|
|
|
|||
|
|
### 1. Datenqualität ist entscheidend
|
|||
|
|
|
|||
|
|
**✅ Gut:**
|
|||
|
|
```csv
|
|||
|
|
datum;Z1;Z2;Z3;Z4;Z5;SZ1;SZ2
|
|||
|
|
2023-01-01;5;12;23;34;45;3;8
|
|||
|
|
2023-01-08;7;14;25;36;47;1;5
|
|||
|
|
2023-01-15;2;11;22;33;44;6;9
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**❌ Schlecht:**
|
|||
|
|
```csv
|
|||
|
|
# Fehlende Werte
|
|||
|
|
2023-01-01;5;;23;34;45;3;8
|
|||
|
|
|
|||
|
|
# Ungültige Zahlen
|
|||
|
|
2023-01-08;7;14;52;36;47;1;5 # 52 > 50!
|
|||
|
|
|
|||
|
|
# Duplikate
|
|||
|
|
2023-01-15;5;5;22;33;44;6;9 # 5 doppelt!
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Empfohlene Mindestanzahl Ziehungen:**
|
|||
|
|
- Absolute Minimum: 50 Ziehungen
|
|||
|
|
- Empfohlen: 100+ Ziehungen
|
|||
|
|
- Optimal: 200+ Ziehungen
|
|||
|
|
|
|||
|
|
### 2. Fast Mode für reguläre Nutzung
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
# Standard-Nutzung
|
|||
|
|
generator = UltimateAIMLEurojackpotGenerator(
|
|||
|
|
data_path="...",
|
|||
|
|
fast_mode=True # Empfohlen!
|
|||
|
|
)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Wann Full Mode?**
|
|||
|
|
- Nur wenn Zeit keine Rolle spielt
|
|||
|
|
- Qualitätsverbesserung ist marginal (2-5%)
|
|||
|
|
- Hauptsächlich für Benchmarking
|
|||
|
|
|
|||
|
|
### 3. Diversifiziere dein Portfolio
|
|||
|
|
|
|||
|
|
**Strategie-Mix nutzen:**
|
|||
|
|
```python
|
|||
|
|
# Nicht nur Pure-AI oder Pure-Pattern
|
|||
|
|
# Nutze den Default-Mix (ist optimal)
|
|||
|
|
tips = generator.generate_ultimate_tips(10)
|
|||
|
|
|
|||
|
|
# Oder erstelle mehrere Sets mit unterschiedlichen Gewichten
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Mehr Tipps = Bessere Coverage:**
|
|||
|
|
```python
|
|||
|
|
# Besser: 20 diversifizierte Tipps
|
|||
|
|
tips = generator.generate_ultimate_tips(20)
|
|||
|
|
|
|||
|
|
# Als: 10 ähnliche Tipps
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 4. Nutze Confidence & Quality Scores
|
|||
|
|
|
|||
|
|
**Priorisierung nach Scores:**
|
|||
|
|
```python
|
|||
|
|
tips = generator.generate_ultimate_tips(20)
|
|||
|
|
|
|||
|
|
# Sortiere nach Confidence
|
|||
|
|
tips_by_confidence = sorted(tips, key=lambda x: x['confidence'], reverse=True)
|
|||
|
|
top_5_confidence = tips_by_confidence[:5]
|
|||
|
|
|
|||
|
|
# Sortiere nach Quality
|
|||
|
|
tips_by_quality = sorted(tips, key=lambda x: x['quality'], reverse=True)
|
|||
|
|
top_5_quality = tips_by_quality[:5]
|
|||
|
|
|
|||
|
|
# Spiele die besten
|
|||
|
|
play_tips = top_5_confidence + top_5_quality
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 5. Regular Updates mit Real-Time Learning
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
# Workflow für kontinuierliche Verbesserung
|
|||
|
|
generator = UltimateAIMLEurojackpotGenerator(data_path)
|
|||
|
|
|
|||
|
|
for week in range(1, 53): # 52 Wochen
|
|||
|
|
# Tipps generieren
|
|||
|
|
tips = generator.generate_ultimate_tips(10)
|
|||
|
|
|
|||
|
|
# Tipps spielen
|
|||
|
|
# ...
|
|||
|
|
|
|||
|
|
# Nach Ziehung: Feedback geben
|
|||
|
|
actual_drawing = get_actual_drawing() # Deine Funktion
|
|||
|
|
generator.real_time_learner.learn_from_result(actual_drawing)
|
|||
|
|
generator.performance_tracker.evaluate_predictions(actual_drawing)
|
|||
|
|
|
|||
|
|
# System verbessert sich über Zeit!
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 6. Kombiniere mit manueller Analyse
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
tips = generator.generate_ultimate_tips(20)
|
|||
|
|
|
|||
|
|
# Filter nach deinen Kriterien
|
|||
|
|
favorite_tips = []
|
|||
|
|
for tip in tips:
|
|||
|
|
# Z.B. nur Tipps mit mindestens 2 heißen Zahlen
|
|||
|
|
hot_count = sum(1 for n in tip['main_numbers']
|
|||
|
|
if n in [17, 5, 38, ...]) # Deine Hot Numbers
|
|||
|
|
|
|||
|
|
if hot_count >= 2:
|
|||
|
|
favorite_tips.append(tip)
|
|||
|
|
|
|||
|
|
print(f"Favoriten: {len(favorite_tips)}/{len(tips)}")
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 7. Backup deine Modelle
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
import shutil
|
|||
|
|
from datetime import datetime
|
|||
|
|
|
|||
|
|
# Nach Training: Backup erstellen
|
|||
|
|
cache_path = generator.model_cache_path
|
|||
|
|
backup_path = f"{cache_path}_backup_{datetime.now().strftime('%Y%m%d')}"
|
|||
|
|
|
|||
|
|
shutil.copytree(cache_path, backup_path)
|
|||
|
|
print(f"✅ Models backed up to: {backup_path}")
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 8. Experimentiere mit Strategien
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
# A/B Testing verschiedener Konfigurationen
|
|||
|
|
configs = [
|
|||
|
|
{'pure_ai': 0.40, 'pure_pattern': 0.20, 'hybrid_optimized': 0.30, 'ensemble_best': 0.10},
|
|||
|
|
{'pure_ai': 0.20, 'pure_pattern': 0.40, 'hybrid_optimized': 0.30, 'ensemble_best': 0.10},
|
|||
|
|
{'pure_ai': 0.30, 'pure_pattern': 0.25, 'hybrid_optimized': 0.40, 'ensemble_best': 0.05},
|
|||
|
|
]
|
|||
|
|
|
|||
|
|
for i, config in enumerate(configs):
|
|||
|
|
generator.strategy_weights = config
|
|||
|
|
tips = generator.generate_ultimate_tips(10)
|
|||
|
|
generator.export_tips_to_csv(tips, f"experiment_{i+1}.csv")
|
|||
|
|
|
|||
|
|
print(f"Experiment {i+1}: Avg Confidence = {sum(t['confidence'] for t in tips)/len(tips):.4f}")
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 9. Monitoring & Logging
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
import logging
|
|||
|
|
from datetime import datetime
|
|||
|
|
|
|||
|
|
# Setup Logging
|
|||
|
|
logging.basicConfig(
|
|||
|
|
filename=f'generator_log_{datetime.now().strftime("%Y%m%d")}.log',
|
|||
|
|
level=logging.INFO,
|
|||
|
|
format='%(asctime)s - %(levelname)s - %(message)s'
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
# Log Generation
|
|||
|
|
generator = UltimateAIMLEurojackpotGenerator(data_path)
|
|||
|
|
logging.info(f"Generator initialized. Is trained: {generator.is_trained}")
|
|||
|
|
|
|||
|
|
tips = generator.generate_ultimate_tips(10)
|
|||
|
|
logging.info(f"Generated {len(tips)} tips")
|
|||
|
|
|
|||
|
|
for tip in tips:
|
|||
|
|
logging.info(f"Tip {tip['tip_number']}: "
|
|||
|
|
f"Main {tip['main_numbers']}, "
|
|||
|
|
f"Euro {tip['euro_numbers']}, "
|
|||
|
|
f"Conf {tip['confidence']:.4f}, "
|
|||
|
|
f"Quality {tip['quality']:.4f}")
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 10. Performance-Metriken tracken
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
import time
|
|||
|
|
import json
|
|||
|
|
|
|||
|
|
# Performance Tracking
|
|||
|
|
start_time = time.time()
|
|||
|
|
|
|||
|
|
generator = UltimateAIMLEurojackpotGenerator(data_path, fast_mode=True)
|
|||
|
|
init_time = time.time() - start_time
|
|||
|
|
|
|||
|
|
start_gen = time.time()
|
|||
|
|
tips = generator.generate_ultimate_tips(10)
|
|||
|
|
gen_time = time.time() - start_gen
|
|||
|
|
|
|||
|
|
# Metriken speichern
|
|||
|
|
metrics = {
|
|||
|
|
'timestamp': datetime.now().isoformat(),
|
|||
|
|
'init_time_sec': init_time,
|
|||
|
|
'generation_time_sec': gen_time,
|
|||
|
|
'num_tips': len(tips),
|
|||
|
|
'avg_confidence': sum(t['confidence'] for t in tips) / len(tips),
|
|||
|
|
'avg_quality': sum(t['quality'] for t in tips) / len(tips),
|
|||
|
|
'is_trained': generator.is_trained,
|
|||
|
|
'fast_mode': generator.fast_mode
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
with open('metrics.json', 'w') as f:
|
|||
|
|
json.dump(metrics, f, indent=2)
|
|||
|
|
|
|||
|
|
print(f"⏱️ Init: {init_time:.2f}s, Generation: {gen_time:.2f}s")
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Troubleshooting
|
|||
|
|
|
|||
|
|
### Problem: "ML not available - using fallback"
|
|||
|
|
|
|||
|
|
**Ursache:** scikit-learn nicht installiert
|
|||
|
|
|
|||
|
|
**Lösung:**
|
|||
|
|
```bash
|
|||
|
|
pip install scikit-learn joblib
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Alternative:** System funktioniert auch ohne ML (mit Pattern-basierten Fallbacks)
|
|||
|
|
|
|||
|
|
### Problem: Training dauert sehr lange (>5 Minuten)
|
|||
|
|
|
|||
|
|
**Ursachen & Lösungen:**
|
|||
|
|
|
|||
|
|
1. **Zu viele Daten:**
|
|||
|
|
```python
|
|||
|
|
# Limitiere Daten auf letzte 200 Ziehungen
|
|||
|
|
df = pd.read_csv(data_path, sep=';')
|
|||
|
|
df = df.tail(200)
|
|||
|
|
df.to_csv('data_limited.csv', sep=';', index=False)
|
|||
|
|
|
|||
|
|
generator = UltimateAIMLEurojackpotGenerator('data_limited.csv')
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
2. **Fast Mode nicht aktiviert:**
|
|||
|
|
```python
|
|||
|
|
# Stelle sicher dass Fast Mode an ist
|
|||
|
|
generator = UltimateAIMLEurojackpotGenerator(
|
|||
|
|
data_path,
|
|||
|
|
fast_mode=True # Wichtig!
|
|||
|
|
)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
3. **Erster Durchlauf - das ist normal:**
|
|||
|
|
```python
|
|||
|
|
# Training: ~30-90 Sekunden (nur beim ersten Mal)
|
|||
|
|
# Danach: ~2 Sekunden (aus Cache)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Problem: Tipps sind alle sehr ähnlich
|
|||
|
|
|
|||
|
|
**Ursache:** Zu geringe Diversity-Gewichtung
|
|||
|
|
|
|||
|
|
**Lösung:**
|
|||
|
|
```python
|
|||
|
|
# Passe Hybrid Optimizer an (nicht empfohlen, aber möglich)
|
|||
|
|
# Editiere im Code: diversity * 0.1 → diversity * 0.2
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Bessere Lösung:**
|
|||
|
|
```python
|
|||
|
|
# Generiere mehr Tipps und filtere
|
|||
|
|
tips = generator.generate_ultimate_tips(30)
|
|||
|
|
|
|||
|
|
# Filtere für maximale Diversity
|
|||
|
|
diverse_tips = []
|
|||
|
|
for tip in tips:
|
|||
|
|
# Prüfe ob ähnlich zu bereits gewählten
|
|||
|
|
is_diverse = True
|
|||
|
|
for selected in diverse_tips:
|
|||
|
|
overlap = len(set(tip['main_numbers']) & set(selected['main_numbers']))
|
|||
|
|
if overlap > 2: # Max 2 gleiche Zahlen
|
|||
|
|
is_diverse = False
|
|||
|
|
break
|
|||
|
|
|
|||
|
|
if is_diverse:
|
|||
|
|
diverse_tips.append(tip)
|
|||
|
|
|
|||
|
|
if len(diverse_tips) >= 10:
|
|||
|
|
break
|
|||
|
|
|
|||
|
|
print(f"Diverse Tipps: {len(diverse_tips)}")
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Problem: "MemoryError" beim Training
|
|||
|
|
|
|||
|
|
**Ursache:** Zu viele Daten für verfügbaren RAM
|
|||
|
|
|
|||
|
|
**Lösung 1: Daten reduzieren**
|
|||
|
|
```python
|
|||
|
|
df = pd.read_csv(data_path, sep=';')
|
|||
|
|
df = df.tail(150) # Nur letzte 150 Ziehungen
|
|||
|
|
df.to_csv('data_reduced.csv', sep=';', index=False)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Lösung 2: Fast Mode + weniger Features**
|
|||
|
|
```python
|
|||
|
|
# Im Code window_size reduzieren:
|
|||
|
|
# Zeile 775: for i in range(window_size, min(len(features_df), 100)):
|
|||
|
|
# Ändere 100 → 50
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Problem: Predictions sind alle sehr niedrig (<0.3)
|
|||
|
|
|
|||
|
|
**Ursache:** Unzureichende Trainingsdaten oder schlechte Datenqualität
|
|||
|
|
|
|||
|
|
**Diagnose:**
|
|||
|
|
```python
|
|||
|
|
print(f"Anzahl Ziehungen: {len(generator.df)}")
|
|||
|
|
print(f"Models trained: {generator.is_trained}")
|
|||
|
|
print(f"ML Available: {ML_AVAILABLE}")
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Lösung:**
|
|||
|
|
```python
|
|||
|
|
# 1. Mehr Daten sammeln (mindestens 50 Ziehungen)
|
|||
|
|
# 2. Datenqualität prüfen (keine fehlenden Werte, gültige Zahlen)
|
|||
|
|
# 3. Falls <50 Ziehungen: Pattern-basierte Generatoren nutzen
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Problem: Export-Datei wird nicht erstellt
|
|||
|
|
|
|||
|
|
**Ursache:** Pfad nicht schreibbar oder Berechtigungen fehlen
|
|||
|
|
|
|||
|
|
**Lösung:**
|
|||
|
|
```python
|
|||
|
|
import os
|
|||
|
|
|
|||
|
|
# Prüfe Pfad
|
|||
|
|
export_path = "/Users/.../eurojackpot_tips.csv"
|
|||
|
|
directory = os.path.dirname(export_path)
|
|||
|
|
|
|||
|
|
if not os.path.exists(directory):
|
|||
|
|
os.makedirs(directory)
|
|||
|
|
print(f"✅ Verzeichnis erstellt: {directory}")
|
|||
|
|
|
|||
|
|
# Test-Export
|
|||
|
|
generator.export_tips_to_csv(tips, export_path)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Problem: Cache wird nicht geladen
|
|||
|
|
|
|||
|
|
**Ursache:** Cache-Pfad hat sich geändert oder Dateien korrupt
|
|||
|
|
|
|||
|
|
**Lösung:**
|
|||
|
|
```python
|
|||
|
|
# Cache neu erstellen
|
|||
|
|
import shutil
|
|||
|
|
|
|||
|
|
cache_path = generator.model_cache_path
|
|||
|
|
if os.path.exists(cache_path):
|
|||
|
|
shutil.rmtree(cache_path)
|
|||
|
|
print("✅ Alter Cache gelöscht")
|
|||
|
|
|
|||
|
|
# Neu initialisieren (erzwingt Retraining)
|
|||
|
|
generator = UltimateAIMLEurojackpotGenerator(data_path)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Problem: "KeyError" bei bestimmten Spalten
|
|||
|
|
|
|||
|
|
**Ursache:** CSV hat andere Spaltennamen
|
|||
|
|
|
|||
|
|
**Lösung:**
|
|||
|
|
```python
|
|||
|
|
# Prüfe CSV-Struktur
|
|||
|
|
df = pd.read_csv(data_path, sep=';')
|
|||
|
|
print("Vorhandene Spalten:", df.columns.tolist())
|
|||
|
|
|
|||
|
|
# Erwartete Spalten: ['datum', 'Z1', 'Z2', 'Z3', 'Z4', 'Z5', 'SZ1', 'SZ2']
|
|||
|
|
# Falls anders: CSV anpassen oder Code modifizieren
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## FAQ
|
|||
|
|
|
|||
|
|
### Allgemeine Fragen
|
|||
|
|
|
|||
|
|
**Q: Wie viel besser ist der Ultimate Generator als einfache Zufallsauswahl?**
|
|||
|
|
|
|||
|
|
A: Mathematisch gesehen ist die Gewinnwahrscheinlichkeit pro Tipp identisch (1 zu 139.838.160). ABER:
|
|||
|
|
- Der Generator maximiert die Wahrscheinlichkeit, dass WENN du gewinnst, du höhere Gewinnklassen triffst
|
|||
|
|
- Pattern-Analyse zeigt, dass manche Kombinationen historisch häufiger auftreten
|
|||
|
|
- ML-Predictions können kurzfristige Trends erkennen
|
|||
|
|
- Portfolio-Diversifikation erhöht Coverage
|
|||
|
|
- **Realistische Erwartung:** 10-20% bessere Performance bei niedrigeren Gewinnklassen
|
|||
|
|
|
|||
|
|
**Q: Kann ich den Generator für andere Lotterien anpassen?**
|
|||
|
|
|
|||
|
|
A: Ja, aber erfordert Code-Anpassungen:
|
|||
|
|
```python
|
|||
|
|
# Für Lotto 6 aus 49:
|
|||
|
|
# - Ändere range(1, 51) → range(1, 50)
|
|||
|
|
# - Ändere 5 Hauptzahlen → 6 Hauptzahlen
|
|||
|
|
# - Passe SZ1/SZ2 an Superzahl (0-9) an
|
|||
|
|
# - Passe Pattern-Bereiche an
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Q: Wie oft sollte ich neue Tipps generieren?**
|
|||
|
|
|
|||
|
|
A: Empfehlungen:
|
|||
|
|
- **Pro Ziehung:** 1x (direkt vor Abgabe)
|
|||
|
|
- **Wöchentlich:** 1-2x für Portfolio-Building
|
|||
|
|
- **Nach jeder echten Ziehung:** Real-Time Learning Update
|
|||
|
|
|
|||
|
|
**Q: Sind die Tipps reproduzierbar?**
|
|||
|
|
|
|||
|
|
A: Teilweise:
|
|||
|
|
```python
|
|||
|
|
# Mit festem Seed: Ja
|
|||
|
|
random.seed(42)
|
|||
|
|
np.random.seed(42)
|
|||
|
|
tips1 = generator.generate_ultimate_tips(10)
|
|||
|
|
|
|||
|
|
random.seed(42)
|
|||
|
|
np.random.seed(42)
|
|||
|
|
tips2 = generator.generate_ultimate_tips(10)
|
|||
|
|
# tips1 == tips2 ✅
|
|||
|
|
|
|||
|
|
# Ohne Seed: Nein (gewollt für Diversity)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Technische Fragen
|
|||
|
|
|
|||
|
|
**Q: Welche ML-Algorithmen werden genau verwendet?**
|
|||
|
|
|
|||
|
|
A:
|
|||
|
|
- **RandomForestRegressor**: Ensemble aus 100-200 Decision Trees
|
|||
|
|
- **GradientBoostingRegressor**: Boosting-Algorithmus mit 100-200 Estimators
|
|||
|
|
- **Optional: MLP Neural Network**: Multi-Layer Perceptron (wenn TensorFlow installiert)
|
|||
|
|
|
|||
|
|
**Q: Wie werden Features für ML erstellt?**
|
|||
|
|
|
|||
|
|
A: Aus letzten 3 Ziehungen:
|
|||
|
|
```
|
|||
|
|
Features pro Ziehung:
|
|||
|
|
- freq_5: Unique Zahlen / (5 × 5) in letzten 5 Ziehungen
|
|||
|
|
- freq_10: Unique Zahlen / (10 × 5) in letzten 10 Ziehungen
|
|||
|
|
- day_of_week: 0-6 (falls Datum vorhanden)
|
|||
|
|
- seasonal: sin(2π × day_of_year / 365)
|
|||
|
|
|
|||
|
|
Total: 3 Ziehungen × 4 Features = 12 Features
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Q: Was ist der Unterschied zwischen Confidence und Quality?**
|
|||
|
|
|
|||
|
|
A:
|
|||
|
|
- **Confidence**: Kombiniert AI-Scores + Pattern-Weight
|
|||
|
|
- Fokus: Statistische Wahrscheinlichkeit
|
|||
|
|
- Formel: `Main-AI × 0.5 + Euro-AI × 0.3 + Pattern × 0.2`
|
|||
|
|
|
|||
|
|
- **Quality**: Multi-Faktor Score inkl. Diversity
|
|||
|
|
- Fokus: Gesamt-Qualität des Tipps
|
|||
|
|
- Formel: `Main-Quality × 0.4 + Euro-Quality × 0.25 + Pattern × 0.2 + Diversity × 0.15`
|
|||
|
|
|
|||
|
|
**Q: Wie funktioniert die adaptive Gewichtung?**
|
|||
|
|
|
|||
|
|
A: Nach jeder Generierung:
|
|||
|
|
```python
|
|||
|
|
1. Berechne Performance-Score pro Strategie:
|
|||
|
|
Perf = Confidence × 0.6 + Quality × 0.4
|
|||
|
|
|
|||
|
|
2. Durchschnitt über alle Tipps dieser Strategie
|
|||
|
|
|
|||
|
|
3. Normalisiere zu Gesamt-Summe = 1.0
|
|||
|
|
|
|||
|
|
4. Update Gewichte:
|
|||
|
|
New Weight = Old Weight × 0.7 + New Normalized × 0.3
|
|||
|
|
(70% alt, 30% neu → sanfte Anpassung)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Q: Werden alle 50 Zahlen mit separaten Modellen trainiert?**
|
|||
|
|
|
|||
|
|
A: Fast:
|
|||
|
|
- **Hauptzahlen**: Top 40 häufigste Zahlen bekommen eigene Modelle
|
|||
|
|
- **Eurozahlen**: Alle 12 bekommen eigene Modelle
|
|||
|
|
- **Seltene Zahlen**: Nutzen Fallback-Predictions
|
|||
|
|
|
|||
|
|
**Q: Was passiert wenn keine ML-Libraries installiert sind?**
|
|||
|
|
|
|||
|
|
A: Graceful Degradation:
|
|||
|
|
```python
|
|||
|
|
if not ML_AVAILABLE:
|
|||
|
|
# Fallback zu frequency-basierten Predictions
|
|||
|
|
for num in range(1, 51):
|
|||
|
|
predictions[num] = base_freq + random(0, 0.3)
|
|||
|
|
```
|
|||
|
|
System funktioniert weiter, nutzt aber nur Pattern + Frequency.
|
|||
|
|
|
|||
|
|
### Strategie-Fragen
|
|||
|
|
|
|||
|
|
**Q: Welche Strategie ist die beste?**
|
|||
|
|
|
|||
|
|
A: Hängt vom Ziel ab:
|
|||
|
|
- **Pure AI**: Beste für kurzfristige Trends (wenn Modelle gut trainiert)
|
|||
|
|
- **Pure Pattern**: Beste für langfristige statistische Muster
|
|||
|
|
- **Hybrid Optimized**: Beste Balance (empfohlen als Standard)
|
|||
|
|
- **Ensemble**: Beste Robustheit bei Unsicherheit
|
|||
|
|
|
|||
|
|
**Empfehlung:** Default-Mix nutzen (30/25/30/15)
|
|||
|
|
|
|||
|
|
**Q: Soll ich mehr Hot Numbers oder mehr Diversity?**
|
|||
|
|
|
|||
|
|
A: Balance:
|
|||
|
|
```python
|
|||
|
|
# Strategie 1: Hot-Heavy (höheres Risiko, höheres Reward)
|
|||
|
|
generator.strategy_weights = {
|
|||
|
|
'pure_ai': 0.50, # Mehr Hot Numbers
|
|||
|
|
'pure_pattern': 0.10,
|
|||
|
|
'hybrid_optimized': 0.30,
|
|||
|
|
'ensemble_best': 0.10
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
# Strategie 2: Diversity-Heavy (niedrigeres Risiko, breitere Coverage)
|
|||
|
|
generator.strategy_weights = {
|
|||
|
|
'pure_ai': 0.20,
|
|||
|
|
'pure_pattern': 0.30,
|
|||
|
|
'hybrid_optimized': 0.40, # Mehr Diversity
|
|||
|
|
'ensemble_best': 0.10
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Q: Wie viele Tipps sollte ich spielen?**
|
|||
|
|
|
|||
|
|
A: Empfehlungen basierend auf Budget:
|
|||
|
|
- **Klein (1-3€):** 1 Tipp (höchste Confidence)
|
|||
|
|
- **Mittel (5-10€):** 3-5 Tipps (Top Confidence + Top Quality)
|
|||
|
|
- **Groß (15-30€):** 10+ Tipps (diversifiziertes Portfolio)
|
|||
|
|
- **System:** 20+ Tipps (maximale Coverage)
|
|||
|
|
|
|||
|
|
**Q: Soll ich jede Woche neue Tipps generieren?**
|
|||
|
|
|
|||
|
|
A: Ja, weil:
|
|||
|
|
1. Real-Time Learning verbessert Predictions
|
|||
|
|
2. ML-Modelle nutzen aktuellste Daten
|
|||
|
|
3. Trends ändern sich über Zeit
|
|||
|
|
4. Adaptive Gewichtung optimiert Strategien
|
|||
|
|
|
|||
|
|
### Performance-Fragen
|
|||
|
|
|
|||
|
|
**Q: Wie schnell ist die Generierung?**
|
|||
|
|
|
|||
|
|
A: Typische Zeiten (MacBook Pro M1):
|
|||
|
|
```
|
|||
|
|
First Run (with Training):
|
|||
|
|
Fast Mode: 30-45 Sekunden
|
|||
|
|
Full Mode: 90-120 Sekunden
|
|||
|
|
|
|||
|
|
Subsequent Runs (from Cache):
|
|||
|
|
Initialization: 2-3 Sekunden
|
|||
|
|
Generation (10 tips): 3-5 Sekunden
|
|||
|
|
Total: ~5-8 Sekunden
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Q: Wie viel Speicher wird benötigt?**
|
|||
|
|
|
|||
|
|
A:
|
|||
|
|
- **Minimum:** ~100 MB (ohne ML)
|
|||
|
|
- **Mit ML:** ~300-500 MB (inkl. Models)
|
|||
|
|
- **Cache:** ~5-10 MB (gespeicherte Modelle)
|
|||
|
|
- **Peak Training:** ~1-2 GB (temporär)
|
|||
|
|
|
|||
|
|
**Q: Kann ich auf schwacher Hardware laufen?**
|
|||
|
|
|
|||
|
|
A: Ja:
|
|||
|
|
```python
|
|||
|
|
# Ultra-Fast Mode (custom)
|
|||
|
|
generator = UltimateAIMLEurojackpotGenerator(
|
|||
|
|
data_path,
|
|||
|
|
fast_mode=True
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
# Reduziere Tip-Anzahl
|
|||
|
|
tips = generator.generate_ultimate_tips(5) # Statt 10
|
|||
|
|
|
|||
|
|
# Oder nutze simpleren Generator
|
|||
|
|
from tipp_generator_nmmhh_v2 import generate_tips_nmmhh
|
|||
|
|
tips = generate_tips_nmmhh(10) # Viel schneller, weniger features
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Daten-Fragen
|
|||
|
|
|
|||
|
|
**Q: Wo bekomme ich historische Eurojackpot-Daten?**
|
|||
|
|
|
|||
|
|
A: Quellen:
|
|||
|
|
- Offizielle Eurojackpot-Website (CSV-Export)
|
|||
|
|
- [https://www.eurojackpot.de/de/eurojackpot/gewinnzahlen.html](https://www.eurojackpot.de)
|
|||
|
|
- Lotterie-Statistik-Websites
|
|||
|
|
- Web-Scraping (selbst programmieren)
|
|||
|
|
|
|||
|
|
**Q: Wie oft sollte ich Daten aktualisieren?**
|
|||
|
|
|
|||
|
|
A:
|
|||
|
|
- **Minimum:** Nach jeder Ziehung (1-2x pro Woche)
|
|||
|
|
- **Empfohlen:** Automatisches Update via Script
|
|||
|
|
- **Real-Time Learning:** Alternative zu vollem Re-Training
|
|||
|
|
|
|||
|
|
**Q: Was wenn meine Daten Lücken haben?**
|
|||
|
|
|
|||
|
|
A: System ist robust:
|
|||
|
|
- Fehlende einzelne Ziehungen: Kein Problem
|
|||
|
|
- Fehlende Datumsangaben: System nutzt Sequence statt Time
|
|||
|
|
- Fehlende Eurozahlen: Nur Hauptzahlen-Modelle werden trainiert
|
|||
|
|
|
|||
|
|
**Q: Kann ich Daten aus mehreren Quellen kombinieren?**
|
|||
|
|
|
|||
|
|
A: Ja:
|
|||
|
|
```python
|
|||
|
|
import pandas as pd
|
|||
|
|
|
|||
|
|
# Lade mehrere Dateien
|
|||
|
|
df1 = pd.read_csv('quelle1.csv', sep=';')
|
|||
|
|
df2 = pd.read_csv('quelle2.csv', sep=';')
|
|||
|
|
|
|||
|
|
# Kombiniere
|
|||
|
|
df_combined = pd.concat([df1, df2], ignore_index=True)
|
|||
|
|
|
|||
|
|
# Entferne Duplikate
|
|||
|
|
df_combined = df_combined.drop_duplicates(subset=['Z1', 'Z2', 'Z3', 'Z4', 'Z5'])
|
|||
|
|
|
|||
|
|
# Sortiere chronologisch
|
|||
|
|
df_combined = df_combined.sort_values('datum')
|
|||
|
|
|
|||
|
|
# Speichere
|
|||
|
|
df_combined.to_csv('combined.csv', sep=';', index=False)
|
|||
|
|
|
|||
|
|
# Nutze combined
|
|||
|
|
generator = UltimateAIMLEurojackpotGenerator('combined.csv')
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Zusammenfassung
|
|||
|
|
|
|||
|
|
Der **Ultimate AI-ML Eurojackpot Generator** ist das fortschrittlichste Tool im Projekt:
|
|||
|
|
|
|||
|
|
✅ **4 intelligente Strategien** kombiniert
|
|||
|
|
✅ **Echtes Machine Learning** mit RandomForest + GradientBoosting
|
|||
|
|
✅ **Adaptive Optimierung** über Zeit
|
|||
|
|
✅ **Model Persistence** für schnelle Re-Runs
|
|||
|
|
✅ **Real-Time Learning** für kontinuierliche Verbesserung
|
|||
|
|
✅ **Umfassendes Performance-Tracking**
|
|||
|
|
|
|||
|
|
**Empfohlener Workflow:**
|
|||
|
|
1. Initialisiere mit `fast_mode=True`
|
|||
|
|
2. Generiere 10-20 Tipps
|
|||
|
|
3. Nutze Top 5 nach Confidence + Quality
|
|||
|
|
4. Nach Ziehung: Real-Time Learning Update
|
|||
|
|
5. Wiederholen
|
|||
|
|
|
|||
|
|
**Wichtig zu wissen:**
|
|||
|
|
- Lotto bleibt Glücksspiel (keine Garantien!)
|
|||
|
|
- Generator maximiert statistische Wahrscheinlichkeiten
|
|||
|
|
- Kontinuierliche Updates verbessern Performance
|
|||
|
|
- Balance zwischen Hot Numbers und Diversity ist key
|
|||
|
|
|
|||
|
|
Viel Erfolg! 🍀
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
**Kontakt & Support:**
|
|||
|
|
- GitHub Issues für Bugs
|
|||
|
|
- README.md für Quick Start
|
|||
|
|
- Dieser Guide für Details
|
|||
|
|
|
|||
|
|
**Version:** 2.1
|
|||
|
|
**Stand:** 2025-01-25
|