사기는 실제로 많은 거래에서 발생합니다. 우리는 기계 학습 알고리즘을 적용하여 과거 데이터를 거짓말하고 거래가 사기 거래일 가능성을 예측할 수 있습니다. 이 예에서는 신용 카드 거래를 가져와 데이터를 분석하고 기능과 레이블을 만들고 마지막으로 ML 알고리즘 중 하나를 적용하여 거래의 성격을 사기인지 아닌지 판단합니다. 그런 다음 우리가 선택한 모델의 정확도, 정밀도 및 f-점수를 알아낼 것입니다.
데이터 준비
이 단계에서 우리는 소스 데이터를 읽고 그 안에 있는 변수를 연구하고 몇 가지 샘플 데이터를 살펴봅니다. 이렇게 하면 데이터 세트에 있는 다양한 열을 파악하고 해당 열의 기능을 연구하는 데 도움이 됩니다. 우리는 Pandas is library를 사용하여 후속 단계에서 사용할 데이터 프레임을 생성할 것입니다.
예시
pandas를 pd로 가져오기#pandasdatainput =pd.read_csv('E:\\creditcard.csv')#https://www.kaggle.com/mlg-ulb/creditcardfraud#를 사용하여 creditcard.csv를 로드합니다.# 상단 인쇄 5 recordsprint(datainput[0:5],"\n")# 데이터 세트의 전체 모양을 인쇄합니다. print("Shape of Complete Data Set") print(datainput.shape,"\n")
출력
위의 코드를 실행하면 다음과 같은 결과가 나옵니다. -
Time V1 V2 V3 ... 0.072781 -0.072781 0.133558 ... 0.133558 -0.021053 149.62 01 0.021053 01 01 0.021053 01 0.0.0553 01 0.0 1.191857 01 0.0 1.191857 01 0.0 1.191857 01 0.0553 01 0.0 1.191857 01 0.0 1.191857 01 0.0.053 0.021053 01 0.0 1.191857 01 0.02153 0.021053 0.021053 0.021053 01 0.0.008983 0.014724 2.69 02 1.0 -1.358354 -1.340163 1.773209 ... - 0.059752 378.66 03 1.0.185226 1.792993 ... 0.062993 ... 0.062723 0.061458 123.50 04 2.0 -1.1582330 04 2.0 -1.158233 04 2.0 -1.158233 0.87777 1.548718 ... 0.219422 0.219422 0.215153 69.99 0 [5 행 x 31 열] 전체 데이터 세트의 형상 (284807, 31) 미리>데이터의 불균형 확인
이제 사기 거래와 진짜 거래 간에 데이터가 어떻게 분배되는지 확인합니다. 이를 통해 사기로 예상되는 데이터의 비율을 알 수 있습니다. ml 알고리즘에서 이것을 데이터 불균형이라고 합니다. 대부분의 거래가 사기가 아니라면 소수의 거래가 진짜인지 아닌지 판단하기 어려워집니다. 클래스 열을 사용하여 거래의 사기 엔진 수를 계산한 다음 사기 거래의 실제 비율을 파악합니다.
예시
pandas를 pd로 가져오기#pandasdatainput =pd.read_csv('E:\\creditcard.csv')false =datainput[datainput['Class'] ==1]true =datainput[datainput[ '클래스'] ==0]n =len(false)/float(len(true))print(n)print('오탐지 사례:{}'.format(len(datainput[datainput['클래스']) ==1])))print('진정한 탐지 사례:{}'.format(len(datainput[datainput['Class'] ==0])),"\n")출력
위의 코드를 실행하면 다음과 같은 결과가 나옵니다. -
0.0017304750013189597False 감지 사례:492True 감지 사례:284315거래 유형 세부정보
사기 및 비사기 거래의 각 범주에 대한 거래의 성격을 더 자세히 조사합니다. 평균 표준 편차 최대값 최소값 및 다른 백분위수와 같은 다양한 매개변수를 통계적으로 추정하려고 합니다. 이것은 설명된 방법을 사용하여 달성됩니다.
예시
pandas를 pd로 가져오기#pandasdatainput =pd.read_csv('E:\\creditcard.csv')#데이터의 불균형 확인을 사용하여 creditcard.csv를 로드합니다. false =datainput[datainput['Class'] ==1]true =datainput[datainput['Class'] ==0]#False Detection Casesprint("False Detection Cases")print("----------------------" )print(false.Amount.describe(),"\n")#True Detection Casesprint("True Detection Cases")print("-------------------- --")print(true.Amount.describe(),"\n")출력
위의 코드를 실행하면 다음과 같은 결과가 나옵니다. -
오탐지 사례----------------------count 492.000000mean 122.211321std 256.683288min 0.00000025% 1.00000050% 9.25000075% 105.8900 float64True 감지 사례----------------------count 284315.000000mean 88.291022std 250.105092min 0.00000025% 5.650000050% 5.650000050% 22.00000075% 79.020 사전>기능 및 레이블 분리
ML 알고리즘을 구현하기 전에 기능과 레이블을 결정해야 합니다. 이는 기본적으로 종속 변수와 독립 변수를 범주화하는 것을 의미합니다. 데이터 세트에서 클래스 열은 나머지 모든 열에 종속됩니다. 따라서 마지막 열에 대한 데이터 프레임과 나머지 모든 열에 대한 다른 데이터 프레임을 만듭니다. 이 데이터 프레임은 우리가 만들 모델을 훈련하는 데 사용됩니다.
예시
pandas를 pd로 가져오기#pandasdatainput =pd.read_csv('E:\\creditcard.csv')#separating features(X) and label(y)#를 사용하여 creditcard.csv를 로드합니다.# 마지막 열을 제외한 모든 열 선택 rowsX =datainput.iloc[:, :-1].values# 모든 행의 마지막 열 선택Y =datainput.iloc[:, -1].valuesprint(X.shape)print(Y.shape)출력
위의 코드를 실행하면 다음과 같은 결과가 나옵니다. -
(284807, 30)(284807,)모델 교육
이제 데이터 세트를 두 부분으로 나눕니다. 하나는 훈련용이고 다른 하나는 테스트용입니다. test_size 매개변수는 테스트에만 사용할 데이터 세트의 백분율을 결정하는 데 사용됩니다. 이 연습은 우리가 만들고 있는 모델에 대한 자신감을 얻는 데 도움이 될 것입니다.
예시
pandas를 pdf로 가져오기 sklearn.model_selection import train_test_split#pandasdatainput =pd.read_csv('E:\\creditcard.csv')#separating features(X) 및 label(y)X =datainput을 사용하여 creditcard.csv를 로드합니다. iloc[:, :-1].values# 모든 행의 마지막 열 선택Y =datainput.iloc[:, -1].values#train_test_split methodX_train, X_test, Y_train, Y_test =train_test_split(X, Y, test_size=0.2)의사결정 트리 분류 적용
이 상황에 적용할 수 있는 다양한 종류의 알고리즘이 있습니다. 그러나 우리는 분류 알고리즘으로 결정 트리를 선택합니다. 이는 최대 트리 깊이가 4이고 값을 예측하기 위한 테스트 샘플을 제공합니다. 마지막으로 테스트 결과의 정확도를 계산하여 이 알고리즘을 계속할지 여부를 결정합니다.
예시
pandas를 pdf로 가져오기 sklearn import metricsfrom sklearn.model_selection import train_test_split#pandasdatainput =pd.read_csv('E:\\creditcard.csv')#separating features(X) 및 label(y)X를 사용하여 creditcard.csv 로드 =datainput.iloc[:, :-1].valuesY =datainput.iloc[:, -1].values#train_test_split methodX_train, X_test, Y_train, Y_test =train_test_split(X, Y, test_size=0.2)#DecisionTreeClassifierfrom sklearn.tree import DecisionTreeClassifierclassifier=DecisionTreeClassifier(max_depth=4)classifier.fit(X_train,Y_train)predicted=classifier.predict(X_test)print("\n예측된 값:\n",예측)#AccuracyDT =metrics.accuracy_score(Y_test,예측) * 100print("\nDecisionTreeClassifier를 사용한 정확도 점수 :",DT)출력
위의 코드를 실행하면 다음과 같은 결과가 나옵니다. -
예측값:[0 0 0 ... 0 0 0]DecisionTreeClassifier를 사용한 정확도 점수:99.9367999719111평가 매개변수 찾기
위 단계의 정확도 수준이 허용되면 다른 매개변수를 찾아 모델에 대한 추가 평가를 진행합니다. 정밀도, 재현율 및 F 점수를 매개변수로 사용합니다. 정밀도는 검색된 인스턴스 중 관련 인스턴스의 비율이고, 재호출은 실제로 검색된 관련 인스턴스의 전체 양의 비율입니다. F 점수는 하나의 숫자에서 정밀도와 재현율의 균형을 유지하는 단일 점수를 제공합니다.
예시
pandas를 pdf로 가져오기 sklearn 가져오기 메트릭에서 sklearn 가져오기 csv')#feature(X) 및 레이블(y) 분리 X =datainput.iloc[:, :-1].valuesY =datainput.iloc[:, -1].values#train_test_split methodX_train, X_test, Y_train, Y_test =train_test_split(X, Y, test_size=0.2)#DecisionTreeClassifierfrom sklearn.tree import DecisionTreeClassifierclassifier=DecisionTreeClassifier(max_depth=4)classifier.fit(X_train,Y_train)predicted=classifier.predict(X_test)print("\n예측 값:\n" ,predicted)## #AccuracyDT =metrics.accuracy_score(Y_test, predicted) * 100print("\nDecisionTreeClassifier를 사용한 정확도 점수 :",DT)## #Precisionprint('precision')# Precision =TP / (TP + FP ) (여기서 TP =참 양성, TN =참 음성, FP =거짓 양성, FN =거짓 음성 tive).precision =precision_score(Y_test, predicted, pos_label=1)print(precision_score(Y_test, predicted, pos_label=1))#Recallprint('recall')# Recall =TP / (TP + FN)recall =resume_score(Y_test , 예측, pos_label=1)print(recall_score(Y_test, predict, pos_label=1))#f1-scoreprint('f-Score')# F - 점수는 정밀도와 재현율 모두에 대한 정확도 계산을 결정하기 위한 통계적 방법입니다.fscore =f1_score(Y_test, 예측, pos_label=1)print(f1_score(Y_test, 예측, pos_label=1))출력
위의 코드를 실행하면 다음과 같은 결과가 나옵니다. -
DecisionTreeClassifier를 사용한 정확도 점수:99.9403110845827precision0.810126582278481recall0.7710843373493976f-Score0.7901234567901234