Search

리그오브레전드 데이터분석

기간
1주 개인 프로젝트
태그
RIOT API
머신러닝
EDA
프로젝트 요약
목표: 리그오브레전드 천상계 솔랭에서 승리를 결정짓는 가장 큰 요소는 무엇인가?
결과: BountyLevel이 가장 승패를 결정짓는 요소 중에 가장 많은 영향을 많이 미친다

분석 주제

천상계 솔랭에서 승패요인 중 가장 큰 비중을 차지하는 것은 무엇일까??
리그오브레전드라는 게임의 승패를 결정짓는 요인은 여러가지가 있지만 정형화된 데이터를 보고 분석했을 때, 어떠한 요인이 가장 승패를 가르는 주된 요인이 되는지 궁금하여 진행한 프로젝트

분석 진행

API를 이용하여 충분히 많은 양의 솔랭 데이터를 데이터 활용함
Y를 승패로 설정하고 나머지 요인은 전부 X값으로 분류(승, 패)를 진행함
중요해보이는 요인들을 뽑아내기 위한 요인분석을 해줌
최중요 요인들에 대한 시각화를 진행하여 어떤 양상이 나타나는지 확인했음

분석과정요약

자세히※ - Colab 코드

| 데이터 수집

솔랭 데이터의 수집은 라이엇게임즈에서 제공해주는 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개의 챔피언을 묶었을 때 팀이 어떠한 승리플랜을 위시하는지 알 수 있지 않을까? 예를 들면, '라인전이 강한 조합'이 라인전부터 상대방과의 골드차이를 쭉쭉 내면서 오브젝트를 취득하면서 승리하는 조합이라면, 골드 및 경험치 그래프, 오브젝트 획득을 파악했을 때 조합 컨셉에 맞게 흘러가는지, 흘러가지 못했으면 왜 흘러가지 못했는지, 이러한 것을 파악해보고 싶습니다.