Кейсы 6 мин чтения

Бот спортивной аналитики: как я проверил модель и признал, что рынок точнее

Бэктест на 4150 матчах дал 51,3% попаданий против 47,3% у правила «всегда хозяева», но линия контор угадывает 53,8% против 51,5% у модели. Я признал, что рынок точнее, и перестроил продукт на поиск лучшей цены.

кейсчат-ботыаналитика данныхPython

Коротко (TL;DR)

  • Заказчик хотел бота, который считает вероятности исходов матчей, ищет цену лучше линии, раскладывает бюджет по экспрессу на 15 матчей и ведёт банк с журналом.
  • Я собрал модель на Python без сторонних библиотек, на открытых данных по футболу, НХЛ и КХЛ, и проверил её бэктестом по времени: обучение только на прошлом, проверка только на будущем.
  • На 4150 матчах модель угадала 51,3% исходов против 47,3% у стратегии «всегда хозяева». Но на 9911 матчах линия контор угадывает 53,8%, модель — 51,5%. Рынок точнее, и продукт я перестроил с «угадывания» на поиск лучшей цены.
  • Бэктест — это история, а не гарантия. Ставки остаются риском, и в этом кейсе речь о модели и о честной проверке её точности, а не о способе заработать.

Этот кейс не про ставки. Он про то, что происходит, когда статистическую модель честно проверяют на истории, а результат оказывается не таким, как хотелось. Мне кажется, это самая полезная часть проекта, и именно поэтому я её не прячу.

Задача

Заказчик пришёл с понятным списком. Бот должен считать вероятности исходов матчей, искать цену лучше линии, раскладывать бюджет по экспрессу на 15 матчей, вести банк и журнал всех решений. То есть не просто присылать прогнозы, а быть рабочим инструментом с учётом денег и истории.

За этим списком стоял вопрос, который заказчик вслух не задавал: а модель вообще умеет что-то, чего не умеет рынок? От ответа зависело, каким получится продукт. Поэтому с него я и начал, а интерфейс оставил на потом.

Что я сделал

Модель написал на Python, только на стандартной библиотеке языка, без сторонних пакетов. Это сознательное решение: такой код проще проверить глазами, его нечем сломать при обновлении зависимостей, и он запускается на любом сервере без подготовки.

Данные взял из открытых источников по трём направлениям: футбол, НХЛ и КХЛ. Каждый источник пришлось приводить к одному виду, чтобы модель видела матчи одинаково, откуда бы они ни пришли.

Дальше собрал вокруг модели то, о чём просил заказчик:

  • сравнение с коэффициентами закрытия, то есть с последней ценой перед началом матча;
  • консенсус нескольких контор, чтобы видеть не одну линию, а общую картину рынка;
  • режим «уверенные прогнозы», где остаются только случаи с высокой уверенностью модели;
  • раскладку бюджета по экспрессу на 15 матчей, учёт банка и журнал.

За ботом стоит живой оператор с консолью ответов: вопросы, которые бот сам не закрывает, уходят человеку, и он отвечает из одного окна. Вход в бота — по кодовому слову, чтобы доступ был только у тех, кому его дали.

Как я проверял модель

Главная ловушка любой прогнозной модели — подглядывание в будущее. Если при обучении модель хоть краем видит матчи, которые потом же и предсказывает, цифры получаются красивыми и ничего не значат. Поэтому бэктест я сделал строго по времени: модель учится только на прошлом и проверяется только на матчах, которые идут после.

Первая проверка — на 4150 матчах. Модель угадала 51,3% исходов. Сама по себе цифра мало что говорит, поэтому я сравнил её с простой базой: стратегия «всегда ставить на хозяев» даёт 47,3%. Модель лучше наивного правила на четыре пункта. Это хороший знак, но ещё не ответ на главный вопрос.

Вторая проверка — сравнение с рынком на 9911 матчах. Здесь линия контор угадывает 53,8%, а модель — 51,5%. То есть рынок точнее модели. Не на погрешность, а заметно.

Почему я перестроил продукт

Можно было сделать вид, что второй цифры нет. Показать 51,3% против 47,3%, красиво подать и запустить бота, который «угадывает». Но это был бы продукт, построенный на неправде: если рынок точнее, то пользоваться моделью как угадывателем — значит пользоваться худшим инструментом при наличии лучшего.

Поэтому я перестроил логику. Модель больше не пытается переугадать рынок. Её задача — искать места, где цена отличается от консенсуса в лучшую сторону. На истории такой подход дал +7% ROI. Отдельно проверил режим уверенных прогнозов: одинарные исходы при уверенности модели от 60% на 594 случаях дали 74,6% попаданий.

И здесь важно сказать прямо: всё это цифры на прошлых матчах. Бэктест — это история, а не гарантия. Прошлое распределение исходов не обязано повториться, рынок меняется, а ставки остаются риском потерять деньги. Этот текст — не совет делать ставки и не обещание выигрыша.

Что было сложно

Техническая сложность — данные. Открытые источники по разным видам спорта отдают матчи в разном виде, с разными названиями команд и разной полнотой. Прежде чем модель что-то считает, эти данные нужно собрать в одну таблицу без дублей и дыр.

Методическая сложность — не обмануть себя. Бэктест по времени медленнее и скучнее случайного разбиения, и цифры в нём всегда хуже. Но только он показывает, как модель вела бы себя в реальности, где будущего никто не знает.

Самая сложная часть — не техническая. Признать, что рынок точнее модели, и сказать об этом заказчику до запуска, а не после. Это меняет продукт, меняет подачу и убирает самый продающий аргумент. Зато оставляет честный.

Когда бот увидел первый живой пользователь, он нашёл 3 ошибки. Все три я закрыл в тот же час. Это обычная история: сколько ни проверяй сам, человек со стороны нажимает не туда, куда ты ожидал.

Что получилось

ПроверкаВыборкаРезультат
Модель против «всегда хозяева»4150 матчей51,3% против 47,3%
Модель против линии контор9911 матчей51,5% против 53,8%
Поиск лучшей ценыистория+7% ROI
Одинарные при уверенности от 60%594 случая74,6% попаданий

Все строки таблицы — результаты на прошлых матчах. Они описывают, как модель вела себя на истории, и не обещают, как она поведёт себя дальше.

В итоге у заказчика бот с моделью на открытых данных, консенсусом контор, режимом уверенных прогнозов, банком, журналом и живым оператором за ним. А главное — понимание, что именно этот инструмент умеет, а что нет.

Что дальше

Дальше модель проверяется уже не на истории, а на живых матчах, и журнал это фиксирует. Если живые цифры разойдутся с бэктестом, это будет видно по журналу, а не по ощущениям. Именно для этого журнал и нужен: чтобы решения принимались по записям.

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

Модель угадывает лучше рынка?

Нет. На 9911 матчах линия контор угадывает 53,8%, модель — 51,5%. Поэтому модель используется не как угадыватель, а как инструмент поиска цены, которая отличается от консенсуса.

Что такое бэктест по времени?

Проверка, в которой модель учится только на матчах из прошлого, а оценивается на матчах, которые были после. Так она не может подсмотреть ответ и показывает честную точность.

Значит ли +7% ROI, что бот приносит деньги?

Нет. Это результат на истории. Бэктест — это история, а не гарантия. Будущие матчи могут вести себя иначе, и ставки остаются риском потерять деньги.

Почему на Python без сторонних библиотек?

Такой код легче читать и проверять, его не ломают обновления зависимостей, и он запускается на любом сервере без установки пакетов.

Зачем за ботом живой оператор?

Не на каждый вопрос бот отвечает сам. Такие вопросы уходят человеку в консоль ответов, и пользователь не остаётся без ответа.

Коротко о главном

Модель на открытых данных по футболу, НХЛ и КХЛ обыгрывает наивное правило «всегда хозяева», но уступает рынку. Я это измерил, сказал об этом заказчику и перестроил продукт под то, что модель умеет на самом деле: искать лучшую цену, а не угадывать.

Главный вывод кейса шире спорта. Измерить свою модель и признать, что рынок сильнее, ценнее любых красивых обещаний. Хорошая проверка иногда убирает самый продающий аргумент, зато оставляет продукт, которому можно верить.

Если у вас есть прогнозная модель, расчёт или гипотеза, которую нужно честно проверить на истории и понять, работает ли она лучше простого правила, я могу собрать такую проверку и бота вокруг неё. Напишите в Telegram, MAX или VK.

Услуги по теме

Что я делаю для бизнеса

  • Боты в Telegram, MAX, VK
  • Автоматизация процессов и CRM
  • Аналитика и дашборды
  • Сайты и лендинги под ключ

Бесплатно: чек-лист «Готов ли ваш бизнес к 152-ФЗ»

12 пунктов, которые проверяют готовность за час: данные, согласия, уведомление в РКН, локализация, защита. Отметьте, что уже сделано, и увидите дыры, за которые сейчас штрафуют.

Готовы обсудить вашу задачу?

Бесплатная консультация — разберём, как внедрить это в вашем бизнесе под ключ. Без форм, пишите напрямую.

Пишу о разработке, ИИ и законах для бизнеса

Разборы, кейсы и практика — без воды. Выходит регулярно, читать 3–5 минут.

Готовые решения под ключTurnkey solutionsSoluciones llave en mano交钥匙解决方案Түлхүүр гардуулах шийдэл 451 готовых IT-решений для бизнеса451 ready-made IT solutions for business451 soluciones IT listas para empresas451 个面向企业的现成 IT 解决方案Бизнест зориулсан 451 бэлэн IT шийдэл Автоматизация, боты, AI, 152-ФЗ и платформы · бесплатная консультацияAutomation, bots, AI, data privacy and platforms · free consultationAutomatización, bots, IA, privacidad de datos y plataformas · consulta gratis自动化、机器人、AI、数据合规与平台 · 免费咨询Автоматжуулалт, бот, AI, өгөгдлийн хамгаалалт ба платформ · үнэгүй зөвлөгөө Смотреть каталогView catalogVer catálogo查看目录Каталог үзэх