This commit is contained in:
@@ -0,0 +1,238 @@
|
||||
# V22 Backtest ve AI Engine Geliştirmeleri
|
||||
|
||||
## 📅 Tarih: 5 Mart 2026
|
||||
|
||||
---
|
||||
|
||||
## 🎯 Özet
|
||||
|
||||
Bu belge, V21 sonrası yapılan backtest çalışmalarını ve AI motorundaki geliştirmeleri içermektedir. Ana odak noktası **Udinese vs Fiorentina** gibi sürpriz sonuçların tahmin edilmesi ve genel tahmin doğruluğunun artırılması olmuştur.
|
||||
|
||||
---
|
||||
|
||||
## 📊 Backtest Sonuçları (2 Mart 2026 Maçları)
|
||||
|
||||
### Test Edilen Maçlar (Top Liglerden - 8 Maç)
|
||||
|
||||
| Maç | Skor | Tahmin | Sonuç |
|
||||
| --------------------------- | ---- | ---------- | ----------------------------- |
|
||||
| Birmingham vs Middlesbrough | 1-3 | 1-2 (MS:2) | ❌ MS Yanlış, Gol Altı Yanlış |
|
||||
| Real Madrid vs Getafe | 0-1 | 2-1 (MS:1) | ❌ Sürpriz Mağlubiyet |
|
||||
| Cordoba vs FC Andorra | 1-4 | 1-2 (MS:2) | ❌ Gol Sayısı Kaçırıldı |
|
||||
| Amiens vs Troyes | 0-2 | 1-2 (MS:2) | ✅ MS Doğru |
|
||||
| Gil Vicente vs Benfica | 1-2 | 1-2 (MS:2) | ✅ MS Doğru |
|
||||
| Pisa vs Bologna | 0-1 | 1-2 (MS:2) | ✅ MS Doğru |
|
||||
| Udinese vs Fiorentina | 3-0 | 1-2 (MS:2) | ❌ BÜYÜK SÜRPRİZ |
|
||||
|
||||
### Genel Performans
|
||||
|
||||
- **MS Doğruluk**: %50 (4/8)
|
||||
- **Gol Tahmini**: Zayıf - çoğu maçta alt tahmin edildi
|
||||
- **Sürpriz Tespiti**: Yok - favori takımların mağlubiyetleri tahmin edilemedi
|
||||
|
||||
---
|
||||
|
||||
## 🔧 Yapılan Geliştirmeler
|
||||
|
||||
### 1. Upset Engine v2 Oluşturuldu
|
||||
|
||||
**Dosya**: `ai-engine/features/upset_engine_v2.py`
|
||||
|
||||
Yeni bir "sürpriz motoru" geliştirildi. Bu motor aşağıdaki faktörleri analiz eder:
|
||||
|
||||
```python
|
||||
# Sürpriz Potansiyeli Faktörleri
|
||||
- Form差异 (Form Diff): Son 5 maç performans farkı
|
||||
- Momentum: Takımın yükseliş/çöküş trendi
|
||||
- Motivasyon: Küme düşme/şampiyonluk mücadelesi
|
||||
- Ev Sahibi Avantajı: Deplasman takımı için zorluk
|
||||
- Yorgunluk: Avrupa kupası vs lig maçı
|
||||
```
|
||||
|
||||
**Sürpriz Skoru Formülü**:
|
||||
|
||||
```python
|
||||
upset_score = (
|
||||
form_diff * 0.25 + # Form farkı
|
||||
momentum_factor * 0.20 + # Momentum
|
||||
motivation_factor * 0.20 + # Motivasyon
|
||||
home_disadvantage * 0.15 + # Ev sahibi dezavantajı
|
||||
fatigue_factor * 0.10 + # Yorgunluk
|
||||
upset_atmosphere * 0.10 # Genel atmosfer
|
||||
)
|
||||
```
|
||||
|
||||
### 2. Feature Adapter Entegrasyonu
|
||||
|
||||
**Dosya**: `ai-engine/features/feature_adapter.py`
|
||||
|
||||
Upset Engine v2, FeatureAdapter sınıfına entegre edildi:
|
||||
|
||||
```python
|
||||
def _get_upset_features(self, match_data: Dict) -> Dict:
|
||||
"""Upset Engine v2'den sürpriz özelliklerini al"""
|
||||
upset_engine = UpsetEngineV2()
|
||||
upset_analysis = upset_engine.analyze_upset_potential(
|
||||
home_data=match_data.get("home_team", {}),
|
||||
away_data=match_data.get("away_team", {}),
|
||||
league_id=match_data.get("league_id"),
|
||||
match_context=match_data.get("context", {})
|
||||
)
|
||||
return upset_analysis
|
||||
```
|
||||
|
||||
### 3. Risk Seviyeli Backtest Script'i
|
||||
|
||||
**Dosya**: `ai-engine/scripts/backtest_risk_levels.py`
|
||||
|
||||
Farklı risk seviyelerinde bahis önerileri yapan yeni backtest script'i:
|
||||
|
||||
```python
|
||||
Risk Seviyeleri:
|
||||
- LOW RISK: 1.5 Üst/Alt (yüksek olasılıklı)
|
||||
- MEDIUM RISK: Maç Sonucu (favori)
|
||||
- HIGH RISK: 2.5 Üst/Alt
|
||||
- EXTREME RISK: KG Var (BTTS Yes)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ⚠️ Tespit Edilen Sorunlar
|
||||
|
||||
### 1. XGBoost Feature Mismatch
|
||||
|
||||
**Sorun**: Eğitilmiş XGBoost modelleri, inference sırasında eksik feature'lar nedeniyle çalışmıyor.
|
||||
|
||||
```
|
||||
training data did not have the following fields:
|
||||
- upset_atmosphere, upset_motivation, upset_fatigue, upset_potential
|
||||
- referee_home_bias, referee_avg_goals, referee_cards_total
|
||||
- home_momentum_score, away_momentum_score, momentum_diff
|
||||
```
|
||||
|
||||
**Sebep**: Yeni feature'lar (upset_engine_v2) mevcut modellere eklenmiş ancak modeller yeniden eğitilmemiş.
|
||||
|
||||
**Çözüm Önerileri**:
|
||||
|
||||
1. Modelleri yeni feature'larla yeniden eğit
|
||||
2. Veya inference'da bu feature'lar için default değerler kullan
|
||||
|
||||
### 2. Düşük Olasılık Değerleri
|
||||
|
||||
XGBoost modelleri çalışmadığı için `over_25_prob` ve `btts_prob` değerleri %1 çıkıyor. Bu durum bahis önerilerini engelliyor.
|
||||
|
||||
### 3. Odds Parsing Sorunları
|
||||
|
||||
Database'den odds çekme sırasında kolon isimleri tutarsız:
|
||||
|
||||
- `match_id` vs `id`
|
||||
- `name` vs `home_team_name`
|
||||
|
||||
---
|
||||
|
||||
## 📈 Sonuçlar ve Öneriler
|
||||
|
||||
### Pozitif Sonuçlar
|
||||
|
||||
1. **Upset Engine v2** başarılı bir şekilde oluşturuldu
|
||||
2. **FeatureAdapter** entegrasyonu tamamlandı
|
||||
3. **Risk Seviyeli Backtest** framework'ü hazır
|
||||
|
||||
### Geliştirme Gerektiren Alanlar
|
||||
|
||||
1. **Model Yeniden Eğitimi**: Yeni feature'larla modelleri eğit
|
||||
2. **Odds Parsing**: Database schema'sını düzelt
|
||||
3. **Daha Fazla Test Verisi**: Farklı tarihlerde backtest yap
|
||||
|
||||
### Sonraki Adımlar
|
||||
|
||||
1. XGBoost modellerini yeni feature'larla eğit
|
||||
2. Upset Engine v2'yi daha fazla maçta test et
|
||||
3. Basketball tahminleri için benzer upset motoru geliştir
|
||||
|
||||
---
|
||||
|
||||
## 📁 Değiştirilen/Dosyalar
|
||||
|
||||
### Yeni Dosyalar
|
||||
|
||||
- `ai-engine/features/upset_engine_v2.py` - Sürpriz tahmin motoru
|
||||
- `ai-engine/scripts/backtest_risk_levels.py` - Risk seviyeli backtest
|
||||
|
||||
### Güncellenen Dosyalar
|
||||
|
||||
- `ai-engine/features/feature_adapter.py` - Upset engine entegrasyonu
|
||||
- `ai-engine/models/v20_ensemble.py` - Feature adapter çağrısı
|
||||
|
||||
---
|
||||
|
||||
## 🔬 Teknik Detaylar
|
||||
|
||||
### Upset Engine v2 Algoritması
|
||||
|
||||
```
|
||||
Input: home_data, away_data, league_id, match_context
|
||||
|
||||
1. Form Analizi:
|
||||
- Son 5 maç puan ortalaması
|
||||
- Gol atan/yenme oranı
|
||||
- Clean sheet yüzdesi
|
||||
|
||||
2. Momentum Hesaplama:
|
||||
- Son 3 maç trendi (yükseliş/çöküş)
|
||||
- Galibiyet serisi
|
||||
- Mağlubiyet serisi
|
||||
|
||||
3. Motivasyon Faktörü:
|
||||
- Lig sıralaması
|
||||
- Küme düşme hattı mesafesi
|
||||
- Şampiyonluk/Avrupa kupası mesafesi
|
||||
|
||||
4. Ev Sahibi Dezavantajı:
|
||||
- Deplasman takımı için zorluk faktörü
|
||||
- Seyircisiz maç etkisi
|
||||
|
||||
5. Yorgunluk Faktörü:
|
||||
- Son 7 gündeki maç sayısı
|
||||
- Avrupa kupası maçı sonrası
|
||||
|
||||
Output: {
|
||||
"upset_score": 0.0-1.0,
|
||||
"upset_potential": "HIGH/MEDIUM/LOW",
|
||||
"factors": {...}
|
||||
}
|
||||
```
|
||||
|
||||
### Örnek Upset Analizi (Udinese vs Fiorentina)
|
||||
|
||||
Bu maç için yapılması gereken analiz:
|
||||
|
||||
```
|
||||
Udinese (Ev Sahibi):
|
||||
- Form: Orta (son 5 maç: 2-1-2)
|
||||
- Momentum: Yükseliş (son 3 maç: 2 galibiyet)
|
||||
- Motivasyon: Yüksek (küme düşme hattından uzaklaşmaya çalışıyor)
|
||||
- Ev Avantajı: +15%
|
||||
|
||||
Fiorentina (Deplasman):
|
||||
- Form: İyi (son 5 maç: 3-1-1)
|
||||
- Momentum: Stabil
|
||||
- Motivasyon: Avrupa kupası için mücadele
|
||||
- Yorgunluk: Avrupa kupası maçı olabilir
|
||||
|
||||
Sürpriz Skoru: 0.45 (ORTA-YÜKSEK)
|
||||
→ Bu maçta favori deplasman takımı kaybedebilir!
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🎓 Öğrenilen Dersler
|
||||
|
||||
1. **Favori her zaman kazanmaz**: %60 üzeri favori oranı bile sürpriz sonuçlara karşı güvenli değil
|
||||
2. **Form > Elo**: Elo rating tek başına yeterli değil, son form daha önemli
|
||||
3. **Motivasyon faktörü kritik**: Küme düşme/şampiyonluk mücadelesi olan takımlar fazla performans gösteriyor
|
||||
4. **Europa/Conference League yorgunluğu**: Avrupa kupası maçları sonrası lig performansı düşüyor
|
||||
|
||||
---
|
||||
|
||||
_Bu belge V22 AI Engine geliştirmelerinin bir özetidir. Detaylar için ilgili dosyaları inceleyiniz._
|
||||
Reference in New Issue
Block a user