4월, 2018의 게시물 표시

NBA 선수 Stat 데이터분석 pt3- Classification과 PCA

이미지
Category: Technology <NBA 선수 Stat 데이터 분석 - Classification> 분석에 들어가기 전에 지난번 에 이어서, 이번에는 Classification을 진행해보도록 하자. 지난번까지는 어시스트, 득점, 파울 세 가지의 특성(feature)만을 사용했었다. 그러나, 역서 모든 수치 특성 (numerical feature)를 다 사용한다면 더 정확한 모델을 만들 수 있지 않을까 하는 생각이 들었다. 그래서 이번에는 이름과 같은 텍스트 형태의 데이터와, 년도, 나이, 번호와 같이 직접적인 포지션 분류와 영향이 없다고 판단되는 특성을 제외한 나머지 모든 특성을 사용해보기로 했다.  original_data = df._get_numeric_data() del original_data["Unnamed: 0"] del original_data["Year"] del original_data["Age"] original_label = df[["New_Pos"]] true_label = np.array(original_label)[:, 0] positions = list(set([i[0] for i in df[["New_Pos"]].values])) positions = sorted(positions) #order 섞이는것 방지 아예 특성들을 정리하는김에 데이터와 레이블 부분을 따로 나누어 놓았다. Classification에서는 레이블과 데이터 부분을 나누어 학습 모델을 훈련시키고, 실제 레이블과 예측된 레이블을 비교하는 작업을 거칠 것이기 때문이다.  이렇게 하니 선수 한명당 총 45개의 특성 (Attribute)이 나왔다. 목록은 다음과 같다: ['G', 'GS', 'MP', 'PER', 'TS%', '3PAr'

NBA 선수 Stat 데이터분석 pt2- Clustering을 해보자

이미지
Category: Technology <NBA 선수 Stat 데이터 분석 - Clustering> 지난번의 게시글  에서 다뤘던 NBA 선수 데이터를 다시 한번 가져와봤다. 지난번엔 득점, 파울, 그리고 어시스트의 세 가지를 Feature(특성)으로 해서 20,000명이 넘는 선수의 데이터의 회귀분석을 시도했다. 그렇지만 워낙 분산이 크고, 세 가지 특성만을 가지고 회귀분석을 하기에는 정확도가 높은 편은 아니었다.  이번에는 '포지션'을 한번 고려해서 Clustering과 Classifying을 해보면 어떨까 하는 생각이 들었다. 농구 경기에서는 포지션별로 조금씩 역할이 다르다. 세 가지로 크게 나눌 때 주로 후방에서 패스를 돌리고, 외곽 공격이나 전체적인 공의 운반을 하게되는 가드, 반면 전방에 위치하여 몸싸움을 담당하고 링(골대)와 가까운 곳으로 뛰어드는 포워드, 그리고 보통 가장 큰 덩치를 가지고 골 밑을 지키는 센터 는 현대 농구에 들어서는 점점 포지션의 경계가 (예전에비해) 흐려지고 한 선수가 여러 포지션을 겸하는 일도 늘어나고 있기는 하지만 분명 플레이스타일과 역할에 차이가 있다. 세 포지션 안에서도 세부적인 역할에 따라 역할이 나뉘기도 한다. (ex: 슈팅을 중점적으로 하는 가드는 슈팅 가드, 경기의 운영과 볼의 운반, 패스와 공격 작전을 주도하는 가드는 포인트 가드라고 한다.) 그러다보니 (맞건 틀리건) 일반적으로 가드가 센터에 비해 슛을 잘한다던지, 가드에 비해 포워드나 센터가 리바운드에 강점을 보인다던지, 가드는 몸싸움에 약하다던지 하는 통념이 자리잡게되었다.  그렇다면, 선수들의 특성 (Stat)을 통해 포지션을 구별해낼 수 있을까? 또 만일 선수들의 특성을 통해 이상적인 포지션을 예측하는 모델을 만들어낸다면, 능력치에 맞지 않는 포지션을 맡아 뛰고있는 선수들이 누구인지 알 수 있지 않을까? 또한 앞으로 신인 선수를 발굴할 때 이 선수가 가장 기량을 잘 펼 수 있는 포지션이 무엇일지 시행