7.0 KiB
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:
# 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ü:
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:
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:
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:
- Modelleri yeni feature'larla yeniden eğit
- 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_idvsidnamevshome_team_name
📈 Sonuçlar ve Öneriler
Pozitif Sonuçlar
- Upset Engine v2 başarılı bir şekilde oluşturuldu
- FeatureAdapter entegrasyonu tamamlandı
- Risk Seviyeli Backtest framework'ü hazır
Geliştirme Gerektiren Alanlar
- Model Yeniden Eğitimi: Yeni feature'larla modelleri eğit
- Odds Parsing: Database schema'sını düzelt
- Daha Fazla Test Verisi: Farklı tarihlerde backtest yap
Sonraki Adımlar
- XGBoost modellerini yeni feature'larla eğit
- Upset Engine v2'yi daha fazla maçta test et
- 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 motoruai-engine/scripts/backtest_risk_levels.py- Risk seviyeli backtest
Güncellenen Dosyalar
ai-engine/features/feature_adapter.py- Upset engine entegrasyonuai-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
- Favori her zaman kazanmaz: %60 üzeri favori oranı bile sürpriz sonuçlara karşı güvenli değil
- Form > Elo: Elo rating tek başına yeterli değil, son form daha önemli
- Motivasyon faktörü kritik: Küme düşme/şampiyonluk mücadelesi olan takımlar fazla performans gösteriyor
- 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.