SlideShare a Scribd company logo
1 of 29
Download to read offline
정글 럭스를 위하여
“마스터 1”의 랭크전 승리 예측
davinnovation@gmail.com
데이터 분석 대회에서 높은 점수 받기
정파
데이터를 보면 아인슈타인, 폰
노이만 급으로 머리 속에 통찰이
박히면서 바로 수리통계적 분석을
마치고 모델을 학습 및 답 제출 후
scoreboard는 보지 않고 1등
도메인에 대한 심도 깊은 통찰력
수 많은 머신 러닝 모델에 대한 수학적 이해
다양한 모델을 구현하는 뛰어난 프로그래밍 능력
최소 다이아
최소 박사
최소 초등정보영재
데이터 분석 대회에서 높은 점수 받기
사파
좋게 말하면 Heuristic
직설적으로 NOGADA
Try-Error-Feedback
저는 물론 노가다 했습니다
좋은 노가다를 위한 TIP
1. 나올만한 곳을 판다 == 데이터 설계
2. 다양한 곳에서 시도한다 == 모델의 다양성
3. 좋은 연장을 사용한다 == 좋은 Framework와 모델
(*3은 elice의 짧은 대회 기간 및 멘탈을 위해 매우 중요한 요소입니다.)
나올만한 곳을 판다 == 데이터 설계
{
"matchDuration": 1716, // 초 단위, 얼마나 게임이 오래 지속되었는가를 의미
"teams": [ // 2개의 Dictionary
{
"firstDragon": true, // 이 팀이 용(몬스터)를 먼저 죽였는가
"dragonKills": 2, // 이 팀이 용을 몇번 죽였는가
"winner": false, // 이 팀이 대전에서 승리했는가
"firstBaron": false, // 이 팀이 바론(몬스터)를 먼저 죽였는가
"baronKills": 0, // 이 팀이 바론을 몇번 죽였는가
"firstBlood": false, // 첫 킬이 이 팀에서 나왔는가
"teamId": 100 // 팀 ID
},
...
],
"participants": [ // 10개의 Dictionary
{
"championId": 412, // 챔피언 (캐릭터) ID
"summonerId": 21983, // 플레이하는 게이머의 ID
"teamId": 100, // 팀 ID (teams의 teamId와 매치됨)
"stats": { // 이번 대전에서의 통계를 의미
"kills": 2, // 이 게이머가 다른 게이머를 몇번 죽였는가
"deaths": 8, // 이 게이머가 몇번 죽었는가
"assists": 11, // 다른 게이머를 죽이는데 몇번 도움을 주었는가
"goldEarned": 7314, // 총 획득한 골드 (게임 내 화폐)
"totalDamageDealt": 27629, // 몬스터 + 게이머에게 가한 총 데미지
"totalDamageDealtToChampions": 9507, // 게이머에게만 가한 총 데미지
"totalDamageTaken": 20419, // 받은 총 피해
"minionsKilled": 37, // 죽인 미니언(몬스터) 수
"totalHeal": 1014, // 총 치유량
"totalTimeCrowdControlDealt": 241, // 다른 플레이어에게 Crowd Control (CC) 를 사용한 총 시간
"wardsPlaced": 5 // Ward(시야를 넓혀주는 아이템) 을 맵에 장착한 횟수
"items": [ // 아이템 정보
3401,
2049,
1031,
3270,
0,
2043,
{
"teams": [ // 2개의 팀이 있습니다.
{
"teamId": 200 // 팀 ID
},
...
],
"participants": [ // 10명의 게이머 정보
{
"championId": 421, // 챔피언 (플레이 캐릭터) ID
"summonerId": 22082, // 게이머 ID
"teamId": 100 // 팀 ID
},
...
]
}
다양한 곳에서 시도한다 == 모델의 다양성
And Hyperparameter Tuning
좋은 연장을 사용한다 == 좋은 Framework
Experiment. Iter 0
{
"teams": [ // 2개의 팀이 있습니다.
{
"teamId": 200 // 팀 ID
},
...
],
"participants": [ // 10명의 게이머 정보
{
"championId": 421, // 챔피언 (플레이 캐릭터) ID
"summonerId": 22082, // 게이머 ID
"teamId": 100 // 팀 ID
},
...
]
}
Test에서 받을 수 있는 정보는
챔피언 ID, 게이머 ID, 팀
<생각의 흐름>
게임할 때 우디르를 밴하진 않고…
제일 중요한 건 챔피언이겠지?
1 0 0 1 0…
챔피언 수
0 0 1 1 0…
챔피언 수
+
Team 100 Team 200
Sparse Matrix
Experiment. Iter 0
1 0 0 1 0…
챔피언 수
0 0 1 1 0…
챔피언 수
+
Team 100 Team 200
<- Data Input
<- Model
<- Output0 || 1
Logistic Regression, Decision Tree, Neural Network,
Gradient Boost, SVC, KNN…
이거 파라미터도 튜닝하고, 여러 모델도
돌려보고, 앙상블도 많이 해야하고…
Experiment. Iter 0
1 0 0 1 0…
챔피언 수
0 0 1 1 0…
챔피언 수
+
Team 100 Team 200
<- Data Input
<- Model
<- Output0 || 1
얘가 다해줌 ㄱㅇㄷ
Experiment. Iter 0 result
롤은 그래도 컨트롤 겜인데 챔피언만 보면 65 정도겠지?
그것도 마스터1 인데;; 원챔 장인도 있을거고…
아무리 OP챔 해도 정도가 있겠지…
라이엇이 놀고만 있을리가…
Experiment. Iter 0 result
85??? 롤은 OP조합 겜이였습니다…
도벽이즈하세요
만족 후 그만하려고 했으나….
Experiment. Iter 0 result
Experiment. Iter 1
{
"teams": [ // 2개의 팀이 있습니다.
{
"teamId": 200 // 팀 ID
},
...
],
"participants": [ // 10명의 게이머 정보
{
"championId": 421, // 챔피언 (플레이 캐릭터) ID
"summonerId": 22082, // 게이머 ID
"teamId": 100 // 팀 ID
},
...
]
}
챔피언 정보, 팀 정보는 줬으니
남은건 게이머의 정보
op.gg보면 같은 팀으로 게임한 소환사들 (최근 20 게임)이
있던데 괜히 넣어둔건 아니겠지
1 0 0 1 0…
챔피언 수
0 0 1 1 0…
챔피언 수
+
Team 100
Team 200
Sparse Matrix
<생각의 흐름>
+ 3 0 2 1 0 3 2 1 0 0
Team 100
같이 플레이해서
이겼으면 + 1 졌으면 -1 * alpha ( < 1 )
최종 남은 값
Experiment. Iter 1
3 0 2 1playerA B,C,D,E
3 -1 1 0playerB A,C,D,E
자기 팀 내의 소환사 조합만 고려
…. X 10
부록 : 버스 의심 혹은 천생의 연분
부록 : 고의 트롤링 의심
1 0 0 1 0…
챔피언 수
0 0 1 1 0…
챔피언 수
+
Team 100
+
Experiment. Iter 1
응 또 85 ( 소수점 높아짐 )
Experiment. Iter 2
500playerA
0playerB
소환사의 해당 챔피언 플레이 횟수
…. X 10
거의 시메 원챔급
신챔을 돌리네 || train에서 나오지 않은 소환사
1 0 0 1 0…
챔피언 수
0 0 1 1 0…
챔피언 수
+
Team 100
+
Experiment. Iter 2
응 또 85
Experiment. Iter 3
500playerA
0playerB
선택된 챔피언의 승률(train에서)
…. X 10
쓰레기 챔
OP 챔인듯
1 0 0 1 0…
챔피언 수
0 0 1 1 0…
챔피언 수
+
Team 100
+
Experiment. Iter 3
응 또 85
Experiment. Iter 4
Iter2 + Iter3 + Iter4
Experiment. Iter 4
86!
Auto ML에서 선택된 모델은 Gradient Boost Model
( Not Ensemble Model )
Experiment. Iter 5
Iter2 + Iter3 + Iter4
요약하면 Conv1D 사용함 ==
Experiment. Iter 5
87!!!
실제 트레이닝 시 val_acc이 엄청 튑니다.
Callback으로 최고 모델을 낚읍시다
Abstract : ML 대회란…
그냥 하면 됨
도메인 지식… 수없이 많은 트레이닝… 각종 노가다…
라이엇은 승률 요인에 대해 알고 있을까요
그래서 제가 한번 물어봤습니다
Q. 마스터 티어의 랭크전 승리 요소는 무엇인가요?
조합만 알면 대부분 됩니다
이상 브1의 롤
분석이였습니다.
경청해주셔서
감사합니다
If… 1주일이 아니였으면
막 이런 시각화 하고
데이터 한줄씩 읽어보고
분석하면 좋습니다…
Q & A 는 없습니다
이상입니다
davinnovation@gmail.com

More Related Content

More from Dong Heon Cho

More from Dong Heon Cho (20)

Forward-Forward Algorithm
Forward-Forward AlgorithmForward-Forward Algorithm
Forward-Forward Algorithm
 
What is Texture.pdf
What is Texture.pdfWhat is Texture.pdf
What is Texture.pdf
 
BADGE
BADGEBADGE
BADGE
 
Neural Radiance Field
Neural Radiance FieldNeural Radiance Field
Neural Radiance Field
 
2020 > Self supervised learning
2020 > Self supervised learning2020 > Self supervised learning
2020 > Self supervised learning
 
All about that pooling
All about that poolingAll about that pooling
All about that pooling
 
Background elimination review
Background elimination reviewBackground elimination review
Background elimination review
 
Transparent Latent GAN
Transparent Latent GANTransparent Latent GAN
Transparent Latent GAN
 
Image matting atoc
Image matting atocImage matting atoc
Image matting atoc
 
Multi object Deep reinforcement learning
Multi object Deep reinforcement learningMulti object Deep reinforcement learning
Multi object Deep reinforcement learning
 
Multi agent reinforcement learning for sequential social dilemmas
Multi agent reinforcement learning for sequential social dilemmasMulti agent reinforcement learning for sequential social dilemmas
Multi agent reinforcement learning for sequential social dilemmas
 
Multi agent System
Multi agent SystemMulti agent System
Multi agent System
 
Hybrid reward architecture
Hybrid reward architectureHybrid reward architecture
Hybrid reward architecture
 
Use Jupyter notebook guide in 5 minutes
Use Jupyter notebook guide in 5 minutesUse Jupyter notebook guide in 5 minutes
Use Jupyter notebook guide in 5 minutes
 
AlexNet and so on...
AlexNet and so on...AlexNet and so on...
AlexNet and so on...
 
Deep Learning AtoC with Image Perspective
Deep Learning AtoC with Image PerspectiveDeep Learning AtoC with Image Perspective
Deep Learning AtoC with Image Perspective
 
How can we train with few data
How can we train with few dataHow can we train with few data
How can we train with few data
 
Domain adaptation gan
Domain adaptation ganDomain adaptation gan
Domain adaptation gan
 
Dense sparse-dense training for dnn and Other Models
Dense sparse-dense training for dnn and Other ModelsDense sparse-dense training for dnn and Other Models
Dense sparse-dense training for dnn and Other Models
 
Squeeeze models
Squeeeze modelsSqueeeze models
Squeeeze models
 

LOL win prediction

  • 1. 정글 럭스를 위하여 “마스터 1”의 랭크전 승리 예측 davinnovation@gmail.com
  • 2. 데이터 분석 대회에서 높은 점수 받기 정파 데이터를 보면 아인슈타인, 폰 노이만 급으로 머리 속에 통찰이 박히면서 바로 수리통계적 분석을 마치고 모델을 학습 및 답 제출 후 scoreboard는 보지 않고 1등 도메인에 대한 심도 깊은 통찰력 수 많은 머신 러닝 모델에 대한 수학적 이해 다양한 모델을 구현하는 뛰어난 프로그래밍 능력 최소 다이아 최소 박사 최소 초등정보영재
  • 3. 데이터 분석 대회에서 높은 점수 받기 사파 좋게 말하면 Heuristic 직설적으로 NOGADA Try-Error-Feedback
  • 4. 저는 물론 노가다 했습니다 좋은 노가다를 위한 TIP 1. 나올만한 곳을 판다 == 데이터 설계 2. 다양한 곳에서 시도한다 == 모델의 다양성 3. 좋은 연장을 사용한다 == 좋은 Framework와 모델 (*3은 elice의 짧은 대회 기간 및 멘탈을 위해 매우 중요한 요소입니다.)
  • 5. 나올만한 곳을 판다 == 데이터 설계 { "matchDuration": 1716, // 초 단위, 얼마나 게임이 오래 지속되었는가를 의미 "teams": [ // 2개의 Dictionary { "firstDragon": true, // 이 팀이 용(몬스터)를 먼저 죽였는가 "dragonKills": 2, // 이 팀이 용을 몇번 죽였는가 "winner": false, // 이 팀이 대전에서 승리했는가 "firstBaron": false, // 이 팀이 바론(몬스터)를 먼저 죽였는가 "baronKills": 0, // 이 팀이 바론을 몇번 죽였는가 "firstBlood": false, // 첫 킬이 이 팀에서 나왔는가 "teamId": 100 // 팀 ID }, ... ], "participants": [ // 10개의 Dictionary { "championId": 412, // 챔피언 (캐릭터) ID "summonerId": 21983, // 플레이하는 게이머의 ID "teamId": 100, // 팀 ID (teams의 teamId와 매치됨) "stats": { // 이번 대전에서의 통계를 의미 "kills": 2, // 이 게이머가 다른 게이머를 몇번 죽였는가 "deaths": 8, // 이 게이머가 몇번 죽었는가 "assists": 11, // 다른 게이머를 죽이는데 몇번 도움을 주었는가 "goldEarned": 7314, // 총 획득한 골드 (게임 내 화폐) "totalDamageDealt": 27629, // 몬스터 + 게이머에게 가한 총 데미지 "totalDamageDealtToChampions": 9507, // 게이머에게만 가한 총 데미지 "totalDamageTaken": 20419, // 받은 총 피해 "minionsKilled": 37, // 죽인 미니언(몬스터) 수 "totalHeal": 1014, // 총 치유량 "totalTimeCrowdControlDealt": 241, // 다른 플레이어에게 Crowd Control (CC) 를 사용한 총 시간 "wardsPlaced": 5 // Ward(시야를 넓혀주는 아이템) 을 맵에 장착한 횟수 "items": [ // 아이템 정보 3401, 2049, 1031, 3270, 0, 2043, { "teams": [ // 2개의 팀이 있습니다. { "teamId": 200 // 팀 ID }, ... ], "participants": [ // 10명의 게이머 정보 { "championId": 421, // 챔피언 (플레이 캐릭터) ID "summonerId": 22082, // 게이머 ID "teamId": 100 // 팀 ID }, ... ] }
  • 6. 다양한 곳에서 시도한다 == 모델의 다양성 And Hyperparameter Tuning
  • 7. 좋은 연장을 사용한다 == 좋은 Framework
  • 8. Experiment. Iter 0 { "teams": [ // 2개의 팀이 있습니다. { "teamId": 200 // 팀 ID }, ... ], "participants": [ // 10명의 게이머 정보 { "championId": 421, // 챔피언 (플레이 캐릭터) ID "summonerId": 22082, // 게이머 ID "teamId": 100 // 팀 ID }, ... ] } Test에서 받을 수 있는 정보는 챔피언 ID, 게이머 ID, 팀 <생각의 흐름> 게임할 때 우디르를 밴하진 않고… 제일 중요한 건 챔피언이겠지? 1 0 0 1 0… 챔피언 수 0 0 1 1 0… 챔피언 수 + Team 100 Team 200 Sparse Matrix
  • 9. Experiment. Iter 0 1 0 0 1 0… 챔피언 수 0 0 1 1 0… 챔피언 수 + Team 100 Team 200 <- Data Input <- Model <- Output0 || 1 Logistic Regression, Decision Tree, Neural Network, Gradient Boost, SVC, KNN… 이거 파라미터도 튜닝하고, 여러 모델도 돌려보고, 앙상블도 많이 해야하고…
  • 10. Experiment. Iter 0 1 0 0 1 0… 챔피언 수 0 0 1 1 0… 챔피언 수 + Team 100 Team 200 <- Data Input <- Model <- Output0 || 1 얘가 다해줌 ㄱㅇㄷ
  • 11. Experiment. Iter 0 result 롤은 그래도 컨트롤 겜인데 챔피언만 보면 65 정도겠지? 그것도 마스터1 인데;; 원챔 장인도 있을거고… 아무리 OP챔 해도 정도가 있겠지… 라이엇이 놀고만 있을리가…
  • 12. Experiment. Iter 0 result 85??? 롤은 OP조합 겜이였습니다… 도벽이즈하세요 만족 후 그만하려고 했으나….
  • 14. Experiment. Iter 1 { "teams": [ // 2개의 팀이 있습니다. { "teamId": 200 // 팀 ID }, ... ], "participants": [ // 10명의 게이머 정보 { "championId": 421, // 챔피언 (플레이 캐릭터) ID "summonerId": 22082, // 게이머 ID "teamId": 100 // 팀 ID }, ... ] } 챔피언 정보, 팀 정보는 줬으니 남은건 게이머의 정보 op.gg보면 같은 팀으로 게임한 소환사들 (최근 20 게임)이 있던데 괜히 넣어둔건 아니겠지 1 0 0 1 0… 챔피언 수 0 0 1 1 0… 챔피언 수 + Team 100 Team 200 Sparse Matrix <생각의 흐름> + 3 0 2 1 0 3 2 1 0 0 Team 100 같이 플레이해서 이겼으면 + 1 졌으면 -1 * alpha ( < 1 ) 최종 남은 값
  • 15. Experiment. Iter 1 3 0 2 1playerA B,C,D,E 3 -1 1 0playerB A,C,D,E 자기 팀 내의 소환사 조합만 고려 …. X 10 부록 : 버스 의심 혹은 천생의 연분 부록 : 고의 트롤링 의심 1 0 0 1 0… 챔피언 수 0 0 1 1 0… 챔피언 수 + Team 100 +
  • 16. Experiment. Iter 1 응 또 85 ( 소수점 높아짐 )
  • 17. Experiment. Iter 2 500playerA 0playerB 소환사의 해당 챔피언 플레이 횟수 …. X 10 거의 시메 원챔급 신챔을 돌리네 || train에서 나오지 않은 소환사 1 0 0 1 0… 챔피언 수 0 0 1 1 0… 챔피언 수 + Team 100 +
  • 19. Experiment. Iter 3 500playerA 0playerB 선택된 챔피언의 승률(train에서) …. X 10 쓰레기 챔 OP 챔인듯 1 0 0 1 0… 챔피언 수 0 0 1 1 0… 챔피언 수 + Team 100 +
  • 21. Experiment. Iter 4 Iter2 + Iter3 + Iter4
  • 22. Experiment. Iter 4 86! Auto ML에서 선택된 모델은 Gradient Boost Model ( Not Ensemble Model )
  • 23. Experiment. Iter 5 Iter2 + Iter3 + Iter4 요약하면 Conv1D 사용함 ==
  • 24. Experiment. Iter 5 87!!! 실제 트레이닝 시 val_acc이 엄청 튑니다. Callback으로 최고 모델을 낚읍시다
  • 25. Abstract : ML 대회란… 그냥 하면 됨 도메인 지식… 수없이 많은 트레이닝… 각종 노가다… 라이엇은 승률 요인에 대해 알고 있을까요
  • 26. 그래서 제가 한번 물어봤습니다 Q. 마스터 티어의 랭크전 승리 요소는 무엇인가요? 조합만 알면 대부분 됩니다
  • 28. If… 1주일이 아니였으면 막 이런 시각화 하고 데이터 한줄씩 읽어보고 분석하면 좋습니다…
  • 29. Q & A 는 없습니다 이상입니다 davinnovation@gmail.com