Nhân quả 7 — Uplift Modeling

13 thg 7, 2026 2 lượt xem
#bi
#causal-inference
#cate
#targeting
#uplift-modeling

Từ "tác động trung bình" sang "tác động của TỪNG người"

Xuyên suốt series này ta đo ATE (Average Treatment Effect) — hiệu ứng nhân quả trung bình của một can thiệp. Nhưng trong thực chiến ngân hàng, biết "gửi ưu đãi làm tăng chi tiêu trung bình 3%" là chưa đủ để ra quyết định. Câu hỏi thật là: gửi cho AI? Vì ngân sách hữu hạn, một chiến dịch chỉ gọi được vài chục nghìn khách trong hàng triệu, và ưu đãi có chi phí thật (giảm biên lợi nhuận, tốn nhân sự tổng đài).

ATE giả định ai cũng phản ứng như nhau — điều gần như không bao giờ đúng. Con số 3% trung bình có thể được tạo ra bởi 10% khách phản ứng cực mạnh (+30%) trong khi 90% còn lại chẳng nhúc nhích, hoặc thậm chí một số người phản ứng ngược. Uplift modeling (mô hình hoá tác động cá thể, còn gọi incremental modeling, net lift) chính là chuyển câu hỏi từ:

"Can thiệp này tác động trung bình bao nhiêu?"

sang

"Từng cá thể phản ứng với can thiệp ra sao — và ta nên can thiệp vào ai?"

Đây là bài toán ước lượng hiệu ứng KHÔNG ĐỒNG NHẤT (heterogeneous treatment effect) — hay chính xác hơn là CATE (Conditional Average Treatment Effect): tác động nhân quả có điều kiện theo đặc điểm X của khách.

$$\tau(x) = E[Y(1) - Y(0) \mid X = x]$$

Trong đó $Y(1)$ là outcome nếu khách được can thiệp, $Y(0)$ là outcome nếu không, và $\tau(x)$ là uplift — mức tác động riêng cho nhóm khách có đặc điểm $x$. Nhắc lại bài toán phản thực (counterfactual) từ bài tổng quan: với mỗi khách ta chỉ quan sát được MỘT trong hai trạng thái, nên uplift $\tau(x)$ không bao giờ đo trực tiếp được ở cấp cá thể — ta phải ước lượng nó theo nhóm giống nhau.

Bốn nhóm khách theo phản ứng với can thiệp

Cách trực giác nhất để hiểu vì sao uplift quan trọng là phân khách thành bốn nhóm dựa trên hành vi trong hai kịch bản (có can thiệp / không can thiệp):

NhómKhông can thiệpCó can thiệpUpliftNên can thiệp?
PersuadablesKhông hành độngHành độngDương caoĐÚNG mục tiêu — vàng
Sure thingsHành độngHành động≈ 0KHÔNG — lãng phí
Lost causesKhông hành độngKhông hành động≈ 0KHÔNG — lãng phí
Do-not-disturbs (sleeping dogs)Hành độngKhông hành độngÂmTUYỆT ĐỐI KHÔNG — hại
  • Persuadables (nhóm có thể thuyết phục): chỉ hành động NẾU được can thiệp. Đây là nơi duy nhất tạo giá trị gia tăng thật — mục tiêu vàng của mọi chiến dịch.
  • Sure things (chắc chắn rồi): hành động dù có hay không được can thiệp. Gửi ưu đãi cho họ là cho không — tốn chi phí mà không đổi được gì (họ vốn đã mua/đã ở lại).
  • Lost causes (vô vọng): không hành động dù thế nào. Can thiệp cũng vô ích.
  • Sleeping dogs / do-not-disturbs (chó đang ngủ, đừng đánh thức): can thiệp làm HẠI. Ví dụ kinh điển: một cuộc gọi "giữ chân" hay email "chúng tôi thấy bạn ít dùng thẻ" lại nhắc khách nhớ ra họ đang cân nhắc rời đi, khiến họ khó chịu và bỏ đi thật. Uplift ÂM — can thiệp phản tác dụng.

Mô hình response/propensity thông thường (dự đoán "ai sẽ mua") gộp persuadables và sure things vào cùng một rổ "khả năng mua cao" và target cả hai. Uplift modeling tách chúng ra — chỉ target persuadables, loại sure things (đằng nào cũng mua) và tránh sleeping dogs. Đây là khác biệt cốt lõi ta sẽ quay lại ở cuối bài.

Vì sao cần dữ liệu THÍ NGHIỆM

Để học được uplift, dữ liệu bắt buộc phải chứa cả hai trạng thái ở cấp nhóm: những khách được can thiệp và những khách không — với việc gán nhóm không thiên lệch. Nói cách khác, uplift modeling gần như luôn xây trên nền một RCT (randomized controlled trial): có nhóm treatment và nhóm control ngẫu nhiên (xem bài về RCT).

Lý do: uplift là hiệu $\tau(x) = E[Y \mid \text{treat}, x] - E[Y \mid \text{control}, x]$. Nếu việc ai được can thiệp bị chi phối bởi confounder (ví dụ nhân viên chỉ gọi những khách "trông có vẻ sẽ ở lại"), thì phần chênh giữa hai nhóm lẫn lộn giữa tác động thật và thiên lệch chọn mẫu — mô hình học ra uplift sai. Randomization đảm bảo hai nhóm tương đương trước can thiệp, nên chênh outcome quy được về can thiệp.

Có thể ước lượng CATE từ dữ liệu quan sát (bằng matching/propensity, causal forest kết hợp propensity score) nhưng khi đó phải giả định không có confounder ẩn — rủi ro cao. Chuẩn mực công nghiệp: chạy một chiến dịch pilot có nhóm control giữ lại (holdout), thu dữ liệu, rồi train uplift model để triển khai chiến dịch chính.

Các phương pháp ước lượng uplift

Không có label "uplift" trực tiếp trong dữ liệu (vì mỗi khách chỉ ở một nhánh), nên mọi phương pháp đều là cách khéo léo để suy ra hiệu số hai kịch bản. Nhóm phổ biến gọi là meta-learners — biến bài toán nhân quả thành bài toán hồi quy/phân loại quen thuộc rồi bọc thêm logic.

T-learner (Two-model)

Cách trực tiếp nhất: train HAI mô hình riêng trên hai tập dữ liệu.

  • Mô hình $\mu_1(x)$: học trên nhóm treatment, dự đoán $E[Y \mid \text{treat}, x]$.
  • Mô hình $\mu_0(x)$: học trên nhóm control, dự đoán $E[Y \mid \text{control}, x]$.
  • Uplift dự đoán: $\hat{\tau}(x) = \mu_1(x) - \mu_0(x)$.

Đơn giản, dùng bất kỳ thuật toán nào (xem cây/ensemble). Nhược điểm: uplift là hiệu của hai mô hình xấp xỉ riêng lẻ — sai số hai bên cộng dồn, và tín hiệu uplift (thường nhỏ) dễ bị "nuốt" bởi tín hiệu outcome (thường lớn) mà mỗi mô hình dồn sức học.

S-learner (Single-model)

Train MỘT mô hình duy nhất trên toàn bộ dữ liệu, với cờ treatment T là một feature:

$$\hat{\tau}(x) = \mu(x, T{=}1) - \mu(x, T{=}0)$$

Tiết kiệm dữ liệu, nhưng rủi ro: nếu thuật toán coi feature T "không quan trọng" (uplift nhỏ so với các yếu tố khác), nó có thể bỏ qua T, cho ra uplift ≈ 0 cho mọi người. S-learner hay bị bias về 0.

X-learner

Cải tiến T-learner, đặc biệt tốt khi hai nhóm lệch cỡ (thường control nhỏ). Ý tưởng: sau khi có $\mu_0, \mu_1$, quy nạp uplift cá thể trên từng nhóm bằng phản thực ước lượng, rồi train mô hình thứ hai để làm mượt và kết hợp qua propensity score. Mạnh khi persuadables hiếm hoặc dữ liệu mất cân bằng.

Uplift tree / uplift forest

Thay vì bọc mô hình có sẵn, họ cây này sửa tiêu chí chia nhánh: cây quyết định thường chia để phân tách outcome; uplift tree chia để tối đa hoá chênh lệch uplift giữa các nhánh (dùng distributional divergence như KL, Euclid, Chi-square giữa phân bố treatment và control ở mỗi nút). Kết quả: mỗi lá là một nhóm khách có uplift đồng nhất. Trực tiếp tối ưu đúng đại lượng ta cần.

Causal forest

Khái quát của random forest cho ước lượng CATE (Wager & Athey). Mỗi cây được xây "honest" (tách mẫu để chọn split và để ước lượng), trung bình nhiều cây cho $\hat{\tau}(x)$ kèm khoảng tin cậy. Đây là công cụ mạnh nhất khi muốn ước lượng uplift chính xác kèm suy luận thống kê, không chỉ xếp hạng.

Đánh giá uplift: KHÔNG dùng accuracy

Đây là chỗ nhiều team sai. Không thể chấm uplift model bằng accuracy/AUC như phân loại thường, vì ta không có ground-truth uplift cho từng cá thể (không quan sát được cả hai trạng thái). Phải đánh giá theo nhóm.

Uplift curve và Qini curve

Ý tưởng: sắp xếp toàn bộ khách trong tập test theo điểm uplift dự đoán giảm dần. Rồi với từng phần trăm dân số được nhắm (top 10%, 20%...), tính uplift tích luỹ thực tế = (tỷ lệ hành động của nhóm treatment trong nhóm này) − (tỷ lệ của nhóm control trong nhóm này), nhân với cỡ nhóm.

  • Uplift curve: trục X = % dân số được nhắm; trục Y = số hành động tăng thêm (incremental). Mô hình tốt dồn tất cả uplift dương lên đầu → đường cong tăng nhanh rồi phẳng (đã vét hết persuadables), thậm chí đi xuống ở đuôi (bắt đầu chạm sleeping dogs uplift âm).
  • Qini curve: biến thể chuẩn hoá phổ biến hơn, điều chỉnh theo chênh cỡ hai nhóm treatment/control. Đường chéo là baseline "nhắm ngẫu nhiên" (uplift phân bố đều).

Qini coefficient

Tương tự Gini/AUC nhưng cho uplift: diện tích giữa đường Qini của mô hình và đường ngẫu nhiên, chuẩn hoá. Càng cao càng tốt. Đây là chỉ số tổng hợp duy nhất để so hai uplift model với nhau. Lưu ý: một mô hình có Qini cao xếp hạng persuadables tốt, chưa chắc ước lượng độ lớn uplift chính xác — hai mục tiêu khác nhau (ranking vs calibration).

Đường trên (dốc, vượt đường chéo, đạt đỉnh ~60% rồi tụt) là mô hình tốt: vét persuadables trước, cuối cùng chạm sleeping dogs làm tổng uplift giảm — tín hiệu nên DỪNG can thiệp ở đỉnh (~60%), không nhắm cả 100%.

Uplift ≠ Response/Propensity — sai lầm phổ biến khi target

Sai lầm kinh điển trong marketing/CRM: dùng mô hình propensity (dự đoán "ai có khả năng mua/rời cao") để chọn người nhắm, và gọi đó là targeting. Nhưng:

Dự đoán ai sẽ mua ≠ dự đoán ai sẽ mua NHỜ can thiệp.

Propensity model xếp sure things lên top (họ có xác suất mua cao nhất!) → chiến dịch dồn ưu đãi cho người đằng nào cũng mua, đốt ngân sách mà uplift ≈ 0, còn persuadables (xác suất mua nền thấp nhưng uplift cao) bị bỏ sót vì bị xếp hạng thấp. Đây là lý do nhiều chiến dịch "chấm điểm khách xịn" báo cáo conversion cao nhưng ROI thật (so với holdout) lại tệ.

Tiêu chíResponse/PropensityUplift
Đại lượng dự đoán$P(Y{=}1 \mid x)$$P(Y{=}1\mid \text{treat},x) - P(Y{=}1\mid \text{control},x)$
Dữ liệu cầnChỉ nhóm treatment (hoặc lịch sử)Bắt buộc treatment + control
Ai lên topSure thingsPersuadables
Đo bằngAUC/accuracyQini / uplift curve
Rủi roĐốt ngân sách vào sure things, đánh thức sleeping dogs(đúng mục tiêu)

Use case thực tế

Bối cảnh (minh hoạ, số liệu giả định). NCB có 500.000 khách thẻ tín dụng có dấu hiệu giảm hoạt động, đứng trước rủi ro churn. Team CRM muốn chạy chiến dịch giữ chân: gọi điện + tặng miễn phí phí thường niên năm sau. Ngân sách chỉ đủ cho 80.000 cuộc (chi phí ~150k VND/khách gồm ưu đãi + nhân sự).

Bước 1 — Pilot RCT. Chọn ngẫu nhiên 40.000 khách, chia 50/50: 20.000 treatment (được gọi + ưu đãi), 20.000 control (không đụng đến). Sau 3 tháng đo outcome $Y$ = còn hoạt động thẻ (không churn).

Bước 2 — Train uplift. Dùng feature: RFM (xem phân khúc RFM), số dư, lịch sử giao dịch, kênh, khiếu nại gần đây. Chạy X-learner + causal forest, chọn theo Qini trên tập validation. Qini coefficient 0.28 (so với 0 nếu random).

Bước 3 — Phát hiện quan trọng. Phân tích uplift curve cho 4 nhóm:

NhómƯớc lượng %Uplift giữ chânHành động
Persuadables~18%+22 điểm %Gọi — ưu tiên
Sure things~35%~+1 điểm %Bỏ qua (tự ở lại)
Lost causes~30%~0Bỏ qua
Sleeping dogs~17%−9 điểm %TUYỆT ĐỐI không gọi

Nhóm sleeping dogs: khách đã âm thầm định ở lại, cuộc gọi "chúng tôi thấy bạn ít dùng thẻ" khiến họ nhớ ra ý định huỷ → churn tăng. Nếu dùng propensity churn model thông thường, chính nhóm này (điểm churn nền cao) sẽ bị xếp top và bị gọi nhiều nhất — phản tác dụng.

Bước 4 — Triển khai. Sắp 500.000 khách theo $\hat{\tau}(x)$, gọi 80.000 khách top uplift dương (toàn persuadables + phần trên của biên). So với chiến dịch cũ nhắm theo điểm churn: cùng 80.000 cuộc gọi nhưng số khách thực sự được giữ nhờ can thiệp tăng ~2,3 lần, và loại bỏ ~13.000 cuộc gọi vào sleeping dogs vốn đang gây churn. Đây chính là logic đằng sau Next Best Action — chọn hành động tối ưu cho từng khách, không rải đại trà.

Có thể chuẩn bị dữ liệu nền cho phân tích outcome trực tiếp trong warehouse, ví dụ đếm khách còn giao dịch theo tháng:

-- ▶ Chạy được
SELECT date_trunc('month', t.created_at) AS thang,
       COUNT(DISTINCT a.customer_id) AS so_khach_hoat_dong
FROM transactions t
JOIN accounts a ON a.id = t.account_id
GROUP BY 1
ORDER BY 1;

(Bảng thí nghiệm/nhãn treatment nằm ở hệ CRM riêng, không thuộc sandbox; block trên chỉ minh hoạ khâu lấy outcome hoạt động.)

Ghi nhớ

  • Uplift = CATE: ước lượng tác động can thiệp ở cấp cá thể $\tau(x) = E[Y(1)-Y(0)\mid x]$, không phải ATE trung bình. Trả lời "can thiệp vào AI", không chỉ "tác động bao nhiêu".
  • Bốn nhóm: chỉ persuadables (uplift dương) đáng nhắm; sure thingslost causes lãng phí; sleeping dogs uplift ÂM — can thiệp gây hại, phải loại.
  • Bắt buộc dữ liệu thí nghiệm: cần nhóm treatment + control (RCT) để học uplift; suy từ dữ liệu quan sát phải giả định không confounder ẩn.
  • Phương pháp: T-learner (2 mô hình), S-learner (1 mô hình + cờ T, hay bias về 0), X-learner (tốt khi lệch nhóm), uplift tree/forest (chia nhánh theo divergence), causal forest (CATE + khoảng tin cậy).
  • Đánh giá KHÔNG bằng accuracy: dùng uplift curve, Qini curve, Qini coefficient. Không có ground-truth uplift cá thể → chấm theo nhóm.
  • Uplift ≠ propensity: "ai sẽ mua" ≠ "ai mua NHỜ can thiệp". Propensity đẩy sure things lên top → đốt ngân sách. Đây là sai lầm targeting phổ biến nhất.
  • Ứng dụng ngân hàng: targeting chiến dịch, retention (giữ persuadable, tránh đánh thức sleeping dogs), tối ưu ngân sách can thiệp — dừng nhắm ở đỉnh Qini curve, không rải 100%.

Bài viết liên quan

Phân biệt ước lượng điểm và ước lượng khoảng, cách xây khoảng tin cậy (CI) bằng margin of error z*·SE / t*·SE, đánh đổi mức 90/95/99%, và cách DIỄN GIẢI ĐÚNG khoảng tin cậy (95% CI không phải xác suất tham số nằm trong khoảng). Có CI cho trung bình và cho tỷ lệ, ảnh hưởng của cỡ mẫu, cùng ví dụ ngân hàng về tỷ lệ nợ xấu và số dư trung bình.

13 thg 7, 2026 4

Kimball dimensional modeling: bảng fact/dimension, star vs snowflake, grain, và Slowly Changing Dimension.

13 thg 7, 2026 3

Khối OLAP, các thao tác drill-down/roll-up/slice & dice/pivot, OLAP vs OLTP và ROLAP/MOLAP/HOLAP.

13 thg 7, 2026 3

Từ nguồn dữ liệu qua ETL/ELT vào Data Warehouse, Data Mart đến dashboard; staging, ODS, batch vs streaming.

13 thg 7, 2026 3