Files
iddaai-be/mds/V22_BACKTEST_IMPROVEMENTS.md
fahricansecer 2f0b85a0c7
Deploy Iddaai Backend / build-and-deploy (push) Failing after 18s
first (part 2: other directories)
2026-04-16 15:11:25 +03:00

7.0 KiB
Raw Permalink Blame History

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:

  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.