# 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._