Как построить свою модель прогнозов в таблице
Цель и метрики: что именно прогнозируем
Начните с выбора исхода и горизонта. Для футбола чаще всего прогнозируют результат (П1, Х, П2), тоталы (больше/меньше 2,5) или форы. Горизонт — это «срок жизни» прогноза: до стартового свистка (прематч) или по ходу игры (лайв). Лайв даёт больше данных, но требует мгновенной реакции и устойчивой инфраструктуры. Если вы новичок, берите прематч и один рынок — например, тотал в футболе: это снижает шум и упрощает проверку гипотез.
Целевая переменная — то, что предсказывает модель. Для вероятностного подхода это p(событие) в диапазоне [0; 1]. Для бинарного решения — пороговая метка «ставить/не ставить». Метрики качества выбирайте под задачу. Brier и log-loss оценивают точность вероятностей: чем ниже, тем лучше. Brier интуитивен — это средний квадрат ошибки вероятностей. Log-loss сильнее штрафует за самоуверенные промахи. ROI и yield показывают финансовый итог на дистанции: ROI = (выплата − оборот) / оборот, yield = прибыль / сумма ставок. Калибровка отвечает на вопрос «совпадают ли ваши 60% с реальностью»: стройте reliability-диаграмму по децилям и проверяйте наклон.
Зафиксируйте «линейку» и правила учёта. Единицы времени — дата и время по часовому поясу события (например, Europe/Moscow), а не время приёма ставки. Валюта — рубли; храните суммы с двумя знаками, округляйте по правилам банка. Возвраты (коэффициент 1,00) включайте в оборот без прибыли; отмены — исключайте из выборки или помечайте как «void», чтобы не искажать метрики. Для тоталов при попадании в целое число (ровно 2 гола на ТБ 2) фиксируйте возврат, а для азиатских фор — частичный расчёт по долям (например, −0,75 = две ставки по −0,5 и −1).
| Метрика | Что показывает | Когда применять |
|---|---|---|
| Brier | Средний квадрат ошибки вероятностей | Сравнение моделей на одном рынке |
| Log-loss | Качество вероятностей с жёстким штрафом | Ранний отбор гипотез |
| ROI | Доходность к обороту | Финальная оценка стратегии |
| Yield | Доходность к сумме ставок | Сравнение при разных размерах |
| Калибровка | Совпадение прогноза и частоты | Диагностика систематических смещений |
Сбор и нормализация данных для таблицы
Основа любой модели — чистые данные. Собирайте их из нескольких независимых источников, чтобы снизить риск ошибок. Результаты и расписание берите у открытых API спортивных данных, метрики xG и прессинга — у статистических провайдеров, травмы — из официальных клубных сводок и лент новостей, погоду — из архивов метеослужб, коэффициенты — из истории линий. Для российского читателя важно сразу фиксировать UTC: «Матч в 19:30 по Москве» — это 16:30 UTC, иначе модель «поплывёт» при анализе времени суток и усталости. Единая схема таблицы экономит часы на очистке. Минимальный набор столбцов: match_id, date_utc, league_id, home_id, away_id, score, xg_home, xg_away, press_home, press_away, injuries_home, injuries_away, temp_c, odds_open, odds_close, margin_close. Счёт храните как «2:1», а метрики — числами с точкой. Коэффициенты берите и «открывающие», и «закрывающие»: разница покажет движение денег. Маржу считайте по котировкам на исходы 1X2.| Поле | Тип | Пример |
|---|---|---|
| match_id | строка | 2026-11-02-epl-ars-che |
| date_utc | дата-время | 2026-11-02 18:30:00 |
| xg_home | float | 1.74 |
| odds_close | float[3] | [1.85, 3.70, 4.10] |
Признаки и трансформации в таблице
Начинаем с признаков, которые легко собрать в таблицу. Форма — это очки или разница мячей за последние 5–8 матчей; не усредняйте слепо, отсекайте игры с автосоставом. H2H полезен, но только на отрезке 3–5 лет и при сопоставимых составах. Место в таблице берите с поправкой на сыгранные матчи, иначе аутсайдер с двумя играми в запасе выглядит «выше» на бумаге. Разница xG (xG for − xG against) за 8–12 туров лучше отражает качество, чем голы. Дни отдыха (rest days) и логистика (travel) — простые, но мощные: −1 день отдыха дома часто равен +0,15–0,25 xG разницы в моделях.
Взвешенные рейтинги вроде ELO или Power Rating стабилизируют шум. Настройте коэффициент затухания: чем дальше матч, тем меньше вес. Например, вес = decay^(число дней/30) при decay = 0,98. Вчерашняя игра почти полная, 90 дней назад — почти ноль. Так рейтинг «дышит», не залипая на старом результате.
Нормализуйте всё, что измеряется в разных шкалах. Z-score по лиге: (x − μ_league)/σ_league. Условный пример: ваши 1,6 xG за матч при средних 1,35 и σ=0,22 дают z ≈ 1,14 — это уже сильный сигнал. Используйте rolling-окна: 6 матчей для формы, 20 для xG, 30 для ELO — и пересчитывайте z внутри окна, чтобы ловить сдвиги темпа. Категории (дом/выезд, тип турнира) кодируйте через one-hot или effect coding; для «дома» часто достаточно одного бинарного признака, но добавьте interaction: rest_days * travel_km, xG_diff * home_away, ELO_diff * rest_disadvantage. Именно взаимодействия отличают «сырую» таблицу от модели, которая понимает контекст.
Базовая статистическая модель в таблице
Начнём с распределения Пуассона для xG. Если команда создала ожидаемых голов на 1,6 за матч, вероятность ровно k голов: P(k) = (1,6^k * e^(−1,6)) / k!. В таблице это тянется одной формулой по k от 0 до, скажем, 6. Вероятность «тотал больше 2,5» — это 1 − (P(0)+P(1)+P(2)). Для матча перемножаем независимые распределения хозяев и гостей, получая матрицу счёта. Из неё считаем вероятности исходов и тоталов. Условный пример: хозяева xG 1,4, гости 0,9 — вероятность 1:0 около 13%, 0:0 — около 12%.
Логистическая регрессия отвечает на вопрос «кто победит». Целевая переменная — 1/0/X, признаки — разности xG, xGA, форма, календарь. Вероятность победы: p = 1 / (1 + e^(−z)), где z — линейная комбинация признаков с коэффициентами. В таблицах без надстроек используйте численную оптимизацию (например, градиентный спуск в ячейках) или подключите UDF на Python/Office Script. Регуляризация L2 (Ridge) сдерживает раздувание коэффициентов, кросс‑валидация (5‑fold) помогает не переобучиться на шуме.
Контроль качества — половина модели. Мультиколлинеарность ловится по VIF: признак с VIF > 5–7 — кандидат на удаление или объединение (например, xG и xG/90). Значимость оценивайте по p‑value или, в таблице, по доверительным интервалам бутстрепа: если ноль внутри интервала — признак нестабилен. Проверяйте калибровку: стройте buckets по p и сравнивайте с реальной долей исходов; Brier score и log‑loss подскажут, не слишком ли вы уверены.
Учёт букмекерских коэффициентов и маржи
Любой коэффициент — это просто вероятность, вывернутая наизнанку. Чтобы вернуть её в понятный вид, делите единицу на котировку: 1 / 1.80 ≈ 55,6%. Но это «грязная» вероятность, в неё уже заложена комиссия конторы. Чтобы очистить данные, сложите такие доли для всех исходов матча — получится оверраунд, например 105%. Ваша задача — пропорционально сжать значения до 100%. Для двух исходов: 55,6% / 1,05 ≈ 52,9% и 46,3% / 1,05 ≈ 44,1%. Это и есть «честная» линия без маржи, с которой и нужно работать.
Теперь сопоставьте вашу модельную вероятность с «честной» линией. Если модель даёт 56% на исход, а fair-коэффициент соответствует 52,9%, вы нашли value. Разница в 3,1 процентных пункта — это и есть ваше математическое ожидание до учёта прогруза и дополнительной комиссии. В таблице заведите столбец edge = ваша_вероятность − fair_вероятность. Играйте только там, где edge стабильно положителен после бэктеста.
Ликвидность и движение линии — ваши стоп-сигналы. Прописывайте в таблице автоматические запреты, чтобы не ловить «токсичные» котировки. Это дисциплинирует и экономит банк.
- Ликвидность: если максимум на маркет ниже вашего типичного номинала в 5–10 раз — пропуск. На смолл-маркетах edge часто иллюзия.
- Ограничения: помечайте аккаунты и конторы, где режут до копеек; такие строки исключайте из алерта.
- Движение линии: стоп при «шипе» — если коэффициент упал более чем на 5–7% за час без новостей, это след умных денег. Не догоняйте.
Валидация, бэктест и устойчивость
Модель готова, но это лишь половина дела. Теперь проверим её на прочность. Первый рубеж — честный бэктест без заглядывания в будущее. Используйте walk-forward: обучите модель на данных до 31 мая 2025 года, сделайте прогноз на сезон 2025/26, затем сдвиньте окно и переобучитесь, включив этот сезон. Так вы имитируете реальную жизнь. Rolling origin делает то же самое серией коротких шагов. Главное — исключить leakage: не используйте в признаках итоговый счёт, статус «ТМ/ТБ пробит» или xG конкретного матча, иначе получите иллюзию точности.
Далее — стабильность. Прогнозы не должны сыпаться в низших лигах или во второй половине сезона. Разбейте данные на страты: РПЛ, Чемпионшип, матчи после 25-го тура, игры сборных. Если на страте «зима, выезд, -5°C» модель теряет 15% качества — это сигнал. Постройте reliability diagram: разбейте ваши вероятности на 10 бинов и сравните среднюю предсказанную вероятность с фактической частотой исхода. Линия должна лечь на диагональ. Отклонение на 5–7% в верхнем бине (80–100%) — частая болезнь: модель слишком уверена.
Стресс-тесты: суровая реальность
Бумажная доходность тает от издержек. Посчитайте всё: комиссия на ввод/вывод, налог, маржа букмекера, которую вы уже «съели» при поиске value, и ваше проскальзывание. Условный пример: ROI +4% на бумаге, комиссия 1%, проскальзывание линии ещё 1,5%, налог 13% с прибыли — остаётся около 1,3%. Если банкролл мал и вы ставите 1–2% на ставку, доля фиксированных издержек (например, 500 ₽ в месяц за сервис данных) способна обнулить результат.
Проведите variance-анализ: смоделируйте 1000 случайных серий по вашему плану ставок. Оцените вероятность просадки в 30% и 50%. Часто выясняется, что «плюсовой» алгоритм даёт 40% шансов увидеть минус год к году. Решение — дробить ставку, снижать плечо и жёстко резать долю при росте дисперсии. Наконец, проверьте устойчивость к ограничениям: что будет, если вам порежут лимиты до 1000 ₽ или закроют рынок в перерыве? Если стратегия держится только на позднем голе в лайве — у вас хрупкая конструкция.
Банкролл-менеджмент и размер ставки
Банкролл — это рабочий капитал, который вы готовы потерять без ущерба для жизни. Первое правило: отделите эти деньги и зафиксируйте стартовую сумму. Размер ставки — производная от преимущества (EV) и вашей уверенности, а не от желания «отыграться».
Фикс-фракция — самый простой старт: берёте 0,5–2% от банка на каждую сделку. На банк 100 000 ₽ это 500–2000 ₽. Плюс — дисциплина и предсказуемая просадка. Минус — игнорирует силу сигнала: вы ставите одинаково и на EV 2%, и на EV 10%. Келли оптимизирует рост: доля = (bp − q)/b, где b — чистый коэффициент (кэф − 1), p — ваша вероятность, q = 1 − p. Условный пример: кэф 2,20 (b=1,20), p=0,50 → (1,20·0,50−0,50)/1,20 ≈ 0,083, то есть 8,3% банка. Полный Келли волатилен; на практике режьте до 1/4–1/2 Келли, чтобы сгладить дисперсию. Анти-Келли — сознательное занижение доли при туманных вводных: если модель «шумит», режьте ставку вдвое от вашей обычной фракции, пока не накопите подтверждения.
Жёстко ограничьте риск по внешним правилам. Лимит на лигу: не более 10–15% банка в день на один чемпионат — так один «чёрный лебедь» не срежет капитал. Лимит на событие: один исход — максимум 2% (лучше 0,5–1%). Максимальная просадка: поставьте стоп на уровне 20–25% от старта — перерыв и аудит модели. Пауза после серии минусов: −3 по банкроллу или 5 проигрышей подряд — стоп на сутки; −6 или 8 подряд — стоп на 72 часа и перепроверка данных, признаков и калибровки вероятностей.
Журнал сделок — ваш главный инструмент. Ведите таблицу со столбцами: дата, лига, матч, ставка (₽), коэффициент, ваша p (вероятность), EV (%), результат (выигр/проигр/возврат), pnl сделки, причина входа, причина пропуска похожих игр, заметка о качестве данных. Раз в неделю считайте: средний EV, yield, стандартное отклонение ставок, долю «плохих входов» (например, EV
Типичная ошибка — «догнать» повышенным размером. Не увеличивайте долю после проигрышей; увеличивайте только после подтверждённого роста EV на валидации. Любые изменения схемы ставок сначала прогоняйте на бумаге неделю, затем переходите на микро-доли.
Выводы
Начинайте с простого: регрессия на xG и rolling-метриках — это ваш «нулевой километр». Возьмите ожидаемые голы за 5–8 матчей, добавьте темп ударов и разницу xGA, получите базовый прогноз. Когда база стабильно бьёт линию по калибровке, усложняйте: вводите составные факторы (прессинг, ротации), взаимодействия признаков и градиентный бустинг. Но помните: усложнение ради R² убивает переносимость на будущие сезоны.
Жёстко фиксируйте утечки будущего: никаких послематчевых переменных, аккуратно с заменами и xG-корректировками, которые появляются с задержкой. Делите выборку по времени, держите «тишину» на турнирах, используйте walk-forward. Если после учёта маржи и проскальзывания ваш перевес исчезает — это не рынок «просел», это модель переоценила себя.
Автоматизируйте сбор, обновляйте модель регулярно и фиксируйте версии. Пайплайн должен быть воспроизводимым: ETL по расписанию, контроль качества (пропуски, выбросы), версионирование датасетов и кода, журнал признаков. Сравнивайте релизы не только по точности, но и по устойчивости к шуму и транзакционным издержкам.
- Старт: xG за 6 матчей + темп ударов + xGA; метрики — RMSE и Brier.
- Контроль: утечки, walk-forward, комиссия и кэп просадки.
- Масштаб: добавляйте факторы по одному; откатывайте, если эффект не повторяется два цикла.
- Операционно: авто-ETL, unit-тесты признаков, теги версий, «заморозка» перед турами.
Ваша цель — не угадать сезон, а стабильно находить небольшие, воспроизводимые преимущества и не отдавать их комиссиям. Простая, дисциплинированная и регулярно обновляемая модель почти всегда лучше «шедевра», который невозможно поддерживать.
Частые вопросы
Как построить модель прогнозов в Excel или Google Таблицах без программирования?
Начните с сбора исторических данных (статистика матчей, результаты) в одной таблице, где каждая строка — это событие. Определите зависимую переменную (например, 1 за победу хозяев, 0 за всё остальное) и независимые (xG, разница рейтингов, форма), затем используйте инструмент «Регрессия» в пакете анализа Excel или функции ЛИНЕЙН (LINEST) и ЛГРФПРИБЛ (LOGEST) для построения статистической модели. Для более сложных нелинейных связей можно вручную рассчитать логистическую регрессию, используя функцию ЛИНЕЙН с преобразованной зависимой переменной.
Какие метрики использовать для оценки качества модели ставок: Brier, log-loss или ROI?
Для оценки именно точности вероятностей вашей модели используйте Brier score или log-loss — чем они ниже, тем лучше модель предсказывает шансы. ROI (Return on Investment) — это метрика финансовой эффективности, которая зависит не только от модели, но и от банкролл-менеджмента и выбранных коэффициентов, поэтому она вторична при тестировании самой прогностической части. Сначала минимизируйте log-loss на исторических данных, а затем проверяйте, даёт ли это положительный ROI при симуляции ставок.
Как учесть маржу букмекера и найти value в коэффициентах?
Маржа (или «вижн») закладывается в коэффициенты, занижая истинные вероятности; чтобы её найти, сложите обратные величины всех коэффициентов в рынке (1/K1 + 1/K2 + ...) и вычтите 1. Чтобы найти value, переведите коэффициент букмекера в вероятность (1/K), вычтите из неё долю маржи пропорционально вашей оценке, и если ваша модельная вероятность выше полученной «честной» вероятности букмекера — ставка имеет перевес. Условный пример: при коэффициенте 2.0 (50%) и марже рынка 5% «честная» вероятность будет около 47.5%, и если ваша модель даёт 51%, это value.
Как сделать бэктест модели без заглядывания в будущее (walk-forward)?
Разделите ваши исторические данные на последовательные периоды: обучите модель на данных за 2024 год, сохраните её параметры (коэффициенты), а затем «примените» её для генерации прогнозов на первый квартал 2025 года без какой-либо перенастройки. Запишите результаты этого квартала, затем добавьте его данные к обучающей выборке, переобучите модель и протестируйте на втором квартале 2025 года, повторяя цикл. Этот метод, называемый walk-forward анализом, имитирует реальную жизнь и предотвращает переобучение под конкретные прошлые события.
Какой банкролл-менеджмент выбрать: фикс-фракция или Келли, как считать долю ставки?
Фикс-фракция (например, 1% от банка на ставку) проста и защищает от быстрой потери всего капитала, но не оптимизирует рост; доля ставки всегда постоянна в процентах. Критерий Келли агрессивнее и рассчитывает долю по формуле f = (bp - q) / b, где b — чистый коэффициент (K-1), p — ваша вероятность, q — вероятность проигрыша (1-p); условный пример: при p=55%, K=2.0 доля будет (1*0.55 - 0.45)/1 = 10%. На практике из-за риска ошибки в оценке вероятности используют дробный Келли (например, ставят половину или четверть от рассчитанной доли), чтобы сгладить дисперсию.