THUẬT TOÁN DỰ ĐOÁN HÀNH VI NGƯỜI DÙNG
Các thuật toán giúp dự đoán hành vi, tìm similar users, và recommend pages tiếp theo
I) COSINE SIMILARITY (ĐO LƯỜNG ĐỘ TƯƠNG ĐỒNG)
🎯 Mục đích
Cosine Similarity TRẢ LỜI:
- User A và User B có giống nhau không?
- Tìm users có hành vi tương tự
- Recommend dựa trên similar users
1. Nguyên lý
Đo độ tương đồng giữa hai vectors bằng góc giữa chúng (không phải khoảng cách):
CosineSimilarity(A, B) = cos(θ) = (A · B) / (||A|| ||B||)
= Σ(Ai × Bi) / (√Σ(Ai²) × √Σ(Bi²))
Trong đó:
- A · B: Tích vô hướng (dot product)
- ||A||: Độ dài (magnitude) của vector A
- θ: Góc giữa hai vectors
Kết quả:
- cos(θ) = 1 → Hoàn toàn tương đồng (cùng hướng)
- cos(θ) = 0 → Độc lập (vuông góc)
- cos(θ) = -1 → Hoàn toàn đối lập (ngược hướng)
2. Quy trình áp dụng
Bước 1: Tạo vector hành vi cho mỗi user
User_i = [count_Profile,
count_DealHot,
count_Voucher,
count_Mission,
...]
Ví dụ:
User A: [10, 50, 30, 5, 2, 15, 8]
User B: [8, 45, 28, 3, 1, 12, 6]
Bước 2: Tính Cosine Similarity
- Tính similarity cho tất cả cặp users
- Tạo similarity matrix (2666 × 2666)
Bước 3: Tìm similar users
- Với mỗi user, sort theo similarity score
- Lấy top N users có similarity cao nhất
3. Đặc điểm quan trọng
Magnitude-Invariant (không bị ảnh hưởng độ lớn):
User A: [1, 2, 3]
User B: [10, 20, 30] (B = 10 × A)
Cosine(A, B) = 1.0 (perfect similarity)
→ Tốt cho user behavior: User vào 5 lần vs 50 lần nhưng cùng tỷ lệ → similar
So với Euclidean Distance:
Euclidean Distance(A, B) = 33.7 (rất lớn!)
Cosine Similarity(A, B) = 1.0 (perfect!)
→ Cosine tốt hơn khi quan tâm xu hướng chứ không phải số lượng tuyệt đối
4. Ứng dụng
Tìm Similar Users
- User A vào: DealHot(50), Voucher(30), Profile(10)
- Tìm users có pattern tương tự
- Top 5 similar users: B, C, D, E, F
Collaborative Filtering Recommendation
Logic:
- Tìm 20 users giống User A nhất
- Đếm pages mà 20 users đó hay vào
- Loại bỏ pages User A đã vào
- Recommend top 5 pages còn lại
Ví dụ:
User A đã vào: {DealHot, Voucher}
Similar users thích: {DealHot, Voucher, FlashsaleEmbedded, Mission}
→ Recommend: {FlashsaleEmbedded, Mission}
User-User Clustering
- Dùng similarity matrix làm input
- Hierarchical Clustering dựa trên (1 - similarity)
5. Ưu điểm
- ✅ Dễ triển khai - Công thức đơn giản
- ✅ Không bị ảnh hưởng magnitude - Focus vào xu hướng
- ✅ Phù hợp sparse data - Nhiều 0 không ảnh hưởng nhiều
- ✅ Interpretable - Similarity [0, 1] dễ hiểu
6. Nhược điểm
- ❌ Không hiểu semantic - "Mission" và "CreateMission" được coi là độc lập
- ❌ Cold start problem - Users mới (ít data) → similarity không chính xác
- ❌ Memory intensive - Matrix 2666 × 2666 = 7.1M cells
- ❌ Popularity bias - Similar users đều thích pages phổ biến
II) TF-IDF (TERM FREQUENCY - INVERSE DOCUMENT FREQUENCY)
🎯 Mục đích
TF-IDF TRẢ LỜI:
- Page nào quan trọng để phân biệt user?
- Page phổ biến vs page đặc trưng?
Không phải thuật toán, là kỹ thuật Feature Engineering
1. Công thức
TF-IDF(t, d) = TF(t, d) × IDF(t)
TF (Term Frequency):
TF(t, d) = (số lần term t xuất hiện trong document d) / (tổng số terms trong document d)
IDF (Inverse Document Frequency):
IDF(t) = log(tổng số documents / số documents chứa term t)
2. Áp dụng cho User Behavior
Mapping:
| NLP | User Behavior |
|-----|---------------|
| Term (từ) | Page (DealHot, Mission,...) |
| Document | User (mỗi user = 1 document) |
| Corpus | Tất cả users |
Ví dụ tính toán:
User A: [DealHot: 50, Profile: 10, Voucher: 30, Mission: 5]
Total visits: 95
TF(DealHot, UserA) = 50/95 = 0.53
IDF(DealHot) = log(2666 / 2274) = 0.16 (85% users vào → IDF thấp)
IDF(RequestPassword) = log(2666 / 1) = 7.89 (chỉ 1 user → IDF cao)
TF-IDF(DealHot, UserA) = 0.53 × 0.16 = 0.08 (THẤP - page phổ biến)
TF-IDF(RequestPassword, UserA) = 0.25 × 7.89 = 1.97 (CAO - page rare)
3. Ý nghĩa
TF-IDF cao = Page quan trọng để phân biệt user
Các trường hợp:
-
TF cao, IDF cao → Quan trọng
- User vào page này nhiều VÀ page này rare
- Đặc trưng duy nhất của user
-
TF cao, IDF thấp → Ít quan trọng
- User vào page này nhiều NHƯNG ai cũng vào
- Không phân biệt user này với users khác
-
TF thấp, IDF cao → Trung bình
- User vào page rare 1 lần
-
TF thấp, IDF thấp → Không quan trọng
- Noise
4. Ứng dụng
Feature Weighting cho Clustering
- Raw counts: DealHot(50), Mission(5) → DealHot dominates
- TF-IDF: DealHot(0.08), Mission(0.35) → Mission quan trọng hơn!
- K-Means trên TF-IDF features → clusters tốt hơn
Tìm Đặc trưng của User
User 664402 - Top 3 pages by TF-IDF:
1. RequestPassword: 1.97 (rare page, đặc trưng)
2. UpdateProfile: 0.89
3. Mission: 0.35
→ User này có behavior độc đáo (vào RequestPassword)
Kết hợp với Cosine Similarity
- TF-IDF vectors thay vì raw counts
- Cosine similarity trên TF-IDF → better recommendations
5. Ưu điểm
- ✅ Giảm nhiễu - Loại bỏ ảnh hưởng của pages phổ biến
- ✅ Tìm unique behaviors - Highlight pages đặc trưng
- ✅ Better clustering - Features tốt hơn raw counts
- ✅ Scalable - Tính toán nhanh
6. Nhược điểm
- ❌ Không phải thuật toán - Chỉ là feature engineering
- ❌ Bỏ qua thứ tự thời gian - Bag-of-words approach
- ❌ Giả định independence - Pages không liên quan nhau
- ❌ Sparse high-dim data - 40 pages × 2666 users nhiều 0
III) SEQUENTIAL PATTERN MINING (KHÁM PHÁ CHUỖI HÀNH VI)
🎯 Mục đích
Sequential Mining TRẢ LỜI:
- User đi theo đường nào? (user journey)
- Sau page A, user thường vào page B?
- Dự đoán next page?
- Funnel nào có drop-off cao?
Khác biệt chính:
Association Rules: {A, B, C} - không quan tâm thứ tự
Sequential Mining: <A → B → C> - giữ nguyên thứ tự thời gian
1. Nguyên lý
Tìm chuỗi patterns xuất hiện thường xuyên theo thứ tự thời gian:
<Profile → DealHot → Voucher>
≠
<DealHot → Profile → Voucher>
Subsequence:
S = <A, B, C, D, E>
S' = <B, D> là subsequence của S (bỏ qua A, C, E nhưng giữ thứ tự)
Support của Sequential Pattern:
Support(<Profile → Mission → CreateMission>)
= số users có subsequence này / tổng users
= 450 / 2666 = 0.169 (16.9%)
2. Các thuật toán
AprioriAll
- Tìm frequent itemsets
- Mở rộng dần thành sequences
- Nhược điểm: Chậm với data lớn
GSP (Generalized Sequential Pattern)
- Tương tự AprioriAll
- Tối ưu hơn bằng pruning
- Ưu điểm: Nhanh hơn AprioriAll
PrefixSpan ⭐ (Đề xuất)
- Divide and Conquer + Prefix Projection
- Ưu điểm: Rất nhanh, không generate quá nhiều candidates
- Phù hợp nhất cho piggi_metrics.csv
Cách hoạt động PrefixSpan:
1. Scan database, tìm frequent 1-sequences: <Profile>, <DealHot>, <Mission>
2. Với mỗi prefix (vd: <Profile>):
- Tạo projected database (chỉ chứa phần sau <Profile>)
- Đệ quy tìm patterns: <Profile, DealHot>, <Profile, Mission>,...
3. Repeat cho đến khi không còn frequent patterns
3. Kết quả ví dụ
Frequent Sequential Patterns:
<Profile → DealHot> : 35% users (930 users)
<Mission → CreateMission> : 25% users (666 users)
<DealHot → Voucher> : 18% users (480 users)
<Loyalty → RankMember → LoyaltyHistory> : 12% users (320 users)
Long Patterns (user journeys):
<Profile → Mission → CreateMission → Mission> : 16.9% users
<DealHot → Voucher → DealHot → FlashsaleEmbedded> : 14.3% users
<Loyalty → RankMember → LoyaltyHistory → Loyalty> : 11.2% users
4. Phân loại User theo Pattern
| Pattern | User Type | Behavior |
|---|---|---|
<DealHot → FlashsaleEmbedded> |
Quick Buyer | Mua nhanh, không so sánh |
<Profile → DealHot → Voucher → DealHot → Voucher> |
Browser | So sánh nhiều trước khi quyết định |
<Mission → CreateMission → MissionSwap → Mission> |
Mission Player | Thích features mission, loop |
<Loyalty → RankMember → LoyaltyHistory → LoyaltyProduct> |
Loyalty Enthusiast | Quan tâm điểm thưởng, ranking |
5. Ứng dụng
a) Dự đoán Next Page
Input: User vừa vào <Profile → DealHot>
Phân tích từ patterns:
- Pattern
<Profile → DealHot → Voucher>: 35% support - Pattern
<Profile → DealHot → FlashsaleEmbedded>: 25% support - Pattern
<Profile → DealHot → DealHot>: 20% support (quay lại)
Dự đoán tiếp theo:
- 40% khả năng → Voucher
- 25% khả năng → FlashsaleEmbedded
- 20% khả năng → DealHot (quay lại)
Action: Recommend/highlight 3 pages này
b) Tối ưu UX (Drop-off Detection)
Phát hiện:
Nhiều users dừng tại: <Profile → DealHot> (không đi tiếp)
Phân tích:
- UX chưa tốt (khó tìm Voucher?)
- CTA (Call-to-Action) chưa rõ ràng
- Deal chưa hấp dẫn
Action: Redesign flow từ DealHot → Voucher
- Thêm prominent button "Xem Voucher"
- A/B testing different layouts
c) Funnel Analysis
Conversion Funnel:
Profile → DealHot → Voucher → FlashsaleEmbedded → Order
100% → 70% → 50% → 30% → 15%
Insights:
- Drop-off lớn nhất: Voucher → FlashsaleEmbedded (20% drop)
- Drop-off thứ 2: FlashsaleEmbedded → Order (15% drop)
Action:
- Cải thiện transition Voucher → FlashsaleEmbedded
- Simplify order process
d) Personalized Recommendation
Pattern của User A:
<Mission → MissionSwap → Mission> (lặp lại nhiều lần)
Recommendation strategy:
- ✅ Ưu tiên hiển thị Mission mới
- ✅ Push notification về Mission events
- ❌ Giảm hiển thị Deal/Voucher (user không quan tâm)
6. Ưu điểm
- ✅ Capture thứ tự hành vi - Hiểu user journey đầy đủ
- ✅ Tìm được pattern dài - Multi-step behaviors
- ✅ Dự đoán next action tốt - Based on historical patterns
- ✅ Phát hiện funnel bottlenecks - Drop-off analysis
- ✅ Actionable insights - UX improvements
7. Nhược điểm
- ❌ Tính toán nặng - Với dữ liệu lớn, chậm
- ❌ Cần nhiều data - Patterns có ý nghĩa cần support cao
- ❌ Không capture duration - Thời gian giữa các bước
- ❌ Dễ sinh quá nhiều patterns - Cần filter, min_support cao
- ❌ Không biết WHY - Chỉ biết WHAT (patterns) không biết WHY
8. Session Definition (quan trọng!)
Vấn đề:
- User vào Profile lúc 9h sáng
- User vào DealHot lúc 10h tối
- Có phải 1 sequence
<Profile → DealHot>không?
Giải pháp: Định nghĩa Session
Session gap = 30 phút
Events cách nhau > 30 phút → sessions khác nhau
Ví dụ:
User 664402:
- 09:00 Profile
- 09:05 Mission
- 09:10 CreateMission
[gap > 30 min]
- 22:00 DealHot
→ 2 sequences:
Session 1: <Profile → Mission → CreateMission>
Session 2: <DealHot>
IV) ASSOCIATION RULES (APRIORI / FP-GROWTH)
🎯 Mục đích
Association Rules TRẢ LỜI:
- Page A và B có xuất hiện cùng nhau không?
- Nếu user vào A, khả năng vào B là bao nhiêu?
- Pages nào nên đặt gần nhau trong UI?
Khác Sequential Mining:
- Không quan tâm thứ tự - {A, B} = {B, A}
- Chỉ quan tâm co-occurrence
1. Metrics
Support (Độ hỗ trợ)
Support(A → B) = (số users vào cả A và B) / (tổng số users)
Ý nghĩa: Tỷ lệ % users có cả A và B
Confidence (Độ tin cậy)
Confidence(A → B) = (users vào cả A và B) / (users vào A) = P(B|A)
Ý nghĩa: Trong số users vào A, bao nhiêu % vào B
Lift (Độ nâng)
Lift(A → B) = Confidence(A → B) / Support(B) = P(B|A) / P(B)
Ý nghĩa:
- Lift > 1: Positive correlation (A và B xuất hiện cùng nhiều hơn ngẫu nhiên)
- Lift = 1: A và B độc lập
- Lift < 1: Negative correlation (A và B xuất hiện cùng ít hơn ngẫu nhiên)
2. Ví dụ cụ thể
Rule 1:
{DealHot} → {Voucher}
Support = 0.30 (30% users vào cả 2)
Confidence = 0.70 (70% users vào DealHot cũng vào Voucher)
Lift = 2.3
Giải thích:
- 30% tất cả users vào cả DealHot và Voucher
- Trong số users vào DealHot, 70% vào Voucher
- Lift = 2.3 > 1 → Correlation mạnh
Action:
- Đặt Voucher button gần DealHot
- Recommend Voucher khi user xem DealHot
Rule 2:
{Mission} → {CreateMission}
Support = 0.25 (25% users)
Confidence = 0.51 (51%)
Lift = 2.8
Action:
- Đặt CreateMission button prominent trong Mission page
- 51% users vào Mission quan tâm CreateMission
3. Thuật toán
Apriori
Nguyên lý Apriori:
Nếu itemset I không frequent (Support < min_support),
thì mọi superset của I cũng không frequent.
Ví dụ:
{Mission, CreateMission} Support = 0.05 < 0.1 (min_support)
→ {Mission, CreateMission, Profile} cũng < 0.1
→ Không cần kiểm tra (pruning)
Nhược điểm: Sinh nhiều candidates, chậm
FP-Growth (Frequent Pattern Growth)
Ưu điểm:
- Dùng FP-Tree (compressed representation)
- Không cần generate candidates
- Nhanh hơn Apriori nhiều
Phù hợp: Dữ liệu lớn, nhiều items
4. Ứng dụng
UI/UX Design
Rule: {DealHot} → {Voucher} (confidence 70%, lift 2.3)
Action:
- Đặt Voucher tab ngay cạnh DealHot tab
- "Xem thêm Voucher" button trong DealHot page
Cross-Selling
Rule: {Mission} → {CreateMission, MissionSwap}
Action:
- Bundle recommendation
- "Users also interested in..." section
Page Layout Optimization
Rules với Lift cao:
- {DealHot, Voucher} → Đặt gần nhau
- {Mission, CreateMission} → Đặt gần nhau
- {Loyalty, RankMember} → Đặt gần nhau
5. Ưu điểm
- ✅ Tự động tìm patterns - Không cần define trước
- ✅ Phát hiện correlations ẩn - Unexpected patterns
- ✅ Actionable insights - Trực tiếp apply vào UI/UX
- ✅ Dễ giải thích - Rules IF-THEN rõ ràng
6. Nhược điểm
- ❌ Sinh quá nhiều rules - Cần filter bằng Lift, min_confidence
- ❌ Không hiểu thứ tự - {A, B} không biết A trước hay B trước
- ❌ Chỉ co-occurrence, không causation - Correlation ≠ Causation
- ❌ Sparse data - Users vào ít pages → ít frequent itemsets
📊 SO SÁNH TỔNG QUAN
| Thuật toán | Trả lời câu hỏi | Giữ thứ tự? | Dự đoán next? | Complexity | Output |
|---|---|---|---|---|---|
| Cosine Similarity | Users giống nhau? | ❌ | ⚠️ Gián tiếp | O(n² × d) | Similarity matrix |
| TF-IDF | Page nào quan trọng? | ❌ | ❌ | O(n × d) | Feature vectors |
| Sequential Mining | User journey? Next page? | ✅ | ✅✅ | Cao | Patterns + probabilities |
| Association Rules | A và B cùng xuất hiện? | ❌ | ⚠️ | Trung bình | IF-THEN rules |
🚀 ỨNG DỤNG THỰC TẾ
Recommendation System (Collaborative Filtering)
Workflow:
- TF-IDF → Loại bỏ pages phổ biến, tập trung vào preferences độc đáo
- Cosine Similarity → Tìm top 20 users tương tự
- Recommend pages mà similar users thích nhưng user hiện tại chưa vào
Ví dụ:
- User A: Profile(10), Mission(30), CreateMission(15)
- Similar users: B, C, D cũng thích Mission
- Users B, C, D còn thích: MissionSwap
- → Recommend MissionSwap cho User A
Next Page Prediction
Workflow:
- Sequential Mining → Phát hiện patterns
<A → B → C> - Association Rules → Tính correlations giữa pages
- Kết hợp cả 2 → Dự đoán với confidence scores
Ví dụ:
- User vừa vào: Profile → DealHot
- Sequential:
<Profile → DealHot → Voucher>xuất hiện 40% cases - Association: {DealHot} → {Voucher} có confidence 70%
- → Dự đoán: User sẽ vào Voucher tiếp theo (high confidence)
UX/UI Optimization
Workflow:
- Sequential Mining → Hiểu user journeys đầy đủ
- Funnel Analysis → Tìm điểm drop-off cao
- Association Rules → Pages nào nên đặt gần nhau
Ví dụ:
- Funnel: Profile → DealHot → Voucher → Order
- Drop-off lớn nhất: DealHot → Voucher (30% users rời đi)
- Association Rule: {DealHot} → {Voucher} có lift cao
- → Action: Làm nổi bật "Xem Voucher" button trong DealHot page
Personalization
Workflow:
- Cosine Similarity → Phân loại user vào nhóm tương đồng
- TF-IDF → Tìm unique preferences
- Sequential → Dự đoán hành động tiếp theo
- Personalize: Homepage, notifications, emails theo từng nhóm
Ví dụ:
- User A: TF-IDF cho thấy thích Mission (score cao)
- Pattern:
<Mission → CreateMission → Mission>(lặp lại) - → Homepage: Hiển thị Mission content ở top
- → Push notification: Mission events, competitions
- → Email: Mission-related updates
Top comments (0)