Case study phát hiện gian lận bằng SNA và watchtower
Phân tích gian lận trên mạng xã hội: phân tích đơn giản, hai hạn chế, phương pháp tháp canh với chấm điểm kết quả tiêu cực và bậc nghi ngờ.
KhóThuật toán ~60 phút
Ôn lại trước khi học
Giới thiệu
Bài này học phát hiện gian lận trên đồ thị giao dịch. Bạn dùng nó để tóm đường dây ẩn sau nhiều trung gian.
Kiến thức cần nhớ
Gian lận trên mạng
- Là hành vi trục lợi ẩn trong dòng giao dịch hợp lệ.
- Dấu vết là quan hệ bất thường: cụm dày, tài khoản mới nối nhau.
- Ví dụ đời thường: như nhóm nick ảo cùng rút khuyến mãi rồi chuyển về 1 mối.
- Phân tích mạng xã hội soi đúng quan hệ này.
Phân tích đơn giản và 2 hạn chế
- Dựng đồ thị, tính centrality, khoanh đỉnh vượt ngưỡng rồi điều tra tay.
- Dễ giải thích vì mỗi cảnh báo kèm hình và con số.
- Hạn chế 1 là nhiễu: tổng đài lương thiện cũng centrality cao.
- Hạn chế 2 là thiếu lan truyền: gian lận qua nhiều trung gian thì lọt.
Phương pháp tháp canh
- Cắm tháp ở đỉnh đã xác minh gian lận hoặc sạch.
- Để độ nghi ngờ lan qua các cạnh cho lân cận.
- Càng gần tháp xấu qua đường ngắn thì càng đáng ngờ.
- Ví dụ đời thường: như ở gần ổ dịch thì nguy cơ cao hơn.
Điểm tiêu cực và bậc nghi ngờ
- Điểm tiêu cực: từng bị phạt, từng bị khiếu nại đúng thì điểm cao.
- Sự kiện cũ giảm trọng số theo thời gian.
- Bậc nghi ngờ chuẩn hóa 0 tới 1 để so giữa các nút.
- Nút nhiều giao dịch được hiệu chỉnh theo bậc để khỏi oan.
Ví dụ
- Input: mạng 5 đỉnh thẳng hàng, đầu xác minh gian lận. Output: nghi ngờ giảm dần từ đầu tới cuối.
- Giải thích: càng xa tháp xấu thì độ lan truyền càng yếu.
- Input: tổng đài nối 20 đỉnh sạch, không sự kiện xấu. Output: hạng thấp hơn đỉnh kề trực tiếp tháp gian lận.
- Giải thích: chuẩn hóa theo bậc cứu được tài khoản giao dịch nhiều.
💻 Bài tập
Ngôn ngữ: Python 3 với NumPy (được dùng networkx để đọc và vẽ đồ thị). Nộp vào day-072/.
Bài 1: Dựng đồ thị giao dịch
File transactions.csv có cột from_account,to_account,amount,timestamp. Tự sinh dữ liệu giả:
- 500 tài khoản thường, giao dịch ngẫu nhiên.
- 1 cụm gian lận 12 tài khoản mới mở, chuyển tiền vòng tròn cho nhau với số tiền tròn.
- 3 tài khoản "tổng đài" hợp pháp (ví dụ ví thanh toán) có rất nhiều giao dịch.
| Hàm | Yêu cầu |
|---|---|
build_graph(df) | Đồ thị vô hướng có trọng số là tổng tiền |
flag_by_centrality(G, top=20) | Trả 20 tài khoản có degree và betweenness cao nhất |
Chỉ ra: bao nhiêu tài khoản gian lận nằm trong 20 cảnh báo, bao nhiêu tổng đài bị báo oan.
Bài 2: Watchtower lan truyền nghi ngờ
def watchtower(G, bad: set, good: set, alpha: float = 0.5, iters: int = 50) -> dict:
"""Điểm nghi ngờ 0..1. Tháp xấu cố định 1, tháp sạch cố định 0.
Mỗi vòng: s(v) = (1 - alpha) * s0(v) + alpha * trung_bình_có_trọng_số(s(u) với u kề v),
chia trọng số cạnh cho bậc của u để nút bậc cao không lan quá mạnh."""
Đường thẳng 5 đỉnh, đỉnh 0 xấu -> điểm giảm dần từ 0 tới 4
Tách rời khỏi mọi tháp -> điểm giữ nguyên giá trị ban đầu (0)
Chạy trên dữ liệu Bài 1 với 2 tài khoản gian lận đã biết làm tháp xấu. In top 20 và so với Bài 1.
Bài 3: Điểm tiêu cực theo thời gian (nâng cao)
- Mỗi tài khoản có danh sách sự kiện
(loại, ngày): bị phạt (+5), khiếu nại đúng (+2). Điểm mỗi sự kiện giảm nửa sau mỗi 90 ngày. - Kết hợp:
final = 0.6 * watchtower + 0.4 * negative_normalized. - Đánh giá bằng precision@20 và recall@20 so với nhãn gian lận thật. So 3 cách: chỉ centrality, chỉ watchtower, kết hợp.
- Vẽ đồ thị con quanh 5 tài khoản điểm cao nhất, tô màu theo điểm.
✅ Tiêu chí hoàn thành
- Test mẫu đường thẳng 5 đỉnh pass.
- Bảng precision@20 / recall@20 cho 3 cách có số thật.
- Có hình đồ thị con tô màu theo điểm.
- Giải thích được vì sao tổng đài bị báo oan ở Bài 1 và cách Bài 2 giảm điều đó.
❓ Câu hỏi ôn tập
- Vì sao phân tích mạng hợp để bắt gian lận?
- Hai hạn chế của centrality đơn thuần là gì?
- Tháp canh lan truyền nghi ngờ thế nào?
- Điểm tiêu cực và bậc nghi ngờ là gì?
🌕 Bạn đã hoàn thành ngày 72. Làm hết bài tập phía trên rồi sang ngày tiếp theo.