Quy công chuyển đổi
Bạn sẽ học được
- Quy công (attribution) là gì và vì sao không có mô hình đúng cho mọi câu hỏi.
- Năm mô hình quy công phổ biến và cách chúng chia tín dụng.
- Cửa sổ quy công ảnh hưởng thế nào tới kết quả.
- Viết SQL cho last-touch và linear.
- Vì sao tổng quy công từ các nền tảng vượt doanh thu thật.
Khái niệm cốt lõi
Một khách thường chạm nhiều điểm trước khi mua: thấy quảng cáo, tìm kiếm, mở email, rồi gõ thẳng tên miền. Quy công là cách chia công lao của đơn hàng cho các điểm chạm đó.
Không có mô hình nào "đúng" tuyệt đối. Mỗi mô hình trả lời một câu hỏi khác nhau:
| Mô hình | Chia tín dụng | Trả lời câu hỏi |
|---|---|---|
| First-touch | 100% cho điểm đầu | Kênh nào mang người đến lần đầu? |
| Last-touch | 100% cho điểm cuối | Kênh nào chốt đơn? |
| Last non-direct | 100% cho điểm cuối không phải trực tiếp | Kênh nào đóng góp gần nhất có thể đo? |
| Linear | Chia đều mọi điểm | Kênh nào xuất hiện nhiều? |
| Position-based | 40% đầu, 40% cuối, 20% giữa | Cân bằng khám phá và chốt |
| Time-decay | Nhiều hơn cho điểm gần | Điểm nào gần quyết định nhất? |
Ví dụ một hành trình
Một khách mua đơn 1.000.000 đồng sau bốn điểm chạm:
Ngày 1 Facebook (paid social)
Ngày 3 Google Search (paid search)
Ngày 5 Email (newsletter)
Ngày 7 Direct — mua hàngCùng một đơn, mỗi mô hình cho kết quả khác:
| Kênh | First-touch | Last-touch | Last non-direct | Linear |
|---|---|---|---|---|
| 1.000.000 | 0 | 0 | 250.000 | |
| 0 | 0 | 0 | 250.000 | |
| 0 | 0 | 1.000.000 | 250.000 | |
| Direct | 0 | 1.000.000 | 0 | 250.000 |
Đây là lý do "kênh nào tốt nhất" luôn phải kèm "theo mô hình nào". Báo cáo first-touch sẽ khen Facebook; báo cáo last-touch sẽ khen Direct; báo cáo last non-direct sẽ khen Email. Cả ba đều đúng theo định nghĩa của nó.
Cửa sổ quy công
Cửa sổ quyết định điểm chạm nào được tính:
- Click 7 ngày: chỉ tính click trong 7 ngày trước đơn.
- View 1 ngày: tính cả lượt hiển thị trong 1 ngày trước đơn.
- Không giới hạn: mọi điểm chạm từ trước đến nay — hiếm dùng vì quá rộng.
Cửa sổ dài làm nhiều đơn được quy cho quảng cáo hơn. Đổi cửa sổ giữa hai kỳ làm chuỗi thời gian gãy khúc mà không có thay đổi thực.
SQL: last non-direct
WITH cham AS (
SELECT
t.order_id,
t.channel,
t.touched_at,
ROW_NUMBER() OVER (
PARTITION BY t.order_id
ORDER BY t.touched_at DESC
) AS rn
FROM touchpoints t
JOIN orders o ON o.id = t.order_id
WHERE t.touched_at BETWEEN o.created_at - INTERVAL '30 days' AND o.created_at
AND t.channel <> 'direct'
)
SELECT channel, COUNT(*) AS so_don
FROM cham
WHERE rn = 1
GROUP BY 1
ORDER BY 2 DESC;ROW_NUMBER xếp các điểm chạm của mỗi đơn từ gần nhất về xa nhất; lấy rn = 1 sau khi loại direct cho ra last non-direct.
SQL: linear
SELECT
channel,
SUM(1.0 / COUNT(*) OVER (PARTITION BY order_id)) AS tin_dung
FROM touchpoints t
JOIN orders o ON o.id = t.order_id
WHERE t.touched_at BETWEEN o.created_at - INTERVAL '30 days' AND o.created_at
GROUP BY channel;Mỗi điểm chạm nhận 1 / số điểm chạm của đơn. Cửa sổ COUNT(*) OVER (PARTITION BY order_id) đếm số điểm chạm trong cùng đơn; SUM theo kênh cộng dồn phần tín dụng.
Muốn loại direct khỏi mẫu số, thêm AND channel <> 'direct' vào WHERE — nhưng khi đó tổng tín dụng không còn bằng doanh thu, đúng theo thiết kế.
Vấn đề nền tảng tự báo cáo
Mỗi nền tảng quảng cáo đều muốn nhận công:
- Facebook báo 800 đơn.
- Google báo 700 đơn.
- Email báo 400 đơn.
- Tổng: 1.900 đơn.
- Số đơn thực tế trong cùng kỳ: 1.200.
Tổng lớn hơn thực tế vì cùng một đơn được nhiều nền tảng nhận. Đây không phải lỗi của nền tảng — mỗi bên dùng cửa sổ và mô hình riêng, thường rộng tay.
Quy tắc: không cộng số liệu từ nhiều nền tảng để ra doanh thu. Muốn so sánh, dùng một nguồn dữ liệu duy nhất (warehouse của bạn) và một mô hình thống nhất.
Chọn mô hình nào
| Câu hỏi | Mô hình hợp lý |
|---|---|
| Kênh nào mang khách mới? | First-touch |
| Kênh nào chốt đơn? | Last non-direct |
| Kênh nào cần có mặt để khách biết đến? | Position-based hoặc first-touch |
| Phân bổ ngân sách theo hiệu quả biên | Không dùng quy công — dùng thử nghiệm tăng dần |
| Đo tác động thật của quảng cáo | Holdout / incrementality |
Điểm cuối quan trọng: quy công là mô tả tương quan, không phải đo nhân quả. Nó cho biết kênh nào có mặt trong hành trình, không cho biết đơn hàng có xảy ra nếu thiếu kênh đó.
Lỗi thường gặp
- Đổi mô hình giữa hai báo cáo: số liệu không so sánh được.
- Cộng nhiều nền tảng: tổng vượt doanh thu thật.
- Bỏ qua direct: last non-direct có thể thổi phồng kênh trả phí.
- Dùng quy công để cắt ngân sách: cắt kênh "last-touch thấp" có thể làm mất nguồn khám phá.
- Không loại trùng điểm chạm: một lần hiển thị bị ghi nhiều bản làm linear chia sai.
- Cửa sổ khác nhau giữa các kênh: so sánh không công bằng.
Thực hành
- Với hành trình bốn điểm chạm ở trên, tính tín dụng theo position-based 40/20/40.
- Viết truy vấn last-touch không loại direct.
- Viết truy vấn linear có loại direct.
- So sánh tổng đơn từ ba nền tảng với số đơn thật.
- Viết một đoạn giải thích cho sếp vì sao ba báo cáo cho ba con số khác nhau.
Lỗi thường gặp
| Triệu chứng | Nguyên nhân | Cách sửa |
|---|---|---|
| Direct chiếm 40% đơn | Thiếu UTM, last-touch | Kiểm tra gắn thẻ, dùng last non-direct |
| Kênh khám phá bị đánh giá thấp | Chỉ dùng last-touch | Báo cáo thêm first-touch |
| Tổng vượt doanh thu | Cộng nhiều nền tảng | Một nguồn, một mô hình |
| Email "thắng" mọi báo cáo | Mô hình thiên vị | Đọc kèm mô hình khác |
| Số liệu đổi khi đổi công cụ | Cửa sổ khác nhau | Chốt cửa sổ trong metric spec |
| Kết luận nhân quả | Quy công là tương quan | Dùng holdout |
Tóm tắt
- Quy công chia tín dụng; mỗi mô hình trả lời một câu hỏi khác nhau.
- Cửa sổ quy công phải chốt và giữ nguyên khi so sánh.
- Last non-direct và linear viết được bằng
ROW_NUMBERvàCOUNT(*) OVER. - Không cộng số liệu nhiều nền tảng để ra doanh thu.
- Quy công không đo nhân quả; muốn biết tác động thật phải thử nghiệm.
Use ← → to move between lessons