본문 바로가기
코딩/데이터분석(Pandas, ML, etc)

파이썬과 사이킷럿(scikit-learn)을 이용한 머신러닝 예제/신용카드 부정 탐지(파트 2/2)

by 나홀로코더 2022. 3. 6.
반응형

신용카드 부정 탐지에 관한 머신러닝 예제를 아래 글에 이어서 계속 살펴보자.

 

파이썬과 사이킷럿(scikit-learn)을 이용한 머신러닝 예제/신용카드 부정 탐지(파트 1/2)

 

파이썬과 사이킷럿(scikit-learn)을 이용한 머신러닝 예제/신용카드 부정 탐지(파트 1/2)

이 포스팅은 아래의 영문 페이지를 우리말로 옮긴 것이다. 머신러닝에 대해 공부하던 중 예제 중심으로 가장 잘 설명이 되어 있는 것으로 보여 복습도 할 겸 나중에 쉽게 찾아볼 수 있도록 우리

codealone.tistory.com

 


목차

3. Unlabeled Data를 이용한 부정 탐지

    정상 행동과 비정상 행동

    부정 탐지를 위한 군집화 기법

    부정거래와 정상거래 표시하기

    부정 탐지를 위한 대안적 군집화 기법


 

3. Unlabeled Data를 이용한 부정 탐지

 

비지도 학습을 사용하여 부정거래를 탐지해보자. 고객을 세분화하고, K-평균 클러스터링 및 기타 클러스터링 알고리즘을 사용하여 데이터에서 의심스러운 항목을 찾는다.

 

 

3.1 정상 행동과 비정상 행동

 

  • 신뢰할 수 있는 데이터 레이블이 없이 부정거래를 탐색
  • 의심스러운 행동을 감지하는 비지도 학습
  • 비정상적인 행동이 반드시 부정인 것은 아님
  • 검증하기가 어려움

 

 

3.1.1 데이터 탐색

 

여기에서는 은행 이체 거래 데이터를 살펴본다. 거래는 지출 유형과 지출 금액에 따라 분류되며, 연령, 성별 같은 몇 가지 특성을 사용할 수 있다. 일부 거래는 부정거래로 분류되며, 레이블은 결과를 검증하는 데 사용한다.

부정 탐지에 비지도 학습을 사용할 때에는 비정상적인(잠재적 부정거래) 행동과 정상적인 행동을 구별하기를 원한다. "정상"이 무엇인지 이해하려면 데이터와 그 특성을 잘 이해해야 한다. 

 

  • 데이터 프레임을 가져와 데이터 크기를 확인하고 첫 번째 행을 표시하여 사용 가능한 특징을 확인

  • 데이터를 범주별로 그룹화하고 평균을 구함

 

이 결과를 바탕으로 부정거래를 확인할 수 있는가? 그렇다. 대부분의 부정거래는 여행, 레저 및 스포츠 관련 거래에서 관찰된다.

 

 

3.1.2 고객 세분화

 

여기에서는 고객 정보에 명백한 패턴이 있어 데이터를 그룹으로 분할해야 하는지 또는 데이터가 동질적인지 여부를 확인한다.

안타깝게도 사용 가능한 고객 정보가 많지 않다. 예를 들어 고객의 자산 수준을 구분할 수 없다. 다만 연령에 대한 자료가 있으니 연령대별 행동에 유의미한 차이가 있는지 살펴보자.

 

  • 데이터 프레임을 연령별로 그룹화하고 각 그룹의 평균 계산

  • 연령 그룹별 건수 계산

 

평균 지출 금액과 부정거래 비율은 그룹 간에 다소 비슷하다. 연령 그룹 '0'이 눈에 띄지만 40건에 불과하기 때문에 별도의 그룹으로 나누어 별도의 모델을 운영하는 것은 말이 안 된다.

 

 

3.1.3 통계를 이용한 정상 거래 정의

 

앞서 우리는 부정거래가 특정 거래 범주에서 더 만연한 것을 보았지만 데이터를 분류할 수 있는 분명한 방법이 없다는 것을 알아 보았다.

 

이번에는 정상거래와 부정거래에 사용된 평균 금액을 보다. 이를 통해 부정거래가 정상거래와 구조적으로 어떻게 다른지 알 수 있다.

 

  • 부정거래와 정상거래, 두 개의 데이터프레임 생성
  • 부정거래와 정상거래를 히스토그램으로 표현

 

부정거래가 훨씬 적기 때문에 전체 분포를 보기가 어려움에도 불구하고 부정거래는 정상거래에 비해 더 큰 금액이 많은 경향이 있음을 알 수 있다.

 

반응형

 

3.2 부정 탐지를 위한 군집화 기법

 

3.2.0.1 K-평균 군집화

 

  • 모든 군집화 모델의 목적은 데이터에서 패턴을 감지하는 것(서로 매우 유사하지만 다른 클러스터와 구별되는 별개의 클러스터로 데이터를 그룹화하는 것)(그림 참조)
  • k-평균의 목적은 데이터 샘플과 관련 클러스터 중심 간의 모든 거리의 합을 최소화하는 것
  • 클러스터 중심으로의 거리 사용(샘플은 점으로 표시되고 클러스터 중심은 십자로 표시)
  • 이미지 A의 데이터를 군집화하려는 경우(그림 참조)
    - B와 같이 2개의 클러스터 중심(시작 시 클러스터 수를 미리 정의)에 대한 초기 추측값을 입력하여 시작하고, 그런 다음 데이터의 각 샘플에서 가장 가까운 중심까지의 거리를 계산
    - C와 같이 두 클러스터로 분할
    - D와 같이 클러스터를 기반으로 중심 위치를 재정의하여 두 클러스터의 모든 거리 합계를 최소화
    - E, F와 같이 샘플이 다른 클러스터에 재할당되지 않는 지점으로 수렴될 때까지 중심에 가장 가까운 지점을 재할당하는 단계를 반복

 

 

3.2.0.2 파이썬에서의 K-평균 군집화

 

K-평균 군집화 또는 거리를 사용하는 알고리즘을 수행하기 전에 데이터를 정규화하는 것이 가장 중요

정규화를 하지 않는 경우 더 큰 값을 가지는 특징에 더 많은 가중치가 부여(모든 특징의 가중치는 초기 단계에서 동일해야 함)

 

 

3.2.0.3 적정한 클러스터의 개수

 

  • K-평균 군집화의 단점은 사전에 클러스터 수를 할당해야 한다는 것임
  • 클러스터의 올바른 수를 확인하는 방법에는 Silhouette method와 Elbow curve 등이 있음

 

 

3.2.1 데이터 정규화

 

거리 기반의 머신러닝 알고리즘의 경우 스케일이 서로 다른 특징을 사용하는 경우 결과를 왜곡하므로 항상 데이터를 정규화하는 것이 중요하다. K-평균은 유클리드 거리를 사용하여 클러스터 중심까지의 거리를 평가하므로 알고리즘을 계속 구현하기 전에 먼저 데이터를 정규화해야 한다. 

 

  • MinMaxScaler를 불러옴
  • df를 numpy 배열 X로 변환
  • 정의된 스케일러를 X에 적용하여 모든 값이 0과 1 사이에 있도록 정규화된 X_scaled을 획득

 

 

3.2.2 K-평균 군집화

 

K-평균 군집화는 매우 일반적으로 사용되는 클러스터링 알고리즘이다. 부정탐지에 있어 K-평균 군집화는 구현하기가 쉽고 의심스러운 사례를 예측하는 데 상대적으로 강력하기 때문에 부정탐지 문제를 처리할 때 시작하기에 좋은 알고리즘이다.

 

그러나 사기 데이터는 종종 매우 크다(특히 거래 데이터로 작업할 때). MiniBatch K-means는 대규모 데이터 세트에 K-평균을 구현하는 효율적인 방법이다.

 

  • sklearn에서 MiniBatchKMeans를 불러옴
  • 8개의 클러스터로 모델을 초기화
  • 정규화된 데이터에 모델을 적합시킴

 

다음으로는 이 모델이 부정탐지에 유용한지 여부를 살펴볼 것이다. 그러나 그 전에 적절한 클러스터의 수가 몇 개인지를 파악해야 한다.

 

 

3.2.3 엘보우 방식

 

앞에서는 적정 클러스터 수가 몇 개인지 확인하지 않고 8개의 클러스터로 MiniBatch K-means를 구현했다. 클러스터 중에서 이상값을 부정탐지에 사용하려는 경우 적정 클러스터 수를 확인하는 것이 중요하다.

 

클러스터의 수를 결정하기 위해 Elbow 방식을 적용해보자.

 

  • 클러스터 수의 범위를 1~10으로 설정
  • 리스트컴프리헨션을 사용해 모든 클러스터 수에 대해서 MiniBatch K-means를 실행
  • 정규화된 데이터에 각 모델을 적합시키고 점수를 획득

  • 클러스터 개수와 점수를 그래프에 나타냄

 

최적의 클러스터 수는 약 3개라는 것을 알 수 있다. 곡선의 꺾인 곳이기 때문이다. 

 

 

반응형

 

3.3 부정거래와 정상거래 표시하기

 

  • 각 클러스터의 이상값을 부정거래로 표시
  • 클러스터 중심을 메모리에 저장하고(그림 참조) 데이터 세트의 각 점에서 각 클러스터 중심까지의 거리를 계산
  • 유클리드 거리가 원으로 표시됨(그림 참조)
  • 이상값을 정의하기 위해 컷오프되는 거리를 정의
    - 거리가 상위 95%보다 큰 모든 항목은 이상값으로 간주
    - 노란색 원 밖의 모든 것은 이상치(그림 참조)
  • 이들은 확실히 이상값이며 비정상적이거나 의심스러운 것으로 볼 수 있으나, 반드시 부정거래인 것은 아님

 

  • 레이블이 없으면 일반적인 성능 측정을 실행할 수 없음

 

 

3.3.1 이상치 탐지

 

이번에는 K-평균 알고리즘을 사용하여 부정거래를 예측하고 이러한 예측을 실제 레이블과 비교하여 결과를 확인한다.

 

부정거래는 일반적으로 클러스터 중심에서 가장 멀리 떨어진 관측값으로 분류된다.

 

  • 정규화된 데이터와 레이블 y를 훈련 세트와 테스트 세트로 분할
  • 3개의 클러스터로 MiniBatch K-means 모델을 정의하고 훈련 데이터에 적합시킴
  • 테스트 데이터에서 예측을 실행하고 클러스터 중심을 획득
  • 부정거래와 정상거래의 경계를 거리 분포의 95% 이상으로 정의

 

3.3.2 모델 결과 확인

 

앞에서는 클러스터 중심에서 거리가 상위 5%인 모든 관측치를 부정거래로 분류했다. 즉, 이것들은 세 클러스터의 이상치이다.

 

여기에서는 정규화된 데이터와 레이블이 이미 훈련 세트와 테스트 세트로 분할되어 있으므로 y_test를 사용할 수 있다. 몇 가지 성능 측정항목을 만들어 보자.

 

  • 테스트 레이블과 예측 레이블에서 ROC 곡선 아래의 면적을 산출

  • 혼동행렬을 표시

  • 컷오프 포인트를 95%가 아닌 93%로 낮추면 예측 결과에 어떤 영향을 주는가?
    - 부정거래 탐지 건수가 증가하지만 오탐지도 증가

 

 

반응형

 

3.4 부정 탐지를 위한 대안적 군집화 기법

 

K-평균 외에도 부정탐지에 사용할 수 있는 다양한 클러스터링 방법이 있다.

 

  • K-평균은 데이터가 일반적인 원형 모양으로 클러스터링될 때 잘 작동
  • 작은 클러스터는 부정거래일 수 있음(그림 참조)
  • 이 접근 방식은 사기 행위에 공통점이 있어 클러스터링될 때 사용

 

 

3.4.0.1 DBSCAN

 

  • DBSCAN 대 K-평균
    - 클러스터 수를 미리 정의할 필요가 없음
    - 알고리즘이 고밀도의 핵심 샘플을 찾아 클러스터를 확장
    - 밀도가 유사한 클러스터를 포함하는 데이터에서 잘 작동
  • 매우 작은 클러스터를 부정거래로 식별하는 데 사용할 수 있음
  • 클러스터의 포인트 사이에 최대 허용 거리를 할당해야 함
  • 클러스터의 최소 데이터 포인트 수를 할당해야 함
  • 이상한 모양의 데이터에서 성능이 더 나음
  • MiniBatch K-means보다 계산이 복잡

 

 

3.4.1 DBSCAN 

 

DBSCAN의 장점은 사전에 클러스터 수를 정의할 필요가 없다는 것이다. 또한 DBSCAN은 K-평균보다 훨씬 더 이상한 모양의 데이터를 처리할 수 있다. 클러스터의 이상값을 사용하지 않고 데이터에서 가장 작은 클러스터를 부정거래로 분류한다. 

 

  • DBSCAN을 불러옴
  • 두 샘플 사이의 최대 거리를 0.9로 설정하고 클러스터의 최소 관측치를 10으로 설정하여 DBSCAN 모델을 초기화
  • 모델을 데이터에 적합시킴
  • 예측 결과를 획득
  • 클러스터 수와 나머지 성능 점수를 출력

 

클러스터의 수는 K-평균보다 훨씬 많고, 가장 작은 클러스터들이 비정상으로 간주된다. 이제 해당 클러스터를 살펴보고 어느 클러스터를 부정거래로 분류할지 정하자.

 

 

3.4.2 가장 작은 클러스터 평가

 

이제 DBscan에서 나온 클러스터를 살펴보고 특정 클러스터를 부정거래로 분류한다.

 

  • 먼저 클러스터의 크기를 파악하고 가장 작은 클러스터를 필터
  • 그런 다음 가장 작은 것을 선택하여 부정거래로 표시
  • 마지막으로 실제로 부정탐지에 효과적인지 여부를 원래 레이블로 확인

 

작은 클러스터를 더 많이 가져간다면 더 많은 부정거래를 잡을 수 있지만 오탐도 더 많이 발생한다. 

 

 

3.4.3 결과 검증

 

여기에서는 DBscan의 결과를 확인한다. 실제로는 신뢰할 수 있는 레이블이 없는 경우가 많기 때문에 전문가의 도움을 받아야 할 수 있다. 또한 과거의 사례를 확인하고 모델이 이를 찾아내는지 확인할 수도 있다.

 

여기에서는 레이블을 사용하여 모델 결과를 확인한다. 

 

 

 

K-평균 모델과 비교해봤을 때 좋은 점은 탐지된 모든 사례 중 대략 2/3가 실제로 부정거래라는 것이다. 가장 작은 3개의 클러스터만 사용하기 때문에 더 적은 부정거래를 포착하지만 오탐도 적다. 그러나 많은 부정거래를 놓치고 있다. 

반응형

댓글