데이터과학 삼학년

if (kakao) 2020 본문

Etc.

if (kakao) 2020

Dan-k 2020. 11. 18. 16:51
반응형

if (kakao) 2020

 

카카오 주니어 개발자의 하루

  • 아침밥...제공…

  • 점심후 커피내기 가위바위보

  • 팀원간 계속적인 커뮤니케이션

    • 현재 직면해 있는 문제 공유

    • 어떤식으로 문제를 풀지 논의

    • 전체적인 로직 설계와 논의를 통해 예상 문제 도출 및 해결방안 제시

  • 무작정 개발을 시작하는 것이 아니라 어떤 방향으로 갈지 큰 그림을 그림

  • 중간마다 코드리뷰

  • 스터디 활성화

 

카카오 픽코마 추천 시스템

  • 카카오 일본에서 만화 플랫폼 추천 시스템

  • 12시간 마다 1번씩 팝업에 노출

    • 추천 겸 팝업 노출로 반응하는 유저의 행동 로그 축적

  • 추천 방법 고민

  • 개인화 추천 vs 연관 추천

  • 개인화 추천 (취향)

    • 개별 유저의 취향을 고려한 추천

    • 유저에 따라 달라지는 추천 결과

  • 연관 추천 (맥락)

    • 현재 보고 있는 아이템과 연관성이 높은 아이템 추천

    • 개별 유저의 취향을 고려하지 않음

  • 팝업 노출 직전에 열람한 작품과 비슷한 작품을 추천하는 것이 자연스러움

    • 과거 데이터를 반영하기 보다 현재 보고 있는 방식을 추천

  • 팝업 노출 타이밍엔 취향과 맥락중 어떤것이 더 효과적으로 고려 될까??

  • 추천방식 결정 → Matrix Factorization

  • Matrix Factorization

    • 한 행렬은 보다 작은 사이즈의 행렬 곱으로 분해하는 형태

  • user-item Martix 는 Sparse한 데이터 → 이것을 user별, item별로 matrix를 나눔

  • user와 user 간 유사성 / item과 item 간 유사성 확인 가능

 

  • Matrix Factorization은 개인 및 연관 추천에 모두 사용할 수 있어 채택

  • 개인화 추천의 경우

    • 한 개인이 item에 대해 얼마나 관심이 있는지 계산이 가능함

  • 연관 추천의 경우

    • item 매트릭스만 이용해서 사용 가능

    • 현재 보고 있는 아이템과 가장 유사하다고 판단되는 아이템을 추천

 

  • 취향 vs 맥락

    • 어느 추천 방식이 더 우수했을까?

    • 평가 metric은 전환율 CVR = 전환수 / 노출수

      • 노출 (Impression) : 팝업 추천에 유저가 노출되는 것

      • 전환 (Conversion) : 노출된 추천을 클릭

      • 즉, 팝업 노출을 시켰을때 유저가 얼마나 해당(추천된) 콘텐츠를 눌렀는 가?

    • 개인화 추천이 18% 포인트 더 우수 했음!

      • 왜?

        • 개인화 추천의 경우, 유사도 자체에 큰 영향을 받지 않고 전환함

        • 연관 추천은 유사도가 높을 수록 전환율이 높았음

  • 결국, 취향 > 맥락

  • 에피소드의 경우, 해당 에피소드에 빠져 들기 전에 유사한 콘텐츠를 추천해줄수록 전환율이 높음

 

 

카카오 입사 8개월 리얼 후기 

  • 왜? 에러가 왜? 났을까 생각하는 습관

  • 단순하게 돌아가는 것보다 왜 코드를 이렇게 짰는지 생각

    • 기존에 있는 코드를 보고 똑같이 작성하는 것이 아니라 다른 여러 방안에 대해서 생각하고, 왜 그 방안을 결정했는지 근거기반의 개발

  • 내 코드가 누구를 위한 코드냐?

    • 나만 보기 좋은 코드가 아니라 누구나 볼 수 있는 readable한 함수

    • 남을 위한 코드, 함수와 변수명을 지을때 해당 역할에 맞게 적용

  • 새로운 기술을 접했을때, 책을 사서 각자 발표할 부분 만들어 공부 → 스터디 중요

    • 위키에 정리하여 정보를 모음

  • 협업 툴

    • Git : 깃플로우 기반, 리베이스, 체리픽 등과 같은 기능 사용

    • Jira, wiki

  • 코드 정합성 확인

    • 테스트 코드 작성 및 로그 찍기

  • 어떤 개발자가 되고 싶은가?

    • 질문을 많이 하는 개발자

      • 나의 모름을 인정하는 개발자

    • 새로운 기술에 대해 끊임없이 공부하고, 이를 실제 프로젝트에 적용하는 개발자

 

카카오의 일하는 방식

  • 우리의 일을 공개해서 협업과 팀웍이 잘 이루어질 수 있게 하자

  • 문화가 일을 한다

  • 자기 주도성, 공개/공유, 수평커뮤니케이션

  • 지라 활용을 많이 함

 

 

잡았다, 요놈! - 재화도독 잡는 ‘딥러닝 기반 이상탐지 모델’

  • 어뷰징 : 정당하지않은 행위로 이득을 취함

    • 게임 경제의 붕괴

    • 다른 유저의 상대적 박탈감

    • 게임수명 단출

  • 유저들의 공정한 경쟁 보장을 위해 어뷰징을 탐지해야함

  • 기존 : 룰기반으로 로그 모니터링 후 검증 및 제재가 이루어졌음

  • 이상탐지 딥러닝 모델

    • 데이터 학습 →  모델 기반 예측 → 이상탐지

    • 비지도 학습으로 스스로 패턴 찾을 수 있게 함

  • 구축과정

  • feature 자체를 시간별로 구축함

  • 전통적인 이상탐지에 쓰이는 AutoEncoder 사용

    • noise가 높은 유저가 검출되는 방법

 

  • 유저의 행동에 대해 적절한 게임보상 예측 모델 구현 → CNN

    • 다수의 유사 행동과 재화량을 학습 후 적정 재화량과의 차이가 큰 행동을 어뷰징으로 판단

    • 적정 보상은 플레이시간, 과금, 플레이 패턴에 따라 산정

  • 행동 vector 구성은 재화이상탐지에서 사용한 vector와 동일

  • 다수의 유사행동과 적정 재화량 데이터를 구성어떻게 했는지?

  • 정상데이터만을 학습하는 (이상탐지) 모델의 한계

    • 정확도 

    • 과적합

    • 해석의 어려움

  • 정확도를 높이기 위해 생성, 구별 모델 사용 (GAN)

    • 경쟁을 통해 학습률이 더 올라갈수 있게 구성

    • 어뷰징 데이터가 없다면 FAKE 데이터를 학습

      • FAKE 데이터란 → 이상치 데이터를 만들어서 넣어줌 → GAN으로 생성함

      • 이를 통해, 모델의 정확도 상승과 overfitting을 줄일 수 있음

 

  • 이상탐지 모델 비교

  • 확인된 어뷰징 유형

    • 아이템 제작 매크로

    • 아이템 복사 (drop/획득 반복 후 상점 판매)

    • 거래소 고액 획득

    • 던전/과제/퀘스트 등의 보상 반복 획득

 

  • 향후계획

  • 수집된 어뷰징 데이터를 수집

    • label을 달아놓음

    • 분류 모델을 만들어 모델의 해석을 진행할 예정

  • 실시간 모니터링, 이상탐지를 서비스화 시키는 플로우 제작중

    • 알람이 온 시간대 분석 등

  • 경제 밸런싱 프로젝트

    • 게임 경제의 Balance를 맞춤

>> 즉, 적정 재화 예측 모델을 만들고, 실값과의  LOSS를 이용해 어뷰징을 탐지하는 방법이 적용

 

 

이상거래 탐지를 위한 실시간 데이터 처리와 금융 사기 행동 분석

  • 카카오 페이에서는 내가 한 거래가 정상 거래라고 어떻게 분석할까?

  • 금융 흐름 모니터링 시스템, 데이터 분석결과 공유

  • 이상거래 사례 (FDS; Fraud Detection System)

    • FDS - 피싱 등 평소와 다른 금융 패턴 감지

  • 이상 거래 패턴을 실시간으로 모니터링 하기가 어려웠음

    • 이상패턴은 너무나도 다양함

    • 게다가 빠르게 변화하고 진화함

    • 카카오 페이의 모든 데이터 모니터링 니즈가 커짐

 

  • RMS (Risk Management System)프로젝트 개발 

    • 이상거래 뿐만 아니라 잠재적인 위험을 관리할 필요를 느낌

    • RMS 요구사항

      • 동시성 (Kafka / Akka)

      • 확장성 (Akka Cluster / k8s)

      • 실시간성 (Redis / Druid / Kudu)

  • RMS 아키텍쳐

  • Rule Engine

    • Kafka에서 들어오는 이벤트를 Akka stream을 통해 수집

    • Cluster Sharding

    • entity와 rule을 통해 cluster data의 event를 체크

    • 전반적으로 퍼져있는 cluster 들의 상태도 체크하여 종합적인 판단 내림

  • Model condition의 경우, tf2.x 와 tf for java를 이용해 구성

    • 지도학습 모델을 사용

  • Redis는 airflow를 이용하여 수행

  • feature data 저장

    • redis를 이용해 유저별 각종 통해 hash된 

    • 실시간 결제 내역을 시간범위(e.g. 1시간) 로 저장

 

  • Akky Type를 이용해서 model 갱신 및 model 상태확인 가능함

    • 이를 통해 행동패턴이 새로 생기게 되면 새로운 행동패턴에 맞는 model이 생성됨

  • RMS에서 사용하는 DB

    • Druid : 실시간 통계 산출



  • 사용되는 FDS 모델의 장점

    • 비지도학습 모델 : 군집을 벗어난 Outlier 추출 목적

      • 장점 : 기존에 확인하지 못했던 새로운 행동 관찰 가능

      • 단점 : 명확한 평가 기준 부내

    • 지도 학습 모델 

      • 장점 : 목표값에 개입하므로 비교적 높은 정확도

      • 단점 : 데이터 확보 어려움, 변한 행동패턴에 반응할 수 없음

    • 룰 기반 모델

      • 장점 : 빠른 대응 가능, 명확한 이해 가능

      • 단점 : 구체화된 조건 필요, 리소스가 많이 들어감

 

  • 위 3가지 모델을 혼합해서 활용

    • 이것만으로는 부족

  • 순간만 보는게 아닌 전체를 바라보자

  • 관계와 행적을 이용해 이상탐지 방식 추가

    • 관계 (Relation) : Graph Networks

    • 행적 (History) 

    • 관계 모델

      • 계좌 networks 분석

      • 계좌들간의 관계를 파악

  • 계좌들간 군집을 이루는 것을 실제로 확인할 수 있었음

  • 정말 비슷한 계좌끼리 연결되었을까?

  • 확인 결과, 비슷한 계좌가 있었고, 이를 통해 blaklist를 만듦

  • 생성 소멸 주기를 파악

    • account immigration

  • 급격히 소멸하는 계좌는 급격히 상승되는 계좌로 이전이 이루어졌을 것이다라는 가정

 

  • 계좌 간 연결 관계 정리

    • 거래 데이터 기반 네트워크 만들고, node의 metric을 이용해 관계 정의

    • 관계를 분석해서, 유형화

 

  • 행적 (History)

    • 사기의 경우, 기존의 행동과 다른 행동을 보인다

    • helix 구조를 이용하여 과거정보를 함축적으로 담는 처리 진행

  • 각 유저별 행동 패턴 이해와 모니터링 가능

    • 주요 거래시간도 추정 가능

  • 거래 속도와 연속 거래 횟수 파악 가능

 

  • 파이프라인

 

  • 금융흐름의 안정화 관점에서 데이터를 바라보고 해당 유저의 특징을 파악하고, 모니터링 할 수 있음

  • “공격자는 항상 방어자보다 앞서나간다”



출처

https://if.kakao.com/session

 

728x90
반응형
LIST
Comments