👋 Привет, Хабр. Я продукт-менеджер в achiewin com — мы развиваем платформу для спортивных ставок, и одна из ключевых фич, которую мы проектировали в прошлом квартале, — дашборд анализа коэффициентов.
Выглядело просто: взять наши данные, обернуть в фильтры, показать графики — и вот тебе аналитика. На деле — всё пошло не так. Рассказываю, как мы завалили первую версию, что пришлось переписывать, и почему «простой интерфейс» сложнее, чем кажется.
Что мы хотели сделать
Наша гипотеза: пользователи хотят анализировать движение коэффициентов по разным исходам и видеть, где происходит что-то аномальное — перекосы линии, резкие падения, всплески объема.
Бэк у нас уже был: данные агрегируются с более чем 15 букмекеров и пишутся в ClickHouse с шагом в 15 секунд.
Основные требования:
-
выбрать событие (матч, лига, турнир),
-
отфильтровать по типу ставки (тоталы, форы, победа),
-
увидеть, как менялся коэффициент по времени,
-
найти всплески/сдвиги в линии по группам БК,
-
желательно — удобно, быстро, и чтобы не лагало.
Первая версия: BI-ада
Собрали прототип на Vue 3 + Ant Design. С бэка через GraphQL прилетали агрегаты по коэффициентам, плюс метаданные с Redis (чтобы быстрее грузилось). Фильтров было 17. Таблицы — с построчной детализацией. Можно было выбрать таймфрейм, шаг агрегации, БК и вид спорта. Вот кусок схемы запроса к ClickHouse через GraphQL:
SELECT match_id, bookmaker, market, odds, timestamp FROM odds_history WHERE sport = 'football' AND market = 'totals' AND timestamp BETWEEN {start} AND {end} ORDER BY timestamp
Интерфейс работал… но пользователи не понимали, что с этим делать.
Из фидбека:
-
«Слишком много всего»
-
«Где тут посмотреть движение?»
-
«Почему это график, а не список?»
-
«А почему на мобиле ничего не видно?»
Метрики:
-
Среднее время на странице: 23 сек
-
CTR на графики: <8%
-
Возвраты — почти ноль
Вывод: мы сделали интерфейс для себя, а не для пользователя. Типичная ошибка «через боль».
Где была ошибка
-
Перегрузка интерфейса. Фильтры друг друга исключали, логика была неочевидной.
-
Нет явного сценария. UX-поток не вел к цели — нельзя было быстро понять, «где сейчас что-то происходит».
-
Форма победила функцию. Визуально всё выглядело «сложно» — как дешёвый BI.
После серии юзабилити-интервью (6 респондентов, в том числе профи с опытом ставок) мы пришли к выводу: большинство не хочет строить срезы — им нужно уведомление о событиях. Пример: «коэффициент на ТМ 2.5 упал с 2.20 до 1.85 за 7 минут».
Вторая версия: от аналитики к сигналам
Что сделали:
-
Убрали большую часть фильтров
-
Добавили карточки-сигналы, которые формируются в real-time
-
Графики оставили только при клике
-
Десктоп и мобайл — разные подходы: для мобилки сделали упрощенный фид
Архитектура:
-
ClickHouse — основное хранилище истории коэффициентов (около 5 млн строк в сутки).
-
Redis — слой агрегации и предвычисления для быстрой отдачи «сигналов».
-
Kafka — события движения коэффициента проходят через парсер и попадают в топики:
-
odds_update -
signal_candidate
-
-
Worker (Go) — подписан на Kafka, ищет шаблоны движения (например, падение >10% за <5 минут).
-
GraphQL API — отдает только сигналы, по фильтрам: спорт, тип ставки, дата.
{ "signal": { "type": "drop", "market": "total_under_2.5", "from": 2.20, "to": 1.85, "interval": "7m", "bookmakers": ["Bk1", "Bk2", "Bk3"] } }
Фронт:
-
Vue 3 + Vite
-
Lazy load компонентов карточек
-
Рендер графика только по клику (ECharts)
-
Caching сигнальных данных в браузере (localStorage) для мобилок
Что вышло
-
Время на странице: 2 мин 46 сек
-
Конверсия на просмотр графика: +215%
-
Переходы на событие с сигнала: +300%
-
Фидбек от саппорта: «Появилось ощущение, что нас понимают»
Что не успели
-
Пока не реализовали группировку сигналов по турнирам
-
Нет алертов — только ручной просмотр
-
Нет возможности «собрать свою стратегию» по сигналам (это в бэклоге)
Выводы
-
Интерфейс — не аналитика. Пользователь приходит не за данными, а за инсайтом.
-
Сигналы > фильтры. Быстрое принятие решения требует простого UX.
-
Прототипы — обязательны. Мы бы сэкономили месяцы, если бы раньше протестировали идеи с реальными пользователями.
-
Real-time архитектура рулит. Kafka + ClickHouse + Redis — наша тройка победы для такого сценария.
Если интересны детали по вычислению сигналов или схема парсера линии — могу сделать отдельный пост. Пишите в комменты или в личку, рад буду пообщаться.
ссылка на оригинал статьи https://habr.com/ru/articles/933288/
Добавить комментарий