76 lines
2.7 KiB
Markdown
76 lines
2.7 KiB
Markdown
# V29 Data-Driven Optimization Report
|
|
## Based on 7,000-match Diagnostic Backtest (2026-05-27)
|
|
|
|
### Before (V28-Pro-Max)
|
|
- **4,134 settled BET-action picks**
|
|
- Hit rate: 54.9%
|
|
- Unit profit: -132.68
|
|
- Staked: 849.50
|
|
- **ROI: -15.6%**
|
|
|
|
### Root Cause Analysis
|
|
|
|
#### 1. Value Sniper Threshold Too Loose (CRITICAL)
|
|
```python
|
|
# OLD: ev_edge >= 0.008 or calibrated_conf >= 55.0
|
|
# This made 100% of bets qualify as "value sniper", bypassing ALL betting brain vetoes
|
|
```
|
|
- 4,134/4,134 bets (100%) had `is_value_sniper = True`
|
|
- Hard vetoes (negative_ev, market_muted, low_reliability) were NEVER enforced
|
|
|
|
#### 2. 89% of Bets Had Negative EV Edge
|
|
- n=3,688 with ev_edge < 0: ROI = -16.1%
|
|
- The model was systematically pricing below market, meaning every bet carried negative expected value
|
|
|
|
#### 3. OU25 Market Unprofitable in ALL Configurations
|
|
- n=1,563 bets, -17.1% ROI
|
|
- Even with ev>=5% + rel>=0.55: n=27, -36.9% ROI
|
|
- Grid search found NO profitable filter combination
|
|
|
|
#### 4. BTTS Market Marginal
|
|
- n=1,456 bets, -15.4% ROI
|
|
- Only profitable with ev>=5%: n=15, +12.9% (but tiny sample)
|
|
|
|
### Grid Search Results (Top Profitable Combos)
|
|
|
|
| Market | EV Min | Rel Min | V27 | n | Hit% | ROI |
|
|
|--------|--------|---------|-----|---|------|-----|
|
|
| MS | >=5% | >=0.55 | AGREE | 42 | 59.5% | **+10.4%** |
|
|
| MS | >=5% | >=0.55 | ANY | 52 | 59.6% | **+8.6%** |
|
|
| MS | >=3% | >=0.55 | ANY | 69 | 56.5% | **+4.0%** |
|
|
| BTTS | >=5% | >=0.70 | ANY | 15 | 60.0% | **+12.9%** |
|
|
| MS | >=5% | >=0.00 | ANY | 113 | 55.8% | **-0.7%** |
|
|
|
|
### Changes Applied (V29)
|
|
|
|
#### market_board.py
|
|
```python
|
|
# Tightened from: ev >= 0.008 OR conf >= 55.0
|
|
# To: ALL three must be true
|
|
is_value_sniper = ev_edge >= 0.05 and calibrated_conf >= 60.0 and odds_rel >= 0.55
|
|
```
|
|
|
|
#### betting_brain.py
|
|
1. **MIN_BET_SCORE**: 72.0 -> 62.0 (hard vetoes now do the filtering)
|
|
2. **MIN_WATCH_SCORE**: 62.0 -> 52.0
|
|
3. **MUTED_MARKETS**: `{"BTTS"}` -> `{"OU25", "DC", "OU35"}`
|
|
4. **MARKET_OPTIMAL_FILTERS**:
|
|
- MS: min_edge=0.03, min_reliability=0.55, require_v27_agree=False
|
|
- BTTS: min_edge=0.05, min_reliability=0.70 (strict envelope)
|
|
5. **Hard vetoes no longer bypassed by sniper**:
|
|
- `negative_ev_edge` (ev < 0)
|
|
- `ev_edge_too_high_trap` (ev >= 0.20)
|
|
- `market_muted_by_backtest`
|
|
- `low_reliability_league_hard_block` (rel < 0.30)
|
|
- Per-market envelope checks
|
|
|
|
### Expected Performance (Simulated on 7K backtest)
|
|
- **65 bets** out of 7,000 matches (0.9% selectivity)
|
|
- Hit rate: 56.9%
|
|
- **ROI: +6.8%** (from -15.6%)
|
|
- MS dominates: n=64, ROI=+8.0%
|
|
- Consistent: April +14.0%, May +4.9%
|
|
|
|
### Trade-off
|
|
The system becomes very selective (fewer bets per day) but each bet carries genuine positive expected value. Quality over quantity.
|