데이터 전처리 과정
cf. 이번 강의는 결론만 보면 이해가 되지만, 과정으로는 살짝 만족스럽지 못했던 강의였다. 이유는 아래에 조금 더 자세하게
데이터 전처리 과정 전에 우선 Multicollinearity를 방지하는 과정부터 시작하자.
특정 변수들 간 상관성이 높아 하나의 변수만 봐도 되는 변수들을 drop 시키도록 하자
df.drop(['gameId', 'redFirstBlood', 'redKills', 'redDeaths',
'redTotalGold', 'redTotalExperience', 'redGoldDiff',
'redExperienceDiff'], axis = 1, inplace = True)
- gameId : 고유 id 개념이기 때문에 실제 분석에서 변수로서 의미를 지니기 어렵다.
- redFirstBlood : blueFirstBlood와 정확히 반대되는 변수. blue 사이드 변수만 취급해도 충분하다.
- 이하 나머지 red*** 변수들 : blue 사이드 변수만 취급해도 충분한 변수들이다.
위 과정에서 결과를 이해하고 나면 손쉽게 정리가 되는 부분이지만,
강의의 과정이 만족스럽지 못했던 이유는 이러한 케이스가 이번 데이터 셋 기준에만 워킹할 것 같다는 생각이 들어서다.
물론, 비슷한 기준으로 다른 분석 주제에 적용하여 결론을 가져갈 수 있겠지만
조금 더 수학적이고, 주관적인 판단이 덜 들어간 프로세스가 있었으면 어땠을까 하는 아쉬움이 남는 것 같다.
이후 표준화 처리 과정도 비슷한 의견인데,
코드상으로 정리하자면 변수 list들은 아래처럼 구분된다.
X_num = df[['blueWardsPlaced', 'blueWardsDestroyed',
'blueKills', 'blueDeaths', 'blueAssists', 'blueEliteMonsters',
'blueTowersDestroyed', 'blueTotalGold',
'blueAvgLevel', 'blueTotalExperience', 'blueTotalMinionsKilled',
'blueTotalJungleMinionsKilled', 'blueGoldDiff', 'blueExperienceDiff',
'blueCSPerMin', 'blueGoldPerMin', 'redWardsPlaced', 'redWardsDestroyed',
'redAssists', 'redEliteMonsters', 'redTowersDestroyed', 'redAvgLevel', 'redTotalMinionsKilled',
'redTotalJungleMinionsKilled', 'redCSPerMin', 'redGoldPerMin']]
X_cat = df[['blueFirstBlood', 'blueDragons', 'blueHeralds', 'redDragons', 'redHeralds']]
scaler = StandardScaler()
scaler.fit(X_num)
X_scaled = scaler.transform(X_num)
X_scaled = pd.DataFrame(X_scaled, index = X_num.index, columns = X_num.columns)
X = pd.concat([X_scaled, X_cat], axis = 1)
y = df['blueWins']
수치형과 범주형 변수를 구분하여 수치형의 경우 표준화 작업까지 반영한다.
이후 과정은 이전 강의들과 유사한 방식으로 진행된다.
최종적으로 표준화까지 완료된 X 데이터의 형태는 아래와 같다.
이 부분도 개인적으로 아쉬웠던건
수치형과 범주형을 하나하나씩 구분하며 정리를 하는 과정이 smart한 방법일까? 하는 점이었다.
물론 롤에 대한 이해가 높다면(=도메인 이해가 높다면) 어렵지 않은 과정일 수 있겠지만
개인적으로는 아무리 도메인 이해가 높은 사람일지라도 사람이기 때문에 휴먼 에러가 발생할 수 있다고 생각한다.
(강의에서조차 잠깐씩 실수로 인한 컬럼 조정이 있었으니 그리 과한 걱정은 아닐것이다)
이러한 휴먼 에러는 너무나도 허무하고 예상할 수 없는 오류이기 때문에
이러한 부분도 방지할 수 있도록 룰셋 기반 변수를 나누는 방법은 어떨까 싶은 생각이 들었다.
적다보니 주절주절 이기는 했는데
이전 글에서도 살짝 답답했던 부분을 해소하기 위해 별도 코드 작업을 진행했는데
# binary 데이터인 컬럼 list 보기
[[col, len(df[col].unique()), df[col].dtype] for col in df.columns if len(df[col].unique()) == 2]
이런식으로 보완할 수 있는 부분은 최대한 보완이 필요해보인다.
(어쨌든 개인적인 학습에 도움은 되니까 이렇게 주절주절 정도에서 마무리할까 한다)
http://bit.ly/3Y34pE0
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.
'Analytics > Study' 카테고리의 다른 글
실전#4 오늘 밤 유럽 축구, 어디가 이길까(1) (0) | 2023.03.08 |
---|---|
실전#3 데이터로 알아보는 리그 오브 레전드의 승리 공식(3) (1) | 2023.03.07 |
실전#3 데이터로 알아보는 리그 오브 레전드의 승리 공식(1) (0) | 2023.03.05 |
실전#2 데이터로 살펴보는 우리 아이 학습 성공/실패 요소(5) (0) | 2023.03.04 |
실전#2 데이터로 살펴보는 우리 아이 학습 성공/실패 요소(4) (0) | 2023.03.03 |