- Published on
NDC 2019 후기
- Authors
- Name
- SeongHwa Lee
- @earthloverdev
- 목차
NDC 2019
지난 4월 24-26일동안 넥슨 판교사옥에서 열린 넥슨 개발자 컨퍼런스 NDC에 참석했습니다. 2013년부터 매년 열리고 있는데요, 벌써 세 번째 참가하는 것 같습니다. 개발 세션 말고도 기획, 아트, 사운드 등의 세션이 열리는 것이 정말 매력적입니다. 게임 개발을 꿈꾸는 학생들에겐 정말 추천하는 컨퍼런스입니다. 심지어 미리 신청만 하면 참가비도 따로 없습니다!! 저는 프로그래밍 세션 위주로 참가하였는데요, 대체로 테스트, 로깅, 인공지능에 대한 세션이 많았습니다. 그 중에서 제가 필기한 세션의 내용을 정리해 보겠습니다.
A/B 테스트 - Devsisters
“시간 제한이 있는 상품의 판매 시간을 어떻게 하면 가장 많이 팔 수 있을까?”
초급 스타터 패키지 : 구매 시간 제한이 있음.
-
각 국가별로 다른 시기에 테스트를 하게 되면 실험이 제대로 이루어지지 않는다. 전세계 공휴일, 국가별 소득 수준 등등. —> A/B 테스트를 해보자!
-
실험 기획
- 최상위 의도
- 판매량 (선택)
- 재방문률
- 전환률
- 유의미한 차이
- 실험 대상
- 국가, 유저레벨
- 전세계 대상 (선택)
- 그룹의 개수
- 대조군 vs 실험군 (2개 이상)
- 1시간, 1일, 3일
- 실험 기간 설정
- 실험기간은 최소한의 비즈니스 사이클이 포함되어야 한다. 게임마다 다르다. —> 2주
- 최상위 의도
-
실험군 나누기
- 로그인 순서로? 로그인 순서를 기록해야 함.
- 유저를 숫자로 매핑할 수 있다면 ? 유저 아이디를 해시값으로 변환 md5 (0~9999) 해시값 기준으로 0-3333, 3333-6666, 6666-9999 세 그룹으로 나눔.
- 그 후 실험군이 동질한 지 확인해야함.
- 저레벨 유저, 고레벨 유저는 구매 패턴이 다름
- 성질 : 국가 분포 / 스테이지 도달률 / 과금 비율 / 레벨 분포
- 실험군이 통계적으로 동질한 지 검증.
- 카이제곱 테스트
-
여러 실험 동시에 하기
-
Devplay 라는 플랫폼에 적용
-
결과요약 베이지안 방법론
- 신뢰구간을 그래프 형태로 보여줄 계획 있음
Q&A
- 실험군 정하는 건 어쩔 수 없이 휴리스틱으로 기획자의 능력에 달렸다.
- 전체 개발기간은 A/B 테스트 기능 2달, devplay에 적용 1달이 걸렸다.
실시간 A/B 테스트 플랫폼 개발기 - PUBG
설계 - 구현 - 활용
하고싶었던 것 : 머신러닝.+ 새로운 가치 (돈을 범) —> 실제로는 A/B 테스트 플랫폼 개발을 하게 됨. : 그러니까 날로 먹자(;;)
A/B 테스트란?
객관적인 이용자 경험 측정 데이터 기반 의사결정
설계
- 실험 정확도가 떨어져요. —> 실험을 오랫동안 하면 된다.
- 서비스에 영향을 미칠까 불안해요 —> 실험군 비율을 줄이면 된다.
- 데이터 파이프라인이 없어요 —> 직접 ETL 하면 된다. 무조건 로그를 찍어야 함.
캐고 -> 수집하고 -> 분석하고
Firebase -> google analytics -> google big query : 데이터 시맨틱
직접 만드는 데이터 파이프라인
- 실시간으로 대응할 수 있는
- 확장 가능한
- 운영 인력 없이 알아거 24/7 작동
실시간으로 대응할 수 있는
- 지난 일주일동안 총 노출 수
- ARPU, ARPPU 일별로 계산해 주세요
- —> 배치 프로세스로 해결
- 결제가 갑자기 줄어들면 10분 안에 알고 싶어요.
- 이용자 클릭이 추천에 즉시 적용되게 해주세요.
- —> ????? —> 실시간 스트리밍
확장 가능한
- 100만동접 _ 매 초 로그 _ 평균 1Kb 로그 —> 3.6TB
- 방법 : 서버를 키운다. Scale-in
- 에서 Scale-out 이 필요하다.
- 실시간 스트리밍 + 분산 처리 : 아파치 Flink 데이터 스트림을 위한 분산 처리 엔진
- Spark Streaming
- 원래는 분산 처리 엔진. 다양한 기능, 탄탄한 생태계
- Flink
- 처음부터 스트림 처리 엔진
- 둘 중에 적합한 도구 선택
운영
- 장애 대응 : AWS
- 서버 관리는 서버리스 서비스가
- 모니터링은 모니터링 서비스가
A/B 테스트의 미래
- Multi-Armed Bandit
- 효과가 좋은 A안의 비율을 자동으로 늘려 나가는 최적화
- 추천 시스템 —> 가치있는 컨텐츠를 학습해서 제공
- A/B 테스트 해야 한다. 대신 잘 해야 한다.
- 남들이 미리 해 둔 고생을 내가 다시 할 필요는 없다.
- 사람이 없으면 돈으로 서비스를 사서 쓰자!
어떻게 매칭시켜드릴까요?
by 넥슨 인텔리전스랩스 솔루션실 매칭팀 성의경[게임 데이터 분석가] ‘매치 메이킹’ 전문가
문제 정의
Matchmaking : 사업, 스포츠, 게임에서 상대를 찾는 과정. 게임판을 짜주는 작업
- 비슷한 실력의 유저를 짝지어주자
- 어떻게 실력을 측정하지?
기존의 접근 : 실력점수 MatchMaking Rating, MMR, 평점, 다른 유저와 점수와 비교했을 때 얼마나 이길 가능성이 있는지? 점수 차이에 따라 승률을 예측하도록
- Ex) elo 점수 체계의 예시
- -> 예상 가능한 승리라면 적게. 예상 외의 승리라면 많이 얻음.
- -> 당연한 패배라면 적게, 예상 외의 패배라면 많이 일음.
- 점수 계산 방법 : Elo, Glicko, TrueSkill (팀전, 무승부에 대한 해석 도입)
- 공통점 : 새 실력 = 이전 실력 + 실제 예상 결과와 차이
절차
- 매칭 요청한 유저를 실력점수에 따라 정렬, 인접한 유저끼리 매칭
- 상대와 실력 동등함과 대기시간의 트레이드 오프 (카카오 내비 같은 느낌)
무엇을 원했을까?
- 실력의 동등함 프레임
- 실력이 비슷한 사람과 게임하면?? -> 너무 많이 이기거나 지지도 않고
끝나지 않은 문제
스트레스
- 설령 매치메이커가 모든 유저의 승률을 50%로 만들더라도
- 좌절스러운 순간을 맞이하고
- 결과를 받아들이는 것은 주관적
운영상의 문제
- 게임핵, 어뷰징
- 대리게임
- 패작, 부계정, 양민학살, 주차
측정의 문제
동등함의 문제
- 동등한 게임 vs 재미있는 게임 : 그 사이에 그 동안 찾던 무언가
- 실력의 동등함 프레임을 넘어서
- 실력의 동등함이 항상 좋은 매칭일까?
해결을 위한 고민
어떻게 해결하지?
- Data & User Profile
실력점수보다는 매칭 결과의 품질
단일 유저에 대한 측정이 아니라 게임 참여자의 조합을 평가
- 상대보다 실력점수가 얼마나 높은가?
- —> 각 유저의 선호 무기, 캐릭터 선택? 포지션 전략, 파티, 연승, 트롤 ….
- 과거 : 나의 승률 = f(나와 상대의 점수차)
- 현재 : 나의 승률 = f(내 프로필, 상대의 프로필, 게임의 정보 …)
동등함을 생각하더라도 유저의 상태를 좀더 상세히
동등함의 프레임 벗어나기
- 나의 승률-f(내 프로필, 상대의 프로필 …)
- 품질의 목표를 특정 재미요소로 바꾸기 : 특정 액션, 퍼포먼스, 쇼맨쉽, 결과의 불확실성, 상호작용
- 재미를 품질의 목표로 삼자 !!!
- 주어진 시간 안에 매칭 품질이 최대가 되는 조합을 찾는다!!
마치며
- 매치몹 프로젝트
- -> 상호작용과 관계의 질을 측정하고 재미를 찾을 수 있도록 매칭
하스스톤 강화학습
by utilForever(옥찬호)
강화학습 환경을 만드는 과정을 이야기합니다.
목표
- 영리한 플레이를 할 수 있게
- 승률이 높은 덱을 만들어 보자
- 1티어 덱보다 높은 승률 >= 60%
- 플레이어가 덱을 만들 때 카드를 추천하게 만들자
강화학습
-
행동과 보상 사이의 상관관계 학습에이전트는 사전 지식이 없는 상태로 학습 에이전트는 환경에서 자신의 상태를 인식, 행동
-
환경은 에이전트에게 보상을 주고 다음 상태를 알려줍니다. (오늘 할 이야기) 에이전트는 보상을 통해 어떤 행동이 좋은 것인지 인식
-
알파고 모든 정보가 주어져 있는 상황, 턴제, 제한시간 있음.
-
알파스타 실시간 전략 게임 불완전 정보 주어짐. 정찰, 탐색전 —> 추론 —> 유닛 건물 제어
-
하스스톤
- 내 덱에서 무슨 카드가 나올 지 모름
- 상대방이 무슨 카드를 가지고 있는 지 모름
- 자신의 정보 조차 불완전함
- 카드 효과중에 무작위 카드가 많아서 결과를 추론하기 힘듬.
-
최신 논문이 많이 나오고 있음.
하스스톤 게임 개발
게임을 활용해 강화학습을 하려면
- 게임 회사에서 제공하는 API를 사용합니다.
- 하스스톤 없음.
- 게임을 후킹해 알아낸 정보 사용
- 불법
- 하스스톤을 직접 만들어 사용합니다.
- 대안이 없음…
카드 구현
하스스톤 AI를 만들기에 앞서 카드와 효과를 손으로 구현해 봅니다.
카드 데이터 처리
- 마나 코스트
- 하수인 카드는 공격력 체력
- 무기 공격력 내구도
- 어빌리티
- 특별한 능력
카드 효과 처리
문제 : (거의 모든 데이터) 구현해야 할 카드 : 1926장 —> 수집 불가능한 카드 모드 포함하면 6086장
카드 효과 구현
코드 생성을 위한 신경망 —> 카드 효과를 직접 구현
Draw함수, Tensorflow, Pytorch
RosettaTorch를 통해 PyTorch C++ API 기반의 정책 구현 675차원
개발 진행 상황
앞으로 계획
- 모든 카드 구현
- 콘솔 GUI 표현
- RealStone(하스스톤 IoT 프로젝트)으로 실제 기기로 대전할 수 있게
정리
- 게임 회사에서 제공하지 않으면 직접 만든다!
- 게임 정보 전달 함수가 중요하다!
- AI로 만든다!
후기
25일날 마지막 세션에 매치메이킹 알고리즘 세션에 사람이 엄청나게 많았습니다. 저도 평소에 대전형 게임을 많이 해서 호기심이 생긴 세션이었는데요, 넥슨 인텔리전스랩에서 이런 매치 메이킹의 품질을 꾸준히 연구하는 분의 통찰을 잠깐이나마 엿볼 수 있어서 좋았습니다. 와닿았던 것은 "결국 알고리즘을 개발하는 입장에서 '공평함' 보다는 유저의 '재미'를 목적으로 하게 되었다."는 사실입니다. 그리고 머신러닝으로 이런 재미에 영향을 미치는 요소를 찾고있다는 사실은 덤이었구요.
저에게는 무엇보다 이렇게 많은 사람이 게임을 개발하는 것에 관심을 가지고 질문하고 강의를 듣는 모습 자체가 큰 자극이 됩니다. 어릴 때부터 게임을 즐겨온 게이머로써 제가 직접 게임을 만들어 보고 싶다는 꿈도 항상 마음 한켠에 쟁여두고 있는 중이기도 하구요. 무엇보다 이런 행사를 매번 무료로 참가하게 해주는 넥슨에게도 감사드립니다.