Trong thời đại số hóa ngày nay, gian lận thẻ tín dụng đã trở thành một vấn đề nghiêm trọng đối với cả người tiêu dùng và các tổ chức tài chính. Khi giao dịch trực tuyến ngày càng trở nên phổ biến, các kẻ gian lận tìm ra nhiều cách thức tinh vi hơn để thực hiện hành vi lừa đảo, gây thiệt hại lớn về mặt tài chính và tin cậy. Tuy nhiên, với sự phát triển của Machine Learning (ML), chúng ta giờ đây có trong tay công cụ mạnh mẽ để phát hiện và ngăn chặn gian lận thẻ tín dụng một cách hiệu quả hơn. ML cung cấp khả năng phân tích lượng lớn dữ liệu giao dịch trong thời gian thực và học hỏi từ các mẫu giao dịch để phát hiện ra những hoạt động bất thường có khả năng là gian lận. Bằng cách sử dụng các thuật toán ML phức tạp, các ngân hàng và tổ chức tài chính có thể giảm thiểu rủi ro gian lận, bảo vệ khách hàng và tài sản của mình một cách hiệu quả. Bài viết này sẽ khám phá cách thức machine learning được áp dụng trong việc phát hiện gian lận thẻ tín dụng, từ nguyên lý hoạt động của các mô hình ML đến việc triển khai chúng trong thực tế, mở ra một kỷ nguyên mới trong cuộc chiến chống lại gian lận tài chính.
Dự án machine learning – Cách phát hiện gian lận thẻ tín dụng
Mục đích của dự án R này là xây dựng một bộ phân loại có thể phát hiện các giao dịch gian lận thẻ tín dụng. Chúng tôi sẽ sử dụng nhiều thuật toán machine learning khác nhau để có thể phân biệt gian lận với thuật toán không gian lận. Vào cuối dự án machine learning này, bạn sẽ học cách triển khai các thuật toán machine learning để thực hiện phân loại.
Tập dữ liệu được sử dụng trong dự án này có sẵn tại đây – Tập dữ liệu phát hiện gian lận
Nhập tập dữ liệu
Chúng tôi đang nhập bộ dữ liệu có chứa các giao dịch được thực hiện bằng thẻ tín dụng-
library(ranger) library(caret) library(data.table) creditcard_data <- read.csv("/home/dataflair/data/Credit Card/creditcard.csv")
Xem thêm machine learning cho R – cách sử dụng pakage
Khám phá dữ liệu
Trong phần này của dự án ML phát hiện gian lận, chúng ta sẽ khám phá dữ liệu được chứa trong khung dữ liệu creditcard_data. Chúng tôi sẽ tiếp tục bằng cách hiển thị dữ liệu credititcard_data bằng cách sử dụng hàm head () cũng như hàm tail (). Sau đó, chúng tôi sẽ tiếp tục khám phá các thành phần khác của khung dữ liệu này –
dim(creditcard_data) head(creditcard_data,6)
tail(creditcard_data,6)
table(creditcard_data$Class) summary(creditcard_data$Amount) names(creditcard_data) var(creditcard_data$Amount)
sd(creditcard_data$Amount)
Xem thêm Các bước xây dựng mô hình Machine learning
Thao tác dữ liệu
Trong phần này của dự án khoa học dữ liệu R, chúng tôi sẽ chia tỷ lệ dữ liệu của mình bằng cách sử dụng hàm scale (). Chúng tôi sẽ áp dụng điều này cho thành phần số tiền trong số tiền creditcard_data của chúng tôi. Chia tỷ lệ còn được gọi là tiêu chuẩn hóa tính năng. Với sự trợ giúp của việc chia tỷ lệ, dữ liệu được cấu trúc theo một phạm vi xác định. Do đó, không có giá trị cực đoan nào trong tập dữ liệu của chúng tôi có thể ảnh hưởng đến hoạt động của mô hình của chúng tôi. Chúng tôi sẽ thực hiện việc này như sau:
head(creditcard_data)
creditcard_data$Amount=scale(creditcard_data$Amount) NewData=creditcard_data[,-c(1)] head(NewData)
Mô hình hóa dữ liệu
Sau khi chúng tôi đã chuẩn hóa toàn bộ tập dữ liệu của mình, chúng tôi sẽ chia tập dữ liệu của mình thành tập huấn luyện cũng như tập thử nghiệm với tỷ lệ phân tách là 0,80. Điều này có nghĩa là 80% dữ liệu của chúng tôi sẽ được quy cho train_data trong khi 20% sẽ được quy cho dữ liệu thử nghiệm. Sau đó, chúng tôi sẽ tìm các kích thước bằng cách sử dụng hàm dim () –
library(caTools) set.seed(123) data_sample = sample.split(NewData$Class,SplitRatio=0.80) train_data = subset(NewData,data_sample==TRUE) test_data = subset(NewData,data_sample==FALSE) dim(train_data) dim(test_data)
Xem thêm Data mining so với machine learning
Phù hợp với mô hình hồi quy logistic
Trong phần này của dự án phát hiện gian lận thẻ tín dụng, chúng tôi sẽ phù hợp với mô hình đầu tiên của chúng tôi. Chúng ta sẽ bắt đầu với hồi quy logistic. Một hồi quy logistic được sử dụng để mô hình hóa xác suất kết quả của một lớp như đạt / không đạt, tích cực / tiêu cực và trong trường hợp của chúng tôi – gian lận / không gian lận. Chúng tôi tiến hành triển khai mô hình này trên dữ liệu thử nghiệm của chúng tôi như sau:
Logistic_Model=glm(Class~.,test_data,family=binomial()) summary(Logistic_Model)
Sau khi chúng tôi tóm tắt mô hình của mình, chúng tôi sẽ hình dung nó qua các biểu đồ sau:
plot(Logistic_Model)
Đầu ra:
Đầu ra:
Đầu ra:
Đầu ra:
Để đánh giá hiệu suất của mô hình của chúng tôi, chúng tôi sẽ phác thảo đường cong ROC. ROC còn được gọi là Đặc điểm Lạc quan của Người tiếp nhận. Đối với điều này, trước tiên chúng tôi sẽ nhập gói ROC và sau đó vẽ đường cong ROC của chúng tôi để phân tích hiệu suất của nó.
library(pROC) lr.predict <- predict(Logistic_Model,train_data, probability = TRUE) auc.gbm = roc(test_data$Class, lr.predict, plot = TRUE, col = "blue")
Đầu ra:
Phù hợp với mô hình cây quyết định
Trong phần này, chúng ta sẽ thực hiện một thuật toán cây quyết định. Cây quyết định để vẽ các kết quả của một quyết định. Những kết quả này về cơ bản là một hệ quả mà qua đó chúng ta có thể kết luận đối tượng thuộc về lớp nào. Bây giờ chúng ta sẽ triển khai mô hình cây quyết định của mình và sẽ vẽ biểu đồ của nó bằng cách sử dụng hàm rpart.plot (). Chúng ta sẽ đặc biệt sử dụng phép chia đệ quy để vẽ sơ đồ cây quyết định.
library(rpart) library(rpart.plot) decisionTree_model <- rpart(Class ~ . , creditcard_data, method = 'class') predicted_val <- predict(decisionTree_model, creditcard_data, type = 'class') probability <- predict(decisionTree_model, creditcard_data, type = 'prob') rpart.plot(decisionTree_model)
Đầu ra:
Mạng thần kinh nhân tạo
Mạng thần kinh nhân tạo là một loại thuật toán machine learning được mô phỏng theo hệ thống thần kinh của con người. Các mô hình ANN có thể học các mẫu bằng cách sử dụng dữ liệu lịch sử và có thể thực hiện phân loại trên dữ liệu đầu vào. Chúng tôi nhập gói neuralnet sẽ cho phép chúng tôi triển khai các ANN của mình. Sau đó, chúng tôi tiến hành vẽ biểu đồ bằng cách sử dụng hàm plot (). Bây giờ, trong trường hợp Mạng thần kinh nhân tạo, có một phạm vi giá trị nằm trong khoảng từ 1 đến 0. Chúng tôi đặt ngưỡng là 0,5, nghĩa là, các giá trị trên 0,5 sẽ tương ứng với 1 và phần còn lại sẽ là 0. Chúng tôi thực hiện điều này như sau –
library(neuralnet) ANN_model =neuralnet (Class~.,train_data,linear.output=FALSE) plot(ANN_model) predANN=compute(ANN_model,test_data) resultANN=predANN$net.result resultANN=ifelse(resultANN>0.5,1,0)
Đầu ra:
Tăng cường Gradient (GBM)
Gradient Bo boost là một thuật toán machine learning phổ biến được sử dụng để thực hiện các nhiệm vụ phân loại và hồi quy. Mô hình này bao gồm một số mô hình tổng hợp cơ bản như cây quyết định yếu. Những cây quyết định này kết hợp với nhau để tạo thành một mô hình tăng cường độ dốc mạnh mẽ. Chúng tôi sẽ triển khai thuật toán giảm độ dốc trong mô hình của chúng tôi như sau:
library(gbm, quietly=TRUE) # Get the time to train the GBM model system.time( model_gbm <- gbm(Class ~ . , distribution = "bernoulli" , data = rbind(train_data, test_data) , n.trees = 500 , interaction.depth = 3 , n.minobsinnode = 100 , shrinkage = 0.01 , bag.fraction = 0.5 , train.fraction = nrow(train_data) / (nrow(train_data) + nrow(test_data)) ) ) # Determine best iteration based on test data gbm.iter = gbm.perf(model_gbm, method = "test")
Ảnh chụp màn hình đầu vào:
model.influence = relative.influence(model_gbm, n.trees = gbm.iter, sort. = TRUE) #Plot the gbm model plot(model_gbm)
Đầu ra:
Đầu ra:
print ( gbm_auc )
Ảnh chụp màn hình đầu ra:
Kết luận về mô hình phát hiện gian lận thẻ tín dụng
Kết thúc dự án Khoa học dữ liệu R của chúng tôi, chúng tôi đã học cách phát triển mô hình phát hiện gian lận thẻ tín dụng bằng cách sử dụng machine learning. Chúng tôi đã sử dụng nhiều thuật toán ML để triển khai mô hình này và cũng vẽ các đường cong hiệu suất tương ứng cho các mô hình. Chúng tôi đã học cách dữ liệu có thể được phân tích và trực quan hóa để phân biệt các giao dịch gian lận với các loại dữ liệu khác.