5.7 KiB
5.7 KiB
V25 Model Güncelleme Özeti
Tarih: 12 Mart 2026 Konu: Target Leakage düzeltmesi ve model yeniden eğitimi
1. Sorun Tespiti
Target Leakage (Hedef Sızıntısı)
Eski V25 modeli total_goals ve ht_total_goals feature'larını içeriyordu. Bu feature'lar:
- Maç başlamadan bilinemez
- Sadece maç bittikten sonra elde edilir
- Model "hile yapmış" oluyor - sonuca bakarak tahmin yapıyor
Örnek:
Feature: total_goals = 3 (maçta atılan toplam gol)
Target: over_2.5 = Yes (2.5 üstü)
Eğer total_goals'ü biliyorsan, zaten sonucu biliyorsun!
total_goals > 2.5 ise over_2.5 = Yes
2. Yapılan Değişiklikler
2.1 CatBoost Opsiyonel Hale Getirildi
Dosya: ai-engine/models/v25_ensemble.py
# CatBoost is optional
try:
from catboost import CatBoostClassifier
CATBOOST_AVAILABLE = True
except ImportError:
CatBoostClassifier = None
CATBOOST_AVAILABLE = False
Neden?
- CatBoost modülü yüklü değildi
- Import hatası veriyordu
- Model CatBoost olmadan da çalışabilmeli
2.2 Yeni Training Script Oluşturuldu
Dosya: ai-engine/scripts/train_v25_clean.py
Özellikler:
- 73 feature (target leakage YOK)
- Market-specific modeller
- XGBoost + LightGBM ensemble
- Early stopping ile overfitting önleme
Feature Listesi:
ELO Features (8)
Form Features (12)
H2H Features (6)
Team Stats Features (8)
Odds Features (24)
League Features (4)
Upset Engine (4)
Referee Engine (5)
Momentum Engine (3)
Kaldırılan Feature'lar:
total_goals❌ (Target Leakage)ht_total_goals❌ (Target Leakage)
2.3 V25Predictor Sınıfı Yeniden Yazıldı
Dosya: ai-engine/models/v25_ensemble.py
Yeni API:
# MS tahmini
home_prob, draw_prob, away_prob = predictor.predict_ms(features)
# OU25 tahmini
over_prob, under_prob = predictor.predict_ou25(features)
# BTTS tahmini
btts_yes, btts_no = predictor.predict_btts(features)
# Tam maç tahmini
prediction = predictor.predict_match(
match_id='123',
home_team='Team A',
away_team='Team B',
features=features,
odds={'ms_h': 1.85, 'ms_d': 3.50, 'ms_a': 4.20}
)
2.4 Test Script Güncellendi
Dosya: ai-engine/scripts/test_v25_predictor.py
3. Eğitim Sonuçları
Model Performansı
| Market | Accuracy | Log Loss | Açıklama |
|---|---|---|---|
| MS (1X2) | 52.2% | 0.9747 | Ev sahibi, Berabere, Deplasman |
| OU25 | 59.7% | 0.6568 | Over/Under 2.5 gol |
| BTTS | 55.9% | 0.6805 | Her iki takım gol atar mı? |
Veri Seti
- Toplam maç: 19,819
- Train: 14,319
- Validation: 2,527
- Test: 2,973
Test Örneği Sonucu
MS Prediction:
Home Win (1): 52.5%
Draw (X): 27.6%
Away Win (2): 19.9%
OU25 Prediction:
Over 2.5: 47.8%
Under 2.5: 52.2%
BTTS Prediction:
Yes: 52.8%
No: 47.2%
4. Dosya Yapısı
ai-engine/
├── models/
│ └── v25/
│ ├── xgb_v25_ms.json # XGBoost Match Result
│ ├── lgb_v25_ms.txt # LightGBM Match Result
│ ├── xgb_v25_ou25.json # XGBoost Over/Under 2.5
│ ├── lgb_v25_ou25.txt # LightGBM Over/Under 2.5
│ ├── xgb_v25_btts.json # XGBoost BTTS
│ ├── lgb_v25_btts.txt # LightGBM BTTS
│ └── feature_cols.json # Feature listesi
├── scripts/
│ ├── train_v25_clean.py # Yeni training script
│ └── test_v25_predictor.py # Test script
└── models/
└── v25_ensemble.py # Predictor sınıfı
5. Kavramlar
CatBoost Nedir?
- Yandex tarafından geliştirilen gradient boosting kütüphanesi
- XGBoost ve LightGBM gibi makine öğrenmesi modeli
- Kategorik değişkenleri otomatik işler
- Overfitting'e karşı dayanıklı
- Opsiyonel - yoksa XGBoost ve LightGBM ile çalışır
Target Leakage Nedir?
Model eğitiminde kullanılan bir feature'ın aslında hedef değişkenin sonucunu "bilmesi" durumudur.
Gerçek Hayat Örneği:
- Doktor hastaya "hasta mısın?" diye sorar
- Hasta "evet" derse, model bu bilgiyi kullanarak hastalık tahmin eder
- Ama gerçek tahminde bu bilgi olmayacak!
Futbol Örneği:
total_goalsfeature'ı maç sonucunu zaten biliyor- Model bu bilgiyle "öğreniyor" ama gerçek tahminde bu bilgi yok
- Sonuç: Model gerçek dünyada başarısız olur
6. Kullanım
Modeli Yükleme
from models.v25_ensemble import get_v25_predictor
predictor = get_v25_predictor()
Tahmin Yapma
features = {
'home_overall_elo': 1650.0,
'away_overall_elo': 1580.0,
'odds_ms_h': 1.85,
'odds_ms_d': 3.50,
'odds_ms_a': 4.20,
# ... diğer feature'lar
}
# MS tahmini
home, draw, away = predictor.predict_ms(features)
# Tam tahmin
prediction = predictor.predict_match(
match_id='match_001',
home_team='Galatasaray',
away_team='Fenerbahce',
features=features,
odds={'ms_h': 1.85, 'ms_d': 3.50, 'ms_a': 4.20}
)
Modeli Yeniden Eğitme
cd ai-engine
python scripts/train_v25_clean.py
7. Sonraki Adımlar
- Hyperparameter Tuning: Optuna ile daha iyi parametreler
- Feature Engineering: Yeni feature'lar ekleme
- Calibration: Probability calibration ile daha doğru olasılıklar
- Cross-Validation: Daha güvenilir model değerlendirme
- Feature Importance: Hangi feature'lar önemli?
8. Notlar
- Eski modeller
models/v25/klasöründe yedeklendi - Yeni modeller aynı klasöre kaydedildi
- Feature listesi
feature_cols.jsondosyasında - Training data:
ai-engine/data/training_data.csv(19,819 maç)
Düzenleyen: AI Assistant Tarih: 12 Mart 2026