Бадминтонный трекер BTracker

Хабривет!

Хочу рассказать о своем мобильном приложении BTracker.

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

  • в каких компонентах игры она проигрывает и на что надо обратить внимание в будущих тренировках

  • есть ли у нее прогресс в игре

  • случайно или закономерно был выигран матч, в котором силы соперников примерно равны.

В парных играх возникает дополнительная сложность, как оценить вклад каждого члена команды (команда состоит из двух членов команды) и из результата игры команды сделать выводы об игре каждого члена команды.

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

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

А вот и текущий результат: BTracker

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

Математическая модель событий и обработка данных

Прежде всего, я исходил из того, что при ручном вводе событий человек успеет нажать одной рукой на выбор одну из не более чем 3-х кнопок, так как в бадминтоне темп ударов может быть очень высоким. Каждому удару должно соответствовать одно нажатие на кнопку. Но какими должны быть варианты удара? В бадминтоне есть несколько классификаций удара (по типу траектории и по способу нанесения и силе удара). С одной стороны таких вариантов получается много и, с другой стороны, человек вряд ли успеет рассмотреть и классифицировать удар по сложной системе классификации. Поэтому я рискнул ввести свою классификацию ударов, по принципу “атакующий VS защитный”. В этой классификации очевидно, что смэш удар - это будет атакующий удар, а отброс на заднюю линию - защитный. Все остальные удары пользователь должен отнести к одному из этих двух типов или выбрать вариант “неопределенный удар”. Из этой классификации немного выпадает подача (первый удар), но классификацию для подачи было решено оставить для будущих версий.

Розыгрыш очка заканчивается одним из 4-х исходов:

  • либо команда допустила попадание волана в своё поле

  • либо команда сделала удар вне поля соперника, в аут (со своей стороны сетки или со стороны противника)

  • либо команда допустила фол (допустила касание сетки, допустила касание волана тела игрока, сделала двойное касание).

Этот исход тоже можно фиксировать.

Далее, очевидно, что вывод об уровне мастерства можно сделать по частоте невынужденных ошибок. Поэтому это значение тоже следует фиксировать.

Соответственно, экран для трекинга получился следующим:

Для собранных данных можно считать различные виды статистик. Для основных статистик были выбраны следующие статистики:

  • Очки вподряд. В бадминтоне преимущество своей подачи - сильный фактор и оценка на количество очков, набранных вподряд без потери подачи, характеризует разницу сил игроков. Медиана в качестве оценки математического ожидания была выбрана потому, что вначале матча, до наступления момента “стационарности” в игре, могут быть значения, которые по своей сути скорее являются выбросами (распределены не так, как все остальные значения).

  • Разница очков при смене подачи - значение разницы в счете при переходе подачи. Если “очки вподряд” говорит о том, “сколько набираем”, то это значение говорит о том, к какому значению разницы очков обычно приходим. Для оценки значения выбрана медиана, по той же причине, что для “очков вподряд”.

  • Успешная подача и свой успешный прием. Это частота следующего события:

    • подающая команда сделала успешный удар? Нет - результат=неудача, Да - см. дальше.

    • принимающая команда успешно отбила волан? Нет - результат=успех, Да - см. дальше.

    • подающая команда сделала следующий удар (без учета результата удара)? Да - результат=успех, Нет - результат=неудача.

Это частота характеризует качество подачи: хорошая подача - такая подача, которую соперник либо не может принять, либо принимает её так, что подающий может отбить (успешно или нет в данном случае не важно, поскольку результат удара сильно зависит от количества риска, вложенного в удар, что уже не важно для оценки качества подачи).

  • Выигрыш на своей подаче, выигрыш на чужой подаче. Поскольку фактор своей подачи - сильный, то сравнивать частоты выигрышей нужно при одинаковом значении фактора своей подачи. Величина характеризует насколько хорошо игрок использует фактор своей подачи.

  • Выигрыш атакующим ударом, выигрыш после атаки соперника, невынужденная ошибка. Характеризуют уровень мастерства.

И вот два остальных экрана с статистиками по матчу:

Стоит пару слов сказать о методике обработке данных, получении оценок для сравнения и методике сравнения. Значения любой статистики вычисленные для 1-ой и 2-ой команды (номер команды является параметром) и которые независимы по построению (т.к. для 1-ой и 2-ой команд выбираются разные данные) будут выражать разницу сил команд. Однако для статистически значимого сравнения значений подходят только оценки параметров для известного распределения вероятности. Распределение можно будет считать известным только в предположении о том, что эмпририческое распределения сошлось к известному асимптотическому распределению, как правило, к нормальному. Все значения цветовых индикаторов вычислены в этом предположении как значение t-критерий Уэлча (поправка к критерию Стьюдента для случая разных дисперсий).

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

Итог

В итоге было создано приложение BTracker, которое позволяет статистически значимо сравнить силы двух игроков (двух команд):

  • по количеству набора очков вподряд и разницы в очках при смене подачи

  • по качеству подачи

  • насколько хорошо игрок (команда) использует преимущество своей подачи

  • насколько хорошо игрок (команда) обороняется, если преимущество подачи у противника (команды противника)

  • насколько хорошо игрок (команда) атакует

  • насколько хорошо игрок (команда) обороняется

  • количество невынужденных ошибок как показатель уровня мастерства игрока (команды)

  • разница в количестве ошибок “в поле”, как показатель разницы сил игроков (команд).

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

  • по-компонентно оценивать прогресс/регресс игрока

  • сделать версию для iPhone и web

  • на основе имеющихся данных давать советы для будущих тренировок

  • давать советы к игре против соперника с заданным профилем.

Удачи в бадминтоне и не только.