나 일주일간 휴가를 낼 거야 "내 실수로부터 배우기" 블로그 시리즈 , NCAA 농구 토너먼트 시간이 거의 다가오거든요! 나는 농구 포스트의 기회를 놓칠 수 없다.
저는 인디애나주에서 자랐고 지금은 켄터키주 렉싱턴 근처에 살고 있습니다. 그래서 저는 농구 팬이 되었습니다. 어렸을 때(아주 오래 전) 저는 Final Four에서 우승하기 위해 마지막 기회를 잡는 꿈을 꾸었습니다. 영광과 명성은 내 것이 될 것입니다!
아아, 그럴 의도는 아니었습니다. 저는 결코 좋은 선수가 아니었기 때문입니다. 내 변명은 내 키를 탓하는 것이었습니다. 아시다시피, 날씨가 좋은 날에는 제 키가 167cm에 불과합니다. 우리 모두는 키가 6피트가 넘는(대부분 7피트 이상) 선수들이 농구를 지배한다는 것을 알고 있습니다. Muggsy Bogues 또는 Spud Webb와 같은 키가 작은 플레이어는 드문 예외입니다.
키가 큰 장점에는 분명한 이유가 있습니다: 더 나은 리바운드, "림 위에서" 플레이, 수비 플레이를 위한 더 넓은 팔 범위, 선수를 움직일 수 있는 더 큰 부피 등. 키가 작은 플레이어는 키가 큰 플레이어에 비해 몇 가지 장점(예: 민첩성)을 주장할 수 있지만 요즘 게임은 확실히 "빅맨의 게임"입니다.
그래도 게임이 키가 큰 플레이어에게 유리하도록 '조작'되어 있는지 궁금합니다. 그래서 제가 결코 좋은 플레이어가 아니었던 것입니다. 그래서 나는 간단한 사례를 증명해 보기로 결심했습니다. 즉, 키가 큰 선수가 자유투를 쏠 때 키가 작은 선수보다 유리하다는 것입니다.
원하는 출력 플롯
내가 찾고 있는 것은 자유투에 대한 "작동 창"의 플롯입니다. 이를 통해 키가 큰 선수의 창과 작은 선수의 창을 비교할 수 있습니다. 여기에는 공의 초기 각도(또는 궤적)에 대한 농구의 초기 속도 조합을 모델링하고, 슛이 "성공"인지 "미스"인지 결정하고 결과를 플롯팅하는 작업이 포함됩니다. 궁극적으로 다음과 같은 플롯이 생성됩니다.
Figure 1: Example of Free Throw Tolerance WindowFigure 1: Example of Free Throw Tolerance WindowFigure 1: Example of Free Throw Tolerance WindowFigure 1: Example of Free Throw Tolerance Window그림 1: 자유투 허용 범위 창의 예
또한 다음과 같이 샷에 애니메이션을 적용할 수 있어야 합니다.
Figure 2: Animation of Free Throws for Constant Input Velocity, Varying TrajectoryFigure 2: Animation of Free Throws for Constant Input Velocity, Varying TrajectoryFigure 2: Animation of Free Throws for Constant Input Velocity, Varying TrajectoryFigure 2: Animation of Free Throws for Constant Input Velocity, Varying Trajectory그림 2: 일정한 입력 속도와 다양한 궤적에 대한 자유투 애니메이션
이를 수행하는 방법과 이것이 무엇을 의미하는지에 관심이 있으십니까? 읽어!
모델 개발
내 모델에는 미국 남자 농구 코트와 공 크기를 사용했습니다.
모델을 단순화하기 위해 몇 가지 가정과 제약 조건을 도입했습니다.
모델에는 세 가지 입력 변수가 있습니다.
- 농구공의 "발사" 높이(즉, 투구 지점에서 바닥 위의 높이)
- 나는 두 가지 높이를 살펴보았습니다: 바닥에서 6.5피트(팔을 뻗은 상태에서 릴리스 포인트에 해당) 바닥에서 8.5피트(큰 선수가 슛하는 곳)
- 농구공의 방출 속도
- 농구공의 방출 각도(또는 초기 궤적)
모델의 출력(투출 높이, 초기 속도 및 초기 궤적의 각 조합에 대한)은 "Made" 또는 "Miss"라는 범주형 값이었습니다.
운동 방정식은 표준 탄도 방정식이었습니다. 이는 첨부된 Word 문서에 나와 있습니다.
성패 기준
샷이 "성공"되려면 림에 전혀 닿지 않고 네트를 통과하는 샷이 "휙휙" 움직여야 했습니다. 이 기준은 처음에는 간단해 보입니다. 공의 중심이 림 높이에 있고 하향 궤적에 있을 때 공이 림의 최전방 위치와 최후방 위치 사이에 맞습니까? (우리는 완벽하게 중앙에 있는(왼쪽에서 오른쪽으로) 샷만 보고 있으므로 림의 나머지 부분은 중요하지 않다는 점을 기억하십시오.)
Figure 3: Ball and Basket Geometry for Made and Missed ShotsFigure 3: Ball and Basket Geometry for Made and Missed ShotsFigure 3: Ball and Basket Geometry for Made and Missed ShotsFigure 3: Ball and Basket Geometry for Made and Missed Shots그림 3: 성공 및 실패 슛에 대한 볼과 바스켓의 기하학적 구조
그러나 위의 "Made Shot" 다이어그램에 표시된 공은 실제로 "휘두르지" 않았을 수도 있습니다. 이 이미지가 표시된 순간의 공의 궤적은 아래와 같이 상대적으로 "평탄"했을 수 있습니다.
Figure 4: Effect of Final Ball Trajectory on Make/MissFigure 4: Effect of Final Ball Trajectory on Make/MissFigure 4: Effect of Final Ball Trajectory on Make/MissFigure 4: Effect of Final Ball Trajectory on Make/Miss그림 4: 최종 공 궤적이 성패에 미치는 영향
따라서 우리는 공의 최종 각도와 휘두르는 샷을 위한 창 W가 좁아진다는 사실도 고려해야 합니다.
Figure 5: Geometry involved in determining Make/MissFigure 5: Geometry involved in determining Make/MissFigure 5: Geometry involved in determining Make/MissFigure 5: Geometry involved in determining Make/Miss그림 5: Make/Miss를 결정하는 데 관련된 형상
따라서 기준은 공의 중심이 림 높이에 있고 하향 궤적에 있을 때입니다.
- 공 중심의 X 위치는 림의 전면과 후면 사이에 있어야 합니다.
- W는 최소한 볼 직경만큼 커야 합니다.
- 공은 최종 각도와 림의 직경으로 설명되는 좁은 채널의 양쪽에 닿을 수 없습니다.
모델 구현
탄도 방정식과 제약 조건은 JSL(JMP 스크립팅 언어)로 코딩되었습니다. 직접 실행해보고 싶은 경우를 대비해 스크립트(ballistic calcs.jsl)가 이 게시물에 첨부되어 있습니다. 코드는 매우 간단하며 속도에 전혀 최적화되어 있지 않습니다. 따라서 평가할 속도와 궤적의 조합이 많으면 시간이 걸릴 수 있습니다. 코드를 자세히 살펴보고 싶다면 주석이 잘 달려 있습니다. 주요 구성 요소는 다음과 같습니다.
- 작업 제어를 위한 사용자 정의 사용자 입력 패널이 제공됩니다.
- 저장될 각 변수에 대한 새 열을 포함하는 새 데이터 테이블이 생성됩니다.
- 두 개의 중첩 루프, 즉 초기 공 속도를 단계별로 실행하기 위한 루프와 초기 궤적 각도를 단계별로 실행하기 위한 루프입니다.
- 이러한 루프 내에서 모든 탄도 계산은 공을 최종 위치(예: 림 높이, 하향 궤적)로 이동하기 위해 수행됩니다.
- 그런 다음 최종 볼 위치와 궤적을 사용하여 이전에 정의한 대로 샷이 "휙휙" 움직이는지 확인합니다.
- 범주형 "makemiss" 변수는 계산된 결과에 따라 "Make" 또는 "Miss"로 설정됩니다.
- makemiss 변수를 포함하여 모든 변수는 초기 속도와 초기 궤적의 특정 조합에 대한 데이터 테이블에 저장됩니다.
- 마지막으로 모든 계산이 완료되고 결과가 새 데이터 테이블에 저장되면 속도 대 궤적 작업 창을 플롯하고 데이터 테이블에 스크립트를 추가하여 플롯을 쉽게 다시 생성합니다.
계산이 완료되면 데이터 테이블에 모든 결과가 포함되며 이를 플롯할 수 있습니다. 다음과 같은 경우에 코드를 실행했습니다.
사례
|
1
|
2
|
|
|
|
초기 높이, 피트
|
6.5
|
8.5
|
|
|
|
초기 속도, fps
|
|
|
최저
|
20
|
20
|
제일 높은
|
50
|
50
|
증가
|
0.05
|
0.05
|
|
|
|
초기 궤적(도)
|
|
|
최저
|
35
|
35
|
제일 높은
|
89
|
89
|
증가
|
0.05
|
0.05
|
그 결과 각 초기 높이에 하나씩, 각각 거의 650,000개의 행(초기 속도와 궤적의 각 조합에 대해 하나씩)을 포함하는 두 개의 데이터 테이블이 생성되었습니다.
(참고: 각 사례를 내 노트북에서 완료하는 데 약 2분이 걸렸습니다.)
자유투 허용 범위 창 출력
나는 초기 속도와 초기 궤적의 산점도를 보여주는 "자유투 창"을 보고 싶었습니다. 점들은 성공 여부에 따라 색상별로 구분되어 있습니다. 이는 Graph Builder에서 쉽게 수행할 수 있습니다. JMP . "키가 큰 사람" 허용 범위에 대해 이야기해 보겠습니다.
Figure 6: Free Throw Tolerance Window for Tall PlayerFigure 6: Free Throw Tolerance Window for Tall PlayerFigure 6: Free Throw Tolerance Window for Tall PlayerFigure 6: Free Throw Tolerance Window for Tall Player그림 6: 키가 큰 선수에 대한 자유투 허용 범위 창 위 플롯의 파란색 영역은 키가 큰 사람이 자유투를 휘두르는 데 필요한 초기 속도와 초기 각도의 조합을 보여줍니다. 다음 사항에 유의하세요.
- 낮은 속도(22-24fps)에서는 촬영 각도가 상대적으로 낮습니다. 높은 탄도에서 부드러운 슛을 쏘면 골대에 도달하지 못하기 때문에 이는 의미가 있습니다.
- 높은 각도(70도 이상)에서는 초기 속도가 높아야 합니다. 이 경우에는 매우 높은 샷을 촬영하고 있습니다. (실제로 각도가 90도에 가까워질수록 초기 속도는 무한대를 향해 올라갑니다.)
저속 영역을 강조하기 위해 위의 플롯을 확장하면 다음과 같습니다.
Figure 7: Zoom In on Free Throw Tolerance Window for Tall PlayerFigure 7: Zoom In on Free Throw Tolerance Window for Tall PlayerFigure 7: Zoom In on Free Throw Tolerance Window for Tall PlayerFigure 7: Zoom In on Free Throw Tolerance Window for Tall Player그림 7: 키가 큰 선수에 대한 자유투 허용 범위 창 확대
이제 우리는 다음을 더 잘 볼 수 있습니다:
- 사수가 항상 동일한 초기 속도로 사격할 경우 사격에 필요한 각도 범위입니다(노란색 선이 예입니다).
- 사수가 항상 동일한 초기 각도로 사격할 경우 사격에 필요한 초기 속도의 범위입니다(녹색 선이 예입니다).
- 슈터가 합리적으로 일관성이 있는 경우 허용되는 속도 및 각도 범위의 일반적인 창입니다(빨간색 상자가 예입니다).
숏 성능과 톨 성능 비교
두 가지 테스트 사례(키가 작은 슈터와 키가 큰 슈터)의 결과를 하나의 그래프로 수동으로 결합했습니다.
Figure 8: Comparing Short vs. Tall Player Free Throw Tolerance WindowFigure 8: Comparing Short vs. Tall Player Free Throw Tolerance WindowFigure 8: Comparing Short vs. Tall Player Free Throw Tolerance WindowFigure 8: Comparing Short vs. Tall Player Free Throw Tolerance Window그림 8: 키가 작은 선수와 키가 큰 선수의 자유투 허용 범위 창 비교
이제 키가 작은 플레이어와 키가 큰 플레이어의 차이점을 확인할 수 있습니다.
- 키가 작은 선수는 키가 큰 선수보다 더 세게, 더 높은 각도에서 슛을 해야 합니다(물론 우리 모두는 이미 알고 있었습니다).
- 두 곡선은 발사 각도가 증가함에 따라 수렴됩니다(이치에 맞습니다. 두 선수 모두 매우 높은 샷을 발사하므로 시작 높이가 덜 중요합니다).
- 일반적으로 키가 큰 플레이어의 창(즉, 파란색 영역)은 작은 플레이어의 창(노란색 영역)보다 다소 큽니다.
이 시점에서 나는 내 논문에 대해 꽤 기분이 좋았지만 윤곽선 시각화의 동작이 이상했습니다. 위의 플롯(특히 그림 7)에서 낮은 각도에서 높은 각도로 갈수록 파란색 곡선이 약 22.5fps의 속도에서 시작한 다음 허용 가능한 속도로 나타나는 것을 알 수 있습니다. 약간 떨어진다 각도가 증가하면 다시 증가하기 전에. 이것이 진짜인지 궁금했습니다.
샷 애니메이션
이상한 점을 조사하기 위해 나는 키가 큰 사람이 슛의 각도만 변화시키면서 일정한 초기 속도로 자유투를 쏘는 모습을 보기로 결정했습니다. 공의 움직임은 계산하기 쉽기 때문에(단순 포물선) 주어진 각도에 대해 시간에 따른 공의 xy 위치를 계산했습니다. 나는 여러 각도에서 이것을 반복했는데, 모두 동일한 초기 속도와 8.5피트의 발사 높이를 사용했습니다.
저는 이 데이터를 생성하고 이를 JMP 데이터 테이블에 저장하는 두 번째 스크립트(animation.jsl, 이 게시물에도 첨부되어 있음)를 작성했습니다. 그런 다음 버블 플롯을 사용하여 결과에 애니메이션을 적용하고(새 샷마다 시간이 약간씩 오프셋됨) GIF 파일에 저장했습니다.
첫 번째 애니메이션은 키가 큰 사람(바닥에서 8.5피트 릴리스 지점)이 22.3fps의 초기 속도로 공을 쏘는 모습을 보여줍니다.
Figure 9: Animation of Tall Player Shooting: 22.3 fps Initial Velocity at Different Initial TrajectoriesFigure 9: Animation of Tall Player Shooting: 22.3 fps Initial Velocity at Different Initial TrajectoriesFigure 9: Animation of Tall Player Shooting: 22.3 fps Initial Velocity at Different Initial TrajectoriesFigure 9: Animation of Tall Player Shooting: 22.3 fps Initial Velocity at Different Initial Trajectories그림 9: 키가 큰 플레이어 슈팅 애니메이션: 다양한 초기 궤적에서 22.3fps 초기 속도
위 애니메이션은 샷 각도가 변경됨에 따라 초기 속도가 모두 동일한 여러 샷 시도를 보여줍니다. (각 샷에는 초기 발사 각도(도)가 표시되어 있습니다.) 초기 각도가 너무 얕거나 너무 가파르면 샷이 림 앞쪽에 부딪히게 됩니다(따라서 "휘두르지 않았기 때문에" 빗나간 것으로 간주됩니다.) ”) 녹색 샷은 "성공"이고 빨간색 샷은 "실패"입니다. 각도가 딱 맞으면 공은 방해받지 않고 골대를 통과합니다.
그러나 초기 속도를 약간만(22.4fps까지) 높이면 다음 애니메이션을 얻을 수 있습니다.
Figure 10: Tall Player, Initial Velocity 22.4 fps, different initial trajectoriesFigure 10: Tall Player, Initial Velocity 22.4 fps, different initial trajectoriesFigure 10: Tall Player, Initial Velocity 22.4 fps, different initial trajectoriesFigure 10: Tall Player, Initial Velocity 22.4 fps, different initial trajectories그림 10: 키가 큰 플레이어, 초기 속도 22.4fps, 다양한 초기 궤적
여기서도 각도가 너무 얕거나 너무 가파르면 공이 림 앞쪽에 닿는다는 것을 알 수 있습니다. 그러나 실제로 "만들기"를 초래하는 초기 각도의 두 영역이 공이 림 뒤쪽에 닿는 영역으로 분리되어 있음도 알 수 있습니다. 이는 예상치 못한 결과였으며, 시각화 도구가 없었다면 눈치채지 못했을 것입니다. JMP !
실제 데이터가 결과를 뒷받침합니까?
위의 플롯에 표시된 창을 기반으로 키가 작은 선수가 키가 큰 선수보다 자유투를 만드는 데 더 힘든 시간을 보낸다는 사실이 꽤 기분이 좋았습니다. 물론 이것이 사실인지 아닌지를 보여주는 데이터는 풍부하다.
저는 1950년 이후에 태어난 NBA 선수 중 통산 최소 1000번의 자유투 시도를 기록한 선수의 선수 키와 평생 자유투 비율을 다운로드했습니다. 그런 다음 Fit Y by X 플랫폼을 사용하여 높이 대 백분율을 표시했습니다.
Figure 11: Free Throw Percentage vs. Height for NBA players born post-1950 with at least 1000 free throw attemptsFigure 11: Free Throw Percentage vs. Height for NBA players born post-1950 with at least 1000 free throw attemptsFigure 11: Free Throw Percentage vs. Height for NBA players born post-1950 with at least 1000 free throw attemptsFigure 11: Free Throw Percentage vs. Height for NBA players born post-1950 with at least 1000 free throw attempts그림 11: 1950년 이후에 태어나 자유투를 1000회 이상 시도한 NBA 선수의 자유투 비율과 키 비교
아아, 내 논문은 결국 입증되지 않았습니다. 키가 작은 선수가 키가 큰 선수보다 더 나은 자유투 비율을 슛하는 경향이 꽤 뚜렷합니다. 사실, 내 주장이 사실이라면 Rick Barry(언더핸드로 자유투를 쏜)와 같은 나이든 선수들의 비율은 매우 낮았을 것입니다. (배리는 선수 생활 내내 90.0%의 성공률을 기록했습니다.)
분명히 다른 효과가 작용하고 있습니다. 모델 가정 중 일부는 위에 자세히 설명되어 있습니다. 기타에는 다음이 포함될 수 있습니다.
- 자유투 연습에 소요된 시간
- 눈과 손의 협응
- 동기 부여(아마도 키가 작은 선수들은 코트 위의 다른 단점을 보완하기 위해 자유투에서 더 열심히 노력할 것입니다)
결론
조지 박스(George Box)의 말을 빌리자면 “모든 모델은 틀렸지만 일부는 유용합니다.”
이 경우, 동네 술집에서 내 주장을 논할 때 내 모델이 유용할 수 있습니다. 하지만 분명히 내 탄도 모델은 틀렸어요. 농구에서 자유투를 치는 능력을 결정하는 다른 많은 요소가 있습니다.
나는 내가 그다지 대단한 운동선수가 아니라는 점을 인정해야 할 것 같다. 그래도 즐거운 여행이 되셨기를 바랍니다. JMP가 데이터 탐색 요구 사항에 어떻게 유용한 도구인지에 대한 몇 가지 아이디어를 얻으셨기를 바랍니다.
그동안…c 헷, 누구든지??