Files
iddaai-be/mds/V20_QUANT_INTEGRATION.md
T
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

145 lines
4.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# V20+ Quant Entegrasyonu & UI Dashboard
> **Tarih:** 13 Mart 2026
> **Versiyon:** V20+Quant
> **Kapsam:** Backend (AI Engine) + Frontend (Suggest-Bet-FE)
---
## 1. V2 Kantitatif Katman Entegrasyonu
### Yapılan Değişiklikler
#### `services/single_match_orchestrator.py`
**`_decorate_market_row()` metodu güncellendi:**
- Eski `edge = confidence - implied_prob` hesabı → Yeni **EV Edge** formülüne geçildi:
```
ev_edge = (probability × odds) - 1.0
```
- Sabit bahis birimi yerine **Fractional Kelly Criterion** ile stake hesabı:
```
kelly_fraction = (prob × (odds - 1) - (1 - prob)) / (odds - 1)
stake = min(max(kelly_fraction × 0.25, 0), 0.25) × 10
```
- Grade sistemi edge-based'e geçirildi:
- **A**: EV Edge > %10
- **B**: EV Edge > %5
- **C**: EV Edge > %2
- **PASS**: Edge ≤ %2
**`_to_bet_summary_item()` güncellendi:**
- `ev_edge`, `implied_prob`, `odds` alanları bet_summary çıktısına eklendi
**`_real_market_odds()` — YENİ metod:**
- Default oran bug'ı düzeltildi (aşağıda detay)
---
## 2. Default Oran Bug Fix (Kritik)
### Problem
MS market oranları veritabanında eksik olduğunda, sistem sahte default değerler enjekte ediyordu:
```python
DEFAULT_MS_H = 2.65 # SAHTE
DEFAULT_MS_D = 3.20 # SAHTE
DEFAULT_MS_A = 2.65 # SAHTE
```
Bu değerler market row'larına sızarak **sahte EV Edge** oluşturuyordu:
- GS vs Eyüpspor → `edge=+73%` (SAHTE — gerçek oran yok!)
- Bandırma vs Hatay → `edge=+59%` (SAHTE — gerçek oran yok!)
### Çözüm
`_real_market_odds()` helper metodu eklendi:
```python
def _real_market_odds(self, odds_data, key):
val = float(odds_data.get(key, 0.0))
if val <= 1.0: return 0.0
DEFAULTS = {"ms_h": 2.65, "ms_d": 3.20, "ms_a": 2.65}
if key in DEFAULTS and abs(val - DEFAULTS[key]) < 1e-6:
return 0.0 # Sahte default → sıfırla
return val # Gerçek oran → kullan
```
**Etki:**
- ML modeli hala defaultları feature olarak kullanıyor ✅
- Market row'lar 0.0 alıyor → `market_odds_missing` gate tetikleniyor → PASS ✅
- Sahte edge oluşmuyor ✅
---
## 3. Backtest Sonuçları (8-22 Şubat, 14 Gün)
### Düzeltilmiş Sonuçlar (Sahte oranlar temizlendikten sonra)
| Metrik | Değer |
|--------|-------|
| **Toplam Main Pick** | 65 |
| **Doğruluk** | 55/65 (%84.6) |
| **Kelly ROI** | +%10.0 |
| **Flat-stake ROI** | -%2.4 |
### Grade Bazlı Performans
| Grade | Doğruluk | ROI | Açıklama |
|-------|----------|-----|----------|
| **A** (>%10 edge) | 1/1 (%100) | +%40 | Twente OU15 Üst (gerçek odds=1.40) |
| **B** (%5-10 edge) | 1/1 (%100) | +%12 | GS-Juventus OU15 Üst |
| **C** (%2-5 edge) | 4/6 (%66.7) | -%26.2 | Düşük oran baskısı |
| **PASS** | 49/57 (%86) | -%0.9 | Güvenli ama düşük oran |
### Önemli Çıkarımlar
1. **Grade A gerçekten kârlı** — sadece gerçek oranlarla hesaplanan edgeler
2. **Kelly staking çalışıyor** — yüksek edge'e daha fazla stake koyuyor
3. **Çoğu pick OU15/DC** — MS oranları eksik olduğundan (lineup yok)
4. **PASS pickleri güvenli** — %86 isabet ama düşük oranlar (1.06-1.30)
---
## 4. Frontend UI Entegrasyonu
### Değiştirilen Dosyalar
#### `src/lib/api/predictions/types.ts`
```typescript
// MatchPickDto'ya eklendi:
ev_edge: number;
implied_prob: number;
// MatchBetSummaryItemDto'ya eklendi:
ev_edge: number;
implied_prob: number;
odds: number;
```
#### `src/components/matches/prediction-card.tsx` (Tam Yeniden Yazıldı)
**4 yeni sub-component:**
| Component | Görsel | Açıklama |
|-----------|--------|----------|
| `EvEdgeBadge` | `EV +14.2%` | Yeşil/kırmızı gradient badge, animated mount |
| `KellyStakePills` | `●●●○○ 1.5u` | Dolu/boş daire ile stake göstergesi |
| `ProbComparisonBar` | Mavi vs turuncu bar | Model olasılığı vs bahisçi olasılığı |
| `QuantDashboard` | Glassmorphism kart | Edge gauge + Model vs Bookie + Kelly stake |
**Mevcut componentler güncellendi:**
- `PickCard`: EV Edge badge + Kelly pills + prob comparison bar eklendi
- `BetSummaryRow`: Odds, edge %, stake kolonları; pozitif edge satırları yeşil vurgulanıyor
#### `messages/tr.json` & `messages/en.json`
8 yeni çeviri anahtarı: `ev-edge`, `implied-prob`, `model-prob`, `kelly-stake`, `edge-positive`, `edge-negative`, `quant-analysis`, `vs-bookie`
---
## 5. Dosya Değişiklik Özeti
| Dosya | Tip | Açıklama |
|-------|-----|----------|
| `ai-engine/services/single_match_orchestrator.py` | MODIFY | `_real_market_odds()` eklendi, `_decorate_market_row()` EV Edge + Kelly entegrasyonu |
| `ai-engine/scripts/backtest_v20plus_quant.py` | NEW | 2 haftalık V20+Quant backtest scripti |
| `Suggest-Bet-FE/src/lib/api/predictions/types.ts` | MODIFY | Quant alanları (ev_edge, implied_prob, odds) |
| `Suggest-Bet-FE/src/components/matches/prediction-card.tsx` | REWRITE | EvEdgeBadge, KellyStakePills, ProbComparisonBar, QuantDashboard |
| `Suggest-Bet-FE/messages/tr.json` | MODIFY | 8 yeni TR çeviri |
| `Suggest-Bet-FE/messages/en.json` | MODIFY | 8 yeni EN çeviri |