Giới thiệu dự án

Sự bùng nổ của thanh toán số và thương mại điện tử đã biến thẻ tín dụng thành công cụ thanh toán phổ biến trên toàn cầu. Tuy nhiên, theo các báo cáo bảo mật tài chính quốc tế, thiệt hại do tội phạm công nghệ cao và gian lận thanh toán thẻ gây ra hàng chục tỷ USD tổn thất mỗi năm cho hệ thống ngân hàng. Thách thức lớn nhất trong việc áp dụng máy học (Machine Learning) để giám sát và phát hiện gian lận tự động là hiện tượng dữ liệu mất cân bằng nghiêm trọng (Extreme Class Imbalance): tỷ lệ các giao dịch gian lận thực tế thường chiếm dưới 0.2% trên tổng số hàng triệu giao dịch hợp lệ mỗi ngày.

Khi áp dụng các thuật toán phân lớp chuẩn (Standard Classifiers) trên tập dữ liệu này, mô hình có xu hướng thiên vị lớp đa số (giao dịch hợp pháp), dẫn đến độ chính xác tổng thể (Accuracy) ảo có thể đạt tới 99.8%, nhưng độ nhạy (Recall/Sensitivity) đối với lớp thiểu số (giao dịch gian lận) lại gần như bằng 0. Điều này khiến ngân hàng bỏ sót các hành vi chiếm đoạt tài sản nghiêm trọng.

Khóa luận tốt nghiệp chuyên ngành Phân tích dữ liệu lớn trong kinh tế và kinh doanh tại Khoa Kinh tế số, Học viện Chính sách và Phát triển (năm 2023) tập trung giải quyết bài toán cốt lõi này với các mục tiêu cụ thể:

  1. Nghiên cứu và hệ thống hóa cơ sở lý thuyết về các kỹ thuật tiền xử lý dữ liệu mất cân bằng ở mức dữ liệu (Data-level) và mức thuật toán (Algorithm-level).
  2. Đề xuất cải tiến thuật toán cân bằng dữ liệu biên thiểu số Add-Border-SMOTE nhằm tối ưu hóa đường biên phân tách giữa các lớp.
  3. Ứng dụng và đánh giá mô hình phân lớp trên 3 bộ dữ liệu tín dụng thực nghiệm chuẩn (Credit Card Fraud Detection, Default of credit card clients, German Credit Data).
  4. Xây dựng quy trình thực nghiệm chuẩn hóa với 10-fold Cross-Validation, đo lường bằng các chỉ số chuyên biệt: G-mean, AUC, AUPRC, F1-Score và kiểm định thống kê P-value.

Phạm vi nghiên cứu tập trung vào các kỹ thuật Resampling tiên tiến (SMOTE, Borderline-SMOTE, Safe-Level-SMOTE, Tomek Links, OSS, NCL) kết hợp với các bộ phân lớp kinh điển (SVM, KNN, Naive Bayes) trên môi trường giao dịch thẻ tín dụng và rủi ro tín dụng ngân hàng.


Phân tích và thiết kế giải pháp

Phân tích hiện trạng

Các giải pháp truyền thống trong phát hiện gian lận ngân hàng chủ yếu dựa trên hệ thống luật chuyên gia (Rule-based Engine) hoặc các thuật toán phân lớp cơ bản chưa được tối ưu xử lý mất cân bằng.

Giải pháp Ưu điểm Nhược điểm
Rule-based Systems Dễ giải thích, đáp ứng tức thời với gian lận đã biết. Không thích ứng với thủ đoạn mới, chi phí duy trì luật cao, tỷ lệ cảnh báo sai (False Alarm) lớn.
Random Under-sampling (RUS) Giảm kích thước dữ liệu, tăng tốc độ huấn luyện mô hình. Mất mát các mẫu thông tin quan trọng của lớp đa số, làm suy giảm khả năng tổng quát hóa.
Random Over-sampling (ROS) Đơn giản, giữ nguyên toàn bộ dữ liệu ban đầu. Dễ gây hiện tượng quá khớp (Overfitting) do sao chép trùng lặp các điểm dữ liệu thiểu số.
Standard SMOTE Sinh dữ liệu nhân tạo nội suy, mở rộng không gian lớp thiểu số. Sinh dữ liệu đồng đều, dễ tạo điểm nhiễu (Noise) trong vùng không gian lớp đa số.
Proposed Add-Border-SMOTE Tăng cường mật độ chính xác tại ranh giới quyết định (Decision Boundary). Phụ thuộc vào tham số chọn láng giềng $k$ và chi phí tính toán khoảng cách.

Yêu cầu kỹ thuật hệ thống được phân loại theo mô hình MoSCoW:

  • Must-have: Khả năng nội suy dữ liệu thiểu số không gây nhiễu vùng an toàn; tích hợp độ đo đánh giá phi đối xứng (G-mean, AUC-ROC); kiểm định chéo K-fold chống rò rỉ dữ liệu (Data Leakage).
  • Should-have: Module tiền xử lý chuẩn hóa đặc trưng (StandardScaler/RobustScaler); giảm chiều dữ liệu qua phân tích thành phần chính (PCA).
  • Could-have: Tích hợp cơ chế làm sạch đường biên tự động với Tomek Links.
  • Won't-have (giai đoạn này): Xử lý luồng dữ liệu giao dịch trực tiếp dạng Stream Processing với Kafka.

Thiết kế hệ thống

Kiến trúc giải pháp được thiết kế thành một Pipeline học máy khép kín, từ tầng tiếp nhận dữ liệu, tiền xử lý, phân tầng lấy mẫu (Stratified Resampling), huấn luyện mô hình đến đánh giá thống kê.

flowchart TD
    A["Raw Transaction Data (Credit Card / Imbalanced)"] --> B["Data Preprocessing & Normalization"]
    B --> C["10-Fold Stratified Cross Validation Split"]
    C --> D["Training Folds (9 Folds)"]
    C --> E["Test Fold (1 Fold - Raw Distribution)"]
    
    subgraph Resampling Engine
        D --> F{"Resampling Strategy"}
        F -->|Over-sampling| G["Add-Border-SMOTE / Borderline-SMOTE"]
        F -->|Under-sampling| H["Tomek Links / NCL / OSS"]
        F -->|Hybrid| I["SMOTE + Tomek Links"]
    end
    
    G --> J["Balanced Training Set"]
    H --> J
    I --> J
    
    subgraph Model Training & Classification
        J --> K["Classifiers (SVM, KNN, Naive Bayes)"]
    end
    
    K --> L["Model Inference"]
    E --> L
    L --> M["Evaluation Engine (G-mean, AUC, AUPRC, P-value)"]

Technology Stack & Versioning

  • Ngôn ngữ lập trình: Python 3.10.12
  • Thư viện xử lý dữ liệu: Pandas 2.0.3, NumPy 1.24.3
  • Machine Learning & Resampling: Scikit-Learn 1.3.0, Imbalanced-Learn 0.11.0
  • Môi trường tính toán: JupyterLab 4.0.5, GCC 11.4.0 trên nền Linux Ubuntu 22.04 LTS

Database Schema cho lưu trữ giao dịch và log dự đoán

CREATE TABLE transaction_records (
    transaction_id VARCHAR(64) PRIMARY KEY,
    customer_id VARCHAR(32) NOT NULL,
    transaction_time TIMESTAMP WITH TIME ZONE NOT NULL,
    amount NUMERIC(12, 2) NOT NULL,
    v1_to_v28 JSONB NOT NULL, -- PCA transformed feature vectors
    is_fraud_actual SMALLINT NOT NULL DEFAULT 0,
    created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
);

CREATE TABLE fraud_prediction_logs (
    prediction_id UUID PRIMARY KEY,
    transaction_id VARCHAR(64) REFERENCES transaction_records(transaction_id),
    model_version VARCHAR(32) NOT NULL,
    fraud_probability FLOAT NOT NULL,
    predicted_label SMALLINT NOT NULL,
    inference_time_ms FLOAT NOT NULL,
    evaluated_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
);

Đặc tả API dự đoán gian lận (Inference Endpoint)

  • Endpoint: POST /api/v1/fraud-detection/predict
  • Request Body:
{
  "transaction_id": "TX_994827104",
  "amount": 249.50,
  "features": [-1.3598, -0.0727, 2.5363, 1.3781, -0.3383, 0.4623, 0.2395, 0.0986, 0.3637, 0.0907, -0.5516, -0.6178, -0.9913, -0.3111, 1.4681, -0.4704, 0.2079, 0.0257, 0.4039, 0.2514, -0.0183, 0.2778, -0.1104, 0.0669, 0.1285, -0.1891, 0.1335, -0.0210]
}
  • Response Body:
{
  "transaction_id": "TX_994827104",
  "is_fraud": 1,
  "confidence_score": 0.9428,
  "risk_level": "HIGH",
  "applied_model": "Add-Border-SMOTE_SVM_v1.0"
}

Methodology

Quy trình nghiên cứu áp dụng phương pháp luận phát triển khoa học dữ liệu nghiêm ngặt:

  • Phương pháp tiếp cận: Thực nghiệm so sánh chéo (Empirical Comparative Study) kết hợp phân tích thống kê phi tham số.
  • Tiến độ nghiên cứu:
    • Giai đoạn 1 (Tuần 1-3): Thu thập, làm sạch và phân tích cấu trúc 3 bộ dữ liệu UCI/Kaggle.
    • Giai đoạn 2 (Tuần 4-7): Xây dựng và tối ưu thuật toán Add-Border-SMOTE cùng các thuật toán đối sánh.
    • Giai đoạn 3 (Tuần 8-11): Chạy thực nghiệm 10-Fold Cross-Validation và kiểm định P-value.
    • Giai đoạn 4 (Tuần 12-14): Đánh giá tổng hợp và đóng gói pipeline.
  • Đảm bảo chất lượng (QA): Đảm bảo nguyên tắc No Resampling Leakage — việc Resampling chỉ được thực thi trên tập Training của từng Fold, tập Testing luôn giữ nguyên phân bố dữ liệu gốc.

Implementation và kết quả

Development process

Trọng tâm triển khai là thuật toán cải tiến Add-Border-SMOTE. Khác với Borderline-SMOTE sinh dữ liệu giữa phần tử biên với cả các láng giềng lớp đa số (gây xâm lấn không gian), Add-Border-SMOTE chỉ cho phép các phần tử biên ($B_i \in \text{DANGER}$) kết nối và nội suy với các phần tử biên thiểu số khác ($B_j \in \text{DANGER}$).

Thuật toán Add-Border-SMOTE

  1. Cho tập huấn luyện $T$ gồm $P$ phần tử thiểu số và $N$ phần tử đa số.
  2. Với mỗi phần tử $p_i \in P$, tính $k$ láng giềng gần nhất trong toàn bộ tập $T$. Gọi $k'$ là số láng giềng thuộc lớp đa số $N$.
  3. Xác định tập biên $\text{DANGER} = { B_i \in P \mid \frac{k}{2} \le k' < k }$.
  4. Với mỗi phần tử biên $B_i \in \text{DANGER}$, tìm $k_{border}$ láng giềng gần nhất chỉ trong tập $\text{DANGER}$.
  5. Chọn ngẫu nhiên láng giềng $B_j$ từ $k_{border}$ láng giềng này.
  6. Sinh phần tử nhân tạo theo công thức: $$Synthetic = B_i + gap \times (B_j - B_i) \quad \text{với } gap \in [0, 1]$$
import numpy as np
from sklearn.neighbors import NearestNeighbors

def add_border_smote(X_minority, X_majority, k_neighbors=5, n_samples_ratio=1.0):
    """
    Implementation of Add-Border-SMOTE algorithm.
    """
    X_all = np.vstack((X_minority, X_majority))
    y_all = np.hstack((np.ones(len(X_minority)), np.zeros(len(X_majority))))
    
    # Bước 1: Xác định tập phần tử biên (DANGER)
    nn_all = NearestNeighbors(n_neighbors=k_neighbors + 1).fit(X_all)
    indices_all = nn_all.kneighbors(X_minority, return_distance=False)
    
    danger_set = []
    for idx, neighbors in enumerate(indices_all):
        majority_count = np.sum(y_all[neighbors[1:]] == 0)
        if (k_neighbors / 2.0) <= majority_count < k_neighbors:
            danger_set.append(X_minority[idx])
            
    danger_set = np.array(danger_set)
    if len(danger_set) < 2:
        return X_minority
    
    # Bước 2: Sinh phần tử nhân tạo giữa các phần tử trong DANGER
    k_border = min(k_neighbors, len(danger_set) - 1)
    nn_border = NearestNeighbors(n_neighbors=k_border + 1).fit(danger_set)
    indices_border = nn_border.kneighbors(danger_set, return_distance=False)
    
    synthetic_samples = []
    num_to_generate = int(len(X_minority) * n_samples_ratio)
    
    for _ in range(num_to_generate):
        idx = np.random.randint(0, len(danger_set))
        nn_idx = np.random.choice(indices_border[idx][1:])
        
        diff = danger_set[nn_idx] - danger_set[idx]
        gap = np.random.rand(*diff.shape)
        synthetic = danger_set[idx] + gap * diff
        synthetic_samples.append(synthetic)
        
    return np.vstack((X_minority, np.array(synthetic_samples)))

Testing và validation

Hiệu năng của mô hình được đánh giá thông qua chỉ số trung bình hình học G-mean (Geometric Mean), đảm bảo cân bằng giữa khả năng phát hiện gian lận và tránh nhận diện sai giao dịch hợp pháp: $$G\text{-mean} = \sqrt{\text{Sensitivity} \times \text{Specificity}} = \sqrt{\frac{TP}{TP + FN} \times \frac{TN}{TN + FP}}$$

Kết quả thực nghiệm trên bộ dữ liệu Credit Card Fraud Detection (284,807 giao dịch, 492 gian lận - Tỷ lệ 0.172%)

Thuật toán Resampling Classifier G-mean (%) AUC-ROC Recall (TPR) Precision (PPV)
Gốc (Không Resampling) SVM 76.42 0.881 58.54% 87.21%
Random Over-sampling SVM 88.15 0.932 81.30% 75.40%
Standard SMOTE SVM 89.60 0.941 83.74% 74.12%
Borderline-SMOTE1 SVM 91.24 0.953 86.18% 76.80%
Safe-Level-SMOTE SVM 90.85 0.949 85.37% 75.90%
SMOTE + Tomek Links SVM 91.50 0.956 86.59% 77.20%
Add-Border-SMOTE (Đề xuất) SVM 93.87 0.971 90.24% 78.65%
Add-Border-SMOTE (Đề xuất) KNN ($k=3$) 92.45 0.962 88.21% 76.10%
Add-Border-SMOTE (Đề xuất) Naive Bayes 87.30 0.915 82.93% 68.40%

Kiểm định giả thuyết thống kê (Paired t-test) so sánh giá trị G-mean của Add-Border-SMOTE + SVM với các thuật toán còn lại đều cho giá trị $P\text{-value} < 0.05$ (đạt mức ý nghĩa thống kê 95%), khẳng định sự cải thiện hiệu năng là có ý nghĩa thực sự chứ không do ngẫu nhiên.


Đổi mới và đóng góp

  1. Đổi mới về mặt kỹ thuật thuật toán: Khắc phục triệt để nhược điểm sinh điểm dữ liệu lạc vào vùng đa số của Borderline-SMOTE2 và Standard SMOTE bằng cách giới hạn không gian nội suy nghiêm ngặt giữa các điểm thuộc tập $\text{DANGER}$. Mật độ phần tử biên thiểu số tăng lên giúp bộ phân loại SVM xác định siêu phẳng tối ưu lề cực đại (Maximum Margin Hyperplane) chính xác hơn.
  2. Hiệu quả cải thiện định lượng:
    • Tăng chỉ số G-mean thêm +4.27% so với Standard SMOTE và +2.63% so với Borderline-SMOTE1 trên bộ dữ liệu Credit Card Fraud Detection.
    • Đạt tỷ lệ bắt gian lận (Recall) 90.24%, giảm thiểu 76.5% số vụ gian lận bị bỏ sót so với mô hình cơ sở không qua tiền xử lý.
  3. Đóng góp cho ngành ngân hàng số: Cung cấp giải pháp tiền xử lý dữ liệu độc lập, dễ dàng tích hợp vào mọi kiến trúc Machine Learning hiện hành của ngân hàng mà không cần can thiệp sâu vào cấu trúc phần cứng của hệ thống thanh toán.

Ứng dụng thực tế và triển khai

Kịch bản vận hành thực tế

Mô hình được tích hợp vào luồng ủy quyền giao dịch thẻ (Card Transaction Authorization Flow). Khi khách hàng quẹt thẻ hoặc thực hiện giao dịch E-commerce:

  1. Hệ thống Gateway trích xuất các đặc trưng giao dịch (số tiền, định vị GPS, thời gian, tần suất quẹt thẻ trong 1 giờ qua).
  2. Dữ liệu được đưa qua Pipeline chuẩn hóa và suy luận bằng mô hình đã được huấn luyện sẵn với Add-Border-SMOTE + SVM.
  3. Nếu điểm rủi ro $Score > 0.85$, hệ thống tự động chặn giao dịch và gửi OTP xác thực bổ sung qua SMS/Smart OTP; nếu $0.5 < Score \le 0.85$, giao dịch được chuyển vào hàng đợi kiểm soát viên xử lý.
sequenceDiagram
    autonumber
    actor Customer as Khách hàng
    participant POS as Cổng thanh toán (POS/Online)
    participant Core as Core Banking
    participant FraudAPI as Hệ thống phát hiện gian lận (Add-Border-SMOTE)
    participant Admin as Kiểm soát viên rủi ro

    Customer->>POS: Quẹt thẻ / Thanh toán trực tuyến
    POS->>Core: Yêu cầu ủy quyền giao dịch
    Core->>FraudAPI: Gửi véc-tơ đặc trưng giao dịch (Real-time)
    FraudAPI->>FraudAPI: Suy luận mô hình (Inference < 15ms)
    alt Điểm rủi ro < 0.5 (Giao dịch an toàn)
        FraudAPI-->>Core: Phê duyệt (Safe)
        Core-->>POS: Hoàn tất giao dịch
        POS-->>Customer: Thông báo thành công
    else Điểm rủi ro >= 0.85 (Nguy cơ gian lận cao)
        FraudAPI-->>Core: Từ chối / Yêu cầu Smart OTP bổ sung
        Core-->>Customer: Gửi cảnh báo & yêu cầu xác thực đa lớp
    else 0.5 <= Điểm rủi ro < 0.85 (Nghi vấn)
        FraudAPI-->>Admin: Chuyển log giao dịch vào hàng đợi giám sát
        FraudAPI-->>Core: Tạm giữ xử lý
    end

Phân tích hiệu quả kinh tế (ROI)

  • Với một ngân hàng quy mô trung bình xử lý 50 triệu USD giao dịch thẻ/tháng, tỷ lệ gian lận ước tính 0.1% (tương đương 50,000 USD thất thoát/tháng).
  • Ứng dụng mô hình Add-Border-SMOTE nâng tỷ lệ phát hiện từ 58.5% lên 90.2%, giúp ngân hàng ngăn chặn thêm ~15,850 USD tổn thất mỗi tháng (khoảng 190,000 USD/năm).
  • Chi phí hạ tầng điện toán phục vụ suy luận mô hình ước tính 500 USD/tháng, mang lại tỷ suất hoàn vốn ROI > 300% ngay trong năm đầu tiên triển khai.

Hạn chế và hướng phát triển

  • Hạn chế kỹ thuật:
    • Thuật toán Add-Border-SMOTE phụ thuộc vào việc tính toán ma trận khoảng cách Euclid $O(n^2)$ trong không gian nhiều chiều, có thể gây trễ khi kích thước tập dữ liệu huấn luyện vượt quá hàng triệu bản ghi.
    • Chưa thử nghiệm trên các dữ liệu dạng chuỗi thời gian (Sequential/Time-series Data) có tính chất biến động theo mùa.
  • Hướng phát triển:
    • Tích hợp kỹ thuật giảm chiều nâng cao kết hợp Autoencoders để nén không gian đặc trưng trước khi tìm láng giềng.
    • Thử nghiệm kết hợp Add-Border-SMOTE với các mô hình Gradient Boosting chuyên sâu (XGBoost, LightGBM, CatBoost) và mạng nơ-ron sâu (Graph Neural Networks - GNN) để bắt các đường dây gian lận có tổ chức.

Đối tượng hưởng lợi

  • Sinh viên & Giảng viên: Cung cấp tài liệu tham khảo hoàn chỉnh, chuẩn mực về xử lý dữ liệu mất cân bằng và quy trình đánh giá thực nghiệm không rò rỉ dữ liệu (No Leakage Validation).
  • Kỹ sư dữ liệu & Lập trình viên AI: Cung cấp mã nguồn thuật toán Add-Border-SMOTE tối ưu, dễ dàng kế thừa và đóng gói thành thư viện mở rộng cho Scikit-Learn.
  • Ngân hàng & Tổ chức Fintech: Sở hữu giải pháp nâng cao tỷ lệ phát hiện giao dịch gian lận thẻ tín dụng với chi phí triển khai thấp và hiệu quả kinh tế được kiểm chứng định lượng.
  • Nhà nghiên cứu Khoa học dữ liệu: Cung cấp cơ sở đối sánh thực nghiệm trên các bộ dữ liệu benchmark tiêu chuẩn của UCI và Kaggle.

Câu hỏi thường gặp

1. Yêu cầu phần cứng và phần mềm tối thiểu để triển khai hệ thống là gì?

Hệ thống yêu cầu máy chủ Linux (Ubuntu 20.04+), CPU từ 4 Cores, 16GB RAM, ổ cứng SSD NVMe. Về phần mềm: Python 3.10+, Scikit-learn 1.3+, FastAPI phục vụ Microservice và PostgreSQL 14+ lưu trữ dữ liệu.

2. Add-Border-SMOTE có gây ra hiện tượng quá khớp (Overfitting) không?

Không. Bằng việc chỉ nội suy dữ liệu giữa các phần tử biên có độ tin cậy cao và loại bỏ các điểm nhiễu (Noise Samples có $k' = k$), Add-Border-SMOTE kiểm soát độ biến thiên không gian tốt hơn nhiều so với Random Over-sampling hay Standard SMOTE.

3. Tại sao không sử dụng độ đo Accuracy để đánh giá mô hình gian lận thẻ?

Trong tập dữ liệu mất cân bằng (ví dụ 99.8% giao dịch bình thường, 0.2% gian lận), một mô hình "ngây thơ" chỉ cần dự đoán tất cả là bình thường cũng đạt Accuracy 99.8%, nhưng hoàn toàn vô dụng trong nghiệp vụ. Chỉ số G-mean, AUPRC và Recall mới phản ánh chính xác năng lực nhận diện lớp hiếm.

4. Thời gian suy luận (Inference Latency) cho một giao dịch có đáp ứng yêu cầu thanh toán không?

Có. Khi mô hình SVM/KNN đã được huấn luyện xong và đóng gói, thời gian suy luận cho một véc-tơ đặc trưng giao dịch qua API chỉ mất khoảng 8ms - 15ms, hoàn toàn đáp ứng chuẩn thanh toán quốc tế (yêu cầu dưới 200ms).

5. Khi nào cần huấn luyện lại (Retrain) mô hình?

Ngân hàng nên thiết lập lịch huấn luyện lại định kỳ (theo tháng hoặc quý) hoặc kích hoạt tự động khi hệ sinh thái giám sát phát hiện hiện tượng trôi dữ liệu (Data Drift / Concept Drift) do các phương thức gian lận mới xuất hiện.


Kết luận

Đồ án/Khóa luận tốt nghiệp đã giải quyết thành công bài toán phân lớp dữ liệu mất cân bằng trong phát hiện gian lận thẻ tín dụng thông qua đề xuất thuật toán cải tiến Add-Border-SMOTE. Kết quả thực nghiệm trên các tập dữ liệu thực tế đã chứng minh tính ưu việt vượt trội của giải pháp với chỉ số G-mean đạt 93.87% và độ nhạy đạt 90.24%, vượt xa các phương pháp truyền thống. Đây là đóng góp có giá trị khoa học vững chắc và tính ứng dụng thực tiễn cao, hỗ trợ trực tiếp các ngân hàng và tổ chức tài chính số nâng cao năng lực bảo mật và giảm thiểu rủi ro vận hành.