File size: 7,030 Bytes
36e5951
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
---
title: Amazon Product Classifier
sdk: docker
app_file: src/app.py
---

# Amazon Product Classifier

**Dự đoán danh mục sản phẩm Amazon bằng NLP & Học Máy – từ dữ liệu chưa có nhãn**

[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/drive/1vQbgzVixv8uaIGvLJACGdlxaM2jeR4vL?usp=sharing)

---

##  Giới thiệu

Hệ thống học máy pipeline hoàn chỉnh, giải quyết bài toán **gán nhãn tự động và phân loại sản phẩm** khi dữ liệu gốc **không có cột danh mục (category)**. Toàn bộ quá trình từ xử lý thô, tạo nhãn thông minh, trích xuất đặc trưng đa chiều cho đến huấn luyện & triển khai đều được xây dựng từ đầu.

- **Bài toán:** Phân loại đa lớp (Multi-class Classification)
- **Nguồn dữ liệu:** [Amazon Products Sales Dataset 42k Items (2025)](https://www.kaggle.com/datasets/ikramshah512/amazon-products-sales-dataset-42k-items-2025?select=amazon_products_sales_data_uncleaned.csv) từ Kaggle.  
   **Đặc điểm cốt lõi:** Dữ liệu chỉ bao gồm tên sản phẩm, giá, đánh giá,... **hoàn toàn không có nhãn danh mục**. Điều này biến bài toán trở thành tự động tạo ra “ground truth” trước khi có thể huấn luyện mô hình phân loại.

- ** 10 danh mục mục tiêu do tôi định nghĩa** (dựa trên phân tích thị trường và đặc trưng sản phẩm):
  1. `Laptops`
  2. `Phones`
  3. `Audio`
  4. `Cameras`
  5. `TV & Display`
  6. `Computers & Accessories`
  7. `Other Electronics`
  8. `Wearables`
  9. `Gaming`
  10. `Home & Kitchen`

- ** Phân tích chi tiết (code, biểu đồ, bản đồ phân cụm, ma trận nhầm lẫn, feature importance,...):** [Google Colab Notebook](https://colab.research.google.com/drive/1vQbgzVixv8uaIGvLJACGdlxaM2jeR4vL?usp=sharing)

> **Điểm đặc biệt của bài toán**
> - **Không có nhãn mục tiêu** – toàn bộ quá trình gán nhãn được thiết kế thủ công bằng luật và embedding AI, sau đó lan truyền nhãn bằng học máy.
> - **Mất cân bằng lớp nghiêm trọng** – đồ điện tử áp đảo, các lớp như `Wearables`, `Home & Kitchen` vô cùng ít mẫu. Hệ thống dùng SMOTE, class weighting và cơ chế cảnh báo độ tin cậy để đảm bảo công bằng và an toàn cho người dùng.

---

##  Pipeline tổng thể

| Giai đoạn | Nội dung chính | Kỹ thuật / Công nghệ |
|---|---|---|
| **1. Gán nhãn tự động** | Tạo nhãn từ dữ liệu không có target | Keyword Matching, Sentence-BERT (`all-MiniLM-L6-v2`) + Cosine Similarity, Ensemble, Label Propagation (Logistic Regression) |
| **2. Làm sạch & lọc bẫy** | Loại bỏ sản phẩm “gây nhiễu” | `trap_word_filter` (bảo hành, ốp lưng, sticker…), `price_sanity_check` |
| **3. Trích xuất đặc trưng** | Số hóa mọi tín hiệu từ sản phẩm | TF‑IDF, TruncatedSVD (LSA), PCA, Social Proof, Brand Tier, Word Count, Discount %, Log Transform |
| **4. Tiền xử lý & chọn lọc** | Giảm chiều, loại bỏ đa cộng tuyến | `StandardScaler`, VIF, `np.hstack` |
| **5. Huấn luyện & tối ưu** | Xây dựng mô hình phân loại cuối cùng | LightGBM, Optuna (TPE, SQLite), `StratifiedKFold`, SMOTE, `class_weight='balanced'`, Early Stopping |
| **6. Triển khai** | Ứng dụng thực tế | Gradio, `ClassificationModel`, ngưỡng tin cậy linh hoạt |

---

##  Công nghệ sử dụng – Chi tiết

###  Xử lý ngôn ngữ & Gán nhãn
- **Sentence-BERT** (`all-MiniLM-L6-v2`): embedding 384 chiều cho tên sản phẩm, so khớp với tập nhãn ứng viên qua **Cosine Similarity**.
- **Keyword Matching (Expert Rules):** bộ từ khóa chuyên biệt cho 10 ngành hàng, hỗ trợ regex linh hoạt (`flexible_kw_match`) bắt cả số nhiều, viết liền hay cách.
- **Ensemble Keyword + AI:** kết hợp có trọng số (alpha/beta) giữa độ tin cậy từ khóa và similarity score.
- **Label Propagation:** dùng Logistic Regression huấn luyện trên các mẫu tự tin (≥60%), lan truyền nhãn cho phần còn lại với ngưỡng xác suất ≥45%.

###  Làm sạch & Logic nghiệp vụ
- **`trap_word_filter`:** phát hiện các cụm như *protection plan, warranty, case for, guide, sticker* → đưa về nhóm `Other Electronics` hoặc `Other Category`.
- **`price_sanity_check`:** dùng logic giá để sửa nhãn (VD: Laptop giá dưới $80 → không thể là laptop).

###  Trích xuất đặc trưng (Feature Engineering)
- **TF‑IDF** (5000 features, 1‑2 grams) → **TruncatedSVD (256 chiều)**: nắm bắt ngữ nghĩa ẩn từ văn bản.
- **PCA** trên embedding (giữ 90% variance): giảm chiều, chống overfitting.
- **Social Proof:** `log(rating × number_of_reviews)` – đại diện cho độ uy tín.
- **Brand Tier:** mã hóa thương hiệu 3 mức (0‑thường, 1‑top brand, 2‑premium) dựa trên danh sách thương hiệu được định nghĩa sẵn.
- **Word Count, Discount %, Log Transform:** các đặc trưng thống kê giúp mô hình nhận diện kiểu sản phẩm.

### Cân bằng dữ liệu & Chọn biến
- **SMOTE** (Synthetic Minority Over-sampling): sinh mẫu tổng hợp trong mỗi fold khi cross‑validation.
- **Class Weight = 'balanced'** trong LightGBM.
- **VIF (Variance Inflation Factor):** loại bỏ tuần tự biến có VIF > 5 để giảm đa cộng tuyến, giữ lại tập đặc trưng ổn định.

###  Mô hình & Tối ưu
- **LightGBM Classifier** (Gradient Boosting): mô hình chính, hỗ trợ GPU, huấn luyện trên dữ liệu lớn.
- **Optuna** (TPE Sampler, SQLite storage): tối ưu `learning_rate`, `num_leaves`, `max_depth`, `reg_alpha`, `reg_lambda`, `subsample`, `colsample_bytree` với 50 trials trong 4 giờ.
- **Stratified K‑Fold (k=5) + Early Stopping:** đảm bảo đánh giá khách quan và dừng đúng lúc.

### Triển khai
- **Gradio:** giao diện web trực quan.
- **Cảnh báo độ tin cậy:** tự động hiển thị cảnh báo nếu xác suất cao nhất < ngưỡng (50%) để cảnh báo người dùng khỏi các dự đoán kém chắc chắn.

---

## Kết quả huấn luyện

| Chỉ số | Giá trị |
|---|---|
| **Overall Accuracy** | ~96% |
| **Balanced Accuracy** | ~0.94 |
| **Macro F1‑Score** | ~0.956 |

> Mặc dù điểm số tổng rất cao, các lớp thiểu số vẫn là thách thức. Cơ chế cảnh báo khi độ tin cậy thấp giúp sản phẩm trở nên đáng tin cậy hơn.

---

##  Hướng dẫn cài đặt & Chạy Demo

1. **Yêu cầu:** Python 3.9+
2. **Clone repository:**
   ```bash
   git clone https://github.com/PhTee2412/Amazon_Classifier

   cd Amazon_Classifier

---

- **Tên**: Phương Thảo
- **Email**: phtee2412@gmail.com