Xp
NBA       
Xp
  
KBL       
Xp
  
Mania Community. Your Favorite.
NBA Maniazine
회귀분석을 이용한 슈퍼스타들의 19/20 스탯 예측
 
1
21
  5134
Updated at 2019-10-21 22:17:06

안녕하세요, 16/17 시즌부터 NBA 팬이 된 통계학과 학부생입니다.

평소 세이버매트릭스나 스탯/판타지 포인트 프로젝션의 매커니즘에 관심을 가져 오다 이번 학기에 회귀분석 수업을 처음 듣게 되면서 이를 이용해 선수들의 예상 스탯을 뽑아보면 어떨까 생각을 해봤습니다. 제가 생각한 스탯 예측의 뼈대 및 가정들은 이렇습니다.

 

1. NBA 선수들이 한 시즌에 평균적으로 찍는 스탯은 여러 양적 변수(수치 데이터)에 의해 결정될 것입니다.

 

2. 가능한 많은 선수들에게 적용되는 하나의 모델을 만들기 위해 1) Total MP(선수가 한 시즌에 뛴 총 시간)와 2) USG%(선수가 코트 위에 있을 때 전체 팀 포제션 중 본인이 마무리한 포제션 추정 비율)를 두 가지 변수로 지정했습니다.


3. 즉 선수가 NBA에서 기록했던 이전 시즌까지의 Total MP, USG%를 변수 X로 두고 그에 따른 득점/리바운드/어시스트/스틸/블락을 각각 변수 Y로 두는 함수를 만드는 것입니다. 즉 선수마다 플레이타임, USG%를 집어 넣으면 예상 스탯을 각각 뽑아주는 5개의 함수가 생겨나는 것이죠.

 

Ex)

 

평소 회귀분석에 대해 조금이라도 알고 계신 분들이라면 이러한 응용에 의구심을 가지실 수 있습니다. 제가 이번 분석에 사용한 다중선형회귀분석(Multiple Linear Regression Analysis)은 스탯 예측과 같은 분석에 적합한 모델이 아니기 때문이죠. 따라서 한계점이 분명히 존재합니다.

 

1. 시간과 그에 따르는 경험의 누적을 무시합니다. 즉 스텝업이나 노쇠화의 개념이 없습니다. 같은 출전시간과 USG를 집어넣으면 어느 정도 동일한 스탯이 예측되는 것이죠. 다만 이 부분은 선수의 기량이 상승하거나 하락할수록 출전시간/USG가 거기에 맞춰 실제로 상승/하락하기 때문에 큰 문제는 아니라고 생각했습니다.

 

2. 예상 스탯들 사이의 상관관계가 반영되지 않습니다. 득점/리바운드/어시스트/스틸/블락을 예측하는 함수가 각각 다르기 때문에, 식을 도출하는 과정에서 서로에게 미치는 영향을 무시하게 됩니다. 선수가 한 번의 포제션에 득점을 선택한다면 어시스트 수치는 하락할 것이고, 어시스트를 선택한다면 득점 수치는 하락하겠죠. 다만 상관관계가 이미 반영되어 있는 기존의 스탯지를 데이터로 쓰기 때문에 이 문제도 크지는 않다고 간주했습니다.

 

3. 당연한 말이지만, X 변수 자체도, 스탯 예측도 완벽하지 않습니다. 어디에도 출전 시간과 USG가 전적으로 스탯을 결정한다는 보장은 없습니다. 다만 출전 시간과 USG가 선수들의 스탯과 어느 정도 상관은 있구나, 스탯을 구성하는 요소 중에 하나구나 정도는 높은 확률로 보장됩니다.


위의 가정에 따라, 18/19 시즌 MVP 투표를 받았던 12인에 대해 스탯 예측을 진행했습니다. 스탯의 흐름을 볼 수 있도록 최근 3년의 스탯도 입력했습니다. 다만 조엘 엠비드는 뛴 시즌(데이터)이 적어 예측할 수가 없었고, 케빈 듀란트는 시즌 아웃이 예상되므로 제외했습니다ㅠㅠ

 


1. Giannis Antetokounmpo

 

18/19 정규시즌 MVP 쿰보입니다. 75경기 평균 33분 33% USG로 설정했습니다. 득점은 저번시즌과 비슷하게, 리바운드와 어시스트는 소폭 하락하는 것으로 예측되는군요. 하지만 예측된 스탯을 찍으면서 밀워키가 다시 한번 동부 1위를 기록한다면 또 다시 강력한 MVP 후보가 될 전망입니다.

 

2. James Harden

 

75경기 36분 38% USG의 하든입니다. 웨스트브룩의 합류로 USG를 하향 입력했습니다만 여전히 NBA 최고의 득점력이 예상되네요. 정말 올타임에 손꼽히는 득점력을 보여줬던 지난 시즌은 일단은 어느 정도 예외로 간주하는 게 합리적일 수 있습니다. 폴이 17/18과 마찬가지로 24경기를 결장하면서 USG가 40까지 치솟았었군요. USG를 높여준다고 저 스탯을 찍는다는 것 자체가 대단하긴 하지만요.

 

3. Paul George

 

77경기 37분 28% USG로 설정한 PG13입니다. 레너드와 한 팀이 되면서 USG를 살짝 낮췄습니다. 지난 시즌 커리어 최초로 All-NBA 1st 팀이 된 조지인데요, 예상 스탯대로라면 2010년대에 들어 포워드가 처음 3년 연속 2스틸 이상을 기록하게 됩니다. All-NBA와 DPOY 동시 수상을 노려 볼 만한 리그 최고의 공수겸장 중 한 명입니다.

 

4. Nikola Jokic

 

개인적으로 가장 좋아하는 선수 중 하나인 요키치입니다. 77경기 32분 출장, USG를 30으로 상향 입력했습니다. 전체적으로 스탯이 올라가는 가운데 스틸은 양상이 조금 다른데요, 일반적으로 USG의 상승과 스틸 수치의 상관관계를 기대하기 어렵다는 점에서 합리적으로 보이네요. 팀 내 공격비중과 수비 스탯은 큰 관계를 갖기가 어려우니까요. 요키치가 이번시즌 예상 스탯대로 8.5 어시스트를 기록한다면 67/68 시즌 윌트 체임벌린 이후로 센터가 8.5 어시스트 이상을 최초로 기록하는 겁니다.

 

5. Stephen Curry

 

70경기 34분의 커리입니다. 듀란트의 이적, 탐슨의 부상으로 USG는 듀란트 이적 전 수준인 32로 상향했습니다. 득점력의 상승이 놀랍군요. 표에 17/18 시즌 데이터를 적지 않은 이유는 한 시즌에 60경기 미만으로 출장한 경우 분석에서 해당 시즌을 제외시켜 버리기 때문입니다. 회귀분석에서 이처럼 지나치게 낮거나 높은 X 변수는 예측에 큰 문제가 됩니다. 어쨌든 이번 시즌 커리의 필연적인 USG 상승으로 인해 볼륨은 커지겠지만 아무래도 출전시간이나 USG보다 더 중요한 부상이라는 변수가 스탯을 더 크게 좌우하게 되지 않을까 싶습니다.

 

6. Damian Lillard

 

77경기 36분 30% USG의 릴라드입니다. 평균 득점 자체는 조금씩 내려오는 추세가 반영되었지만 USG 역시 조금씩 줄어 왔습니다. 릴라드의 기록을 보면서 정말 놀라웠던 점이, NBA 커리어 7년 동안 매년 73경기 35분 이상을 뛰어 왔다는 점입니다. 개인적으로 요키치와 더불어 좋아하는 선수인데 이번 시즌도 건강하게 꾸준한 모습 보여주길 기대합니다.

 

7. Kawhi Leonard

 

65경기 34분 30% USG의 레너드입니다. 12/13, 17/18 시즌은 경기 수 부족으로 계산에서 제외됩니다. 25 이상의 득점력과 높은 스틸이 눈에 띕니다. 레너드와 조지가 같은 팀이라니변수는 아무래도 부상/몸 관리에 의한 결장이겠죠. 레너드는 커리어 내내 한 시즌에 2500분 이상을 뛰어본 적이 단 한번도 없습니다. 이번 시즌도 정규 시즌 체력 관리+플레이오프 올인 전략을 선택하게 될지 지켜볼 일입니다.

 

8. Russell Westbrook

 

77경기 35분 33% USG, 이번에 휴스턴에 새롭게 둥지를 튼 웨스트브룩입니다. 비현실적이었던 3년 연속 트리플더블에서 하향 예측된 리바운드와 어시스트 수치가 눈에 띕니다. 단순히 이번 예측처럼 플레이타임과 USG% 이외에도 이번시즌 웨스트브룩과 하든이 동시 출전했을 때 누가 플레이메이킹을 할 것인지, 오클라호마에서처럼 센터급의 리바운드 퍼센티지(TRB%)를 가져갈 것인지 등 변수가 굉장히 많습니다. 이번 시즌 가장 예측이 어려운 선수 중 한 명이라고 생각합니다.

 

9. Rudy Gobert

 

80경기 32분 18% USG의 고베어입니다. 사실 고베어는 이번 예측에서 가장 이질적인 선수입니다. 다른 슈퍼스타들만큼 공격 작업을 도맡아 하는 선수가 아니다 보니 USG% 수치 자체도 평균적으로 많이 낮고 변수로써의 신뢰도도 많이 떨어집니다. 이런 류의 예측 및 분석에는 적절한 선수가 아니고, 선수의 진가 역시 수치로 전부 나타나는 선수가 아니죠^^ 그러나 이러한 점을 감안하더라도 어처구니 없는 스탯이 예측되지는 않았네요.

 

10. LeBron James


75경기 35분, 31% USG의 르브론입니다. 르브론의 경우에는 앞서 예측된 선수들과는 데이터의 양 측면에서 차원을 달리하죠. 무려 16년 동안 NBA에서 활약을 해왔으니까요. 스탯이 전체적으로 떨어진 이유는 동일한 USG 대비 작은 플레이타임 설정이 큰 영향을 끼친 걸로 보입니다. 실제로 16년 동안 르브론이 한 시즌에 2600분대 이하를 뛴 때는 단 3, 세 시즌 뿐입니다. 즉 플레이타임 데이터가 전체적으로 높으면서 고르게 형성되어 있었는데 노쇠화로 인해 플레이타임이 떨어질 것으로 변수를 설정하니 자연스레 스탯들이 하락한 것이죠. 건강하게 시즌을 유지한다면 훨씬 더 좋은 활약을 보여줄 것이고, 특히 데이비스의 합류로 어시스트는 적어도 최근의 8~9개를 유지하지 않을까 생각합니다.

 


 

어떤 수치가 선수들의 스탯을 예측하는 데 가장 유용할까 고민하고, 이에 맞춰 프로그래밍하고 나온 결과를 선수들의 상황, 수치로는 나타나지 않는 변수들을 생각하고 비교해 보면서 개인적으로 재밌게 진행했던 분석이었습니다. 앞서 말씀드렸듯 저는 일개 학부생이고 분석에 초짜라 그냥 재미로 봐주시면 되겠습니다. 이번 시즌 NBA 보면서 또 여러 가지로 재밌는 분석이나 예측 진행해보고 싶네요.

 

모든 스탯 예측은 R을 사용하여 이루어졌습니다. 모델에 대한 자세한 설명이나 토론, 질문은 언제든지 환영입니다^^

 

읽어주셔서 감사합니다!

19
Comments
1
2019-10-21 20:57:17

학부생인데 능동적으로 배운 내용 활용하시는게 정말 대단하시네요! 로지스틱 회귀 이용해서 MVP 선정 확률로 순위 매겨봐주신다면 흥미로울 것 같습니다!

WR
1
2019-10-21 21:18:39

감사합니다. 시즌 중에 여러 분석 시도해 볼 생각입니다^^

1
2019-10-21 21:23:02

먼저 재밌는글 잘 봤습니다

모형과 관련해서 나이를 설명 변수로 넣어보면 어떨까 싶습니다. 스텝업과 노쇠화를 일정 부분 반영할 수 있지 않을까 싶어서요.

TS% 나 PER 도 한번 넣어보면 재밌는 결과가 나오지 않을까 싶습니다. TS% 는 득점을, PER은 5개 스텟을 설명하는 유의미한 변수가 되지 않을까 싶네요. 

확보된 데이터가 적어보이는데, 기간을 늘려서 데이터를 좀 더 확보하면 모형의 신뢰도가 높아질 거라생각됩니다 

시즌중에도 더 재밌는 모형 많이 볼 수 있으면 좋겠습니다

WR
1
Updated at 2019-10-21 21:39:02

안녕하세요^^ 유익한 댓글 감사합니다.
1) 사실 MP와 USG%를 설명 변수로 하는 이번 분석 전에 '연차'를 설명 변수로 하는 분석을 시도했었습니다. 결과가 좋지 않았었는데 아무래도 다중회귀분석이 선형(Linear) 관계에 적합한 분석이다 보니 '자연스러운 상향/하향 곡선' 과는 거리가 좀 있더군요. 제가 여러 모델들을 앞으로도 공부해봐야 할 것 같습니다^^
2) 아무래도 NBA 커리어 상 기록한 데이터만 써야 하다보니 데이터의 절대적인 양이 적더군요. 말씀하신대로 데이터의 양이 가장 중요한데 말이죠^^ 다만 본문에 올린 사진에 함께 적힌 데이터는 흐름 관찰하기 편하시라고 덧붙인 것이고, 분석에는 선수가 기록한 모든 시즌의 데이터를 사용했습니다. 착오 없으시길 바랍니다^^

1
Updated at 2019-10-21 21:33:01

오오 유익한 내용 너무 잘 보았습니다!
혹시 OLS 최소제곱법으로 계산하신건가용?

WR
1
2019-10-21 21:37:27

넵 맞습니다. 학기 초중반이라 배운게 이게 전부네요

1
2019-10-21 21:38:32

배워서 남주자

WR
1
2019-10-21 21:40:14

남을 줄만한 수준은 안됩니다만...댓글 감사합니다

1
Updated at 2019-10-22 10:59:19

잘 봤습니다~

MP와 USG%로 결정되는 스탯이니라서 두 변수 설정이 결정적인 역할을 할텐데 MP와 USG%는 임의로 선정하신 건가요? 한가지 드는 생각이라면 선형회귀 말고  polynomial regression을 사용하는게 낫지 않나 싶네요.

WR
1
2019-10-22 12:10:17

네 Basketball Reference에서 제공하는 스탯들 중 선수 성적과 가장 선형관계를 가질 만한 스탯이 뭘까 고민하다가 선정했습니다^^
아직 배운 게 선형모델 밖에 없는지라... 더 열심히 공부해보겠습니다

1
Updated at 2019-10-22 12:27:33

경기당 기록 (득점, 어시)이니 total MP보단 경기당 출전시간이 더 나아보이고, 말씀드린 선정이란 표현은 선수별 수치를 임의로 선정하셨나하는 것입니다, 사실상 저 수치가 결정적인 역할인데 이게 주관으로 정해지면 선수의 퍼포먼스를 주관으로 예상하는 게 되서요,

WR
1
Updated at 2019-10-22 13:03:41

1) 본문에 설명드리지 않은 매커니즘을 좀 더 자세히 말씀드리자면... 출장경기수와 경기당 출전 시간을 우선 하나의 벡터로 만들어 '곱한 값을' X변수로 집어넣습니다. 이후 마지막에 경기 수로 나누어 줍니다. 예시를 들어보면...
쿰보의 경우 75경기 33분을 설정했기 때문에 MP 변수의 값은 2475(분)이 됩니다. 이 수치와 USG를 이용하여 선수가 시즌 동안 쌓을 스탯의 '누적 값'을 구합니다. 그리고 마지막에 경기당 평균치를 구하기 위해 처음에 입력했던 출장 경기 수로 나눠지는 매커니즘입니다. 즉 정리하자면 결국 누적 스탯 도출엔 총 출전 시간을 사용하고 평균치 도출을 위해서 경기수로 나눠 주는 겁니다. 선수의 예상 경기 수와 경기 당 출전 시간을 모두 포괄하면서 이에 따라 다른 예측값을 가질 수 있도록 만들어보고 싶었습니다.

2) MP와 USG는 주관적으로 선정했습니다. 사실 X변수로 MP와 USG를 선정하는 것부터가 주관이라... 이번 분석의 변수 설정과 그 결과가 정답은 당연히 아닐 겁니다^^ 이번 분석의 목적 자체가 '이러한 MP와 USG로 이렇게 스탯을 쌓아왔던 선수가 이번 시즌 MP와 USG를 이렇게 받으면 이러한 성적이 나올 것이다' 거든요. 예측이라는 게 결국 X변수가 아직 실제로 주어지지 않았으니 가정할 수 밖에 없는 것이구요.

본문에서 모델에 대해 구체적으로 말씀드리지 못해 오해를 일으킨 점 죄송합니다.

1
2019-10-23 02:28:06

우선 배운걸 실제로 적용시켜서 해보신 것에 대해 큰 박수를 드립니다. 

 

가볍게 조언을 드리자면, 

저도 처음에 통계를 배울 때 간과했던 부분이지만,

사실 중요한건 데이터가 통계모델 (여기서는 linear regression)의 assumption 에 맞는지부터 시작해야 합니다.

다시 말하자면, 적어주신 임의로 MP와 USG를 유의미한 X 변수로 보신 것 같은데, 

이 X 변수들과 Y 변수들 (선수들 스탯)이 linear 한 관계를 가지는지 체크부터 하는게 우선입니다.

제대로 된 통계 분석을 통해 linear 한 관계인지 볼 수도 있겠지만,

가장 쉬운 방법은 R에서 scatter plot을 그려서 알아보는 방법이 있겠네요.

그게 선형 관계가 아니라면 변수 변환 (e.g., X^2, log(X)) 등을 해줘서 변수 변환한 X 와 Y가 선형 관계이도록 해줘야 합니다.

 

그리고 이것도 나중에 배우시겠지만,

X가 Y를 예측하는데 유의미한 변수인지 아닌지도 살펴봐야 하겠지요. (e.g., significance level)

이것도 descriptive statistics, 그 중에서도 correlation을 보는걸로 시작할 수 있습니다.

Correlation 이 변수들 간의 선형 관계를 알려주는 지표이기 때문에, 앞서 이야기한 '선형 관계인지 체크'와도 연관이 되는 부분입니다.  

 

앞으로도 잘 배우시고 화이팅하세요!

WR
1
2019-10-24 20:53:12

중간고사가 있어서 답글이 늦었네요.

Linear 관계를 사전에 확인해야 하는 거군요. 다중선형회귀모형 식에서 변수에 붙는 계수(베타) 에 대해 t 테스트를 진행해보긴 했는데 말씀하신 바와 동일한 맥락인지는 잘 모르겠네요.

Correlation 같은 경우에는 Determination Coefficient R^2로 확인해봤습니다. MP와 USG가 득점에는 매우 유의미한 반면 수비 스탯에서는 연관성이 다소 떨어지긴 하더군요.

관심 감사합니다. 더 배워서 더 좋은 글 써보겠습니다.

1
2019-10-24 18:20:03

 재미있는거 해보셨네요.

보통 통계분석하는 분들은 과거 선수들 기록 가지고 모델 만들어서

현재 선수들의 앞으로 성적 예측을 이 모델에 집어넣어 계산합니다.

거기에선 당연히 나이가 중요한 변수로 작용하고요.

선수들 기록은 volume과 효율 두 측면에서 모두 고민해봐야 됩니다.

효율로 간다면 출장 시간 보단 공격권 당 기록이 미래 예측에 더 적합하고요.

일반적으로 선수들 효율은 만 26세 정도 까지 증가하다 정점을 찍고 만 30-32세 정도 까지 유지된 후 감소합니다.

한 팀에서 계속 뛸 경우 polynomial 정도만 해도 어느 정도는 잘 맞는데

팀 옮기면 예측이 어긋날 때가 많죠. 

WR
1
2019-10-24 20:55:45

안녕하세요.
해외 글들을 찾아보니 여러 수치에 weight를 다르게 줘서 모델을 만들더라구요. 저도 나이와 연차에 따른 적절한 변수를 찾아서 더 좋은 모델을 찾아보고 싶네요. polynomial 모델은 제가 배워보고 적합한 분석이 있으면 또 재밌는거 해보겠습니다.
답글 감사합니다!

1
2019-10-26 09:48:11

재미있는 분석 잘 봤습니다. 저도 한 마디 거들자면 팀 동료들에 대한 정보들, 상대한 팀 선수들의 성적, 나이 및 연차, 부상여부 등이 주요한 omitted variable이 아닐까 싶습니다. 그리고 mp와 usg 간에 collinearity가 있지 않을까 싶네요. 저는 학부생때 이렇게 능동적이지 못했는데 정말 대단하십니다.

WR
1
2019-10-28 15:33:03

댓글 감사합니다. X변수 간 Collinearity도 분석 결과에 영향을 많이 미치는 요소인가요?

1
2019-10-28 23:27:03

Bias 측면에서는 괜찮은데, standard error를 부풀립니다

21
1
808
11:18
9
1
893
04:57
21
1
1503
19-11-12
34
1
1984
19-11-12
4
1
958
19-11-11
11
1
1393
19-11-11
23
1
1550
19-11-11
15
1
3796
19-11-11
11
1
2054
19-11-11
49
1
3759
19-11-10
51
1
5513
19-11-10
4
1
1352
19-11-09
18
1
2932
19-11-09
19
1
4864
19-11-09
1
1
929
19-11-08
53
1
8131
19-11-07
4
1
1269
19-11-07
23
1
3234
19-11-07
26
1
4105
19-11-06
20
1
3507
19-11-06
글쓰기
검색 대상
띄어쓰기 시 조건