신용카드 이상거래 탐지 모델을 위한 Feature Engineering 프로젝트

jul ee·2025년 4월 18일

데이터 성장기

목록 보기
56/139

📋 신용카드 이상거래 탐지 모델을 위한 Feature Engineering 프로젝트

본 프로젝트는 신용카드 거래 이력 데이터를 기반으로

사기 거래 여부를 예측하는 이상탐지 모델을 위한 Feature Engineering을 수행하며, 신용카드 번호 단위로 개인의 행동 패턴을 반영한 파생 피처를 구성해 모델 학습에 적합한 데이터로 정제하는 것을 목표로 진행하였다.

프로젝트를 진행하고 나서 보다 유의미한 정보를 도출해내기 위해,
정제된 데이터를 바탕으로 사기 거래만 필터링 후, 주요 파생 피처들의 수치적 분포를 분석하여 사기 거래의 구조적 특성을 도출해 보았다. 자세한 진행 과정은 다음 글인 그래서, 사기 거래 건은 어떻게 다른데? 에서 확인할 수 있다.

🛠️ 사용 환경: Python, Pandas, Jupyter Notebook



📂 사용 데이터셋

해당 데이터셋은 개인 단위의 카드 결제 이력과 거래에 관련된 다양한 정보를 포함하고 있으며, 각 거래가 사기 거래인지(is_fraud) 여부가 종속변수로 작용한다.

각 행은 하나의 결제 거래를 의미하고, cc_num을 기준으로 같은 사용자의 여러 거래를 추적할 수 있어, 사용자 행동 기반 이상탐지 피처 생성에 적합하다.

  • 주요 컬럼: cc_num, trans_date_trans_time, amt, merchant, category, lat, long, merch_lat, merch_long, dob,
    first, last, gender, is_fraud


분석 프로세스

처리 내용설명 및 인사이트
1데이터 확인 및 불필요한 컬럼 제거사기 건이 0.2%로 아주 적은 불균형 데이터임을 확인. 분석에 불필요하거나 중복되는 컬럼 제거
2결제 금액 feature 분석카드번호 단위로 거래 금액의 z-score를 도출해, 평소 행동 패턴에서 벗어난 이상 거래로 탐지 가능
3결제 시각 feature 분석거래 시각을 기반으로 시간대를 범주화하고, 카드 번호별/시간대별 사용 비율을 파생하여 행동 패턴을 정량화
4거리 기반 feature 분석고객과 상점 간 거리 계산으로 z-score를 도출해, 평소 행동 패턴에서 벗어난 이상 금액 탐지 가능
5나이 파생 feature 생성생년월일과 거래 시점을 비교해 고객의 나이 계산 → 고객 특성에 따른 사기 위험도 분석에 활용 가능
6범주형 변수 인코딩범주형 데이터를 One-Hot Encoding으로 처리하여 모델이 인식 가능한 형태로 변환


파생 Feature

Feature설명
z_amt카드번호 기준 결제금액 z-score
hour_cat결제 시간대 (ex. 새벽, 오전 등)
hour_perc시간대별 결제 비율 (카드 사용자 단위)
z_dist고객-상점 거리의 z-score (카드 사용자 단위)
age고객 나이
category_xx, gender_xx인코딩된 범주형 변수들


Feature Engineering 프로세스

[1] 결제 금액 feature 분석

  • 카드번호(cc_num) 단위로 평균 및 표준편차 계산
  • 이상 거래 탐지를 위해 z-score(z_amt) 도출
  • category까지 고려한 이중 그룹 기준으로 재계산

[2] 결제 시각 feature 분석

  • hour 파생 → 시간대(hour_cat) 범주화
  • z-score를 도출하면 컴퓨터가 인식하는 숫자의 한계가 있기 때문에 카드번호별/시간대별 거래 비율(hour_perc) 계산
  • 고객별 시간대 거래 패턴을 정량화
  • 이전 거래와의 날짜 차이를 구하는 등 이상 탐지가 가능한 피처 분석

[3] 거리 기반 feature 분석

  • 고객 위치 ↔ 상점 위치 간 거리 계산
  • 카드번호 단위 거리 평균 및 표준편차 → z-score(z_dist) 생성
  • 거리 이상 탐지 가능

[4] 나이 파생 feature 생성

  • 생년월일(dob)에서 연도만 추출하여 나이 개념으로 사용
  • 고객 특성에 따른 사기 위험도 분석에 활용 가능

[5] 범주형 인코딩

  • category, gender 등 범주형 변수를 One-Hot Encoding 처리
  • 이후 적용할 이상거래 탐지 모델이 인식 가능한 형태로 변환 및 데이터 정리


💡 인사이트 및 결론

신용카드 사기 거래 탐지는 불균형 데이터(imbalanced data) 문제를 수반한다.

  • 전체 거래 중 사기 거래(is_fraud = 1)가 차지하는 비율은 극히 적으며, 이는 모델이 정상 거래만 학습하고 사기 거래를 분류하지 못하는 문제로 이어질 수 있다.
    이를 해결하기 위해 SMOTE와 같은 오버 샘플링 또는 언더 샘플링 고려할 수 있으며, 본 프로젝트에서는 우선 학습에 앞서 정제된 피처를 통해 분류 기준을 명확히 만드는 데 집중하였다.

개인별 평소 거래 금액 패턴에서 벗어난 이상 지출은 사기 가능성이 높다.

  • 카드번호(cc_num)를 기준으로 각 사용자의 평균 거래 금액과 표준편차를 산출하고, z-score로 이상 거래 여부를 정량화하였다.
    이 방식은 단순한 금액 기준이 아닌 개인 기준의 비정상 거래 감지에 효과적이며, 특히 금액이 작아도 개인 기준에서 벗어났다면 이상 탐지의 근거가 될 수 있음을 보여준다.

시간대별 거래 비율은 카드 사용자마다 고유한 패턴이 존재한다.

  • 거래 시각에서 파생한 시간대(hour_cat)는 사용자 고유의 소비 습관을 반영한다.
    카드번호별로 시간대별 거래 비율(hour_perc)을 계산하여 사용자의 일반적인 활동 시간대를 정량화하고, 이를 벗어나는 거래를 이상으로 감지할 수 있도록 했다.
    이는 단순한 시각 정보 활용을 넘어 사용자 행동 특성 기반 이상탐지에 실질적으로 기여하는 피처로 활용 가능하다.

거리 기반 분석은 사용자의 활동 범위와 이탈 감지를 가능하게 한다.

  • 고객 위치 ↔ 상점 위치 간 거리 계산을 통해 z_dist를 생성하고, 사용자 이동 반경을 벗어난 거래를 사기로 의심할 수 있다. 특히 일정 지역 내 소비에 익숙한 사용자의 경우, 갑작스러운 장거리 거래는 이상 거래 시그널이 될 수 있다.

단일 피처만으로 탐지되지 않던 거래들도, 여러 기준에서 동시에 벗어날 경우 사기 가능성이 높아진다.

  • 모델 설계 시 이러한 다중 이상 조건을 조합하는 방식은 탐지 성능 향상에 실질적인 도움을 줄 수 있다.

본 프로젝트를 통해 사용자의 일반적인 소비 패턴에서 벗어난 거래를 중심으로 파생 피처를 설계하였고, 이를 통해 실제 모델이 학습 가능하도록 데이터를 정제할 수 있었다.

여러 기준에서 동시에 평소와 다른 패턴이 나타나는 거래의 특징을 바탕으로 사기 거래를 더 정확히 탐지할 수 있는 기반을 마련해 본 경험이 되었다.

profile
AI에 관심을 가지고, 데이터로 가치를 만들어 나가는 과정을 기록합니다.

0개의 댓글