if kakao 2019 2일차 후기


  • if kakao 2019 2일차 세션을 들으며 메모한 글입니다

금융사기 잡는 카카오뱅크의 데이터 사이언스

  • 전상현님
  • 금융사기를 어떻게 잡는지, 시도했던 것들을 소개
  • 카카오뱅크의 데이터 사이언스 소개
    • Anomaly Detection, Topological, Network Analysis 등
    • 7월에 고객 1000만명 돌파
    • 2030세대 전체의 45%가 카카오뱅크 이용
    • 카카오택시 내역을 신용평가에 반영하고 있음
    • 은행 업무 중 발생하는 데이터 문제를 해결
      • 데이터에서 인상이트 찾기
        • 예 : 모임통장 이후 카뱅의 변화 분석
      • 기계학습/딥러닝 모형 개발
        • 보이스피싱 탐지 모형 개발
        • 이상거래 탐지 모형 개발
  • 금융사기와 FDS
    • 보이스피싱은 점점 늘고 있고, 금융사기도 지능화되고 있음
    • 스미싱, 보이스피싱, 파밍, 대포통장 등의 방법
    • FDS(이상금융거래 탐지 시스템)
      • 앱 원격 조종?
        • 기기 정보 / 앱 실행 정보 / 악성 앱 설치 여부
      • 거래가 없던 계좌에 큰 금액 이체?
        • 거래 내역
  • 카카오뱅크는 금융사기 문제는 어떻게 접근하고 있나?
    • 카카오뱅크는 전자금융 FDS와 체크카드 FDS가 존재
    • 전자금융
      • 자체 개발
      • 인터넷 은행, 카뱅만의 상품, 활동적인 고객이 존재
      • 빠른 사기 탐지, 더 정확한 탐지, 신종 사기 대응해야 함
      • 더 맞는 규칙 기반 모형 + 머신러닝 모형
    • 머신러닝
      • 지도학습
        • 극단적인 데이터 불균형, 정상 99.9% 사기 0.1%
          • 데이터 불균형이 심하면 사기 예측 모형이 동작하지 않음
          • 고객 정보, 금융 활동, 앱 활동을 토대로 DNN => 모든게 정상이라 예측함. 사기를 잡을 수 없음
          • 따라서 언더샘플링과 오버샘플링을 통한 정상/사기 비율 개선
          • 정상은 언더, 사기는 오버
          • 딥러닝 사용시 정상과 사기의 Loss 비율을 조절, 정상 loss : 사기 loss = 1:10
          • ANN을 통해 정상 근처의 데이터만 샘플링
          • 사기 데이터 생성을 위해 VAE 사용(그냥 늘리거나 통계적으로 할 수 있지만 VAE 사용)
        • 시계열 이벤트 데이터 처리 : 앱 활동 => 로그인 => 간편이체 => 대출금조회 => 마이너스대출 => 로그아웃
          • 앱 활동은 FastText로 벡터화
          • 계좌이체, 간편이체, 계자조회(잔고<0), 계자조회(잔고>0), 해외송금, 계좌개설, 마이너스대출, 신용대출 등
          • 벡터화한 이벤트는 1D CNN을 통과시킴, 속도 때문에 1D CNN씀 => 정상과 사기 비율 맞춤
      • 비지도학습
        • Auto-Encoder를 통한 이상거래 탐지
          • 원본 데이터를 넣으면 z로 압축하고, 그 압축된 데이터를 복원하는 모형
          • 정상 데이터로 학습한 뒤, 이상 데이터가 들어오면 X와 X’의 차이가 커지는 것으로 이상 거래를 탐지
        • z를 같이 고려한 Deep Autoencoding Gaussian Mixture Model for Unsupervised Anomaly Detection
          • 보다 세밀하게 이상거래를 탐지할 수 있지만 충분하진 않음
          • 실제 정상적인 행동이지만 사기도 많음
      • 성능 개선 정도
        • 데이터 샘플링, Loss 조절, 이벤트 벡터화, 1D CNN, Auto Encoder를 통해 Recall 50% 상승, Precision 20% 상승
          • Recall은 쉽지만 Precision 올리는게 어려워서 더 개선할 예정
  • 정리
    • 탐지 모형 개발은 금융 사기 탐지의 극히 일부분
    • 복잡한 딥러닝 모형이 답을 주진 않음
    • 모형도 중요하지만 변수 선택 및 전처리가 더 주용
    • 서비스 반영은 또 다른 큰 산
  • 요새 실험중인 기법들
    • TDA(Topoglocial Data Analysis)
      • 이상탐지, 기계학습 모형 설명, 시각화
    • Graph Deep Learning
      • 그래프 데이터, 노드와 엣지의 특성 반영
    • Label Propagation
      • 준지도학습, 라벨의 일부만 알 때
  • TDA
    • 2007년 mapper 알고리즘 발표 후 주목됨
    • 이상탐지에 많이 사용되고, 의학/금융 분야에서 활용
    • AYASDI라는 회사가 많은 특허 보유함
    • Google에 TDA 치면 한국분 1분 나오는데, 카뱅분임
    • 핵심
      • Topological - Data - Analysis
      • 데이터가 갖는 모양으로 모양의 의미를 분석
      • 테이블 데이터가 가운데 이미지처럼 그래프로 나오고, 어느쪽은 정상 1형 당뇨 등등이 구분됨
      • 원본 데이터를 가로축 따라 데이터 나누고(데이터 영역이 겹침), 그 데이터를 kmeans로 클러스터링 => Topology 구성
        • 노드 : 각 영역의 데이터 군집
        • 연결 : 공통 데이터가 존재하는 인접한 군집
      • k-means와 topological 비교
        • <사진>
        • 데이터 특성을 잘 표현하는 군집과 관계를 찾아냄
        • Outlier 또한 군집으로 잘 찾아냄
  • TDA for Credit Card Fraud Detection
    • 신용카드 데이터에 대해 TDA 해봄
    • 색이 진할수록 군집에 사기가 많다는 것
    • 뉴럴넷은 사기가 있다 없다만 알 수 있는데, 몇가지의 사기냐는 어려움. TDA는 어떤 형태의 사기가 있다는 것을 파악할 수 있음
    • 풀리커넥티드 들어가기 전 데이터로 TDA를 해봤는데, 색이 진할수록 사기가 많음
    • 이제 더 분석해서 결과를 얻을 예정
  • 질문
    • 새로운 사기 대응은 어떻게 하는가?
      • 비지도로 탐지할 수도 있고, 평상시에 데이터 분석하며 할 수 있고, 새로운 사기가 올라오면 금융권끼리 사례 공유가 됨
    • Autoencoder의 쓰레솔드 어떻게 줬는지?
      • 실제로 오토인코더로 탐지하지 않음. 정상과 사기가 잘 분리가 안됨. 탐지는 안되고 feature 정도로만 사용
      • 쓰레솔드를 다 조절해봤는데, 오탐이 너무 높았음
      • 이걸 통해 정상이나 아니다 나누진 않음
  • 후기
    • Anoamly Detection하는 방법을 깔끔하게 말씀해주셔서 만족스러운 발표!
    • TDA란 것도 알게되서 유익했음

Buffalo: Open Source Project for Recommender System

  • 김광섭님
  • 버팔로의 특징
    • 지원 알고리즘
    • 뛰어난 생싼성과 성능
    • 편의 기능
      • 실험할 때 필요한 기능들
  • 추천시스템과 버팔로의 관계
    • 왜 오픈소스를 개발했는가?
    • 추천시스템을 보통 협업 필터링, 무비렌즈 데이터에 대해 주로 이야기함
    • 사용자에게 콘텐츠 혹은 정보를 소비하는 경험을 제공하는 기술
  • 카카오 추천시스템 토로스의 일부 기능
  • 개발 배경
    • 2010년 초반에 오픈 소스 프로젝트가 거의 없었음
    • 특히, 원하는 크기의 데이터를 적절한 시간에 효과적인 자원으로 분석할 수 있는 프로젝트가 없었음
    • 초기엔 Matrix Factorization 모듈
    • 쓰기 편하고 실용적이고 스케일러블, 만족스러운 품질의 결과를 줄 라이브러리
  • 6년정도 된 프로젝트인데 이제 공개한 것
  • 버팔로 알고리즘
    • Alternating Least Square
    • Bayesian Personalized ranking matrxi factorization
    • Word2vec
    • CoFactors
  • Matrix Factorization
    • 행렬로 표현된 데이터를 더 작은 차원의 행렬로 분해하는 방법
    • 장점
      • 데이터의 압축
      • 숨겨진 특성의 활용
  • 4개의 MF 알고리즘을 제공하는데 왜 4개나 필요한가?
    • 행렬 분해할 때 목적 함수의 정의, 데이터의 구성과 변형에 따라 서로 다른 성질의 은닉 벡터를 구할 수 있음
    • 여러 행렬 분해 알고리즘을 사용해 다양한 특질을 확보할 수 있음
    • 버팔로는 원하는 크기의 데이터를 적절한 시간에 효과적인 자원으로 수행할 수 있는 알고리즘 위주로 선택하며, 품질보다 확장성이 더 중요함
    • 그러나 scalabiltiy > quality가 항상 성립하는 것은 아님. 대부분 문제는 Scalability는 타협 가능하지 않고 Quality는 타협 가능함
  • Scalability가 중요한 이유
    • NNZ 20M : 0이 아닌 값이 이만큼 있다
  • 품질은 어디까지 타협해야 할까?
    • 다양한 알고리즘을 실험한 결과 체감상 차이가 미미하고 시스템 성능에 미치는 영향도 차이가 크지 않음
    • 초반엔 조금만해도 성능이 오르지만 점점 하다보면.. 시간대비 효율이 안나옴
    • 투자 대비 효율로 전환
      • 긴 파이프라인으로 구성된 시스템
      • Ceiling Analysis
  • 다른 알고리즘과 비교 - implicit, gmf, pyspark랑 비교 - 대비해서 빠름 - 자원을 효과적으로 쓰고 있는지도 테스트해봄 => latent vector 크기 고정하고 cpu core 하나씩 늘리며 얼마나 빨라지는지 봄)
    • batch learning으로 잘라서 사용 가능
  • 높은 생산성
    • 유사 콘텐츠 추천과 개인화 추천에 대한 병렬처리 기능 제공함
      from buffalo.algo.ali import ALS
      from buffalo.parallel.base import ParALS
      als = ALS.new('./ml20m.bin')
    	
      als.most_similar('Starwars')
    	
      #parallel
      par = ParALS(als)
      par.num_worker = 8
      par.most_similar(['Starwars', 'Startrek'])
    
  • 진행한 노력들
    • Python/C++ 코드 베이스와 병렬처리를 효과적으로 구현
    • 쓰레드 작업할 때 job으로 쓰레드를 나누는데 job의 크기가 다 다름
    • 병목이 누적되며 차이를 만듬
    • 데이터 사이즈를 고려해 job을 배분하면 전체적 속도가 월등히 빨라짐
    • 청크화된 데이터베이스를 사용해서, SSD에 내려둠 - 자세한 것은 Github repo
  • 편의 기능
    • Validation
      • Stream 데이터에서 Matrix Market 데이터로 변환 가능
      • 데이터 순서 기록을 고려해 최근 데이터만 추가하는 등
    • Evaluation
      • 어쩧게 할지 지정할 수 있음
    • Tensorboard
      • 텐서보드 옵션을 지정하면 버팔로가 넘김
    • Hyper-parameter optimization
      • 연구 목적 + 서비스 개발에도 중요한 부분
      • 모든 머신러닝 알고리즘에서 하이퍼파라미터가 가장 중요하다고 해도 과언이 아닌데, 이런 기능을 내장하고 있음
      • hyperopt를 wrapping
        • min, max가 이슈가 있어서 조금 수정한 것은 있지만 거의 hyperopt와 유사
      • 모델 deploy도 됨
  • 요약
    • C++/Python
    • CPU 최적화, GPU 지원
    • 효과적인 시스템 자원 활용
    • 연구/개발 목적의 편의 기능 제공
    • 벤치마크 표준화
      • 예측, 유사도
      • 맥락 고려
      • 다양한 데이터
      • 양질의 데이터 등
    • 지속적인 오픈소스 활동
      • 신규 작업: 실시간 추천 어플리케이션 서버
      • 기존 성과물 개선 작업 : n2, buffalo
  • 후기
    • 추천할 때 한번 써봐야겠음
    • 오픈소스에 기여하는 카카오 추천팀 멋짐..!
    • 루카스님 리스펙

TensorRT를 이용한 카카오 OCR 모델 Inference 성능 최적화

  • 이현수님
  • 딥러닝 모델의 Trade off
    • 연산량 증가하면 정확도 향상됨
    • 정확도와 속도는 반비례
  • Inference 성능 향상을 위한 방법들
    • 네트워크 구조 개선
      • 정확도도 좋고, 연산도 효율적인 모델 학습
      • MobileNet, EfficientNet, Parallel decoding
    • 학습된 모델의 inference 과정 최적화
      • compression
      • quantization + a
        • TensorRT Framework 활용
  • OCR Model 구조
    • Detection Model + Recognition Model로 구성
    • Text Detection Model
      • Convolution + Unpool layer, unet
    • Text Recognition Model
      • CNN Feature Extraction + Self Attention(transformer)
      • Connextionist Temporal Classification
  • TensorRT
    • 딥러닝 inference 최적화를 위한 NVIDIA 플랫폼
    • 학습된 모델을 TensorRT로 가져와 Inference할 엔진 생성
    • 최적화 방법
      • Precision Quantization
        • 35 bit floating point -> 16 bit / 8 bit
        • inference 효율성 증가
          • 데이터 전송 효율 증가
          • GPU 가속을 통한 연산 속도 향상
        • infenrece 정확도 감소
          • Quantization-aware Training
          • Network Calibration(INT8)
      • Layer & Tensor Fusion
        • 공유된 메모리로 연산 => 하나로 합침
        • Dependency가 없는 연산도 합쳐서 수행
      • Kernel Auto-Tuning
        • GPU 종류, 배치 사이즈, Tensor shape 등을 기반으로 가장 효율적인 GPU 커널 선택
        • 직접 Operation 구현해서 최적화 가능
  • TensorRT 사용 방법
    • 학습된 모델 가져오기
      • Createing a network definition from scratch
        • weight 파일 매핑
      • importing a model
        • 모델을 파싱, 파싱할 수 있는 형태로 네트워크 구조 수정해야 함
        • 이 부분 위주로 설명
  • TensorFlow 모델을 Import
    • TensorFlow GRaph -> UFF Network -> TensorRT Engine -> Engine을 이용한 Inference
    • TensorFlow Model을 inference하기
    • 모델 parsing을 위해서 확인할 사항들
  • TensorFlow 모델 그래프 확인
    • TensorRT에서 사용할 수 있는지 확인
    • shape 연산의 파라미터를 상수로 고정
    • 즉, 가변 길이 Input이 아니라 고정 크기의 input
  • 연산의 format 및 shape 확인
    • channel first format 사용
    • Dense / Conv1D 사용 힘듬
  • Plugin Layer를 이용한 연산 구현
    • TensorRT에서 사용 가능한 연산 구현해 대체
  • 후기
    • 중간에 잠시 일이 있어서 나갔다 왔지만, 발표의 흐름이나 정보 획득 관점에서 유익했음!
    • 나중에 직접 사용할 때 발표 자료 보면 더 도움이 될 듯

비주얼 컴퓨팅을 활용한 카카오맵

  • 박영욱님
  • 후기
    • 맥북 배터리 문제로 메모하진 못했지만, 친절한 목소리톤이라 듣기 좋았음
    • 카카오맵에 이런 다양한 기술이 있구나! 싶었던 세션

카카오 대리 시공간 데이터를 이용한 강화학습 및 최적화

  • 조창민님
  • 어떻게 문제해결을 했는지 그 과정을 공유하려고 함
  • 카카오모빌리티 AI 파트 소개
    • 엔지니어링 스킬이 중요
      • 실서비스, ML, 통계 등
      • 실 서비스 장애 0건, 0.1초 미만 Latency
    • 서비스 고도화는 곧 성과
      • 매출 얼마나 높이고, 전환율을 높여달라
    • 딥러닝은 하나의 방법이고 항상 최고의 방법은 아님
    • 실제 서비스에 모델을 적용하고 불가능한 KPI를 달성하는게 목표. 모델링의 정확도 뿐만 아니라 안정적인 서비스가 목표
  • 카카오 T 대리 서포터즈
    • 카카오 T에서 대리 서비스
    • 승객의 호출이 자동 배정 되는, 기사님을 위한 서비스
    • 승객에겐 보다 빠른 연결
  • 이동 요청
    • 어느 위치에서 어디까지 가달라
  • 이 서비스가 좋은 이유
    • 초보기사분들에겐 판단이 어려움. 계속 콜을 봐야되고.. 집으로 가는 것도 고려해서 콜을 받아야 함
  • 해결해야 될 문제
    • 어떻게 이동 추천을 하지?
    • 대리 기사님당 콜 수행 n건 이상 수익은 얼마 이상!
    • 집 방향으로 이동을 어떻게 해야하지?
  • 수요 예측 모델
    • 대리 데이터 EDA
      • 연도 상관없이 비슷하고, 월에 따라 분포 차이. 요일에 따라 콜 차이 심함, 시간의 영향도 받음
      • 오늘 휴일인지 아닌지는 큰 차이가 없음
      • 다음날이 휴일이냐에 따라 콜이 확 달라짐
      • 지역
      • Kmeans로 클러스터링
      • 콜의 분포에 따라 지역을 나눔
      • Auto correlation을 보니 1시간 30분 이전까지 사용하면 예측률이 오르겠구나!를 얻음
    • 일단 다양한 모델 다 돌림
    • 10분 단위 과거 콜 데이터로 예측
  • 갑자기 서비스 담당자분이 다른 쪽으로 이동…
  • 어쩌다보니 이걸 다 함
  • 시뮬레이터 RL 환경 만들기
    • 예측은 그냥 있는 데이터 쓰면 됨
    • 하지만 누군가 어디로 이동시킬 때 더 잘나올까?는 예측할 수 없음
    • 우리 지도를 싹 그리고 대리 시장 그리고..! 대리 기사님처럼 뿅! (타다에도 이렇게 진행하고 있음)
    • 행정구역단위의 시뮬레이터
      • 읍면동 같은 것.. 행정 구역으로 기사님 보내기엔 너무.. 작고 등등
      • 택시 또는 지하철이 끊길땐?
      • 바로 옆에 조금만 가면 되는데 굳이 강남으로?
    • Geohash 기반 시뮬레이터
      • 사각형으로 자를 수 있음 => 모두 일정함
      • 대리 수요에 따라 서비스지역 한정
      • Geohash 기반 시뮬레이터 각 거리가 좌우는 같음, 대각선은 기존보다 더 이동함
    • H3 기반 시뮬레이터
      • 어느 방향으로 가나 길이가 동일함
      • 현재 이거로 만드는 중
      • 랜덤하게 대리 기사를 출근. 어느 위치에
      • 이동을 시킴. 여기로 가세요!
      • 반경 검색! (몽고DB 사용)
      • 그 후 배정
      • 승객에게 가면 자동차를 몰고 목적지로 이동
      • 가상 환경에선 과거 30분 수요 데이터, 미래 30분안에 도착 예정 Agent
      • Agent의 현재 위치 등등을 모두 가지고 있음
    • 모델링보다 시뮬레이터가 100배 더 어려움
  • Monte Carlo Tree Search
    • 대리가 콜 받고 도착해서 또 콜받고.. 핵심은 콜 받는거 아닌가?
    • 강릉까지 가서 내리면 집에 어케오지..? 택시타면 마이너스
    • 계속 이어지도록 하는게 중요함
    • Tree구조
    • Tic Tac Toe 게임 만들었는데 비겼으면 비겼지 절대 지지 않음
    • 문제는 경우의 수가 많아지면 학습 속도가 너무 느려짐
    • 실제 적용까지 너무 힘듬.. 차원이 너무 많음
  • Tabular Learning
    • State가 있고 Action 존재
    • random이랑 비교함
    • Q Learning 결론 : H3 위치만 넣었는데 의외로 잘됨
    • 단, 많은 기사님들이 들어올 떄 argmax를 취하기 떄문에 몰려버림
    • 이걸 해결해야 함
  • Reinforce Method
    • 강화학습이 아닌 다른 알고리즘
    • softmax를 넣어 확률값으로 방향마다 나옴
    • Policy learning에서 q value의 구현에 따라 알고리즘이 바뀜
    • 10.59 gradient가 클수록 학습을 많이 해야함. 상황은 좋은데 왼쪽으로 갈 확률은 적음
    • 인싸이트는 얻었지만 모델의 업데이타 너무 느림! 게임이 끝날 때까지 기다려야 함
    • 그리고 Blackbox
  • Reinforcement with convex optimization
    • 문제점
      • 서비스 초기엔 딥러닝이 애매함
      • 서비스 중후반엔 딥러닝 쓰고 AB Test 가능함
      • 딥러닝이 디버깅이 힘듬
    • 서비스 초기엔 더 명확한 것을 가지고, 빠르게 튜닝 가능한 알고리즘이 필요함
    • 현실은 알 수 없음. 기사님들의 행동은?
    • 시급제라 기사님들이 존버함 (ㅋㅋㅋㅋㅋㅋ아..진짜 똑같네…)
    • RL에서 사용하는 Future Discounted Reward의 개념을 사용하고 싶지만 딥러닝은 사용하고 싶지 않음
      • 리워드는 그대로 사용하되 방법만 변경
    • Convex Optimization! 수리적 모델
    • 컨벡스는 마주치는 부분이 없어야 함
    • 직선이면 리니어 프로그래밍
    • Simplex Optimization
      • 인접한 근단점들의 목적함수의 값들을 계속 검토하며 최적해 구하는 방법
      • 그냥 단순하게 최적점으로 이동하며 optimize
    • 목표는 q value, 하루 끝났을 때 최대 수익을 maximize. 그걸 convex optimization
  • 최종 공식
    • 특정 지역의 콜 평균 - 해당 지역의 Agent 수 - 이동 거리 => 기사님들의 하루 수입을 최대화
    • beta들을 다 곱하고 beta를 최적화
    • 콜이 나오는 지역으로 유도하고 다른 기사님들과 겹치지 않도록 최적화
  • 시뮬레이션 결과
    • 2배 이상, 실제로도 늘었다고 함
  • N-Step A3C
    • 앞으로 방향은?
    • N-Step
      • 바로 앞단의 이익이 어떻게 되는가?
    • Temporal Difference
    • n번째까지 진행
    • 이 알고리즘으로 슈퍼마리오 구현
    • N-step 64로, 64 프레임 이후에 떨어져 죽느냐? 등등에 따라 값이 변함
    • 이제 A3C, Curiosity 등을 적용할 예정
  • 질문
    • 시뮬레이터 생성시 노드 단위까지 가는걸 했는지, geohash간 이동 거리 등으로 했는지 => geohash간
  • 후기
    • 제일 만족스러웠고, 재미있었던 세션
    • 제가 회사에서 진행하고 있는 업무들이랑 너무 비슷하고, 문제 푸는 방식도 유사해서 잘 하고 있구나 생각했음. 따로 여쭤보니 시뮬레이터 만들대 SimPy 쓰셨다고 하셔서 동질감도.. (여기도 시급제라 이슈가..) 명함 주고받았는데 나중에 대화 한번 해봐도 좋을 것 같음

카일스쿨 유튜브 채널을 만들었습니다. 데이터 사이언스, 성장, 리더십, BigQuery 등을 이야기할 예정이니, 관심 있으시면 구독 부탁드립니다 :)

PM을 위한 데이터 리터러시 강의를 만들었습니다. 문제 정의, 지표, 실험 설계, 문화 만들기, 로그 설계, 회고 등을 담은 강의입니다

이 글이 도움이 되셨거나 다양한 의견이 있다면 댓글 부탁드립니다 :)

Buy me a coffeeBuy me a coffee





© 2017. by Seongyun Byeon

Powered by zzsza