이상거래 탐지가 중요한 이유
금융권에서 이상거래 탐지(Fraud Detection)는 단순한 보안 기능을 넘어 고객 신뢰와 직결되는 핵심 시스템입니다. 2023년 기준 국내 금융사기 피해액은 연간 수천억 원에 달하며, 전통적인 규칙 기반 탐지로는 점점 교묘해지는 신종 사기 패턴을 따라잡기 어려워졌습니다.
AI 기반 이상거래 탐지 시스템은 정상 거래 패턴을 학습하여, 규칙으로 정의하기 어려운 미세한 이상 징후까지 실시간으로 포착합니다.
금융권에서 탐지해야 하는 이상거래 유형
| 유형 | 설명 | 탐지 난이도 |
|---|---|---|
| 카드 도용 | 분실/탈취된 카드로 본인 아닌 제3자가 결제 | ⭐⭐⭐ 중 |
| 피싱/파밍 | 가짜 사이트로 유도해 계좌 정보 탈취 후 출금 | ⭐⭐⭐⭐ 높음 |
| 자금세탁 | 불법 자금을 여러 계좌로 쪼개 이체하며 출처 은폐 | ⭐⭐⭐⭐⭐ 매우 높음 |
| 어뷰징 | 프로모션 악용, 다중 계정 생성 등 | ⭐⭐⭐ 중 |
| 내부자 거래 | 직원 권한 남용, 미공개 정보 이용 | ⭐⭐⭐⭐ 높음 |
주요 AI 모델과 적용 방식
1. 이상치 탐지 (Anomaly Detection)
정상 거래 패턴만 학습하고, 그로부터 크게 벗어난 거래를 이상으로 판단하는 방식입니다.
Isolation Forest
from sklearn.ensemble import IsolationForest
import pandas as pd
# 정상 거래 데이터로 학습
model = IsolationForest(contamination=0.01, random_state=42)
model.fit(normal_transactions[['amount', 'hour', 'merchant_category']])
# 신규 거래 이상 점수 계산
scores = model.decision_function(new_transactions)
predictions = model.predict(new_transactions) # -1: 이상, 1: 정상
- 장점: 레이블링 없이 정상 데이터만으로 학습 가능 (비지도 학습)
- 단점: 새로운 정상 패턴(예: 해외여행 중 결제)도 이상으로 오탐할 수 있음
Autoencoder (딥러닝)
정상 거래를 압축(인코딩) 후 복원(디코딩)하도록 학습하면, 이상 거래는 복원 오차가 크게 나타납니다.
import tensorflow as tf
from tensorflow.keras import layers
# 오토인코더 구조
encoder = tf.keras.Sequential([
layers.Dense(64, activation='relu'),
layers.Dense(32, activation='relu'),
layers.Dense(16, activation='relu') # 압축된 표현
])
decoder = tf.keras.Sequential([
layers.Dense(32, activation='relu'),
layers.Dense(64, activation='relu'),
layers.Dense(input_dim, activation='sigmoid') # 복원
])
autoencoder = tf.keras.Sequential([encoder, decoder])
autoencoder.compile(optimizer='adam', loss='mse')
autoencoder.fit(normal_data, normal_data, epochs=50)
# 복원 오차로 이상 탐지
reconstructed = autoencoder.predict(test_data)
reconstruction_error = np.mean(np.abs(test_data - reconstructed), axis=1)
anomalies = reconstruction_error > threshold
복원 오차(Reconstruction Error)를 수식으로 표현하면:
여기서 는 원본 거래 특성, 는 오토인코더가 복원한 값, 은 특성 개수입니다. 이 클수록 이상 거래일 확률이 높습니다.
2. 분류 모델 (Supervised Learning)
과거 레이블링된 사기 거래 데이터로 학습하여, 신규 거래가 사기인지 정상인지 확률을 예측합니다.
XGBoost / LightGBM
금융권에서 가장 널리 쓰이는 접근법입니다.
import lightgbm as lgb
# 불균형 데이터 처리 (정상:사기 = 99:1)
train_data = lgb.Dataset(X_train, label=y_train)
params = {
'objective': 'binary',
'metric': 'auc',
'is_unbalance': True, # 클래스 불균형 자동 조정
'learning_rate': 0.05
}
model = lgb.train(params, train_data, num_boost_round=100)
# 사기 확률 예측
fraud_prob = model.predict(X_test)
alert_cases = fraud_prob > 0.7 # 70% 이상 시 알림
| 모델 | 장점 | 단점 |
|---|---|---|
| XGBoost | 높은 정확도, Feature Importance 제공 | 학습 속도 느림 |
| LightGBM | 대용량 데이터에서 빠른 학습 | 과적합 주의 필요 |
| Random Forest | 안정적, 과적합 강건 | 추론 속도 느림 |
딥러닝 (LSTM, Transformer)
거래 시퀀스 패턴을 학습하여 맥락을 고려한 탐지가 가능합니다.
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import LSTM, Dense
# 최근 10개 거래 시퀀스로 다음 거래 사기 여부 예측
model = Sequential([
LSTM(64, input_shape=(10, feature_dim), return_sequences=True),
LSTM(32),
Dense(16, activation='relu'),
Dense(1, activation='sigmoid') # 사기 확률
])
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['AUC'])
model.fit(X_seq_train, y_train, epochs=20, batch_size=256)
실무 팁: 최근 거래 10~20개의 시퀀스를 입력으로 주면, “평소에는 소액 결제만 하다가 갑자기 고액 해외 결제”와 같은 맥락 기반 이상 패턴을 포착할 수 있습니다.
3. 그래프 신경망 (GNN)
계좌 간 이체 네트워크를 그래프로 모델링하여 자금세탁 조직을 탐지합니다.
import torch
from torch_geometric.nn import GCNConv
class FraudDetectionGNN(torch.nn.Module):
def __init__(self):
super().__init__()
self.conv1 = GCNConv(in_channels=feature_dim, out_channels=64)
self.conv2 = GCNConv(64, 32)
self.classifier = torch.nn.Linear(32, 1)
def forward(self, x, edge_index):
x = self.conv1(x, edge_index).relu()
x = self.conv2(x, edge_index).relu()
return torch.sigmoid(self.classifier(x))
# 노드: 계좌, 엣지: 송금 관계
model = FraudDetectionGNN()
fraud_scores = model(account_features, transaction_graph)
- 노드(Node): 계좌 또는 사용자
- 엣지(Edge): 송금/이체 관계
- 학습 목표: 연결된 계좌들의 패턴으로 자금세탁 조직 식별
실전 배포 시 고려사항
1. 실시간 처리 (Low Latency)
카드 결제 승인은 100ms 이내에 완료되어야 하므로, 모델 추론 속도가 매우 중요합니다.
# 경량화 예시: ONNX 변환
import onnxruntime as ort
# 학습된 모델을 ONNX로 변환
onnx_model = convert_to_onnx(trained_model)
session = ort.InferenceSession(onnx_model)
# 추론 (CPU에서도 < 10ms)
result = session.run(None, {"input": transaction_data})
2. 클래스 불균형 처리
정상 거래:사기 거래 비율이 999:1 수준이므로, 단순 정확도(Accuracy)는 무의미합니다.
평가 지표
| 지표 | 설명 | 중요도 |
|---|---|---|
| Precision | 사기로 예측한 것 중 실제 사기 비율 | ⭐⭐⭐⭐⭐ |
| Recall | 실제 사기 중 모델이 탐지한 비율 | ⭐⭐⭐⭐⭐ |
| F1-Score | Precision과 Recall의 조화평균 | ⭐⭐⭐⭐ |
| AUC-ROC | 임계값 변화에 따른 전체 성능 | ⭐⭐⭐⭐ |
F1-Score는 다음과 같이 계산됩니다:
이 높으면 오탐(false positive)이 적고, 이 높으면 놓친 사기(false negative)가 적습니다. 두 지표의 균형이 중요합니다.
불균형 대응 기법
from imblearn.over_sampling import SMOTE
# SMOTE: 소수 클래스(사기)를 합성 생성하여 균형 맞춤
smote = SMOTE(sampling_strategy=0.1) # 정상:사기 = 10:1로 조정
X_balanced, y_balanced = smote.fit_resample(X_train, y_train)
3. 설명 가능성 (Explainability)
금융권은 규제 준수를 위해 “왜 이 거래를 차단했는지” 설명할 수 있어야 합니다.
import shap
# SHAP으로 예측에 기여한 특성 분석
explainer = shap.TreeExplainer(model)
shap_values = explainer.shap_values(suspicious_transaction)
# 시각화: 어떤 특성이 사기 판단에 기여했는지
shap.force_plot(explainer.expected_value, shap_values, suspicious_transaction)
SHAP(SHapley Additive exPlanations) 값은 각 특성이 예측에 미친 영향을 정량화합니다:
여기서 는 특성 의 기여도, 는 전체 특성 집합, 는 특성 부분집합 로 예측한 값입니다. 예를 들어, 이면 “거래 금액이 높아서 사기 확률이 30%p 증가”로 해석됩니다.
4. 지속적 재학습
사기 패턴은 지속적으로 진화하므로, 모델을 주기적으로 업데이트해야 합니다.
- 매일: 전날 발생한 신규 사기 케이스 추가 학습
- 매주: 전체 모델 재학습 및 성능 검증
- 실시간 피드백: 고객 이의제기 → 즉시 재학습 파이프라인 반영
실제 도입 사례
국내 은행 A사
- 모델: LightGBM + Autoencoder 앙상블
- 특성: 거래 금액, 시간, 위치, 가맹점 업종, 최근 30일 거래 패턴
- 성과: 오탐률 30% 감소, 사기 탐지율 15% 향상
해외 카드사 B사
- 모델: LSTM + GNN (계좌 네트워크 분석)
- 특징: 실시간 그래프 업데이트로 조직적 자금세탁 탐지
- 성과: 자금세탁 적발 건수 2배 증가
마무리
금융권 이상거래 탐지는 단일 모델이 아닌 여러 기법의 조합으로 구현됩니다.
핵심 요약
- 이상치 탐지(Isolation Forest, Autoencoder): 정상 패턴 학습, 레이블 불필요
- 분류 모델(XGBoost, LSTM): 과거 사기 데이터로 학습, 높은 정확도
- 그래프 신경망(GNN): 계좌 네트워크 분석으로 조직 범죄 탐지
- 실시간 처리 + 설명 가능성: 100ms 이내 추론, SHAP으로 근거 제시
- 지속 업데이트: 진화하는 사기 패턴에 대응하는 재학습 파이프라인
최신 트렌드: 대형 언어 모델(LLM)을 활용한 이상 거래 리포트 자동 생성과 고객 문의 응대 자동화도 시도되고 있습니다. 예: “이 거래를 차단한 이유는 평소 결제 패턴(평균 3만원)과 달리 고액(150만원)이 해외에서 발생했기 때문입니다.”
금융 AI는 단순히 사기를 막는 것을 넘어, 고객 경험을 해치지 않으면서도 안전을 보장하는 균형을 찾는 것이 핵심입니다.
Did you find this helpful?
☕ Buy me a coffee
Leave a Reply