Как проверять прогнозы на истории

Обновлено: 26.10.2026 · чтение ~12 мин

Сбор данных и подготовка выборки

Начни с чётких рамок: рынок, период и тип коэффициентов. Для футбола бери топ-лиги за 3 сезона, для тенниса — только турниры ATP/WTA 250 и выше. Ключевое правило — использовать коэффициенты закрытия (closing odds) без заглядывания в будущее: фиксируй котировку ровно в момент ставки, а не после гола или удаления. Если твоя модель выдала прогноз в 18:42 по Москве, бери линию на 18:42, а не итоговую за минуту до свистка. Дальше — жёсткая фильтрация матчей. Отсекай всё, что искажает статистику: товарищеские игры, резервные составы и кубковые встречи с неясной мотивацией. Обязательно ставь порог ликвидности: например, не менее 50 000 ₽ в паре на бирже или наличие коэффициента у пяти и более контор. Перенесённые матчи удаляй или переноси их метки времени, иначе нарушится хронология. Синхронизация времени — частая ловушка. Сервер логов может писать по UTC, букмекер — по Лондону, а ты — по Москве. Приводи всё к одному поясу, например UTC+3, и сохраняй метку с точностью до секунды. Фиксация котировки до ставки означает: записывай цену в момент генерации сигнала. Если ты ставишь в 19:00:15, а к 19:00:30 коэффициент упал — в базу идёт 19:00:15.
ОшибкаПоследствие
Смешение котировокЗавышенная проходимость на бумаге
Игнор ликвидностиНереальная сумма ставки в тесте
Условный пример: модель нашла ставку на 19:00. В лог пишем: «лига, время 19:00:00 MSK, кэф 1.87, ликвидность 80к». Если матч перенесли на 21:00 — строку в выборке обновляем, чтобы сохранить честную дистанцию.

Формализация прогноза и сигнала

Прогноз — это не «думаю, победит Спартак», а жёсткий набор условий. Для входа в рынок модель должна выдать вероятность не ниже порога, например 58% на исход. Коэффициент букмекера при этом обязан попадать в коридор: для 58% минимальный кэф — 1/0,58 ≈ 1,72, а максимальный — 1,90, чтобы запас на маржу и погрешность оставался. Если модель даёт 62%, диапазон шире: от 1,61 до 2,00. Ниже порога или вне коридора — пропуск без обсуждений. Банкролл дробим единообразно. Самый надёжный старт — флэт 1% от стартового банка, без догона. Когда вы на серии из 500+ ставок и ROI стабилен (например, 3–5% на дистанции), подключайте мягкое масштабирование: 1,25% при просадке не глубже 10% от пика, 1,5% при уверенном плюсе. Резко повышать долю после пары побед — верный путь к сливу. Каждая сделка — строка в журнале. Фиксируйте: доматч или инплей, источник данных (API букмекера, статистика лиги), версия модели (v3.2), причина входа (переоценка тотала из-за травм) и метка риска (низкая/высокая ликвидность рынка). Без этих пометок вы не поймёте, где именно течёт вода: в данных, в пороге или в управлении банком.
Вероятность моделиМин. кэфМакс. кэф
55%1,821,95
58%1,721,90
62%1,612,00
Условный пример: модель даёт 60% на ТБ, кэф 1,85, банк 100 000 ₽. Ставка 1% — 1000 ₽. Сигнал занесён с пометкой «доматч, v3.2, API X». Это воспроизводимо и проверяемо.

Механика симуляции без заглядывания вперёд

Главный принцип честной симуляции — запрет на заглядывание в будущее. Разделите историю на блоки: обучайте модель на «окне» N месяцев, проверяйте на следующем месяце, затем сдвигайте оба окна вперёд без наложения. Это и есть walk‑forward. Альтернатива — rolling window: окно фиксированной длины скользит по календарю шагами, каждый раз переобучаясь и валидируясь на строго следующем отрезке. Перекрытие периодов — грубейшая ошибка: оно «кормит» алгоритм данными из будущего и завышает результат. Политика коэффициента должна быть жёсткой. Берите цену, которая была доступна до матча, а не по факту старта. Если симулируете вход за 2 часа до начала — используйте максимум котировки в этом окне; если за 10 минут — берите цену на 9-й минуте десятиминутки. Отмены и возвраты: рассчитывайте исход по правилам букмекера (например, теннисный отказ — возврат или расчёт по кэшу). Сдвиги линии учитывайте через проскальзывание: если ваш сигнал 2,10, а реальный максимум 2,06 — считайте по 2,06. Для агрессивных входов закладывайте 1–3% «трения» на цену. Комиссии и маржа — то, что медленно «съедает» кривую. На каждую ставку накладывайте издержки: налог или комиссия на ввод/вывод, маржа в линии (отрицательное EV среднего рынка). Лимиты моделируйте честно: если средний максимум на ваш исход — 3000 ₽, не ставьте 10 000 ₽ «на бумаге». Доступность котировки тоже лимит: часть входов будет закрыта из‑за лимитов или снятия маркета — такие попытки помечайте как пропущенные, а не как минусовые.
ПараметрКак моделировать
Цена входаМаксимум в окне до старта, минус проскальзывание
Отмены/возвратыПравила БК по виду спорта и рынку
ЛимитыКап по реальному максимуму маркета
ИздержкиКомиссии и налог — минус от чистой выплаты

Расчёт метрик эффективности

Базовые метрики — это язык, на котором вы спорите с результатами. ROI показывает возврат к банку: (чистая прибыль / сумма всех ставок) × 100%. YIELD — возврат к оборотам: (чистая прибыль / сумма номиналов) × 100%. CLV (closing line value) — сравнение вашего коэффициента с закрывающим: если стабильно берёте выше закрытия, вы бьёте рынок. На дистанции 500+ ставок YIELD 3–5% — уже крепкий результат; CLV > 0 подтверждает, что это не везение.

Дисперсия — главный обманщик на короткой выборке. Чтобы отличить навык от шума, ориентируйтесь на 500–1000 ставок одной размерности. Стройте доверительный интервал для YIELD: YIELD ± 1,96 × σ/√n, где σ — стандартное отклонение доходностей. Если ноль не попадает в интервал, сигнал статистически значим. Условный пример: 800 ставок, средний ROC 0,8%, σ=5,5% → интервал примерно 0,2–1,4%.

Просадки важнее «плюса на бумаге». Drawdown — максимальная потеря от пика до дна в банке. Смотрите не только глубину, но и длительность. Коэффициент Шарпа: (средний ROC − безрисковая ставка) / σ; Сортино штрафует только за «плохую» волатильность (падения). Медиана ROC защищает от перекоса из-за пары удачных «прессов». Для каппинга разумная цель — Sharpe 0,3–0,6 на выборке 800+; медиана ROC должна быть положительной и близкой к среднему.

МетрикаЧто показываетОриентир на 800+ ставок
YIELDДоход на оборот3–5% — крепко
CLVБьёте ли закрытиеСистематически выше — плюсовой сигнал
Max DDХудшая просадкаДо 20–25% — рабочий риск
SharpeДоход/риск0,3–0,6 — реалистично

Проверка на устойчивость и смещения

Разбейте историю на срезы, чтобы найти уязвимости. Сравните сегменты: футбол РПЛ и еврокубки, теннис ATP и ITF; коэффициенты до 1.80, 1.80–2.20 и выше; время до старта — прематч за сутки и за 2 часа; источники — линия открытия и закрытия. Если плюс только на высоких кэфах или в одном турнире — это не система, а локальная аномалия. Считайте ROI и просадку отдельно по каждому «ящику». Искажения ломают честную оценку. Backfill — это когда старые прогнозы «дорисовали» под результат: исключайте всё, что появилось после стартового свистка. Селективная публикация — показывают только выигрыши: фиксируйте каждую идею в журнале до матча. Survivorship bias — анализ только выживших турниров или команд: храните реестр лиг и исключённых событий, чтобы не терять «павших». Инфоблок: источники и смещения
    • Backfill: прогноз после гола — в утиль.
    • Селективность: обязателен журнал всех сигналов.
    • Survivorship: учитывайте закрытые лиги и снявшиеся команды.
Стресс‑тесты показывают запас прочности. Симулируйте ухудшение условий: урезайте коэффициенты на 2–5% от среднего по выборке и добавляйте маржу. Условный пример: средний кэф 2.00, ROI +4%. Срез 3% превращает 2.00 в 1.94; при 50% винрейте прибыль падает почти к нулю. Если система «умирает» при минус 3% — она держится на микроошибках линии, а не на преимуществе.
СценарийСредний кэфВинрейтROI
База2.0052%+4.0%
Кэф −3%1.9452%~0%
Маржа +2%1.9652%~+1%
Итог: устойчивая модель сохраняет небольшой плюс в «испорченных» версиях и плюсит в большинстве независимых срезов без исключений и дорисовок.

Журнал и воспроизводимость теста

Любой тест без журнала — это байка у подъезда. Заведи таблицу, где каждая строка — одна симулированная сделка. Минимум полей: дата события, лига и тур, рынок (П1/тотал/фора), коэффициент, размер ставки в долях банка, исход (выигрыш/проигрыш/возврат), комментарий (почему сигнал «щёлкнул», были ли дисквалификации, погода, поздние новости). Без комментария ты не вспомнишь логику через месяц.

Фиксируй «окружение» теста. Присвой версии датасета и кода номера (v1.2_data, v0.9_model), сохрани seed генератора случайных чисел и все гиперпараметры. Если кто-то повторит запуск с теми же входами, он должен получить ту же последовательность сделок и те же метрики до копейки. Условный пример: seed=20261026, window=90 дней, комиссия=0,03, фильтр по рынку=тотал.

    • Seed и параметры — в отдельном файле config.yaml.
    • Хеш датасета (sha256) — в логе теста.
    • Ветка кода и коммит — рядом с результатами.

Ревью коллегой — не формальность. Отдай партнёру только лог, код и config без твоих выводов. Пусть он проверит по чек‑листу и подпишет протокол.

    • Нет заглядывания вперёд: дата входа всегда строго до времени фиксации линии.
    • Коэффициенты и лимиты соответствуют историческим окнам; нет «подтянутых» к закрытию.
    • Банк и доли совпадают с заявленными; нет скрытых догонов.
    • Дубли и отмены (push) учтены верно; возвраты не считаются выигрышем.
    • Метрики пересчитаны независимо: ROI, yield, дисперсия сходятся до 1e-6.

Выводы

Решение о запуске принимайте по двум осям: метрики и время. Ориентир — винрейт и ROI на уровне не ниже 55% и 3–5% при коэффициенте около 1.90–2.00, просадка не выше 15–20% и минимум 500–700 симулированных ставок на пилоте. Длительность — 6–8 недель реального времени, чтобы захватить разные рынки и дни недели. Если выборка меньше, вы ловите шум, а не сигнал. План мониторинга держите коротким и регулярным. Раз в неделю фиксируйте CLV — разницу вашей цены закрытия и входа: стабильный плюс к CLV подтверждает качество линии. Смотрите долю ставок, взятых лучше закрытия, и средний «edge» в процентах. Проводите короткое ревью: объём, ROI по рынкам, просадка, частота ставок, пропуски сигналов. Если CLV уходит в минус две недели подряд — сигнал деградирует.
    • Еженедельный срез: объём, ROI, CLV, просадка, винрейт по диапазонам коэффициентов.
    • Контроль расписания: нет ли перекоса в «удобные» дни и турниры.
    • Проверка лимитов: выдерживаете ли заявленные суммы без сильного сдвига цены.
Остановка — по триггерам, не по ощущениям. Жёсткая просадка: минус 25% от банкролла пилота или серия из 15–20 ставок без единого плюса к CLV. Деградация сигнала: CLV отрицательный 3 недели, ROI ниже 0 при 300+ ставках, или доля «лучше закрытия» падает ниже 45–50%. Третья причина — структурный сдвиг: изменение маржи, лимитов или расписания, при котором ваш «edge» перестаёт помещаться в допуски.

Частые вопросы

1. Сколько ставок нужно для проверки прогноза на истории

Для статистической значимости требуется выборка от 500 до 1000 независимых ставок, чтобы сгладить влияние дисперсии. На меньших выборках (например, 100 ставок) результат часто определяется случайностью, а не качеством модели. Если вы используете низкодоходную стратегию, ориентируйтесь на верхнюю границу в 1000+ ставок для уверенного вывода.

2. Как учитывать маржу букмекера при бэктестинге

Маржа — это комиссия, заложенная в коэффициенты, и её нужно вычитать из вашей вероятности события перед сравнением. Для расчёта переведите коэффициент в вероятность (1/коэффициент), сложите вероятности всех исходов и вычтите 100% — это и есть маржа. В симуляции всегда используйте «справедливый» коэффициент без маржи, чтобы понять, есть ли у вашего прогноза реальное математическое преимущество.

3. Что такое CLV и как он доказывает качество прогноза

CLV (Closing Line Value) — это ценность линии закрытия, то есть разница между коэффициентом, по которому вы взяли прогноз, и финальным коэффициентом перед началом события. Если ваш средний коэффициент стабильно выше линии закрытия (например, вы берете 2.10, а закрытие 1.95), это доказывает, что ваш прогноз точнее рынка. Положительный CLV на дистанции в 500+ ставок является главным индикатором того, что стратегия будет прибыльной после учёта маржи.

4. Как делать walk‑forward тест без заглядывания в будущее

Разделите исторические данные на обучающую выборку (in-sample) и тестовую (out-of-sample), например, 2 года обучения и 6 месяцев теста. Настройте параметры модели только на первых двух годах, затем проверьте её на следующих шести месяцах, не меняя параметры «задним числом». Сдвигайте окно: после теста добавьте эти 6 месяцев к обучающим данным и снова протестируйте следующие полгода, повторяя цикл.

5. Какой drawdown считать допустимым для стратегии

Допустимый максимальный дроудаун (просадка) зависит от вашего банка и психологической устойчивости, но безопасным считается уровень в 15–25% от пика. Если стратегия показывает исторический дроудаун в 40%, будьте готовы к тому, что в реальности он может достичь 50–60% из-за неучтённых факторов. Размер ставки (флэт или процент от банка) должен рассчитываться так, чтобы даже при удвоении исторического дроудаунa вы не потеряли более 20–30% капитала.