원문 제목: Judge a Transaction by the Company It Keeps — Somya Rai & MD Sharique, EXL URL: https://www.youtube.com/watch?v=SHvwutPSeZg 날짜: 2026-10-13 채널: aiDotEngineer
📌 핵심 질문 / 거래의 위험은 거래 자체에 있는가, 주변 관계에 있는가?
==사기(fraud)는 개별 거래(transaction)의 고정된 속성이 아니라, 그 거래가 놓인 이웃(neighborhood)의 속성이다.== 같은 금액·가맹점·기기·시간대·MCC 코드로 구성된 행(row)이라도 연결된 사용자·가맹점·최근 거래들이 무엇을 하고 있는지까지 보면 정상 거래가 고위험 거래로 바뀔 수 있다.
- 동일한 거래 행과 198개 특징으로 산출한 점수는 0.04였지만, 지난 1시간 안에 사용자·가맹점·다른 거래에 연결된 네 거래 중 세 건이 사기였다는 관계 정보를 추가하면 0.91이 된다.
- 오프라인 카드-present와 온라인 거래는 기본 사기율과 신호의 구조가 다르므로 하나의 모델이 아니라 두 포트폴리오에 맞는 모델이 필요하다.
- 고정된 분석가 검토 예산 안에서 그래프 신경망(GNN)으로 관계 신호를 추출하고, 기존 XGBoost에 임베딩을 결합하면 동일한 경보율에서 사기 포착률을 27~33% 높일 수 있다.
사기 탐지는 단순히 행 단위 분류기의 AUC를 높이는 문제가 아니다. 제한된 경보 슬롯 안에 실제 사기를 더 많이 넣고, 규제 환경에서 분석가가 조치할 수 있는 근거를 함께 제시하며, 기존 시스템의 수 밀리초 지연시간을 지켜야 하는 데이터·모델·서빙 통합 문제다.
1. 행 단위 특징의 한계와 관계 신호의 가치
거래의 숫자와 속성만으로는 연결된 사기 패턴을 볼 수 없으며, 포트폴리오마다 다른 기본 발생률과 신호 구조를 반영해야 한다.
1.1. 한 거래의 점수가 관계 정보에 따라 뒤집히는 이유
-
동일한 거래가 두 가지 점수를 만든다
- 행 단위 점수 0.04: 온라인 구매 하나의 금액, 가맹점(merchant), MCC 코드, 기기 종류, 시간대 등 198개 특징을 사용해 점수를 계산하면 어떤 경보 임계값보다 낮은 0.04가 나온다.
- 관계 기반 점수 0.91: 행의 어느 값도 바꾸지 않고, 해당 사용자·가맹점·다른 거래를 잇는 네 거래 가운데 세 건이 지난 1시간 안에 사기로 판정됐다는 이웃 정보를 추가하면 점수가 0.91로 상승한다.
-
신호는 행의 내부가 아니라 모서리에 있다
- 관계의 예시: 여러 계정이 하나의 기기를 공유하거나, 장바구니를 가로지르는 거래 속도(velocity) 사슬이 형성되거나, 40분 전부터 특정 가맹점의 거래가 악화되는 패턴은 개별 행의 열(column)로는 드러나지 않는다.
- 그래프의 의미: 거래·사용자·가맹점·최근 거래를 노드(node)로 보고 연결을 엣지(edge)로 표현하면, 개별 거래가 누구와 연결되어 있고 주변에서 지금 어떤 일이 벌어지는지 모델이 볼 수 있다.
1.2. 카드-present와 온라인 포트폴리오의 서로 다른 구조
-
오프라인 카드 거래의 낮은 기본 사기율
- 발생률: 가맹점의 물리적 판매 시점(point of sale)에서 일어나는 카드 거래의 자연 사기율은 약 0.05%, 즉 2,000건 중 1건이다.
- 신호 특성: 신호가 상대적으로 조밀하고 잡음이 적으며, 사기 여부가 카드 자체의 거래 속도와 이력에 많이 반영된다.
-
온라인 거래의 높은 기본 사기율
- 발생률: 온라인 거래의 자연 사기율은 약 0.6%로 카드-present보다 12배 높다.
- 신호 특성: 거래량이 더 많고 잡음도 크며, 신호의 상당 부분이 가맹점과 주변 거래 관계에 있다.
-
모델링과 평가의 제약
- 두 모델이 필요한 이유: 두 포트폴리오는 기본 사기율과 신호의 기하 구조(signal geometry)가 다르므로 한 모델로 처리하지 않고 각각에 맞춰야 한다.
- 고정 경보 예산: 분석가는 전체 거래 중 점수가 높은 상위 0.5~1.5%만 검토한다. 따라서 목표는 일반적인 ROC-AUC만 높이는 것이 아니라 고정된 K에서의 정밀도(precision at fixed K)다.
- 실제 운영 조건: 모델은 같은 지연시간을 유지하면서 실제 사기를 분석가가 보는 좁은 경보 구간 안으로 이동시켜야 가치가 있다.
2. 더 많은 행 특징만으로는 넘을 수 없는 성능의 천장
기존 XGBoost에 특징을 계속 추가해도 이미 같은 행과 카드의 과거 이력에서 얻은 정보를 재투영할 뿐이며, 연결 관계를 복원할 수 없다.
2.1. 특징 공학의 실험 결과
-
카드-present 모델의 개선 폭
- 원시 특징 확장: 40개 원시 속성을 87개로 늘리고 특징 선택과 누출(leakage) 검사를 거쳤다.
- 성능 변화: 양성률(true positive rate)은 35.5%에서 36.6%로만 상승했다.
-
온라인 모델의 개선 폭
- 특징 규모: 약 200개의 공학적 특징을 만들었다.
- 성능 변화: 성능이 약 1%포인트 개선되는 데 그쳤다.
-
성능 정체가 의미하는 것
- 비용 대비 수익: 특징 표면(feature surface)을 2~5배 늘려도 탐지 성능은 1%포인트 정도만 올라갔다.
- 튜닝 실패가 아닌 정보의 한계: 모든 특징이 같은 거래 행과 카드 고유 이력의 함수이므로, 모델이 이미 가진 정보를 다른 형태로 표현했을 뿐이다.
- 답하지 못하는 질문: 행 특징은 “이 거래가 어떻게 보이는가?”에는 답하지만 “이 거래는 누구와 연결되어 있으며, 그 연결된 주체들이 지금 무엇을 하는가?”에는 답하지 못한다.
2.2. 그래프 신경망을 기존 분류기와 결합하는 설계
-
GNN의 기본 연산
- 수집(gather): 거래-사용자, 거래-가맹점 등 엣지를 따라 각 이웃의 은닉 상태(hidden state)를 가져온다.
- 집계(aggregate): 노드마다 이웃 수가 달라도 순서에 영향을 받지 않는(permutation-invariant) 함수로 이웃 집합을 고정 폭 벡터로 축약한다.
- 갱신(update): 집계한 이웃 벡터를 노드 자신의 상태와 결합하고 학습 가능한 가중치를 거쳐 새 표현을 만든다.
-
두 계층 메시지 전달
- 첫 번째 계층에서 거래가 직접 연결된 사용자·가맹점·거래의 표현을 받는다.
- 두 번째 계층까지 쌓으면 거래가 자신의 이웃과 이웃의 이웃에 대한 정보를 갖게 된다.
- 이 과정을 거친 GNN 임베딩을 기존 XGBoost의 입력에 넣고, 최종 점수는 동일한 그래디언트 부스팅 분류기가 산출한다.
-
공정한 비교
- XGBoost를 GNN으로 대체한 것이 아니다.
- 같은 특징·같은 평가 기간·같은 경보율을 사용해 XGBoost 단독과 XGBoost+GNN을 비교했다.
- 결과적으로 관계 정보를 추가하면서도 기존 분류기의 운영상 장점과 비교 가능성을 유지했다.
3. 데이터 샘플링과 누출 방지
그래프 데이터에서는 음성 샘플 한 행을 제거하는 일이 그 행의 엣지까지 제거하는 일이므로, 표 형식 데이터의 관행을 그대로 적용하면 모델이 의존할 관계 구조가 깨진다.
3.1. 연결성을 보존하는 샘플링
-
완화된 목표 사기율 설정
- 카드-present/가맹점 거래: 자연 사기율 0.05%의 약 10배인 0.5%를 소프트 목표 사기율로 유지했다.
- 온라인 거래: 자연 사기율 0.6%의 약 10배인 6%를 유지했다.
- 의도: 표 형식 파이프라인에서 쓰는 공격적인 오버샘플링·언더샘플링보다 훨씬 완만한 비율을 사용해 그래프의 연결성을 보존했다.
-
사용자 이력 보존 원칙
- 선택된 사용자의 전체 거래 이력을 그래프에 남긴다.
- 클래스 비율을 맞추려고 정상 사용자의 거래 이력을 잘라내면, 이웃 노드가 의존하는 연결 구조가 무너진다.
- 사기 사용자의 정상 거래도 남긴다. 이 거래들은 결정 경계에 가장 유용한 어려운 음성(hard negative)이 될 수 있다.
-
불균형 처리의 위치 이동
- 상한(cap)이 필요해질 때 줄이는 것은 정상 사용자의 거래 예산뿐이다.
- 사기 사용자의 이력은 절대 자르지 않는다.
- 클래스 불균형은 그래프를 훼손하는 데이터 단계가 아니라 트레이너 내부의 균형 배치 샘플링으로 처리한다.
3.2. 학습 시 이웃과 추론 시 이웃의 일치
-
사용자 차수(degree) 검증
- 학습 시 평균 사용자 차수는 카드-present/가맹점 거래에서 11.5에서 거의 14 사이였다.
- 추론 시 모델이 보는 평균 이웃 규모도 같은 범위에 맞췄다.
-
분포 안정성
- 자연 사기율 0.05%와 0.6% 조건에서 12개월 동안 이 분포가 안정적이었다.
- 학습 그래프와 추론 그래프의 이웃 규모가 다르면 모델이 잘못된 패턴을 학습하므로, 이 일치가 별도의 보정 없이도 안정적인 운영을 가능하게 했다.
3.3. 그래프 자체에 내장한 누출 통제
-
월별 분리 그래프
- 각 달을 서로 연결되지 않은(disjoint) 그래프로 구성한다.
- 한 달의 경계를 넘어가는 엣지는 존재하지 않으며, 거래를 중심 노드로 두고 사용자와 가맹점으로 이어지는 엣지를 만든다.
- 거래에서 자기 자신의 최근 이력으로 이어지는 최대 5-hop 경로도 같은 월의 시간 구조 안에서 만든다.
-
네 가지 누출 차단 규칙
- 미래 누출 방지: 거래는 타임스탬프가 더 이른 이웃만 집계한다.
- 학습·검증·테스트 누출 방지: 월별 그래프가 서로 분리되어 있어 분할 사이의 경로가 없다.
- 레이블 누출 방지: fraud 플래그는 목표값일 뿐 특징이나 엣지가 아니다.
- 분포 누출 방지: 모든 스칼라 변환과 vocabulary를 학습 월에만 맞춘 뒤 고정한다.
-
사후 감사가 아닌 구조적 검증
- 누출 방지는 모델을 만든 뒤 체크하는 사후 감사가 아니라 그래프 구성 규칙으로 보장한다.
- 네 가지 조건을 설계 단계에서 모두 검증해 실제 성능이 미래 정보나 분할 정보에 의존하지 않게 했다.
4. 특징·그래프·집계기 설계
거래의 관계 정보만 추가하는 것이 아니라, 각 엔터티의 평소 행동에서 얼마나 벗어났는지와 이웃 중 위험한 소수가 존재하는지를 함께 표현해야 한다.
4.1. 세 노드 타입에 배치한 202개 특징
-
특징의 분포
- 사용자 노드: 73개 특징을 둔다.
- 거래 노드: 109개 특징을 둔다.
- 가맹점 노드: 20개 특징을 둔다.
-
거래용 파생 특징 32개
- 엔터티 이력 특징 10개: 과거 거래 횟수, 마지막 활동 후 경과 일수, 최근 5개 거래 금액의 평균·표준편차·최댓값 등으로 사용자와 가맹점의 행동 기준선(behavioral baseline)을 만든다.
- 위험 집계 특징 8개: 과거 이력 대비 금액의 이상 점수, 최근 기간과 과거 기간의 비율, 하루 거래 수 등으로 엔터티 자신의 기준선에서 벗어나는 정도를 측정한다.
- 롤링·시간 특징 14개: 5분·1시간·24시간 동안의 거래 건수와 금액, 최근 하루의 서로 다른 상대방 수, 마지막 거래 후 경과 초, 국가 변경률 등을 포함한다. 국가 변경률은 불가능한 이동(impossible travel) 패턴을 포착한다.
-
관계 정보와 행동 정보의 역할 분담
- 그래프는 거래가 누구와 연결되어 있는지를 알려준다.
- 파생 특징은 그 사용자나 가맹점이 자기 평소 행동과 다르게 행동하는지를 알려준다.
- 두 종류의 신호는 중복이 아니라 상호 보완적이다. 연결된 위험 이웃과 본인의 이상 행동이 함께 나타날 때 사기 가능성을 더 정확히 판단한다.
4.2. 평균만 쓰지 않는 집계 함수
-
고정된 최신성 편향 이웃 집합
- 각 hop에서 최근성이 반영된 고정 길이의 이웃 집합을 샘플링한다.
- 거대한 가맹점 노드 하나가 모든 메시지를 독점해 표현을 지배하지 않도록 이웃의 영향력을 제한한다.
-
평균·최댓값·표준편차의 결합
- 이웃 표현을 평균(mean), 최댓값(max), 표준편차(standard deviation)라는 세 가지 순서 불변 통계로 이어 붙인다.
- 이 결합 벡터를 노드 자체 벡터와 학습 가능한 가중치로 합쳐 고정 길이 표현을 만든다.
- 이웃 수가 달라도 출력 크기는 고정되며, 추가 학습 파라미터를 늘리지 않고도 세 관점을 얻는다.
-
위험한 단일 이웃을 평균이 숨기는 문제
- 거래의 네 이웃 중 세 개가 정상이고 점수가 약 0.1, 한 개가 사기 링과 연결되어 0.92라고 가정한다.
- 네 값을 평균하면 0.32가 되어 위험한 이웃의 신호가 정상 이웃 속에 희석된다.
- 최댓값을 사용하면 0.92가 그대로 통과한다. 여러 정상 거래 사이에 하나의 위험한 이웃이 섞이는 패턴은 사기 링이 만드는 전형적인 구조다.
- 표준편차는 이웃들이 얼마나 서로 불일치하는지 보여준다. 평범하고 균일한 동네와 살아 있는 이상치가 있는 동네는 서로 다른 분산을 갖는다.
-
귀납적(inductive) 임베딩
- 집계기는 노드마다 고정된 벡터를 저장하는 방식이 아니라, 이웃 정보를 바탕으로 표현을 계산한다.
- 따라서 새 사용자나 새 가맹점도 재학습 없이 요청 시점에 임베딩할 수 있다.
4.3. 임베딩 차원 선택
-
128차원의 절충점
- 128차원이 검증 성능과 비용 사이의 최적점(sweet spot)이었다.
- 64차원도 비슷하지만 약간 부족하게 맞았고, 256차원은 GPU 비용만 늘고 검증 성능을 추가로 주지 못했다.
- 성능은 128차원 이후 평탄해지다가 과적합으로 이어졌다.
-
선택 방식
- 차원 선택은 철학적 선호가 아니라 실제 하이퍼파라미터 스윕 결과로 결정했다.
5. 성능 결과와 사기 포착 효과
GNN 임베딩을 XGBoost에 결합하면 동일한 고정 경보율에서 두 포트폴리오 모두 실질적인 사기 포착률 상승이 발생한다.
5.1. 카드-present/가맹점 거래
-
고정 경보율 비교
- 경보율 0.5%에서 XGBoost 단독의 최적 진양성률은 36%였다.
- GNN+XGBoost는 진양성률을 48%로 높였다.
-
상대 개선과 금액 효과
- 진양성률의 상대적 상승은 약 33%다.
- 약 5,660만 달러의 사기 금액을 포착했고, 별도의 표현으로는 83% 포착률(capture rate)이 보고됐다.
- 카드-present에서는 사용자 자신의 거래 속도 엣지가 핵심 신호이며, 가맹점 수용 지점 자체보다 카드의 거래 연결성이 중요하다.
5.2. 온라인 거래
-
고정 경보율 비교
- XGBoost 단독의 진양성률은 48%였다.
- GNN+XGBoost는 61%까지 높였다.
-
상대 개선과 금액 효과
- 상대적 상승은 약 27%다.
- 약 3,540만 달러를 포착했으며 포착률은 71%였다.
- 온라인 거래는 카드-present보다 기본 사기율이 12배 높아 전체 약 6,500만 달러의 연간 증분 사기 포착 효과 대부분이 이 포트폴리오에서 나온다.
5.3. 성과 수치의 비교 조건
-
동일 조건
- 두 모델은 같은 경보율, 같은 평가 기간, 두 모델에 제공되는 같은 특징 집합을 사용했다.
- 성능 차이는 더 많은 행 특징이나 더 큰 검토 예산이 아니라 관계 임베딩에서 발생했다.
-
전체 효과
- 두 포트폴리오를 합친 연간 증분 사기 포착액은 약 6,500만 달러로 추정됐다.
- 발표 초반에는 두 포트폴리오의 진양성률이 27~33% 상대적으로 상승했다고 요약했으며, 실제 분리 수치는 카드-present 33%, 온라인 27%다.
6. 설명 가능성과 분석가의 조치 가능성
금융 사기 탐지에서 설명은 부가 기능이 아니라 규제 준수, 분석가 신뢰, 모델 디버깅, 라벨 품질을 좌우하는 운영 요건이다.
6.1. 엣지 단위 증거가 만드는 설명
-
서브그래프 귀속 분석
- 각 채널에서 플래그된 사례 200건씩을 대상으로 서브그래프 attribution을 수행했다.
- 카드-present 거래에서는 거래-사용자 속도 엣지가 평균 중요도 0.94로 가장 높았고, 200건 모두에서 가장 중요한 증거 조각이었다.
- 온라인 거래에서는 같은 속도 엣지의 평균 중요도가 0.62였다.
-
포트폴리오별 가맹점 영향
- 가맹점 엣지는 온라인 거래에서 평균 중요도 0.19로 더 컸다.
- 카드-present에서는 가맹점 엣지 중요도가 0.04에 불과했다.
- 카드-present 사기는 수용 지점보다 카드 자체의 거래 속도를 악용하고, 온라인 사기는 가맹점과 주변 연결 구조에 더 많이 의존한다.
-
추상적 점수에서 확인 가능한 사건으로
- 설명 없는 “점수 0.91”은 분석가가 다시 처음부터 사례를 조사하게 만든다.
- 엣지 근거를 붙이면 “지난 40분 동안 연결된 거래 세 건 때문에 점수가 0.91”이라고 검증 가능한 설명을 제시할 수 있다.
6.2. 설명 가능성이 필요한 네 가지 이유
-
규제와 모델 위험 관리
- 금융기관은 자동화된 의사결정에 대한 문서화된 근거를 요구하는 규제 프레임워크 안에서 운영된다.
- 근거를 남기는 일은 선택 사항이 아니라 배포 조건이다.
-
분석가 신뢰와 조사 속도
- 분석가는 설명되지 않은 고점수 경보를 습관적으로 승인하거나 무시할 수 있다.
- 연결된 세 거래라는 엣지 근거는 사건을 처음부터 재구성하는 일을 확인 절차로 줄인다.
-
모델 디버깅
- 귀속 패턴을 보면 모델이 잘못된 신호나 시간이 지나 약해진 신호에 의존하는지 성능 저하 전에 발견할 수 있다.
- 운영 성능이 눈에 띄게 떨어지기 전에 특징과 관계 구조를 점검할 수 있다.
-
피드백 루프 품질
- 설명이 분석가의 초기 의심과 일치하면 경계선 사례도 신뢰하고 올바르게 라벨링한다.
- 그 라벨이 다음 학습 데이터의 품질을 높인다.
- 정확하더라도 이유를 보여주지 못하는 블랙박스는 현업에서 사용되지 않는다.
7. 3밀리초 서빙을 위한 시스템 설계
전체 그래프를 매 요청마다 계산하지 않고, 오프라인에서 노드 표현을 미리 만들고 실시간에는 새 거래에 필요한 두 계층만 계산해 지연시간을 제한한다.
7.1. 오프라인 임베딩과 실시간 조립
-
메모리 제한 그래프 학습
- GPU 메모리에 전체 그래프를 올리지 않고, 목적지 노드(destination node) 단위로 나눈 계층별 그래프 순전파를 여러 GPU에 분산한다.
- 전체 그래프를 한 번에 계산한 것과 수치적으로 동일한 결과를 유지하면서 한 번에 몇 GB만 사용한다.
-
저지연 임베딩 저장소
- 모든 사용자·가맹점·최근 거래의 계층별 표현을 저지연 임베딩 저장소에 캐시한다.
- 각 사용자의 최근 다섯 거래는 온라인 링 버퍼(ring buffer)에 보관한다.
- 요청 시 가벼운 조립 단계가 저장된 표현에서 이웃 상태를 복원하며, 그래프를 다시 구축하거나 이웃을 다시 샘플링하지 않는다.
- 학습과 동일한 결과를 내도록 최근성에 지수 감쇠(exponential decay)를 적용한다.
-
요청 시 계산 범위
- 실시간 서비스는 새 거래의 두 계층 순전파만 수행한다.
- 캐시된 이웃 상태와 XGBoost 헤드를 결합해 점수를 산출한다.
- 그래프 크기에 비례하는 연산은 요청마다 실행되지 않는다.
7.2. 밀리초 단위 최적화
-
스레드와 초기화
- 무거운 수치 라이브러리를 로드하기 전에 수학 라이브러리 스레드 수를 1개로 고정했다.
- 이 조치만으로 지연시간이 30밀리초에서 1밀리초 수준으로 줄었다.
-
콜드 스타트 제거
- 시작 시 모델을 워밍업해 첫 실제 요청만 느려지는 문제를 없앴다.
- 현재는 단일 인메모리 프로세스로 동작하지만, 같은 인터페이스를 분산 캐시로 직접 매핑해 수평 확장할 수 있다.
7.3. 노드 캐싱의 비용과 엣지 예측으로의 전환
-
모든 노드 캐시의 함정
- 모든 거래까지 포함해 모든 노드의 표현을 캐시하면 운영 규모에서 약 60GB의 메모리가 필요하다.
- 고가의 고메모리 서빙 환경이 필요하고, 실시간 임베딩에 하루 지연이 생긴다.
- 이 방식에서는 진양성률이 48%에서 44%로 떨어졌다.
-
엣지에서 예측하는 해결책
- 거래 노드의 임베딩은 미리 계산하지 않고, 사용자와 가맹점 임베딩만 미리 만든다.
- 요청 시 사용자·가맹점 표현과 새 거래를 잇는 엣지에서 예측하도록 바꾼다.
- 메모리 사용량은 2~3GB로 줄어 약 20분의 1이 된다.
- XGBoost 모델과 같은 CPU 등급에서 실행할 수 있을 만큼 비용이 낮아진다.
- NVIDIA도 독립적으로 같은 접근을 권고했으며, 노드 모델과 비슷한 성능을 낼 것으로 예상했다.
7.4. 실제 요청 경로와 SLA
-
단계별 지연시간
- 전처리, 캐시 조회, XGBoost 헤드는 각각 1밀리초보다 작은 일부 시간만 차지한다.
- GNN의 실제 두 계층 순전파가 가장 큰 단일 비용으로 1.61밀리초다.
- 종단 간 지연시간은 중앙값 2.3밀리초, P99 3.1밀리초다.
-
운영 목표와 다음 최적화 지점
- 3~4밀리초 SLA 안에 여유 있게 들어온다.
- 더 큰 여유가 필요해지면 GNN 순전파를 먼저 재컴파일하거나 추가 최적화한다.
주요 발언 모음
“사기는 거래의 속성이 아니다. 거래가 놓인 이웃의 속성이다.”
“신호는 행 안에 있었던 것이 아니라 엣지에 있었다.”
“행 특징은 ‘이 거래가 어떻게 보이는가?’에는 답하지만, ‘누구와 연결되어 있고 지금 그들이 무엇을 하는가?’에는 답하지 못한다.”
“위험한 이웃 하나가 정상 이웃 여럿 속에 섞이는 패턴은 사기 링이 만드는 바로 그 구조이며, 평균 풀링은 그것을 숨긴다.”
“정확한 블랙박스는 현업에서 사용되지 않는다.”
“점수가 0.91이라는 말과, 지난 40분 동안 연결된 세 거래 때문에 0.91이라는 말은 다르다.”
핵심 데이터 & 수치
- 자연 사기율: 카드-present/가맹점 거래 0.05%(약 2,000건 중 1건), 온라인 거래 0.6%(12배 높음).
- 운영 경보 예산: 분석가는 전체 거래 중 상위 0.5~1.5%만 검토한다.
- 기존 특징 확장: 카드-present 원시 특징 40개를 87개로 늘렸을 때 진양성률은 35.5%에서 36.6%로 상승했고, 온라인은 약 200개 특징으로 약 1%포인트만 개선됐다.
- 그래프 임베딩 효과: XGBoost 대비 카드-present 진양성률 36%→48%(상대 33% 상승), 온라인 48%→61%(상대 27% 상승).
- 금액 효과: 카드-present 약 5,660만 달러, 온라인 약 3,540만 달러를 포착했으며 두 포트폴리오 합계 연간 증분 포착액은 약 6,500만 달러다.
- 샘플링 목표율: 카드-present 0.5%, 온라인 6%로 각각 자연 사기율의 약 10배를 유지했다.
- 그래프 특징: 사용자 73개, 거래 109개, 가맹점 20개 등 총 202개 특징이며 거래용 파생 특징은 32개다.
- 집계·임베딩: 평균·최댓값·표준편차를 결합하고, 임베딩 차원은 128을 사용했다.
- 설명 귀속 중요도: 거래-사용자 속도 엣지는 카드-present 0.94, 온라인 0.62였고, 가맹점 엣지는 카드-present 0.04, 온라인 0.19였다. 각 채널별 플래그 사례 200건을 분석했다.
- 서빙 메모리: 전체 거래 노드까지 캐시하면 약 60GB가 필요하지만 사용자·가맹점만 캐시하는 엣지 예측은 2~3GB로 약 20배 줄어든다.
- 서빙 지연시간: GNN 순전파 1.61밀리초, 종단 간 중앙값 2.3밀리초, P99 3.1밀리초로 3~4밀리초 SLA를 만족했다.
결론 및 시사점
- 사기 탐지의 단위를 행에서 그래프로 확장해야 한다: 거래 자체의 금액·기기·시간 특징만 늘리는 방식은 관계 신호가 빠진 상태에서 성능의 천장에 도달한다.
- 기존 분류기를 버릴 필요는 없다: GNN은 관계 임베딩을 만들고 XGBoost는 최종 점수를 계산하는 결합 구조가 성능과 운영 호환성을 함께 확보한다.
- 연결성을 보존한 샘플링이 선행 조건이다: 사용자의 전체 이력과 사기 사용자의 정상 거래를 남기고, 불균형은 트레이너 배치에서 처리해야 그래프가 결정 경계를 제공한다.
- 누출 방지는 그래프 구성에 내장해야 한다: 월별 분리, 과거 이웃만 집계, 학습 월 기준 변환 고정으로 미래·분할·레이블·분포 누출을 구조적으로 차단한다.
- 평균 하나로 위험을 희석하면 안 된다: 평균·최댓값·표준편차를 함께 써야 정상 이웃 사이에 숨은 단일 위험 이웃과 이웃 집단의 불일치를 포착할 수 있다.
- 설명 가능성은 모델 품질의 일부다: 엣지 수준 근거는 규제 문서, 분석가의 조사 속도, 모델 디버깅, 다음 학습 라벨의 품질을 동시에 개선한다.
- 저지연 서빙은 캐시 범위가 결정한다: 모든 거래 노드를 캐시하는 대신 사용자·가맹점만 캐시하고 거래 엣지에서 예측하면 메모리·비용·지연시간을 운영 가능한 수준으로 줄일 수 있다.
- 성공 기준은 AUC가 아니라 고정 경보 예산 안의 사업 효과다: 0.5% 경보율에서 사기 포착률을 27~33% 높이고 연간 약 6,500만 달러를 추가 포착하는지가 실제 모델 가치다.
