모델 성능 개선에 대한 내용
바로 직전 내용이지만, 다시 한번 정리하고 넘어가는게 좋을 것 같다.
매치 정보와 팀 데이터를 토대로 모델 학습을 진행하였고, 모델의 성능이 좋은 편은 아니었다.
그래서 모델의 성능 개선을 위한 고민이 자연스럽게 진행되는데
최초 가지고있던 데이터셋 기준에서 보면, 선수들에 대한 데이터도 있었다는 걸 알 수 있다.(df_player_att)
EDA 과정에서 보았던 df_player_att 테이블의 특징 중 하나는 overall_rating 변수 기준 다른 변수들과의 상관성이었다.
골키퍼(gk) 관련 변수들을 제외하고는 다른 변수들과의 상관성이 있었기에
df_player_att 테이블에서 overall_rating 변수 만을 가지고 추가 정보를 담아보려고 한다.
※ 물론, 다른 변수들을 추가하여 모든 변수를 대상으로 모델 학습까지 진행하는 것도 가능하다. 하지만 너무 많은 변수들이 학습 대상으로 들어가게 되면 오히려 문제가 될 수 있다. 이를 차원의 저주 로 불리우는데
"차원의 저주란 차원이 증가하면서 학습데이터 수가 차원 수보다 적어져서 성능이 저하되는 현상을 일컫는다. 차원이 증가할수록 변수가 증가하고, 개별 차원 내에서 학습할 데이터 수가 적어진다. 이때 주의할 점은 변수가 증가한다고 반드시 차원의 저주가 발생하는 것은 아니다."
라고 한다.
이러한 이유로 위 데이터에서는 overall_rating 변수만을 추가하도록 하자
# overall_rating 의 평균을 player_map에 담기
player_map = df_player_att.groupby('player_api_id').mean()['overall_rating']
# 홈, 어웨이 선수들별 평균 overall_rating을 각각 변수로 추가하기
for col in (s + str(idx) for s in ['home_player_', 'away_player_'] for idx in range(1, 12)):
df[col + '_rating'] = df_match[col].map(player_map)
## 데이터 중 overall_rating 정보가 없는 케이스도 있었으니, 해당 부분은 drop으로 제거한다.
df.dropna(inplace = True)
## 데이터 표준화 과정
X_num = df.drop(['matchResult'] + col_cats, axis = 1)
scaler = StandardScaler()
scaler.fit(X_num)
X_scaled = scaler.transform(X_num)
X_scaled = pd.DataFrame(data = X_scaled, index = X_num.index, columns = X_num.columns)
X_cat = pd.get_dummies(df[col_cats], drop_first = True)
X = pd.concat([X_scaled, X_cat], axis = 1)
y = df['matchResult']
이후 train, test 데이터 분류와 학습 과정은 동일하다. (생략)
모델 결과 확인
- 우선 두 모델 모두 성능 개선이 된 것을 알 수 있다. (여전히 일정 기준을 통과하기엔 아직 저조하지만)


- 변수의 상관성(Rogistic Regression) 비교

- 변수의 중요도(XGBoost) 비교

두 그래프를 통해 알 수 있는건
기존에는 범주형 변수들이 수치형보다 훨씬 의미있는 변수로 여겨졌는데
개선 후 진행한 모델 결과에서는 수치형 변수들의 상관성 or 중요성이 상승했음을 알 수 있다.
이 말인 직슨, 수치형 변수들 중 팀 관련 정보들 보다 선수 개인의 변수만 모델에 담아서 본다면 추가적인 성능 개선도 기대할 수 있지 않을까?!?!
마무리로,,
강사님의 말씀처럼 최초 데이터를 확인하고, 최종 모델까지의 한 사이클을 가져갈 때
모델의 기준은 가능한 베이스 수준으로 잡는 것이 효율적일 것 같았다.
너무 많은 내용을 담거나 보고자한다면 현실적인 상황에서 충돌이 발생할 것이고 결국 제대로된 결과하나 없이 분석 프로젝트가 마무리될 가능성도 높다.
우선 베이스 수준의 모델링 사이클을 거치고, EDA 및 전처리 과정에서 추가 개선할 여지가 있었는지 있다면 어떻게 개선하면 좋을지 고민해가며 모델 성능 개선을 생각하는 것이 효과적이다.
사실 분석에 정답이 없겠지만,
그래도 이번 강의를 통해 살짜쿵 막막한 상황에 놓였을 때 어디부터 어떻게 접근하면 좋을까 에 대한 팁을 정리할 수 있었던 것 같아 좋았다.
길고도 길었던 축구 데이터 분석은 이렇게 끝!
http://bit.ly/3Y34pE0
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.
'Analytics > Study' 카테고리의 다른 글
실전#5 미국의 대통령은 어떻게 뽑힐까(2) (0) | 2023.03.16 |
---|---|
실전#5 미국의 대통령은 어떻게 뽑힐까(1) (0) | 2023.03.15 |
실전#4 오늘 밤 유럽 축구, 어디가 이길까(6) (0) | 2023.03.13 |
실전#4 오늘 밤 유럽 축구, 어디가 이길까(5) (0) | 2023.03.12 |
실전#4 오늘 밤 유럽 축구, 어디가 이길까(4) (1) | 2023.03.11 |