도전 평점제가 최초로 도입된 1.8.5 테스트 버전에서 자주 나왔던 이야기들이 있습니다.
'상위 몇 %'는 잘 공감 안 된다. 높이 나와도 왜 그런지 잘 모르겠고.
플레이 안 한 사람들(못 깬 사람들)은 100%에도 못 드는 건데, 그런 사람들 고려해서 최저점을 80%로 잡으면 어떨까요?
상위 몇 %가 포기한 사람은 보여주지 않고 깬 사람들 중에서만 보여준다는 점이, 난 잘 했는데 90몇 퍼센트 나와서 (기분이 좋지 않았어요). 포기한 사람을 포함하지 않는다는 것을 이걸(90몇 퍼센트) 보고 알았어요.
왜냐하면 1.8.5에서는 상위 70.xx%, 상위 80.xx%보다 상위 97.xx%, 상위 98.xx%, 상위 99.xx%를 보는 경우가 훨씬 잦았거든요.
v1.8.5 패치 노트: https://blog.naver.com/ravitastudio/224373963000
런타임 시간 기록의 중앙값이 60초인 우주선을, 실력 있는 사람은 8초 안에 풀기도 하지만, 240초만에 푸는 사람도 있고, 심지어는 600초 걸려서 푸는 사람도 있습니다.
1.8.5에서는 240초 동안 푸는 사람이 상위 97.xx%라고 알려주고, 600초 동안 푸는 사람이 상위 99.xx%라고 알려줬죠.
이건 현실과 잘 맞지 않습니다.
그래서 상위 비율을 계산하는 공식을 변경하였습니다!
조건이 몇 가지 있는데요...
먼저, 중앙값(상위 50%)에 해당하는 런타임 시간 기록은 우주선마다 정해져 있습니다.
그리고 런타임 시간 기록이 시간이라는 특성 때문에, (0, inf) 사이에서 확률분포가 정의되어야 합니다.
그런데 inf(양의 무한대) 쪽의 꼬리가 지금보다 두꺼워야 합니다.
처음에 고려한 확률분포는 로그 정규분포였습니다!
확률변수 X의 값에 자연로그를 취한 값이 정규분포를 따르는 확률분포입니다.
런타임 시간에 로그를 씌울 때 대충 선형적인 분포가 나오는 성향이 있기 때문에, 이 확률분포가 적절하다고 생각했습니다!
그러나... 상위 비율 값은 의도대로 잘 나오지 않았습니다.
60초 걸려서 풀기를 기대하는 우주선을 8초만에 푼 사람을 상위 3%로 잡으면 240초만에 푼 사람이 상위 90.2%가 되고, 600초만에 푼 사람이 상위 98.41%가 됩니다.
그러나.. 과연 600초보다 더 오랫동안 이 우주선을 붙잡고 있는 사람 수와 포기한 사람 수의 합이 전체의 1.6%밖에 안 될까요?
그래서 240초 걸려서 푼 사람을 상위 75%로 잡고 다시 계산해 보았습니다.
그랬더니 8초만에 푼 사람은 상위 16.3%밖에 안 되더라고요.
8초면 엄청 빨리 푼 겁니다. 그런데 겨우 상위 16.3%라니요.
게다가 이 조건이라면 상위 1% 안에 들기 위해 우주선을 처음 본 후 0.5초만에 우주선을 탈출해야 합니다.
매크로 없이 인간이 낼 수 없는 기록이죠. 🤖
그래서 다른 확률분포를 찾아보기로 했습니다!
로그 정규분포처럼 (0, inf) 사이에서 정의되고 비대칭 분포이지만 inf 쪽 꼬리가 더 두껍고 0쪽 꼬리가 더 얇은 확률분포 말입니다.
후보로 [로그 로지스틱 분포](https://en.wikipedia.org/wiki/Log-logistic_distribution) 와 [프레셰 분포](https://en.wikipedia.org/wiki/Fr%C3%A9chet_distribution) 가 있네요!
먼저 로그 로지스틱 분포를 살펴볼까요?
중앙값이 60초이고 240초 달성한 사람이 상위 75%라고 할 때, 8초 걸린 사람은 상위 16.8%, 600초 걸린 사람은 상위 86.1%가 됩니다.
으으음... 로그 정규분포와 별반 차이가 없네요. 🤔
중앙값이 60초이고 8초 걸린 사람이 상위 3%라고 해 보아도, 240초 걸린 사람이 상위 91.6%, 600초 걸린 사람이 상위 98.2%가 됩니다.
역시 로그 정규분포와 정말 차이가 없습니다.
그러면 프레셰 분포는 어떨까요?
중앙값이 60초이고 240초 걸린 사람이 상위 75%일 때, 8초 걸린 사람은 상위 8.3%, 600초 걸린 사람은 상위 85.14%가 됩니다.
오...! 수치를 조금만 손보면 가능성 있겠는데요?
왜냐하면 로그 정규분포나 로그 로지스틱 분포와 비교했을 때, 0초에 가까운 쪽은 상위 비율 값이 훨씬 낮게 나와서 그 실력을 인정받을 수 있고, 무한대에 가까운 쪽도 상위 비율 값이 이전보다 낮게 나와서 불쾌함이 적어지기 때문이죠!
결국 수치를 조정하여 최적의 분포를 찾았습니다!
그리고 이를 중앙값이 60초일 것을 기대하는 우주선에만 적용하지 않고 모든 우주선에 적용할 수 있도록 일반항을 도출했습니다!
그리고 실제로 플레이를 하며 테스트를 해 보았죠!
역시...! 의도대로 잘 작동합니다!
우주선 평점에서 풀기를 기대하는 시간보다 10배 더 걸려서 풀더라도 상위 99.xx%는 등장하지 않을 겁니다.
상위 99%를 보기 위해서는 60초 걸려야 할 우주선에서 10000초 이상의 시간을 쏟아야 하거든요.
그렇기 때문에, 우주선을 풀기를 포기한 사람들이 반영되지 않는 것 같다는 느낌도 들지 않을 것으로 기대합니다!
---
아, 그런데 왜 실제 사용자 데이터로부터 상위 비율을 매기지 않냐고요?
첫 번째 이유는 아직 수집한 데이터가 부족하기 때문입니다.
그리고 두 번째 이유는, 데이터를 수집할 수 있는 환경이 구축되어도, 아무도 클리어하지 않은 신규 우주선에 대해서는 상위 비율을 매기기가 어렵기 때문입니다.
이것을 cold start 문제라고도 부르죠.
이렇게 프레셰 분포로 만든 상위 비율이 사용자에게 노출되었을 때 어떤 경험을 주는지를 BIC에서 테스트해보려고 합니다!
4일 뒤, 부산에서 뵙겠습니다!
이전 포스트
댓글 0개
첫 번째 댓글을 작성해 보세요!