Computer >> Máy Tính >  >> Lập trình >> Python

Phát hiện gian lận bằng Python

Gian lận thực sự có trong nhiều giao dịch. Chúng tôi có thể áp dụng các thuật toán học máy để nói dối dữ liệu trong quá khứ và dự đoán khả năng một giao dịch là giao dịch gian lận. Trong ví dụ của chúng tôi, chúng tôi sẽ thực hiện các giao dịch thẻ tín dụng, phân tích dữ liệu, tạo các tính năng và nhãn và cuối cùng áp dụng một trong các thuật toán ML để đánh giá bản chất của giao dịch có phải là gian lận hay không. Sau đó, chúng tôi sẽ tìm ra độ chính xác, độ chính xác cũng như điểm số f của mô hình chúng tôi được chọn.

Chuẩn bị dữ liệu

Trong bước này, chúng tôi đọc dữ liệu nguồn, nghiên cứu các biến có trong đó và xem một số dữ liệu mẫu. Điều này sẽ giúp chúng tôi biết các cột khác nhau có trong tập dữ liệu và nghiên cứu các tính năng của chúng. Chúng tôi sẽ sử dụng thư viện Pandas is để tạo khung dữ liệu sẽ được sử dụng trong các bước tiếp theo.

Ví dụ

 nhập gấu trúc dưới dạng pd # Tải credititcard.csv bằng pandasdatainput =pd.read_csv ('E:\\ creditcard.csv') #https://www.kaggle.com/mlg-ulb/creditcardfraud# In đầu 5 bản ghi (datainput [0:5], "\ n") # In hình dạng hoàn chỉnh của bản in tập dữ liệu ("Hình dạng của tập dữ liệu hoàn chỉnh") in (datainput.shape, "\ n") 

Đầu ra

Chạy đoạn mã trên cho chúng ta kết quả sau -

 Thời gian V1 V2 V3 ... V27 V28 Số lượng Lớp0 0.0 -1.359807 -0.072781 2.536347 ... 0.133558 -0.021053 149.62 01 0.0 1.191857 0.266151 0.166480 ... -0.008983 0.014724 2.69 02 1.0 -1.358354 -1.340163 1.773209 ... - 0,055353 -0,059752 378,66 03 1,0 -0,966272 -0,185226 1,792993 ... 0,062723 0,061458 123,50 04 2,0 ​​-1,188233 0,877737 1,548718 ... 0,219422 0,215153 69,99 0 [5 hàng x 31 cột] Hình dạng của Tập dữ liệu hoàn chỉnh (284807, 31)  

Kiểm tra sự mất cân bằng trong dữ liệu

Bây giờ chúng tôi kiểm tra cách dữ liệu được phân phối giữa các giao dịch gian lận và chính hãng. Điều này cho chúng tôi ý tưởng về tỷ lệ phần trăm dữ liệu dự kiến ​​sẽ là gian lận. Trong thuật toán ml, điều này được gọi là sự mất cân bằng dữ liệu. Nếu hầu hết các giao dịch không phải là gian lận thì rất khó để đánh giá một số giao dịch là chính hãng hay không. Chúng tôi sử dụng cột lớp để đếm số lượng công cụ gian lận trong các giao dịch và sau đó tính toán tỷ lệ phần trăm thực tế của các giao dịch gian lận.

Ví dụ

 nhập gấu trúc dưới dạng pd # Tải credititcard.csv bằng pandasdatainput =pd.read_csv ('E:\\ creditcard.csv') false =datainput [datainput ['Class'] ==1] true =datainput [datainput [ 'Class'] ==0] n =len (false) / float (len (true)) print (n) print ('Trường hợp Phát hiện Sai:{}'. Format (len (datainput [datainput ['Class'] ==1]))) print ('Các trường hợp phát hiện đúng:{}'. Format (len (datainput [datainput ['Class'] ==0])), "\ n") 

Đầu ra

Chạy đoạn mã trên cho chúng ta kết quả sau -

 0,0017304750013189597 Trường hợp phát hiện sóng:492 Trường hợp phát hiện lỗi:284315 

Chi tiết về các loại giao dịch

Chúng tôi điều tra sâu hơn về bản chất của các giao dịch đối với từng loại giao dịch gian lận và không gian lận. Chúng tôi cố gắng ước tính thống kê các tham số khác nhau như độ lệch chuẩn trung bình giá trị tối đa giá trị tối thiểu và các tỷ lệ phần trăm khác nhau. Điều này đạt được bằng cách sử dụng phương pháp được mô tả.

Ví dụ

 nhập gấu trúc dưới dạng pd # Tải credititcard.csv bằng pandasdatainput =pd.read_csv ('E:\\ creditcard.csv') # Kiểm tra sự mất cân bằng trong datafalse =datainput [datainput ['Class'] ==1] true =datainput [datainput ['Class'] ==0] #False Detection Caseprint ("Trường hợp Phát hiện Sai") print ("----------------------" ) print (false.Amount.describe (), "\ n") # True Detection Caseprint ("Trường hợp Phát hiện Đúng") print ("-------------------- - ") print (true.Amount.describe ()," \ n ") 

Đầu ra

Chạy đoạn mã trên cho chúng ta kết quả sau -

 Các trường hợp phát hiện sai ---------------------- đếm 492.000000mean 122.211321std 256,683288 phút 0,00000025% 1,00000050% 9.25000075% 105.890000max 2125.870000 Tên:Số lượng, loại:float64True Detection Case ---------------------- count 284315.000000mean 88.291022std 250.105092min 0.00000025% 5.65000050% 22.00000075% 77.050000max 25691.160000Tên:Số lượng, loại:float64  

Tách các tính năng và Nhãn

Trước khi triển khai thuật toán ML, chúng ta cần quyết định các tính năng và nhãn. Về cơ bản có nghĩa là phân loại các biến phụ thuộc và các biến độc lập. Trong tập dữ liệu của chúng tôi, cột lớp phụ thuộc vào phần còn lại của tất cả các cột khác. Vì vậy, chúng tôi tạo một khung dữ liệu cho cột cuối cùng cũng như một khung dữ liệu khác cho phần còn lại của tất cả các cột khác. Các khung dữ liệu này sẽ được sử dụng để đào tạo mô hình mà chúng ta sẽ tạo.

Ví dụ

 nhập gấu trúc dưới dạng pd # Tải credititcard.csv bằng pandasdatainput =pd.read_csv ('E:\\ creditcard.csv') # phân tách các tính năng (X) và nhãn (y) # Chọn tất cả các cột ngoại trừ cột cuối cùng cho tất cả rowX =datainput.iloc [:,:-1] .values ​​# Chọn cột cuối cùng của tất cả các hàngY =datainput.iloc [:, -1] .valuesprint (X.shape) print (Y.shape) 

Đầu ra

Chạy đoạn mã trên cho chúng ta kết quả sau -

 (284807, 30) (284807,) 

Huấn luyện mô hình

Bây giờ chúng ta chia tập dữ liệu thành hai phần. Một là để đào tạo và một là để thử nghiệm. Tham số test_size được sử dụng để quyết định phần trăm tập dữ liệu sẽ chỉ được sử dụng để thử nghiệm. Bài tập này sẽ giúp chúng tôi tự tin về mô hình mà chúng tôi đang tạo.

Ví dụ

 nhập gấu trúc dưới dạng pdfrom sklearn.model_selection import train_test_split # Tải credititcard.csv bằng pandasdatainput =pd.read_csv ('E:\\ creditcard.csv') # phân tách các tính năng (X) và nhãn (y) X =thông lượng dữ liệu. iloc [:,:-1] .values ​​# Chọn cột cuối cùng của tất cả các hàngY =datainput.iloc [:, -1] .values ​​# train_test_split methodX_train, X_test, Y_train, Y_test =train_test_split (X, Y, test_size =0.2) 

Áp dụng phân loại cây quyết định

Có nhiều loại thuật toán khác nhau có sẵn để áp dụng cho tình huống này. Nhưng chúng tôi chọn cây quyết định làm thuật toán để phân loại. Độ sâu cây tối đa là 4 và cung cấp mẫu thử nghiệm để dự đoán các giá trị. Cuối cùng, chúng tôi tính toán độ chính xác của kết quả từ thử nghiệm để quyết định xem có nên tiếp tục hơn nữa với thuật toán này hay không.

Ví dụ

 nhập gấu trúc dưới dạng pdfrom sklearn nhập metricsf từ sklearn.model_selection import train_test_split # Tải credititcard.csv bằng pandasdatainput =pd.read_csv ('E:\\ creditcard.csv') # phân tách các tính năng (X) và nhãn (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 nhập Quyết địnhTreeClassifierclassifier =Quyết địnhTreeClassifier (max_depth =4) classifier.fit (X_train, Y_train) dự đoán =classifier.p Dự đoán (X_test) in ("\ npredicted giá trị:\ n", dự đoán) #AccuracyDT =metrics.accuracy_score (Y_test, dự đoán) * 100print ("\ nĐiểm chính xác sử dụng Công cụ Phân loại Quyết định:", DT) 

Đầu ra

Chạy đoạn mã trên cho chúng ta kết quả sau -

 các giá trị được dự đoán:[0 0 0 ... 0 0 0] Điểm chính xác sử dụng Công cụ phân loại quyết định:99,9367999719111 

Tìm các tham số đánh giá

Khi mức độ chính xác ở bước trên có thể chấp nhận được, chúng tôi tiếp tục đánh giá thêm mô hình bằng cách tìm ra các tham số khác nhau. Trong đó sử dụng Độ chính xác, giá trị thu hồi và điểm F làm thông số của chúng tôi. độ chính xác là phần nhỏ của các trường hợp có liên quan trong số các trường hợp được truy xuất, trong khi thu hồi là phần của tổng số các trường hợp có liên quan đã thực sự được truy xuất. Điểm F cung cấp một điểm duy nhất cân bằng cả mối quan tâm về độ chính xác và khả năng thu hồi trong một số.

Ví dụ

 nhập gấu trúc dưới dạng pdfrom sklearn import metricsfrom sklearn.model_selection import train_test_splitfrom sklearn.metrics import precision_scorefrom sklearn.metrics import summon_scorefrom sklearn.metrics import f1_score # Nạp credititcard.csv bằng cách sử dụng pandasdatainput =pd. csv ') # phân tách các tính năng (X) và nhãn (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 =Quyết địnhTreeClassifier (max_depth =4) classifier.fit (X_train, Y_train) dự đoán =classifier.p Dự đoán (X_test) print ("classifier.p Dự đoán (X_test) print" , được dự đoán) ## #AccuracyDT =metrics.accuracy_score (Y_test, được dự đoán) * 100print ("\ nĐiểm chính xác sử dụng Công cụ phân loại quyết định:", DT) ## #Pre precisionprint ('precision') # Precision =TP / (TP + FP ) (Trong đó TP =Đúng Dương tính, TN =Âm tính Đúng, FP =Tích cực Sai, FN =Sai Nega tive) .pre precision =precision_score (Y_test, dự đoán, pos_label =1) print (precision_score (Y_test, dự đoán, pos_label =1)) # Recallprint ('summon') # Recall =TP / (TP + FN) summon =summon_score (Y_test , dự đoán, pos_label =1) print (summon_score (Y_test, dự đoán, pos_label =1)) # f1-scoreprint ('f-Score') # F - điểm là một phương pháp thống kê để xác định độ chính xác tính cho cả độ chính xác và thu hồi.fscore =f1_score (Y_test, dự đoán, pos_label =1) print (f1_score (Y_test, dự đoán, pos_label =1)) 

Đầu ra

Chạy đoạn mã trên cho chúng ta kết quả sau -

 Điểm độ chính xác sử dụng Công cụ phân loại quyết định:99,9403110845827pre chính xác0,810126582278481recall0,7710843373493976f-Score0,7901234567901234