first (part 2: other directories)
Deploy Iddaai Backend / build-and-deploy (push) Failing after 18s

This commit is contained in:
2026-04-16 15:11:25 +03:00
parent 7814e0bc6b
commit 2f0b85a0c7
203 changed files with 59989 additions and 0 deletions
+144
View File
@@ -0,0 +1,144 @@
# 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 |