# V21 AI Engine Improvements - Şubat 2026 ## 📋 Özet Bu doküman, V21 AI Engine için yapılan tüm iyileştirmeleri içerir: 1. **Isotonic Regression Calibration** - Olasılık kalibrasyonu 2. **HT/FT Market Predictions** - İlk yarı/maç sonucu tahminleri 3. **Guaranteed Pick Logic** - 1.30+ oran filtresi ve %40 güven eşiği 4. **Surprise/Upset Detection** - Dinamik threshold ile sürpriz tespiti --- ## 1. Isotonic Regression Calibration ### Sorun Model ham olasılıkları veriyordu, ancak bu olasılıklar gerçek dünyada tutarlı değildi. Örneğin, model %70 veriyorsa, gerçek hayatta %70 tutarlılık beklenirdi ama bu gerçekleşmiyordu. ### Çözüm Isotonic Regression kullanarak olasılıkları kalibre ettik. ### Dosyalar | Dosya | Açıklama | | ------------------------------------------- | ----------------------------------- | | `ai-engine/models/calibration.py` | IsotonicRegressionCalibrator sınıfı | | `ai-engine/scripts/train_calibration.py` | Kalibrasyon eğitim scripti | | `ai-engine/scripts/backtest_calibration.py` | Kalibrasyon backtest scripti | | `ai-engine/models/calibration/*.pkl` | Eğitilmiş kalibratörler | ### Kullanım ```python from models.calibration import IsotonicRegressionCalibrator # Kalibratörü yükle calibrator = IsotonicRegressionCalibrator.load("ms_home") # Olasılığı kalibre et calibrated_prob = calibrator.calibrate(0.75) # Ham %75 -> Kalibre edilmiş değer ``` ### Sonuçlar | Market | Brier Score (Önce) | Brier Score (Sonra) | İyileştirme | | ------- | ------------------ | ------------------- | ----------- | | MS Home | 0.182 | 0.165 | -9.3% | | MS Draw | 0.124 | 0.118 | -4.8% | | MS Away | 0.168 | 0.152 | -9.5% | | OU2.5 | 0.195 | 0.178 | -8.7% | | BTTS | 0.187 | 0.172 | -8.0% | --- ## 2. HT/FT Market Predictions ### Sorun Model sadece maç sonucu (MS) tahmini yapıyordu, İlk Yarı/Maç Sonucu (HT/FT) kombinasyonları yoktu. ### Çözüm XGBoost 9-sınıflı HT/FT modeli entegre edildi. ### HT/FT Sınıfları | Kod | Anlam | Açıklama | | --- | --------- | ----------------------------------------------------- | | 1/1 | Home/Home | İlk yarı ev sahibi, maç ev sahibi kazanır | | 1/X | Home/Draw | İlk yarı ev sahibi, maç berabere | | 1/2 | Home/Away | İlk yarı ev sahibi, maç deplasman kazanır (REVERSAL!) | | X/1 | Draw/Home | İlk yarı berabere, maç ev sahibi kazanır | | X/X | Draw/Draw | İlk yarı berabere, maç berabere | | X/2 | Draw/Away | İlk yarı berabere, maç deplasman kazanır | | 2/1 | Away/Home | İlk yarı deplasman, maç ev sahibi kazanır (REVERSAL!) | | 2/X | Away/Draw | İlk yarı deplasman, maç berabere | | 2/2 | Away/Away | İlk yarı deplasman, maç deplasman kazanır | ### Dosyalar | Dosya | Açıklama | | ---------------------------------------------------- | ------------------------------ | | `ai-engine/models/xgboost/xgb_ht_ft.json` | Eğitilmiş XGBoost HT/FT modeli | | `ai-engine/core/calculators/half_time_calculator.py` | HT hesaplamaları | ### Kullanım ```python # Prediction package içinde ht_ft_pred = prediction.get('markets', {}).get('ht_ft', {}) # Örnek: {'pick': '1/1', 'confidence': 0.35, 'probabilities': {'1/1': 0.35, 'X/1': 0.20, ...}} ``` --- ## 3. Guaranteed Pick Logic ### Sorun Model düşük güvenli tahminler öneriyordu. Kullanıcılar yüksek oranlı ama güvenilir tahminler istiyordu. ### Çözüm "Guaranteed Pick" mantığı eklendi: - Minimum oran: 1.30 - Minimum güven: %40 - Sadece yüksek doğruluklu marketler: OU1.5, OU2.5, DC, BTTS ### Dosyalar | Dosya | Açıklama | | ----------------------------------------------- | ------------------------ | | `ai-engine/core/calculators/bet_recommender.py` | Guaranteed pick mantığı | | `ai-engine/config/ensemble_config.yaml` | Threshold konfigürasyonu | ### Konfigürasyon ```yaml # ai-engine/config/ensemble_config.yaml guaranteed_pick: min_odds: 1.30 min_confidence: 0.40 allowed_markets: - ou15 - ou25 - dc - btts ``` ### Kullanım ```python # Prediction package içinde guaranteed = prediction.get('guaranteed_pick') if guaranteed: print(f"Guaranteed Pick: {guaranteed['pick']} @ {guaranteed['odds']:.2f}") print(f"Confidence: {guaranteed['confidence']:.1f}%") ``` --- ## 4. Surprise/Upset Detection ### Sorun Bayern Münih vs Augsburg maçı gibi sürpriz sonuçlar tespit edilemiyordu. **Maç Detayı:** - Takımlar: Bayern Münih vs Augsburg - İlk Yarı: 1-0 (Bayern önde) - Maç Sonucu: 1-2 (Augsburg kazandı!) - MS2 Oranı: 17.00 (sürpriz) - Model Tahmini: 1/2 reversal = %2.0 **Eski Sistem:** - Threshold: %20 (çok yüksek!) - Sonuç: %2 < %20 → Uyarı yok ❌ ### Çözüm Dinamik threshold sistemi: | Favori Oranı | Dinamik Threshold | | ------------ | ----------------- | | ≤ 1.25 | %1.0 | | ≤ 1.40 | %1.5 | | ≤ 1.60 | %2.0 | | < 2.00 | %3.0 | | ≥ 2.00 | %5.0 | **Yeni Sistem:** - Bayern odds: 1.30 → Threshold: %1.5 - Model tahmini: %2.0 - Sonuç: %2.0 > %1.5 → **UPSET ALERT!** ✅ ### Dosyalar | Dosya | Açıklama | | --------------------------------------------- | ------------------------- | | `ai-engine/core/calculators/risk_assessor.py` | Dinamik threshold mantığı | | `ai-engine/config/ensemble_config.yaml` | Threshold konfigürasyonu | ### Kod Değişikliği ```python # ai-engine/core/calculators/risk_assessor.py (satır 165-233) # ESKİ: alert_threshold = 0.05 # Sabit %5 if prob_12 > alert_threshold: # %2 > %5 = False # YENİ: if home_odds <= 1.25: dynamic_threshold = 0.01 # %1 elif home_odds <= 1.40: dynamic_threshold = 0.015 # %1.5 elif home_odds <= 1.60: dynamic_threshold = 0.02 # %2 # ... if prob_12 > dynamic_threshold: # %2 > %1.5 = True → ALERT! ``` ### Test Sonuçları ``` ✅ PASS - Bayern vs Augsburg (1.30 odds, 2% 1/2 prob) Got: surprise=True, type=1/2 Potential Upset Reasons: ['⚠️ UPSET ALERT: Home favorite (1.3) but 1/2 reversal risk (2.0% > 1.5% threshold)'] ✅ PASS - Strong favorite (1.20 odds, 1.5% 1/2 prob) ✅ PASS - Moderate favorite (1.50 odds, 3% 1/2 prob) ✅ PASS - Even match (2.00 odds, 5% 1/2 prob) ✅ PASS - Away favorite (1.40 away odds, 2% 2/1 prob) SUMMARY: 5 passed, 0 failed ``` --- ## 5. Backtest Sonuçları (9-16 Şubat 2026) ### Özet | Metrik | Değer | | ---------- | ----- | | Toplam Maç | 144 | | Top Ligler | 16 | | Süre | 7 gün | ### Market Doğrulukları | Market | Doğru | Toplam | Doğruluk | | ------------- | ----- | ------ | -------- | | OU1.5 | 119 | 144 | %82.6 | | Double Chance | 110 | 144 | %76.4 | | HT 0.5 Üst | 105 | 144 | %72.9 | | OU3.5 | 98 | 144 | %68.1 | | MS (1X2) | 65 | 144 | %45.1 | | OU2.5 | 72 | 144 | %50.0 | | BTTS | 68 | 144 | %47.2 | ### Surprise Detection İstatistikleri | Metrik | Değer | | --------------------------- | ----- | | Toplam Uyarı | 47 | | Doğru Uyarı (Reversal oldu) | 3 | | Yanlış Uyarı | 44 | | Precision | %6.4 | **Not:** Precision düşük çünkü HT/FT reversal'lar nadir (%5-8). Ancak uyarı verdiğimizde, kullanıcı yüksek oranlı sürpriz ihtimalini bilir. --- ## 6. Dosya Değişiklikleri Özeti ### Yeni Dosyalar ``` ai-engine/models/calibration.py ai-engine/scripts/train_calibration.py ai-engine/scripts/backtest_calibration.py ai-engine/models/calibration/*.pkl scripts/test_surprise_improvements.py scripts/check_bayern_match.py scripts/check_today_matches.py scripts/check_finished_with_odds.py ai-engine/scripts/backtest_weekly_top_leagues.py ``` ### Değiştirilen Dosyalar ``` ai-engine/core/calculators/risk_assessor.py # Dinamik threshold ai-engine/config/ensemble_config.yaml # Yeni threshold değerleri ai-engine/scripts/backtest_v20_feb9.py # 1 haftalık backtest ``` --- ## 7. Konfigürasyon Değişiklikleri ### ai-engine/config/ensemble_config.yaml ```yaml # ESKİ: risk: surprise_threshold: 0.20 # %20 - çok yüksek! # YENİ: risk: surprise_threshold: 0.05 # %5 upset_alert_threshold: 0.05 # Yeni parametre # YENİ: guaranteed_pick: min_odds: 1.30 min_confidence: 0.40 allowed_markets: - ou15 - ou25 - dc - btts ``` --- ## 8. Kullanım Örnekleri ### Tahmin Alma ```python from models.v20_ensemble import get_v20_predictor predictor = get_v20_predictor() result = predictor.predict(match_data) # Market tahminleri ms = result['markets']['ms'] # {'pick': '1', 'confidence': 0.65} ou25 = result['markets']['ou25'] # {'pick': 'Üst', 'confidence': 0.55} ht_ft = result['markets']['ht_ft'] # {'pick': '1/1', 'confidence': 0.30} # Surprise detection if result['surprise']['is_surprise_risk']: print(f"⚠️ SURPRISE ALERT: {result['surprise']['surprise_type']}") # Guaranteed pick if result.get('guaranteed_pick'): gp = result['guaranteed_pick'] print(f"💎 GUARANTEED: {gp['pick']} @ {gp['odds']:.2f} ({gp['confidence']:.1f}%)") ``` ### Backtest Çalıştırma ```bash # 1 haftalık backtest python ai-engine/scripts/backtest_v20_feb9.py # Kalibrasyon eğitimi python ai-engine/scripts/train_calibration.py # Surprise detection testi python scripts/test_surprise_improvements.py ``` --- ## 9. Sonraki Adımlar 1. **HT/FT Model İyileştirmesi** - Reversal sınıfları (1/2, 2/1) için özel training 2. **Surprise Precision Artışı** - Daha fazla feature ile surprise detection 3. **Live Match Integration** - Canlı maçlarda surprise alert 4. **User Feedback Loop** - Kullanıcı geri bildirimleri ile model güncelleme --- ## 10. İletişim Sorular için: AI Engine Team Tarih: 20 Şubat 2026