Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

소프트웨어 2.0을 활용한 게임 어뷰징 검출

2,236 views

Published on

NDC 2018 에서 발표한 내용입니다.
소프트웨어 2.0에 대한 설명과, 이를 활용한 게임 어뷰징 검출 사례를 소개합니다.

Published in: Technology
  • Hello! Get Your Professional Job-Winning Resume Here - Check our website! https://vk.cc/818RFv
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

소프트웨어 2.0을 활용한 게임 어뷰징 검출

  1. 1. Webzen 김정주 소프트웨어 2.0을 활용한 게임 어뷰징 검출
  2. 2. 이 발표는 PC 온라인 게임 글로벌 서비스의 어뷰징 검출을 소프트웨어 2.0 방식으로 풀어본 사례를 공유합니다.
  3. 3. 설명하지 않는 것… 😶 •게임 어뷰징 및 딥러닝 기본 개념과 용어 •파이썬과 딥러닝 라이브러리 사용법 •전체 코드 흐름
  4. 4. 발표 순서 •소프트웨어 2.0 소개 •마르코프 연쇄로 랜덤 이름 찾기 •Text CNN으로 스팸 검출 •이동 변위 CNN으로 오토 검출 •정리
  5. 5. 기계학습으로 게임 어뷰징 검출 (NDC2016) https://www.slideshare.net/ssuser163469/ndc-2016-61452271
  6. 6. 지난 발표 내용 •로그 수집 방법과 하둡을 통한 빅 데이터 정제 •간단한 스팸 검출 공식 •수작업으로 개발한 특성(Feature)을 이용해, •기계학습 분류기로 어뷰저 검출
  7. 7. 달라진 것들 ⭐
  8. 8. 1. Hadoop에서 Spark으로
  9. 9. 2. 수작업된 특성(Feature)에서 데이터에서 학습된 특성으로
  10. 10. 3. 수동 제재에서 자동 제재로
  11. 11. 어뷰징 검출에 기계학습이 필요한 이유?
  12. 12. 1. 게임 플레이데이터 🕹 = 복잡 + 대용량 + 변화
  13. 13. 2. 다양한 특성을 동시에 고려해야 😵
  14. 14. 3. 24시간 모니터링 & 자동 제재 🌙
  15. 15. 사용 중인 어뷰징 검출 특성들(일부) 분류기 레벨 플레이 시간 IP당 세션수 결제 금액 재화 습득 랜덤 이름 스킬 사용 던전 클리어 규칙적 이동 스팸 메시지
  16. 16. 소프트웨어 2.0 소개
  17. 17. 베이즈주 의자 유추주의자 기호주의자 진화주의자 연결주의자 기계학습 기계학습을 보는 다양한 입장
  18. 18. 개발자의 관점에서는…🤔 ‘데이터에서 학습되는 코드로 볼 수도 있지 않나?’
  19. 19. 소프트웨어 2.0 https://twitter.com/karpathy Andrej Karpathy
  20. 20. ­Andrej Karpathy “뉴럴넷은 단지 또 다른 종류의 분류기가 아니다. 그것은 우리가 소프트웨어를 작성하는 데 있어 근본적인 변화의 시작을 나타낸다. 그것은 소프트웨어 2.0이다.” https://gist.github.com/haje01/d2518ea998ab2de102b072fed600c0a4
  21. 21. ­Andrej Karpathy “실세계 문제 중 많은 것들이 명시적으로 프로그램을 짜기보다는 데이터 를 모으는 것이 훨씬 더 쉬운 속성을 가지고 있다는 것이 밝혀졌다. 미래의 프로그래머 중 많은 이들은 뉴럴넷에 공급할 데이터를 수집, 정리, 조작, 라벨링하고 분석 및 시각화하는 일을 할 것이다.” https://gist.github.com/haje01/d2518ea998ab2de102b072fed600c0a4
  22. 22. 넓게 보면 뉴럴넷만이 SW 2.0을 뜻 하지는 않으며,
  23. 23. 데이터에서 학습해 기능을 구현하는 모든 방법을 포함한다고 생각해서,
  24. 24. 조심스럽지만 개발자의 관점에서 기계학습 대신 소프트웨어 2.0을 내걸었습니다.
  25. 25. 구현 동작 데이터 동작 데이터 구현 SW 1.0 SW 2.0 소프트웨어 1.0과 2.0의 흐름 ⌨ 🤖
  26. 26. SW 2.0에 필요한 스킬들 ) •데이터 특성 파악 - 탐색적 데이터 분석(EDA) •대용량 데이터 다루기 - 빅데이터 처리 •적절한 학습 방식 선택 - 확률 이론, 기계학습, 딥러닝 등
  27. 27. SW 2.0을 위한 도구 🛠
  28. 28. 기본적인 도구 •프로그래밍 언어(?!) •시각화 도구 •기계학습 라이브러리
  29. 29. Spark ⚡ •꼭 빅데이터가 아니어도 가능하지만… •규모 가변성(Scalability) •“많은 데이터가 영리한 알고리즘을 이긴다.”[1] •최고의 빅데이터 플랫폼 •또한, 범용 분산 처리 플랫폼 [1] https://homes.cs.washington.edu/~pedrod/papers/cacm12.pdf
  30. 30. Spark 분산 처리 예 •사례1) 대용량 텍스트 로그 정리 •중복 및 오류가 있는 원천 로그 파일의 정리 과제 •한 달 예상 -> 30대 클러스터 분산으로 하루에 완료 •사례 2) 기계학습된 모델로 대량 검출(Inference) •학습된 RandomForest 모델을 분산해 검출 •10배 이상 속도 향상!
  31. 31. 분산 검출 예
  32. 32. Spark 환경 추천 •온디맨드 Spark 서비스 (예: AWS EMR) 이용 •높은 가성비 •컬럼형 파일 포맷(예: Parquet, ORC 등) 이용 •X10 속도
  33. 33. 딥러닝 라이브러리 🔮 •소프트웨어 2.0의 핵심 •TensorFlow •넓은 레퍼런스 + 빠른 속도 -> 실제 서비스에 적합 •PyTorch ❤ •간결함 + 디버깅 용이 -> 연구에 적합 •딥러닝 뿐만 아니라 다양한 수치 계산에 활용 가능
  34. 34. 자동 미분: 임의의 연산이 미분 가능 y = (x + 3)(x + 1)(x − 2)
  35. 35. 참고: 사용 중인 분석 시스템 구조 Distributed Inference Realtime Monitoring Parquet
  36. 36. 이제 사례를 살펴보겠습니다.
  37. 37. 마르코프 연쇄로 랜덤 이름 찾기
  38. 38. 딥러닝이 아닙니다 📺 •딥러닝은 아니지만, •수작업된 학습 코드를 통해 •데이터에서 기능을 구현하는 사례
  39. 39. 어뷰징 캐릭터(계정)는 소모품
  40. 40. 이름을 대충(랜덤하게) 짓습니다.
  41. 41. 이것을 정량화할 수 있다면?
  42. 42. 자/모음의 패턴에서 발음 가능한지 판단해 검출 기존 랜덤 이름 검출 방식 https://www.slideshare.net/ssuser163469/ndc-2016-61452271
  43. 43. 문제점 😞 •수작업된 코드 •개발자가 데이터에서 패턴을 찾아 추가 •낮은 정확도 •예외 상황 처리(if/else…)
  44. 44. 데이터에서 학습할 방법?
  45. 45. 마르코프 연쇄(Markov Chain) ⛓ •마르코프 성질 - 과거는 현재, 현재는 미래에 영향을 줌 •마르코프 연쇄 - 마르코프 성질을 따르는 사건 모델
  46. 46. 날씨 관측: S, S, S, C, R, S, … Sunny Cloudy Rainy 0.3 0.2 0.5 0.1 0.1 0.4 날씨의 예 ☀ ☁ ☔
  47. 47. 관측을 통해 전이 확률을 발견… 영어 단어에 적용하면?
  48. 48. http://blog.quicktype.io/markov/ 영어 단어의 마르코프 연쇄 단어 관측: squall, quick, equity, …
  49. 49. 코퍼스내 문자 쌍에 대해 빈도 학습
  50. 50. https://www.reddit.com/r/dataisbeautiful/comments/6rk2yr/letter_and_nextletter_frequencies_in_english_oc/ 영단어에서 학습된 문자간 전이 확률
  51. 51. 이제 영어 단어에서 문자들 간 전이 확률을 알게됨… 📊
  52. 52. 이 확률을 이용해 이름의 랜덤한 정도(Score)를 계산 score = 1 L − 1 L−1 ∑ i=1 P(ci+1 |ci)
  53. 53. 랜덤하지 않은 이름 점수 랜덤한 이름 점수 DemonToon 0.1 Dhcvth 1.0 Scorpioon 0.1 fvcxfhd 1.0 Wiseman 0.2 Szyszka89 0.9 Arisen 0.3 a4h18891 0.9 proman79 0.3 fgghgfvjh 1.0 Brecher08 0.3 DVHGHV 0.9 산출된 랜덤 점수 예
  54. 54. 이것을 분류기의 특성 중 하나로 하여 어뷰저 검출에 참고 👉 정확도 향상!
  55. 55. Text CNN으로 스팸 검출
  56. 56. 예전 정규식 방식 스팸 검출 6 •스패머는 패턴 우회, 개발자는 신규 패턴 대응 •끝없는 창과 방패의 싸움
  57. 57. NDC2016 통계적 스팸 검출 방식 •채팅 횟수 / 메시지 길이 종류가 임계값 이상이면 스패머 •어뷰저가 검출 임계값을 파악하여 우회하는 문제 •실시간 검출이 어렵다 spam_ratio = chat_cnt msg_size_cnt https://www.slideshare.net/ssuser163469/ndc-2016-61452271
  58. 58. 새로운 스팸 검출 방법?
  59. 59. CNN(Convolution Neural Net.) https://hackernoon.com/visualizing-parts-of-convolutional-neural-networks-using-keras-and-cats-5cc01b214e59
  60. 60. CNN을 써보자 •CNN은 이미지 분류를 위해 만들어 졌지만, •소리나 텍스트 데이터에도 활용 가능 •이것을 스팸 메시지 검출에 사용하면?
  61. 61. 목표 🎯
  62. 62. 1. 기본 스팸 메시지에서 학습 모든 종류의 스팸을 등록하면 수작업과 다를 바 없음
  63. 63. 2. 빈번한 모델 갱신이 필요 없게 잦은 유지보수 힘들어요~
  64. 64. 3. 빠른 검출 시간 메시지를 전수 검사하면서도, 실시간 제재가 가능하게
  65. 65. 학습 준비📚
  66. 66. 스팸 및 정상 메시지 수집 •메시지를 직접 확인하며 학습데이터 수집 •스팸 메시지는 빈도가 높으나, 다양하지 않음 •정상 메시지는 빈도가 높고 다양함
  67. 67. 메시지를 임베딩(Embedding) •뉴럴넷은 숫자만 다룰 수 있기에, •문자열을 적절하게 벡터화할 필요
  68. 68. 단어 임베딩의 예(One-Hot-Encoding) https://medium.com/@athif.shaffy/one-hot-encoding-of-text-b69124bef0a7
  69. 69. 단어 레벨 vs 캐릭터 레벨 •일반적으로는 단어(Word) 레벨 임베딩이 많이 쓰임 •채팅은 변칙적인 단어가 많아 단어 임베딩이 곤란 •단순 문장 분류에는 캐릭터(Character) 레벨로 충분
  70. 70. 다양한 크기의 커널 이용 •다른 크기의 커널은 다른 범위의 특징을 추출 •넓게 보기 위해 4가지 크기(3, 4, 5, 6)의 커널 이용
  71. 71. 합친 결과를 역전파로 학습 •4가지 컨볼루션 결과를 합치고(Concatenate) •Dense 레이어 결과에 Softmax로 분류 •역전파로 학습
  72. 72. 문제점 🌀
  73. 73. 데이터 불균형 문제 •기본 스팸 메시지 수는 극히 적음 •일반 메시지 수는 아주 많음 •클래스 불균형(Class Imbalance) 문제 발생
  74. 74. 변종 스팸 대응 문제 •제재가 시작되면 다양한 변종 스팸이 출현할 것 •잦은 모델 변경 없이 변종 스팸에 대응할 수 있도록
  75. 75. 데이터 증강 + 드랍아웃으로 해결 •데이터 증강(Data Augmentation) •스팸 문자열 내 임의로 기호/공백 문자 섞기 •드랍아웃(Dropout) 적용 •학습된 뉴런을 임의 삭제 •이를 통해 클래스 불균형을 완화하고, 강건성 확보
  76. 76. 드랍아웃(Dropout )🚮 http://jmlr.org/papers/volume15/srivastava14a.old/srivastava14a.pdf
  77. 77. 기본 스팸 메시지들
  78. 78. 대상 문자와 원핫 인코딩
  79. 79. TextCNN 모듈 정의
  80. 80. Embedding Convolution MaxPool Flatten Concat … … Dropout & FC Softmax “Sell Zen!” SPAM!Convs of 4 Kernels Text CNN 도해
  81. 81. 학습 후 적용 결과 메시지 스팸 학습에 사용 스팸 점수 W W W , A O A U E , C O M ,,,,, 100M Zen = 10 = USD O O 0.98 !!! W-W-W-,-A-O-A-U-E-,-C-O-M === 200M ZZen = 20 = USD !!! O X 0.96 WVVW,MMOAH,COM Sell cheap zen 10M=1.55$ O O 0.99 **** Hello there!, Just visit WWW,MMOA.C0M 4 chip gen O X 0.86 i want to fight :( for 100M USD! X X 0.37 We're gearning up for Cheap Items X X 0.27 How to trade with zen?! X X 0.71
  82. 82. 주의점 💢 •일반 메시지라도 주요 단어가 들어가면 스팸 점수 상승 •적절한 임계값과 빈도로 스패머 여부 판단
  83. 83. 향상된 점 📈 •잦은 모델 업데이트 없이 변형 스팸 대응 •일단위가 아닌 메시지 당 검출 가능 •빠른 검출 속도: 300 메시지 / 초 (1 CPU)
  84. 84. 이동 변위 CNN으로 오토 검출
  85. 85. 파밍 어뷰저의 가장 큰 특성? 👉 반복적인 행동(오토)!
  86. 86. 기존 반복적 행동 검출 방법 •몇 가지 통계적 수치를 조합해 판단 •임계치에 민감 •변위 그래프를 그려보고 시각적 판단 •검출 시간이 길고, 수작업에 의존
  87. 87. http://www.dbpia.co.kr/Journal/ArticleDetail/NODE06617217 선례: “자기 유사도를 이용한 탐지” “이동 위치는 너무 엄밀, 우회가 용이”
  88. 88. 이동 경로가 아닌 이동 변위로 동작의 반복성 살펴보면?
  89. 89. 어뷰저의 변위 그래프 정상 유저의 변위 그래프
  90. 90. 왜 이런 패턴을 보일까?🎡 •재미를 위해 플레이하는 일반유저와 달리, •전문 작업장이나 오토 유저는 •최소 시간에 최대 성과를 올리려 하기 때문
  91. 91. 👁 눈으로 보면 시각적으로 판단 가능 👉 변위에 대한 CNN 적용?!
  92. 92. 학습 및 검출 🎓
  93. 93. 1. 어뷰저 데이터 수작업 선별(150개) 정상 샘플은 전체에서 임의 추출
  94. 94. 2. 고정 윈도우(1000개 변위)로 미니배치
  95. 95. 3. 학습 시작 위치를 다양하게 해 클래스 불균형 완화
  96. 96. 하나의 변위 데이터도 시작 위치에 따라 다양성이 나옴
  97. 97. 4. 조기 종료(Early Stopping)
  98. 98. 조기 종료(Early Stopping) https://deeplearning4j.org/earlystopping
  99. 99. 5. 검출시는 윈도우 단위 판정값을 평균내어 판정 (시계열)
  100. 100. 초기 문제점 💔
  101. 101. 1. 정확도가 향상되지 않음 😰
  102. 102. 이동 변위 값이 너무 크다… 👉 정규화(Normalization) 적용
  103. 103. 2. 손실(Loss)값이 튄다?
  104. 104. 손실(Loss)이 튀는 현상
  105. 105. Batch Normalization 적용 후 완화 ☕
  106. 106. Batch Normalization https://shuuki4.wordpress.com/2016/01/13/batch-normalization-설명-및-구현/
  107. 107. BN 적용 후 개선된 손실
  108. 108. 초기 학습시 오탐한 데이터는 수작업 분류 후 학습 셋으로 추가했습니다.
  109. 109. 학습 성공! 그러나… 오탐이 다수 발생 😭
  110. 110. 어뷰저로 오탐된 변위의 예 쉬는 시간
  111. 111. 오탐 대응 🤒 •쉬어가며 집중 플레이하는 유저를 주로 오탐 •이동 사이에 경과된 시간을 고려해야! •이동 변위에 시간 변위를 추가(2 Channel) •정확도가 올라가고, 학습 시간도 줄어 듦
  112. 112. 이동 변위만 사용 이동 변위 + 시간 변위 사용 이동 변위만 사용한 경우와 손실(Loss) 흐름 비교
  113. 113. 이동 변위 모듈 정의
  114. 114. 미니 배치 순회
  115. 115. 학습 코드
  116. 116. 테스트 셋으로 검증 -> 정확도 97%! 최종 제재는 다른 특성도 함께 고려
  117. 117. 검출 결과
  118. 118. 향상된 점 ☀ •수작업 없는 빠른 검출 •통계적 방식에서 찾지 못하던 반복적 행동을 검출 •준 실시간 검출 가능
  119. 119. 정리
  120. 120. 살펴본 것 🏞 •소프트웨어 2.0 개념과 툴 소개 •마르코프 연쇄를 이용한 랜덤 이름 검출 •Text CNN을 통한 스팸 검출 •이동 변위 CNN으로 오토 검출
  121. 121. 서비스 적용 현황 🛣 •기존 수작업 특성 + 데이터에서 학습된 특성을 •학습한 분류기가 Spark을 통해 분산 검출하고, •일단위 배치로 자동 제재 중
  122. 122. 자동 제재 이후 지역별 검출 어뷰저 수 추세 😄
  123. 123. 앞으로의 과제 H
  124. 124. 영어외 언어에 대한 랜덤 이름 & 스팸 검출
  125. 125. 모바일 게임 오토 검출
  126. 126. 게임 데이터 라벨링 수단 (전용 툴, Mechanical Turk?)
  127. 127. Generative Model을 이용한 데이터 증강
  128. 128. 어뷰징 검출 조언 💡
  129. 129. 표면적 개별 특성에 집착하지 말고, IP당 세션수가 많음 장시간 연속 플레이 랜덤한 이름 여러 캐릭터 동시 플레이 재화 습득량이 많음 특정 맵을 반복 플레이 컨텐츠 플레이가 적음 아이템 강화가 적음 특정 IP 대역에서 접속 소셜 활동이 없음 ?
  130. 130. 내재된 핵심 특성을 찾자 봇 행동 특성 IP당 세션수가 많음 장시간 연속 플레이 랜덤한 이름 여러 캐릭터 동시 플레이 재화 습득량이 많음 특정 맵을 반복 플레이 컨텐츠 플레이가 적음 아이템 강화가 적음 특정 IP 대역에서 접속 소셜 활동이 없음
  131. 131. SW 2.0을 활용해 핵심 특성을 찾아내면 중복 작업 없이 어뷰징을 잡을 수 있을 것
  132. 132. SW 2.0을 시도하려면?
  133. 133. 1. 이론 공부와 다양한 실험을 병행하기
  134. 134. 2. 데이터 특성을 이해하고 도메인 전문가와 이야기하기
  135. 135. 3. 인프라 구축은 필요한 만큼만
  136. 136. 4. 반복 학습 전에 데이터 확인과 코드 리뷰 먼저
  137. 137. 소프트웨어 1.0과 2.0의 미래 🚀 •SW 1.0과 2.0 방식은 어느 한쪽의 우월을 말하기 힘듦 •상호 협력 관계 •1.0의 스킬이 2.0에 도움을 주기도 하고 •1.0이 못하는 것을 2.0이 해결해 주기도
  138. 138. 참고: FizzBuzz 문제 1부터 100사이의 숫자를 프린트 하는 프로그램을 작성하는데, 3의 배수이면 Fizz를, 5의 배수이면 Buzz를, 둘 모두의 배수 즉, 15의 배수이면 FizzBuzz 를 프린트
  139. 139. SW 1.0 SW 2.0 https://github.com/joelgrus/fizz-buzz-tensorflow/blob/master/fizz_buzz.py
  140. 140. http://joelgrus.com/2016/05/23/fizz-buzz-in-tensorflow/
  141. 141. 모든 문제가 2.0 적용 대상은 아님
  142. 142. 또한 1.0 에만 의존해도 곤란
  143. 143. 소프트웨어 1.0과 2.0의 앙상블을! 🤝
  144. 144. 감사합니다.
  145. 145. 참조 링크 •https://machinelearningmastery.com/hands-on-big-data-by-peter-norvig/ •http://pytorch.org/tutorials/beginner/blitz/autograd_tutorial.html#sphx-glr- beginner-blitz-autograd-tutorial-py •https://ridibooks.com/v2/Detail?id=1780000048 •https://github.com/rrenaud/Gibberish-Detector •http://www.dbpia.co.kr/Journal/ArticleDetail/NODE06617217

×