Feature Engineering in Fraud Detection
Stripe Radar bóc mặt nạ gian lận trong 100ms
Công ty nào đang ứng dụng Xây dựng đặc trưng?
Bạn mua hàng online, nhập số thẻ rồi bấm Thanh toán. Trong chưa đầy 100ms, Stripe Radar (công cụ chống gian lận của Stripe) đã chấm điểm hơn 1.000 feature để quyết định cho qua hay chặn lại.
Bí quyết không nằm ở model phức tạp. Nó nằm ở cách kỹ sư Stripe biến vài trường raw data của một giao dịch (số thẻ, IP, số tiền, thời gian) thành hàng trăm tín hiệu có ý nghĩa: velocity feature (tốc độ dùng thẻ), device fingerprint (dấu vân tay thiết bị), network graph (mối liên kết giữa các thực thể). Đây chính là feature engineering ở quy mô toàn cầu.
Vấn đề công ty cần giải quyết
Stripe xử lý hàng trăm tỷ đô-la thanh toán mỗi năm. Chỉ khoảng 0,1% là gian lận, nhưng con số tuyệt đối đã lên tới hàng tỷ đô-la. Mỗi giao dịch chỉ cung cấp vài trường raw data: số thẻ, số tiền, IP, thời gian, ít metadata kèm theo.
Vấn đề lõi nằm ở chỗ: từ vài trường đó, làm sao nặn ra tín hiệu đủ mạnh để tách giao dịch thật ra khỏi giao dịch gian? Kẻ gian liên tục đổi chiêu: VPN, thẻ ảo, danh tính giả. Dữ liệu lại mất cân bằng cực đoan. Đoán hợp lệ cho tất cả thì độ chính xác vẫn lên 99,9%, nhưng độ phủ bằng 0, vô dụng.
Độ chính xác 99,9% có thể đi kèm độ phủ bằng 0. Cần feature mạnh hơn cả model.
Mọi feature phải tính được real-time, không cho phép chậm.
Feature hôm nay mạnh, mai đã cũ. Phải cập nhật đều.
Cách Xây dựng đặc trưng giải quyết vấn đề
Velocity feature (đặc trưng tốc độ). Stripe tính: thẻ này đã thử bao nhiêu giao dịch trong 10 phút, 1 giờ, 24 giờ qua? User hợp lệ thường quẹt 1 đến 2 lần mỗi ngày, còn kẻ gian thử hàng chục lần liên tiếp (card testing). Velocity tóm ngay cái pattern bất thường đó. Stripe có hệ thống tính velocity real-time trên toàn mạng lưới.
Device fingerprint (dấu vân tay thiết bị). Stripe.js thu resolution, font, timezone, WebGL renderer, ngôn ngữ hệ thống. Tổ hợp các tín hiệu này tạo ra một dấu vân tay gần như duy nhất. Kẻ gian có đổi danh tính nhưng vẫn giữ chiếc laptop cũ. Vân tay vẫn lộ.
Network graph feature (đồ thị mạng lưới). Stripe nối mọi giao dịch trên toàn mạng: thẻ A đã dùng ở merchant B, từ thiết bị C, với email D. Thẻ mới quẹt từ cùng thiết bị với thẻ đã bị chargeback thì cảnh báo bật ngay. Đây là lợi thế quy mô của Stripe: hàng triệu merchant chia sẻ chung tầm nhìn mạng lưới.
Aggregated risk scoring. Hơn 1.000 feature được đưa vào model ML, mỗi giao dịch nhận về một risk score. Rủi ro cao thì chặn hoặc yêu cầu 3D Secure. Toàn bộ pipeline chạy trong dưới 100ms. Stripe báo cáo hiệu suất phát hiện tăng hơn 20% mỗi năm nhờ liên tục thêm feature mới.
Thử tự tay
Dưới đây là phiên bản tinh gọn của ý tưởng. Bạn có 8 giao dịch (4 gian lận, 4 hợp lệ) và 4 feature để bật tắt. Hãy quan sát AUC nhích lên thế nào khi bạn bật thêm từng feature. Đó cũng chính là trải nghiệm của kỹ sư Stripe khi thêm một cột mới vào pipeline.
Bảng bên dưới có 8 giao dịch, 4 gian lận (đỏ) và 4 hợp lệ (xanh). Hãy bật tắt từng feature rồi nhìn điểm AUC (khả năng tách biệt gian và hợp) thay đổi. Khi chưa bật feature nào, model không có tín hiệu nào để bám: AUC khoảng 0.5, tức là đoán bừa.
Chưa bật feature nào. Model đoán bừa.
Giao dịch xếp theo risk, từ cao xuống thấp
Grab VN
78.000đ · 8h · vel=1
risk 10%
ElectroShop.ru
6.900.000đ · 3h · vel=14
risk 10%
Tiki
350.000đ · 19h · vel=1
risk 10%
GiftCard-Depot
4.500.000đ · 2h · vel=22
risk 10%
Shopee
1.200.000đ · 13h · vel=2
risk 10%
CryptoExch.io
9.800.000đ · 4h · vel=31
risk 10%
VNPay
120.000đ · 11h · vel=1
risk 10%
LuxuryBag.tk
7.200.000đ · 1h · vel=18
risk 10%
Một vụ gian lận thật, từng feature bóc dần lớp mặt nạ
Theo dõi một giao dịch trông sạch sẽ bị hệ thống tóm gọn qua bốn bước feature khác nhau.
Thẻ Visa quẹt 6,9 triệu cho một shop điện tử ở Nga. Số tiền hợp lý với đồ công nghệ, thẻ còn hạn, 3D Secure không yêu cầu. Nhìn raw data đơn thuần, nhiều ngân hàng sẽ cho qua.
Bạn là kỹ sư Stripe, cần thêm 1 feature nữa để tóm các vụ gian lận dùng thẻ quà (gift card). Feature nào nhiều khả năng hữu ích nhất?
Code mẫu: tính velocity feature với pandas
import pandas as pd
df = df.sort_values(["card_id", "ts"])
df["vel_10m"] = (
df.groupby("card_id")["ts"]
.rolling("10min")
.count()
.reset_index(0, drop=True)
)
df["vel_1h"] = (
df.groupby("card_id")["ts"]
.rolling("1h")
.count()
.reset_index(0, drop=True)
)Pandas rolling theo cửa sổ thời gian. Ở production, Stripe dùng stream processing (Kafka + Flink) để tính real-time, nhưng logic vẫn giống.
Code mẫu: ghép feature vào risk score
from sklearn.preprocessing import StandardScaler
from sklearn.ensemble import GradientBoostingClassifier
features = [
"vel_10m", "vel_1h",
"amount_vs_user_avg",
"ip_distance_km",
"is_unusual_hour",
"device_flagged_count",
]
X = StandardScaler().fit_transform(df[features])
model = GradientBoostingClassifier(n_estimators=300).fit(X, y)
df["risk_score"] = model.predict_proba(X)[:, 1]Con số thật
- Phân tích hơn 1.000 đặc trưng cho mỗi giao dịch trong dưới 100 mili-giây [1]
- Ngăn chặn hàng tỷ đô-la gian lận, bảo vệ hàng triệu doanh nghiệp trên toàn cầu [4]
- Cải thiện hiệu suất phát hiện gian lận hơn 20% mỗi năm nhờ cập nhật feature liên tục [1]
- Tốc độ phát hành mô hình tăng gấp 3 lần nhờ tự động hoá pipeline huấn luyện và đánh giá [1]
Nếu không có Xây dựng đặc trưng, app sẽ ra sao?
Nếu bỏ bước feature engineering, mô hình chỉ thấy raw data: số thẻ, số tiền, IP. Một giao dịch 6,9 triệu từ thẻ mới trông giống hệt giao dịch hợp lệ. Nhưng velocity feature tiết lộ: thẻ này đã thử 14 lần trong 10 phút. Device fingerprint cho biết: cùng laptop đã dùng 8 thẻ bị chargeback. Network graph nối lại: email này từng xuất hiện cùng thiết bị bị chặn ở merchant khác.
Feature thông minh biến raw data vô hồn thành tín hiệu có ý nghĩa. Giống như thám tử không chỉ nhìn hiện trường mà còn kiểm tra tiền sử, mối quan hệ, hành vi quá khứ. Đây là lý do cùng một mô hình ML, người có feature tốt hơn luôn thắng.
- Raw data có thể chỉ có 5 trường, nhưng feature phái sinh có thể lên đến hàng nghìn. Velocity, fingerprint, graph là ba kiểu mạnh nhất cho fraud.
- Mọi feature phải tính được trong real-time (< 100 ms). Tính nhanh là ràng buộc khắc nghiệt nhưng bắt buộc.
- Lợi thế quy mô (dữ liệu toàn mạng) tạo ra những feature mà merchant đơn lẻ không thể có. Đó là lý do Stripe chiến thắng.
Kiểm tra nhanh
Kiểm tra hiểu biết
Vì sao Stripe phải tự nặn velocity feature thay vì dựa vào cột có sẵn trong giao dịch?