프라우드 디텍션 시스템이란 사이버 범죄를 비롯한 사기 거래를 방지하기 위한 보호 시스템이다. 전자금융거래 시 단말기 정보와 사이트 접속 정보, 거래 정보 등을 실시간으로 수집하고 분석해 사기로 의심되는 특정 거래를 탐지하도록 해 준다. 주로 온라인 쇼핑 회사에서 사용되고 있으며, 지속적으로 연구와 개발이 이뤄지고 있다.
관련해 27일 진행된 '2023 게이밍 온 구글 클라우드' 행사에서 김지혁 엔지니어는'Vertex AI로 프로덕션 레벨의 프라우드파인더 시스템 구축하기'를 주제로 강연했다. 다음은 강연을 정리한 내용이다. /디스이즈게임 김승주 기자
(출처: 구글)
# 프로덕션 레벨의 머신러닝 모델 구축의 어려움
범죄자들은 다양한 방식으로 범죄에 필요한 비용을 최소화하고, 계정이나 거래 수, 예약 수를 최대화해 수익을 극대화하고 있다. 지금에는 당연한 이야기로 들릴 수 있지만, 이런 것들을 발견하기 위해서는 많은 노력이 필요하다.
머신러닝 모델도 한 번 만들면 끝이 아니라, 이런 인사이트를 지속적으로 발견해서 모델 성능을 일정 수준 이상으로 유지시키는 것이 중요하다. 그래서 모델의 개발은 단순히 최신 데이터를 학습하는 것을 넘어 피처나 알고리즘에 대한 재검토가 중요하다.
그러나, 머신러닝 모델을 프로덕션 레벨까지 끌어올리는 것은 쉽지 않다. "머신러닝 모델을 만드는데 3주밖에 걸리지 않았지만, 11개월이 지난 지금까지도 프로덕션을 배포하지 못하고 있다"라는 말이 나올 정도다.
(출처: 구글)
김지혁 엔지니어는 머신러닝에서 중요한 것은 결국 의사결정을 내리는 모델의 성능이라는 것에 동의하지만, 이는 처음부터 확보할 수 있는 자산이 아닌 시스템과 사람이 노력해 만들어진 것이라고 언급했다. 지속적인 연구가 필요한 부분이고, 결국 시스템이 있어야만 가능해진다. 시스템 구축을 위해 많은 엔지니어링이 필요하다. 그렇기에 과제가 크면 클수록 클라우드를 선호하게 된다.
문제는 클라우드 업체나, 발표자, 발표 시기마다 솔루션이나 접근법이 다르다. 김지혁 엔지니어는 그 중에서 구글 클라우드에서 가장 많이 사용되는 방법론을 소개했다.
# 구글 클라우드의 방법론
결제 대행 회사의 데이터 사이언티스트 팀 리더가 된 상태에서, 프로덕트 매니저가 최신 실시간 Fraud detection 시스템을 요구했다고 가정해 보자. 이 경우 원천 데이터로부터 데이터 탐색을 하고 피처 엔지니어링을 통해 모델을 학습하고 배포해 전체 사이클을 관리해야 한다. 일반적인 내용이지만, 중요한 것은 각각의 단계에서 Production을 고려한 설계 및 사용하고자 하는 솔루션의 적합성 여부다.
이해를 돕기 위해 전체 아키텍처를 살펴보자. 보통 라이브 시스템에서 실시간으로 데이터를 받게 되고, 이런 정보들은 Pub/Sub 서비스를 통해 배치와 스트리밍으로 전달되어 분석된다. 분석된 결과는 Feature store를 통해 프로덕션 데이터로 저장되고, 모델의 학습과 예측에 활용된다. 예측 결과는 모델 모니터링을 통해 지속적으로 모델의 성능을 트래킹하는데 판별되고, 전체 과정은 머신러닝 파이프라인으로 관리된다.
(출처: 구글)
기본적으로 수집되는 데이터는 고유한 트랜잭션 아이디, 결제 시간, 아이디, 터미널(사이트), 결제 금액 등의 정보가 포함되어 있다. 원천 데이터를 하나도 잃지 않고 언제든 SQL 로 조회할 수 있도록 빅쿼리에 저장한다.
추가적으로 사내에 이상 감지 부서가 있어서 과거 트랜잭션에 대해 이상 여부 정보를 기록해 둔 데이터가 있다고 가정한자. 다음은 원천 데이터의 탐색(EDA) 부분이다. 데이터를 조회하고 모델을 만드는 데 적합한지, 부족한 것은 없는지 다양한 방법으로 분석해야 한다.
(출처: 구글)
Bigquery는 Cloud 기반 Data Warehouse로서 데이터와 사용자가 많아도 Scalable 하게 데이터를 처리할 수 있다. 또한 Bigquery Python SDK 를 이용하면 데이터 사이언티스트가 선호하는 Pandas Dataframe 등으로 쉽게 변환할 수 있기도 하다. 그다음으로 중요한 것은 Feature 엔지니어링이다. 정제된 데이터는 모두 피처 스토어로 관리된다. 데이터로부터 어떤 Feature를 만들지는 많은 노하우와 노력이 필요한 부분이다. 시간상 강연에서는 생략됐다.
다음은 주어진 데이터로부터 Fraud detection 모델을 만들기 위해서 어떤 Feature를 더 만들 것인가, 시스템에서 해당 프로세싱을 제대로 소화할 수 있을 것인가에 대한 문제다. 지난달 평균 거래 건수의 내역 등이나 아니면 조금 더 줄여서 지난 30분간의 거래 내역을 보기를 원할 수 있다. 이런 내용을 조합하면 초기 데이터셋 구축이 가능하다. 지난달 결제 금액의 건당 평균이나, 지난 30분간의 평균 결제 거래 수를 확인할 수 있는 식이다.
(출처: 구글)
만들고 싶은 데이터 셋을 가지고 어떻게 프로덕션 시스템을 만들지는 각 컬럼 단위로 분류한다. 월 단위는 모든 히스토리를 이용해 집계 로직을 실행해야 한다.
30분 단위 집계는 Bigquery 같은 솔루션보단 스트리밍 데이터 처리에 최적화된 Dataflow를 통해 실시간으로 처리한다. 30분 단위 집계는 시간마다 집계를 하는 것이 아니라, 1초마다 혹은 1분마다 매 과거 30분을 계산하는 식이다. 이는 Bigquery를 통해 계산할 수도 있으나 비효율적이다.
(출처: 구글)
만들어진 Feature들이 시스템에 저장되고 활용되는 시퀀스는 다음과 같다. 실시간 트래픽은 배치 시스템과 스트리밍 시스템을 통해 Feature Store에 저장되어 학습 및 예측에 활용된다.
(출처: 구글)
# 구글의 Feature Store
Feature Store에 대해 상세하게 소개하면, 그림과 같이 원천 데이터 소스로부터 ETL을 통해서 Feature Store로 적재하는 머신러닝에 특화된 데이터베이스다.
많은 회사에서 원천 데이터를 가진 부서가 다르고, 데이터가 적재되는 프리퀀시도 다르다. 서로 다른 프리퀀시의 데이터를 시간순으로 잘 정렬할 것인가는 공수가 많이 드는 문제다.
그래서 Feature Store는 Feature를 컬럼 단위 데이터로 Insert 해 각각 다른 프리퀀시에 상관 없이 본인이 생성한 데이터만 컬럼 단위로 밀어넣으면 된다. 학습 및 예측 할 때는 Row 단위, 테이블 단위로 읽게 된다. 프리퀀시 차이에 따라 생기는 Feature별 Null 값 같은 경우는 Forward fill 을 이용해 이전 데이터로 채워진다.
추가로 중요한 부분은 드리프트 디텍션이다. 머신 러닝 모델을 만들 때 데이터는 일정 시점까지만 학습에 이용되고 그 이후 데이터는 모델이 다시 학습에 이용되기 전까지 활용되지 않는다. 드래프트 디텍션은 학습에 사용된 데이터와 신규로 적재된 데이터의 거리를 계산해 모델이 다시 학습할 필요가 없는지에 대한 힌트를 준다.
결국 모델을 만들 때 데이터가 계속 바뀌니까 매일같이 학습을 해야 한다고 느꼈다면, 학습을 해야 하는 시점이 매일이 맞는지 한 시간이 맞는지 1주일이 맞는지 분석해 본 적이 없다고 느낄 때, Feature Store는 학습 사용된 데이터와 신규 데이터 사이의 갭을 분석해서 재학습이 필요한지에 대한 힌트를 제공한다.
(출처: 구글)
스트리밍 부분을 살펴보면 Dataflow를 이용해 30분 단위로 집계한다고 언급했는데, 요구 사항이 늘어날 수 있다. 15분 단위 혹은 60분 단위로도 필요해질 수 있다. 이런 변경사항에 대해서도 쉽게 반영할 수 있다.
원하는 대로 파이프라인 DAG만 작성하면 Input 데이터의 키 값 분포를 가지고 자동적으로 오토 스케일링을 해 준다. 데이터 파이프라인의 두께를 동적으로 관리해주는 플랫폼이라 보면 된다.
DAG를 작성하면 최적 플로우로 파이프라인이 만들어진다. Input 데이터의 키 각각에 대해 윈도우를 만들어 주고, 윈도우 내에서 초 단위, 분 단위로 Aggregation 해 주게 된다.
(출처: 구글)
# 구글 클라우드가 제공하는 기능
모델의 학습과 배포 부분을 살펴보면, 구글 클라우드에서는 모델을 세 가지 옵션으로 생성할 수 있다. Bigquery를 통해서 가능하고, Vertex AI 플랫폼, Auto ML 플랫폼을 통해 만들 수 있고, 모델 레지스트리에서는 어떤 곳에서 생성하든 상관없이 저장하고 버전 관리를 하게 된다.
중요한 부분은 엔드 포인트다. 모델을 배포하고 어떻게 활용되는가를 모니터링하는 것이 중요하다. 구글 클라우드는 크게 4가지 기능을 제공한다. 예측을 위해서 클라이언트가 보낸 Request와 해당 Response를 모두 Bigquery에 기록해서 추후 분석할 수 있도록 해 준다.
(출처: 구글)
두 번째는 Feature Store에서 제공했던 Drift detecion이다. Feature Store에서 활용하기 위해서는 데이터를 다 저장해야 하지만, 엔드포인트에서는 예측을 위해 오고간 데이터만 보기 때문에 꼭 Feature Store를 통해 다 저장할 필요가 없는 장점이 있다. 세 번째는 Explainable AI 기능이다. 어떤 Feature가 모델에 얼마만큼의 영향을 끼쳤는지 보여주는 기능이다.
가장 중요한 네 번째 부분인 Feature 트랜드다. 모델을 작성하면, 모델에 대해서 Feature importance가 나온다. Feature 5개가 있으면 그중 1번은 몇 퍼센트의 중요도가 있는지 가중치가 나온다. 결국 모델을 배포하고 쭉 서비스를 했을 때, 미래의 인풋 데이터는 학습된 데이터 내에 모두 들어있길 원하지만 실제로는 그렇게 되지 않는다. 또 다른 모르는 데이터를 얻게 될 수 있다.
Feature importance 트랜드 같은 경우는 '보지 못했던 데이터가 와서 모델의 트랜드가 바뀌고 있구나, 모델이 아웃데이트돼서 최신 데이터로 다시 학습을 해야 되겠구나'를 인지할 수 있는 힌트를 준다.
마지막으로 파이프라인 부분은 모델 학습과 배포에 관련된 부분을 코드로 관리하는 부분이고, 구글 클라우드에서는 Kubeflow를 이용해서 전체 관리를 권장하고 있다. 데이터 준비부터 학습, 모델 배포까지 관리할 수 있다. Kubeflow는 Kubernetes 기반이라, 온프렘 및 클라우드를 같이 엮어서 MLOps 환경을 만들 수 있는 솔루션이다.
(출처: 구글)
(출처: 구글)