DEV Community

Hoàng Mạnh Khiêm
Hoàng Mạnh Khiêm

Posted on

THUẬT TOÁN DỰ ĐOÁN HÀNH VI NGƯỜI DÙNG

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²))
Enter fullscreen mode Exit fullscreen mode

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,
          ...]
Enter fullscreen mode Exit fullscreen mode

Ví dụ:

User A: [10, 50, 30, 5, 2, 15, 8]
User B: [8, 45, 28, 3, 1, 12, 6]
Enter fullscreen mode Exit fullscreen mode

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)
Enter fullscreen mode Exit fullscreen mode

→ 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!)
Enter fullscreen mode Exit fullscreen mode

→ 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:

  1. Tìm 20 users giống User A nhất
  2. Đếm pages mà 20 users đó hay vào
  3. Loại bỏ pages User A đã vào
  4. 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}
Enter fullscreen mode Exit fullscreen mode

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)
Enter fullscreen mode Exit fullscreen mode

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)
Enter fullscreen mode Exit fullscreen mode

IDF (Inverse Document Frequency):

IDF(t) = log(tổng số documents / số documents chứa term t)
Enter fullscreen mode Exit fullscreen mode

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)
Enter fullscreen mode Exit fullscreen mode

3. Ý nghĩa

TF-IDF cao = Page quan trọng để phân biệt user

Các trường hợp:

  1. 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
  2. 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
  3. TF thấp, IDF cao → Trung bình

    • User vào page rare 1 lần
  4. 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
Enter fullscreen mode Exit fullscreen mode

→ 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
Enter fullscreen mode Exit fullscreen mode

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>
Enter fullscreen mode Exit fullscreen mode

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ự)
Enter fullscreen mode Exit fullscreen mode

Support của Sequential Pattern:

Support(<Profile → Mission → CreateMission>) 
= số users có subsequence này / tổng users
= 450 / 2666 = 0.169 (16.9%)
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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)
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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)
Enter fullscreen mode Exit fullscreen mode

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%
Enter fullscreen mode Exit fullscreen mode

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)
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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>
Enter fullscreen mode Exit fullscreen mode

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)
Enter fullscreen mode Exit fullscreen mode

Ý 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)
Enter fullscreen mode Exit fullscreen mode

Ý 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)
Enter fullscreen mode Exit fullscreen mode

Ý 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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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.
Enter fullscreen mode Exit fullscreen mode

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)
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

Cross-Selling

Rule: {Mission} → {CreateMission, MissionSwap}

Action:
- Bundle recommendation
- "Users also interested in..." section
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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:

  1. TF-IDF → Loại bỏ pages phổ biến, tập trung vào preferences độc đáo
  2. Cosine Similarity → Tìm top 20 users tương tự
  3. 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:

  1. Sequential Mining → Phát hiện patterns <A → B → C>
  2. Association Rules → Tính correlations giữa pages
  3. 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:

  1. Sequential Mining → Hiểu user journeys đầy đủ
  2. Funnel Analysis → Tìm điểm drop-off cao
  3. 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:

  1. Cosine Similarity → Phân loại user vào nhóm tương đồng
  2. TF-IDF → Tìm unique preferences
  3. Sequential → Dự đoán hành động tiếp theo
  4. 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)