Когда центровые начали бросать тройки?

Эта статья изначально была опубликована в моем бесплатном информационном бюллетене. Если вы заинтересованы в том, чтобы получать это прямо в свой почтовый ящик (бесплатно!), не стесняйтесь подписаться.

Как изменился выбор ударов игроков с течением времени? Здесь мы разбиваем его по позициям и смотрим на распределение выстрелов каждый год, начиная с 2000 года.

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

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

Но возвращаясь к первоначальному вопросу, как вы можете смоделировать диаграмму «средних» выстрелов? Здесь мы используем мультиномиальную модель Дирихле (см. полную модель и подробности ниже), которая изучает, сколько бросков каждый игрок делает в каждой «зоне» (например, в 10–16 футах от корзины). Одним из привлекательных аспектов модели является то, что она включает всех игроков каждой позиции, но если игрок сделал всего несколько бросков, это, естественно, не позволяет этому игроку слишком сильно влиять на параметры модели.

И, как всегда, мы отслеживаем неопределенность в каждом аспекте наших моделей. Однако по каждому сезону существует огромное количество данных, поэтому наши полосы погрешностей, как правило, настолько малы, что вы даже не можете их увидеть (за исключением сезона 2022 года).

Эволюция выбора кадров

Мы пройдемся по каждой зоне, начиная с линии 3PT и продвигаясь вперед.

Вот наша модель понимания того, какую долю выстрелов занимает каждая позиция за линией 3PT.

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

Вот какую долю выстрелов делает каждая позиция с 16 футов от кольца до линии 3PT.

Обратите внимание, что пикирование не начинается примерно до 2010 года, и сравните это с тем, что происходит на высоте 10–16 футов.

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

Ближе к обручу это становится немного странным. Вот 3–10 футов

Все более мелкие позиции демонстрируют аналогичную тенденцию — сужение с начала 2000-х годов до начала роста в 2010 году. Здесь стоит обратить внимание на шкалу по оси Y. Эти изменения очень малы — в основном они колеблются в пределах 10–15%.

И 0–3 фута.

Здесь особо нечего отметить. За исключением того, что PG/SG вели себя примерно одинаково до отклонения примерно в 2008 году. На самом деле, отсутствие заметных изменений само по себе интересно — центровые не делают больше ударов по кольцу, чем раньше.

Модель

Эта модель простая, но одна из моих любимых. Вдохновленный кеглями, я использую дирихле-полиномиальную модель. Недавно я узнал, что Стэн может эффективно семплировать из единичных симплексов (см. статью с удивительным названием), поэтому я вставлял эти квадратные модели везде, где мог найти круглое отверстие.

data {
    int<lower=0> num_players;
    int<lower=0, upper=5> pos[num_players];  
    int zone_counts[num_players, 5];  
}
parameters {
    // One simplex for each position
    simplex[5] zone_fraction_1;
    simplex[5] zone_fraction_2;
    simplex[5] zone_fraction_3;
    simplex[5] zone_fraction_4;
    simplex[5] zone_fraction_5;
}
model {
    zone_fraction_1 ~ dirichlet(rep_vector(10, 5));
    zone_fraction_2 ~ dirichlet(rep_vector(10, 5));
    zone_fraction_3 ~ dirichlet(rep_vector(10, 5));
    zone_fraction_4 ~ dirichlet(rep_vector(10, 5));
    zone_fraction_5 ~ dirichlet(rep_vector(10, 5));
      for(p in 1:num_players) {
          if (pos[p] == 1)
          zone_counts[p] ~ multinomial(zone_fraction_1);
          else if (pos[p] == 2)
          zone_counts[p] ~ multinomial(zone_fraction_2);
          else if (pos[p] == 3)
          zone_counts[p] ~ multinomial(zone_fraction_3);
          else if (pos[p] == 4)
          zone_counts[p] ~ multinomial(zone_fraction_4);
          else
          zone_counts[p] ~ multinomial(zone_fraction_5);
      }
}

Заглядывая вперед

Мои модели выходили из-под контроля. У меня был каталог после каталога, который выглядел так:

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

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