프로젝트 요약
•
목표: 리그오브레전드 천상계 솔랭에서 승리를 결정짓는 가장 큰 요소는 무엇인가?
•
결과: BountyLevel이 가장 승패를 결정짓는 요소 중에 가장 많은 영향을 많이 미친다
분석 주제
천상계 솔랭에서 승패요인 중 가장 큰 비중을 차지하는 것은 무엇일까??
리그오브레전드라는 게임의 승패를 결정짓는 요인은 여러가지가 있지만 정형화된 데이터를 보고 분석했을 때, 어떠한 요인이 가장 승패를 가르는 주된 요인이 되는지 궁금하여 진행한 프로젝트
분석 진행
•
API를 이용하여 충분히 많은 양의 솔랭 데이터를 데이터 활용함
•
Y를 승패로 설정하고 나머지 요인은 전부 X값으로 분류(승, 패)를 진행함
•
중요해보이는 요인들을 뽑아내기 위한 요인분석을 해줌
•
최중요 요인들에 대한 시각화를 진행하여 어떤 양상이 나타나는지 확인했음
분석과정요약
| 데이터 수집
•
솔랭 데이터의 수집은 라이엇게임즈에서 제공해주는 API를 사용하여 데이터 수집을 진행
•
Colab환경에서 api_key를 사용하여 소환사명으로 puuid를 추출
•
puuid로 match_id를 뽑아내어 매치별 데이터를 뽑음
•
match_id를 하나만 골라 info중 participants에 제가 원하는 데이터가 있음을 확인
•
한번에 100개의 match_id를 가져올 수 있기 때문에 100개를 선택해서 가져왔고, 그 중 info가 없는건 버리고 있는 것만 행으로써 붙혀나가 데이터프레임으로 만들어줌
•
그렇게 총 95개의 매치데이터를 확보하고 merge로 데이터프레임을 붙여나감
| 데이터 전처리
•
가변수화
◦
모델에 넣어줄 것이기 때문에 모든 데이터를 가변수화
◦
단, string 데이터들은 one-hot-encoding하면 차원이 지나치게 커질 것을 우려하여, 삭제
•
게임이 정상적으로 진행되지 않거나 다른 게임 모드 걸러내기
◦
이탈자가 발생하여 게임 시작한지 3분만에 다시하기, URF 같은 경우의 매치를 레벨을 기준으로 거름
•
결측치 처리
◦
수집한 데이터에는 결측치가 없음
•
팀 담위로 묶기
◦
롤은 팀 게임이기 때문에 개인 지표보다는 팀으로 봤을 때 어느 팀이 무슨 지표가 좋았을 때의 승리 확인할 수 있을 거라고 확신
◦
이진분류 모델에 넣어주기 위해서 다시한번 target column인 win을 0과 1로 바꿔줌
| 머신러닝
•
머신러닝 모델로써는 앙상블 모델인 랜덤포레스트를 사용함
◦
이 모델은 자동으로 feature importance를 뽑아주기 때문에 승패에 있어서 어떤 요인이 중요하게 작용하는지 알기 쉽기 때문
•
이진분류문제라서 confusion matrix와 classification report로 accuracy, precision, f1 score를 다 봐줌
•
결과가 너무 좋은 것이 의심스러워서, 데이터 순서를 바꿔보기도하고 정규화를 바꿔보기도 했지만 결과는 여전히 아주 높았음
◦
Overfitting을 염두
◦
만약 좋지 않았다면, GridSraechCV로 max_depth와 n_estimators정도만 지정하여 최적화를 진행시켜줄 생각도 함
| Feature Importance
•
모델에서 나온 Feature Importance를 데이터프레임으로 만들어 필요하지 않는 열을 제거 (nexus관련, Id들, importance가 0인 요소들)
•
제거하고 다시 모델을 돌려줬을 때 나쁘지 않은 결과가 나왔고 누적중요도를 만들어서 중요도 합이 90%정도가 될 정도의 컬럼들로만 다시 freature를 뽑아서 사용하기로 결정
cumulative_importance를 만들어주었고 90% 이하가 될 정도의 feature들을 사용하기로 했다
| Correlation
•
그렇게 정제된 변수간 상관관계를 보기위해서 스피어만 상관계수를 사용하기로 결정
◦
x는 수치형이고 y는 범주형이기 때문에 피어슨보다 스피어만 상관계수가 더 적절하다고 생각
•
상관계수와 Feature Importance를 사용하여 조금 더 연관성이 높은 지표가 무엇인지 파악
| 시각화
•
마지막으로 변수들의 전체적인 분포를 확인하기 위한 boxplot과 각 변수마다 승패에 따른 barplot을 만들어 승리요인과 패배요인을 가르기로 함
◦
골드나 데미지의 경우 다른 지표들에 비해서 너무 숫자가 크기 때문에 제대로 시각화가 진행되지 않음.
▪
때문에, 너무 큰 숫자를 가지는 지표들은 없애준 후 다시 Boxplot을 진행
◦
승, 패에 따른 모든 요인에 대한 평균 수치를 barplot으로 그려내 확인
| 결론
•
Feature Importance와 Correlation에서 BountyLevel이 가장 높은 연관성을 보이고 있음을 시사
win과의 스피어만 상관관계를 나타내주었다
이 Feature Importance를 합산하면 90%정도가 나온다
| 인사이트
1.
패배팀
•
타워와 억제기를 많이 잃고
•
죽은 횟수와 부활 리젠 시간이 길면 길수록
•
데미지를 많이 받을 수록
•
패배의 확률이 올라간다
2.
승리팀
•
패배요인과 반대되는 것은 물론이요
•
적 진영 중립 몬스터를 죽인 수와 골드 소비량,
•
오브젝트를 취득 횟수도 승리 요인이다
3.
의문점
•
많은 승리 요인 중에서 bountyLevel이 가장 영향을 많이 미친 다고 분석결과는 말하고 있는데, 이것이 의미하는 것은 무엇일까?
•
게임이 끝나는 순간 아군의 현상금이 높다는 것은 그 만큼 상대방과의 글로벌 골드차이가 유의미하게 나고 있음을 의미하는데, 롤이라는 게임 특성상 상대방의 넥서스를 밀기 위해서는 최소 한 라인의 내각타워 - 억제기 - 쌍둥이 타워 - 넥서스에 해당하는 구조물을 부숴야만합니다.
◦
대부분의 게임에서는 이러한 일련의 과정이 한 라인에서만 국한되지 않으며 주로 두 라인, 많으면 세 라인까지도 내각타워와 억제기가 밀리는 상황도 빈번히 나타나는데, 승리팀의 경우 넥서스를 파괴하기 까지의 과정에서 많은 골드를 수급할 수 밖에 없는 상황임을 암시합니다. 그렇기 때문에 적의 넥서스를 터뜨릴 때의 현상금레벨이 높을 수록 승리와의 연관성이 높을 수 밖에 없다고 생각됩니다.
4.
개선점
•
저는 승패를 결정짓는 것에 VisionScore같은 것이 대단히 중요하다고 생각했습니다. 오브젝트를 둘러싼 한타나 라인전에서 일어나는 1:1이나 갱킹, 혹은 소규모 교전, 모두 시야가 먼저 열려있는 쪽이 훨신 유리하기 때문입니다. 하지만 데이터에서는 그것이 아니라고 말하고있습니다. 저의 선입견이 틀렸을 수 있지만, 승리팀의 여러가지 유리한 지표들과(킬, 어시, 포탑, 억제기, 오브젝트) VisionScore와 연관이 있다고 분명히 생각합니다.
•
데이터간 다중공선성을 확인해봐야겠다고 생각했습니다. 독립변수간 연관성이 아예없을 수는 없겠지만 다중공선성이 클 수 있겠다고 생각하였습니다. 다음에 feature를 선택해 볼 때는 다중공선성을 염두하면서 다시 뽑아 분석을 진행할 것 입니다.
(EX.패배팀의 deaths와 totalTimeSpentDead)
•
혹시 시간별 골드차이나 다른 지표를 확인할 수 있으면 좀 더 다양한 시도를 해보고 싶습니다. 지금 이 데이터는 게임이 끝났을 때의 지표이기 때문에 굉장히 결과론적인 내용만을 포함하고있지만, 실시간으로 어떤 일이 일어나고 있는지 확인할 수 있다면, 불리한 팀의 역전을 몇 분안에 해내야 가장 승리확률이 높은지, 팀의 컨셉에 맞게끔 골드 그래프가 그려지는지 등등 더 많은 것을 알 수 있을 것입니다.
•
경기 뿐만이 아니라 5개의 챔피언을 묶었을 때 팀이 어떠한 승리플랜을 위시하는지 알 수 있지 않을까? 예를 들면, '라인전이 강한 조합'이 라인전부터 상대방과의 골드차이를 쭉쭉 내면서 오브젝트를 취득하면서 승리하는 조합이라면, 골드 및 경험치 그래프, 오브젝트 획득을 파악했을 때 조합 컨셉에 맞게 흘러가는지, 흘러가지 못했으면 왜 흘러가지 못했는지, 이러한 것을 파악해보고 싶습니다.