brunch

You can make anything
by writing

C.S.Lewis

by 이종우 Peter Lee Feb 11. 2019

[번역] ML을 이용한 신용카드 사기 감지 방법

데이터 과학으로 나쁜 녀석 잡기

https://towardsdatascience.com/detecting-credit-card-fraud-using-machine-learning-a3d83423d3b8

기계 학습을 사용하여 신용 카드 사기를 감지

데이터 과학으로 나쁜 녀석 잡기  



루카스 프레이수행원


1 월 16 일


이 기사에서는 신용 카드 사기에 대한 내 기계 학습 프로젝트에 대해 설명합니다. 코드에 관심이 있으시면 "); background-size: 1px 1px; background-position: 0px calc(1em + 1px);">여기에서 내 노트를 찾으실 수 "); background-size: 1px 1px; background-position: 0px calc(1em + 1px);">있습니다 .    

출처 : "); background-size: 1px 1px; background-position: 0px calc(1em + 1px);">https://giphy.com/gifs/glitch-money-shopping-d3mmdNnW5hkoUxTG

소개

Ever 데이터 과학에 대한 여정을 시작한 이래로 저는 데이터 과학을 좋은 방향으로 사용하면서 동시에 가치를 창출하는 방법에 대해 생각 해왔습니다. 따라서, 내가 신용 카드 사기 탐지를 다루는 Kaggle에이 데이터 세트를 발견했을 때, 나는 즉시 사로 잡혔다. 데이터 세트에는 31 개의 기능이 있으며, 그 중 28 개는 익명 처리되었으며 V1에서 V28까지 레이블이 지정됩니다. 나머지 세 가지 기능은 트랜잭션의 시간과 양뿐 아니라 해당 트랜잭션이 사기성 이었는지 여부입니다. Kaggle에 업로드되기 전에 익명화 된 변수가 PCA (Principal Component Analysis) 형식으로 수정되었습니다. 또한 데이터 세트에 누락 된 값이 없습니다. 데이터에 대한이 기본 설명을 가지고 탐색 데이터 분석에 뛰어 들어 봅시다.


탐색 적 데이터 분석 (EDA)

거의 모든 예측 변수가 익명으로 처리되었으므로 필자는 익명화되지 않은 예측 자에게 EDA 중에 거래 시간과 금액에 초점을 맞추기로 결정했습니다. 데이터 세트에는 284,807 건의 거래가 포함되어 있습니다. 모든 거래의 평균 가치는 88.35 달러이며이 데이터 세트에 기록 된 가장 큰 거래는 25,691.16 달러입니다. 그러나 평균 및 최대 값을 기준으로 지금 당장 추측 할 수 있듯이 모든 거래의 금전적 가치 분배는 크게 비뚤어졌습니다. 대다수의 거래는 상대적으로 적고 트랜잭션의 극히 일부만 최대에 가깝습니다.    

The time is recorded in the number of seconds since the first transaction in the data set. Therefore, we can conclude that this data set includes all transactions recorded over the course of two days. As opposed to the distribution of the monetary value of the transactions, it is bimodal. This indicates that approximately 28 hours after the first transaction there was a significant drop in the volume of transactions. While the time of the first transaction is not provided, it would be reasonable to assume that the drop in volume occurred during the night.    

클래스 배포판은 어떻습니까? 얼마나 많은 거래가 사기이고 얼마나 많은 거래가 그렇지 않은가? 예측할 수 있듯이 대부분의 거래는 사기성이 아닙니다. 사실,이 데이터 세트의 거래 중 99.83 %는 사기가 아니었고 0.17 %만이 사기성이었습니다. 다음 시각화는이 중요한 차이점을 강조합니다.    

마지막으로, 특히 우리의 클래스 변수와 관련하여 예측 변수간에 유의미한 상관 관계가 있는지를 아는 것은 흥미로울 것입니다. 히트 맵을 사용하는 것이 가장 시각적으로 매력적인 방법 중 하나입니다.    

데이터는 PCA를 사용하여 작성되었으므로 예측 요소는 주요 구성 요소입니다.


데이터 준비

분석을 계속하기 전에 익명화 된 기능이 확장되고 0에 집중되는 것처럼 보이지만 시간과 양의 특징은 그렇지 않다는 것을 잊지 않는 것이 중요합니다. 그것들을 스케일링하지 않으면 피처에 가중치를주는 특정 기계 학습 알고리즘 (로지스틱 회귀)을 초래하거나 훨씬 더 나쁜 성능을 보이는 거리 측정 (KNN)에 의존하게됩니다. 이 문제를 피하기 위해 시간과 양을 표준화했습니다. 다행스럽게도 누락 된 값이 없으므로 누락 된 값의 대체에 대해 걱정할 필요가 없습니다.


심하게 불균형 한 데이터 세트에 대한 교육 세트 작성

이제는 어려운 부분이 있습니다. 우리의 알고리즘이 트랜잭션을 사기성이 될 가능성이있는 특정 특성을 선택하도록하는 교육 데이터 세트 작성. 99 % 이상의 거래가 사기성이 아니기 때문에 거래가 사기성이 없다고 항상 예측하는 알고리즘을 사용하면 99보다 높은 정확도를 얻을 수 있습니다. %. 그럼에도 불구하고, 그것은 우리가 원하는 것과 반대입니다. Google은 거래를 사기성으로 분류하지 않음으로써 99 %의 정확성을 원하지 않으며, 사기성 거래를 탐지하여 그로부터 분류하고 싶습니다.


이 문제를 해결하는 데 도움이되는 두 가지 핵심 요점이 있습니다. 첫째, 무작위 언더 샘플링 을 사용하여 균형 잡힌 클래스 분포를 갖는 교육 데이터 세트를 작성하여 알고리즘이 고성능을 달성하기 위해 사기 거래를 탐지하도록합니다. 공연에 관해서는 정확성에 의존하지 않을 것입니다. 대신, 우리는 Receiver Operating Characteristics-Area of Curve 또는 ROC-AUC 성능 척도를 사용하려고합니다. (나는이 기사 아래에서 더 읽을 거리가 있습니다). 본질적으로 ROC-AUC는 0과 1 사이의 값을 출력하므로 하나는 완벽한 점수이고 0은 최악입니다. 알고리즘의 ROC-AUC 점수가 0.5 이상이면 임의 추측보다 높은 성능을 얻을 수 있습니다.


균형 잡힌 교육 데이터 세트를 만들기 위해 데이터 집합에서 모든 사기 거래를 수행하여이를 계산했습니다. 그런 다음 무작위로 같은 수의 비 사기 거래를 선택하고 두 건을 연결했습니다. 이 새롭게 생성 된 데이터 세트를 뒤섞어 버린 후에, 차이를 시각화하기 위해 클래스 분포를 한 번 더 출력하기로 결정했습니다.    


이상 치 검출 및 제거

특이 치 검색은 복잡한 주제입니다. 트랜잭션 수를 줄이는 것과 알고리즘에서 사용할 수있는 정보의 양 사이에서 극단적 인 outliers가 예측 결과를 왜곡하는 것 사이의 절충은 쉽게 해결할 수 없으며 데이터 및 목표에 크게 좌우됩니다. 필자의 경우에는 이상 값 제거를위한 클래스 변수와 상관 관계가 0.5 이상인 지형지 물에만 독점적으로 초점을 맞추기로 결정했습니다. 실제 이상 치 제거 기능을 사용하기 전에 다음 기능을 시각화 해 보겠습니다.    


Box Plots은 IQR (Inter-Quartile Range)의 1.5 배를 넘는 모든 거래가 일반적으로 아웃 라이어로 간주되므로 아웃 라이어에 대해 걱정할 필요가없는 지에 대한 좋은 직감을 제공합니다. 그러나 IQR의 1.5 배가 아닌 모든 트랜잭션을 제거하면 훈련 데이터 크기가 크게 줄어들지 만 그리 큰 것은 아닙니다. 따라서 IQR의 2.5 배가 넘는 극단적 인 이상치에만 집중하기로 결정했습니다.


시각화를위한 t-SNE를 통한 차원 성 감소우리 수업을 시각화하는 것은 꽤 흥미로울 것이고 그들이 명확하게 분리 될 수 있는지 우리에게 보여줄 것입니다. 그러나 모든 예측 변수를 사용하여 30 차원 도표를 생성하는 것은 불가능합니다. 대신 t-SNE와 같은 차원 감소 기술을 사용하여 이러한 고차원 분포를 저 차원 시각화로 투영 할 수 있습니다. 이 프로젝트에서 나는 전에 사용하지 못했던 t-SNE 알고리즘을 사용하기로 결정했습니다. 이 알고리즘의 작동 방식에 대한 자세한 내용은 "); background-size: 1px 1px; background-position: 0px calc(1em + 1px);">여기를 참조 "); background-size: 1px 1px; background-position: 0px calc(1em + 1px);">하십시오.


우리의 데이터 세트를 2 차원 공간에 투영함으로써 사기 및 비 사기 거래의 클러스터를 보여주는 산점도를 생성 할 수 있습니다.    


분류 알고리즘

당신은 아마이 모든 시간을 기다리고있을 것입니다 : 기계 학습 알고리즘을 훈련하십시오. 알고리즘의 성능을 테스트하기 위해 먼저 균형 잡힌 데이터 세트를 두 부분으로 나눠서 80/20 트레인 테스트 분할을 수행했습니다. 오버 피팅을 피하기 위해, 나는 k-fold cross-validation의 매우 일반적인 리샘플링 기법을 사용했다. 이것은 단순히 k 부분 (폴드)으로 교육 데이터를 분리 한 다음 k 번째 홀드 아웃 폴드에 대한 예측을하기 전에 k-1 폴드에 모델을 적합하게한다는 것을 의미합니다. 그런 다음 모든 단일 배수에 대해이 과정을 반복하고 결과 예측의 평균을 구합니다.

로지스틱 회귀

이 얼룩 검사의 결과는 다음과 같이 시각화 될 수 있습니다.    

우리가 볼 수 있듯이, 다른 알고리즘보다 상당히 뛰어난 알고리즘이 있습니다. 자, 우리는 어떤 알고리즘을 선택합니까? 위에서 언급했듯이이 프로젝트는 가장 높은 정확도를 달성하는 것뿐만 아니라 비즈니스 가치를 창출하는 데 중점을 두었습니다. 따라서 XGBoost보다 Random Forest를 선택하는 것이 성능을 약간 떨어 뜨리지 만 포괄 성을 높이기위한 합리적인 접근 방법 일 수 있습니다. 이 말의 의미를 더 자세히 설명하기 위해 다음과 같이 임의의 결정이 이루어진 이유를 간단하게 설명하는 데 사용할 수있는 임의의 포리스트 모델을 시각화했습니다.    


결론 및 향후 연구

사기 탐지는 기계 학습 알고리즘을 사용하기 전에 상당한 양의 계획을 필요로하는 복잡한 문제입니다. 그럼에도 불구하고 이는 데이터 과학 및 기계 학습을 응용 프로그램에 적용한 것으로 고객의 돈이 안전하고 쉽게 변조되지 않도록합니다.


앞으로해야 할 일에는 내가 앞서 이야기했던 Random Forest 알고리즘의 포괄적 인 튜닝이 포함될 것이다. 익명화되지 않은 기능이있는 데이터 세트를 사용하면 기능 중요성을 출력하면 사기 거래를 탐지하는 데 가장 중요한 특정 요인을 파악할 수 있으므로이 기능이 특히 유용합니다.

항상 그렇듯이 질문이 있거나 실수를 발견하면 주저하지 말고 나에게 다가 가십시오. 내 코드가있는 노트북에 대한 링크는이 기사의 시작 부분에 나와 있습니다.


참고 문헌 :[1] LJP van der Maaten과 GE Hinton, "); background-size: 1px 1px; background-position: 0px calc(1em + 1px);">t-SNE를 사용한 고차원 데이터 시각화(2014), 기계 학습 연구 저널[2] 기계 학습 그룹 - ULB, "); background-size: 1px 1px; background-position: 0px calc(1em + 1px);">신용 카드 사기 탐지 (2018), Kaggle[3] Nathalie Japkowicz, "); background-size: 1px 1px; background-position: 0px calc(1em + 1px);">불균형 데이터 세트로부터 배우기 : 다양한 전략의 비교 (2000), AAAI 기술 보고서 WS-00-05

작가의 이전글 [번역] 프론트 엔드 2019 : 예측 및 기대치
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari