Gian lận tài chính là một trong những thách thức lớn nhất mà các ngân hàng, công ty thẻ tín dụng và doanh nghiệp thương mại điện tử đang đối mặt. Việc phát hiện gian lận không chỉ giúp bảo vệ tài sản của khách hàng mà còn nâng cao uy tín của doanh nghiệp. Học máy (Machine Learning) cung cấp những giải pháp tiên tiến, giúp phát hiện những mẫu gian lận tinh vi mà các phương pháp truyền thống khó nhận diện được.
Nếu bạn là người mới bắt đầu với Machine Learning, hãy tham khảo bài Hướng dẫn tiền xử lý dữ liệu sạch để huấn luyện mô hình tốt hơn để hiểu tầm quan trọng của dữ liệu sạch. Bạn cũng có thể xem bài Phân tích dữ liệu từ file Excel bằng Python để làm quen với thao tác dữ liệu và bài Phân tích dữ liệu bán hàng bằng Python và Pandas để hình dung cách tổ chức và khám phá dữ liệu thực tế.
Giới thiệu về hệ thống phát hiện gian lận
Hệ thống phát hiện gian lận là một giải pháp sử dụng các thuật toán học máy để phân tích dữ liệu giao dịch và dự đoán xem một giao dịch có khả năng gian lận hay không. Thay vì kiểm tra từng giao dịch thủ công, mô hình học máy sẽ học từ các dữ liệu lịch sử để tự động phát hiện các mẫu bất thường.
Trong bài viết này, chúng ta sẽ xây dựng một hệ thống phát hiện gian lận đơn giản bằng Python, sử dụng bộ dữ liệu giao dịch thẻ tín dụng từ Kaggle và mô hình Random Forest. Quy trình bao gồm: tải dữ liệu, tiền xử lý, huấn luyện mô hình, đánh giá kết quả và đưa ra dự đoán.
Chuẩn bị môi trường
Bạn có thể thực hành trên Google Colab để tránh cài đặt phức tạp. Truy cập https://colab.research.google.com và tạo một notebook mới.
Cài đặt các thư viện cần thiết nếu bạn dùng Jupyter Notebook:
!pip install pandas numpy scikit-learn matplotlib seaborn
Tải dữ liệu phát hiện gian lận
Bộ dữ liệu được sử dụng là “Credit Card Fraud Detection” từ Kaggle. Bạn có thể tải từ https://www.kaggle.com/mlg-ulb/creditcardfraud. Sau khi tải về, upload file creditcard.csv lên Colab.
Đọc dữ liệu bằng Pandas:
import pandas as pd
# Đọc dữ liệu
df = pd.read_csv('creditcard.csv')
print(df.shape)
df.head()
Khám phá dữ liệu
Bộ dữ liệu gồm hơn 284.000 giao dịch, với cột “Class” là nhãn: 0 cho giao dịch hợp lệ, 1 cho giao dịch gian lận.
# Kiểm tra thông tin df.info() # Thống kê tổng quan df.describe() # Kiểm tra phân phối nhãn df['Class'].value_counts()
Kết quả cho thấy dữ liệu mất cân bằng nghiêm trọng: chỉ 0.17% giao dịch là gian lận.
Tiền xử lý dữ liệu
Vì dữ liệu mất cân bằng, chúng ta cần xử lý để mô hình học tốt hơn. Ở đây, chúng ta sẽ sử dụng kỹ thuật undersampling để cân bằng dữ liệu.
# Tách dữ liệu gian lận và hợp lệ fraud = df[df['Class'] == 1] valid = df[df['Class'] == 0] # Lấy mẫu dữ liệu hợp lệ bằng số lượng giao dịch gian lận valid_sample = valid.sample(n=len(fraud)) # Gộp lại thành dataset cân bằng balanced_df = pd.concat([fraud, valid_sample]) print(balanced_df['Class'].value_counts())
Tiếp theo, tách dữ liệu thành đầu vào (X) và nhãn (y).

