first (part 2: other directories)
Deploy Iddaai Backend / build-and-deploy (push) Failing after 18s

This commit is contained in:
2026-04-16 15:11:25 +03:00
parent 7814e0bc6b
commit 2f0b85a0c7
203 changed files with 59989 additions and 0 deletions
+238
View File
@@ -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._