RAW ( НЕОБРАБОТЕНИ ДАННИ) от бактестинг и калибрации на оркестъра AI модели

basketbol.eu

RAW ( НЕОБРАБОТЕНИ ДАННИ) от бактестинг и калибрации на оркестъра AI модели

CHECKPOINT — backtest_v2.py (2026-07-26 18:55 UTC)

Какво направихме

Рекреирахме tools/backtest_v2.py (беше изгубен от технически проблем). Скриптът чете 912 мача от journalist_lab/data/calibrate.db и сравнява v1 (89% ELO + 11% MC) vs v2 (80% ELO + 20% MC).

Ключова корекция: v1 и v2 вече използват РАЗЛИЧНИ Монте Карло симулации, а не само различен бленд (предишната версия беше грешна — и двете ползваха една и съща MC v3).


Архитектура — двата MC модела

Характеристика v1 MC (оригинален) v2 MC (v3)
Разпределение Normal (Gaussian) Student-t (df=4)
Средни стойности Сезонни (от API, всички мачове) Rolling (само предишни мачове)
Opponent adjustment ❌ НЕ — само собствен scoring avg (off + opp_def) / 2
B2B penalty ❌ НЕ ✅ -3.5 pts ако е играл ≤2 дни
STD_DEV / масштаб Фиксиран STD_DEV = 11 Per-league stddev (min 8.0)
Clamping ❌ НЕ ✅ [45, 140]
Брой симулации 10 000 10 000

v1 MC детайли

home_sims = np.random.normal(home_off, 11, 10000)   # само scoring avg на домакина
away_sims = np.random.normal(away_off, 11, 10000)   # само scoring avg на госта
prob = mean(home_sims > away_sims)

Съответства на оригиналния monte_carlo.py от beton_agent/tools/. Сезонните средни идват от ВСИЧКИ 912 мача (симулира API behavior — съдържа lookahead bias, но така работи production v1).

v2 MC (v3) детайли

home_exp = (home_off + away_def) / 2                # opponent-adjusted
away_exp = (away_off + home_def) / 2
if is_b2b: home_exp -= 3.5                          # fatigue penalty
home_sims = np.random.standard_t(4, 10000) * league_std + home_exp
away_sims = np.random.standard_t(4, 10000) * league_std + away_exp
home_sims = clip(home_sims, 45, 140)
prob = mean(home_sims > away_sims)

Смесване с ELO

  • v1: 0.89 * elo_prob + 0.11 * mc_v1_prob
  • v2: 0.80 * elo_prob + 0.20 * mc_v3_prob

Резултати — 912 мача (32 лиги)

Секция 1: Обща точност и ROI

Модел Познати Точност ROI
v1 (89/11) 686/912 75.2% +18.8%
v2 (80/20) 678/912 74.3% +16.9%
Δ (v2 − v1) −0.9% −2.0%

Защо v1 печели в backtest? Защото ползва сезонни средни от ВСИЧКИ мачове (lookahead bias). В production това не е проблем — API-то така или иначе връща пълно-сезонни stats. v2 е по-"честен" (rolling, без lookahead), но плаща цената в backtest метрики.

Секция 2: Съгласие между моделите

Категория Брой %
Двата избират ДОМАКИН 727 79.7%
Двата избират ГОСТ 163 17.9%
РАЗМИНАВАТ СЕ 22 2.4%
→ v2 ДОМАКИН, v1 ГОСТ 14
→ v1 ДОМАКИН, v2 ГОСТ 8
Домакин печели при разминаване 11/22 50.0%

Моделите са изключително съгласувани (97.6%). При разминаванията няма ясен победител (50/50) — малката извадка (22 мача) не позволява статистически извод.

Секция 3: Калибрация

Група N v1 очакван v1 реален v2 очакван v2 реален
30–40% 52 34.5% 7.7% 34.5% 7.7%
40–45% 38 42.0% 18.4% 42.0% 13.3%
45–50% 48 47.0% 29.2% 47.0% 32.7%
50–55% 59 52.0% 42.4% 52.0% 50.0%
55–60% 89 57.0% 55.1% 57.0% 53.3%
60–70% 239 64.5% 67.4% 64.5% 72.0%
70%+ 348 84.5% 86.8% 84.5% 86.1%

Ключово: И двата модела силно ПОДЦЕНЯВАТ домакините в ниските диапазони (30-50% → реален win rate е драстично по-нисък) и леко НАДЦЕНЯВАТ във високите (60-70%+ → реален win rate е по-висок от очаквания). Това е добре — означава, че когато моделът каже 65%+, реалността е още по-добра (67-72%).

Секция 4: Среден коефициент

v1 (89/11) v2 (80/20)
Среден коеф (всички залози) 1.625 1.627
Среден коеф (ПОЗНАТИ) 1.580 1.572
Среден коеф (ГРЕШНИ) 1.761 1.786
Медиана 1.471 1.471
Домакин (брой/ср.коеф) 735 / 1.635 741 / 1.642
Гост (брой/ср.коеф) 177 / 1.583 171 / 1.563

★ Анализ: Филтър 1.60–2.00

Филтрирахме залозите само в диапазон 1.60–2.00 (no-vig коефициенти).

Обобщение

v1 v2
Залога 197 199
Точност 72.1% 70.9%
ROI +29.9% +28.0%
Среден коеф 1.794 1.797
% от всички залози 21.6% 21.8%

ROI скача от ~18% на ~29% — филтърът отрязва ниските коефициенти (1.02–1.30) които носят малка възвръщаемост и високите (3.50+) които са трудни за прогнозиране.

Разбивка по под-диапазони (v2)

Диапазон Залога Точност ROI Ср. коеф
1.60–1.70 49 65.3% +7.2% 1.640
1.70–1.80 50 68.0% +19.2% 1.751
1.80–1.90 50 70.0% +29.5% 1.849
1.90–2.00 50 80.0% +55.5% 1.944

★★ 1.80–2.00 (100 залога) — ELITE зона

  • Точност: 75.0% (75/100)
  • ROI: +42.5%
  • Среден коеф: 1.897
  • % от всички залози: 11.0%

Това е статистически значим edge: моделът намира фаворити, които пазарът подценява (~1.90 коеф = ~52% implied probability), а реалният win rate е 75-80%.


Файлове

Файл Описание
tools/backtest_v2.py Основен скрипт (23.7 KB)
tools/monte_carlo.py Оригинален MC v1 (normal, STD_DEV=11)
journalist_lab/data/calibrate.db 912 мача с ELO+no-vig коефициенти
docs/CHECKPOINT_backtest_v2_2026-07-26.md Този файл

Следващи стъпки

  • [ ] Интегриране на 1.80–2.00 филтър като отделен сигнал в основната стратегия
  • [ ] Backtest с out-of-sample данни (следващ сезон или крос-валидация)
  • [ ] Анализ на B2B penalty ефекта — колко точно допринася?
  • [ ] Оптимизация на теглото ELO/MC за различните коеф диапазони
  • [ ] Тест с различни df стойности за Student-t (3, 5, 10)
Facebook X Telegram
basketbol.eu

Олимпиакос – Реал Мадрид: първият трофей на сезона и какво всъщност ни казва той

basketbol.eu

Хибридният модел в действие: Прометеас Патра срещу Виена (Анализ от първо лице)

САМО 69 ПОЗИЦИИ

Искаш ли тези сигнали в inbox-а си?

€39 lifetime за първите 30 места

Запази →