Giới thiệu dự án

Thương mại điện tử (E-commerce) trong ngành bán lẻ mỹ phẩm và chăm sóc cá nhân chứng kiến tốc độ tăng trưởng vượt bậc với quy mô thị trường toàn cầu đạt hơn 570 tỷ USD, trong đó kênh mua sắm qua thiết bị di động (m-commerce) chiếm trên 70% tổng lượng giao dịch. Tuy nhiên, mỹ phẩm là phân khúc đặc thù có độ phân hóa sản phẩm cực kỳ phức tạp dựa trên các yếu tố: loại da (da dầu, da khô, da nhạy cảm, da hỗn hợp), kết cấu sản phẩm (gel, cream, serum, lotion), thương hiệu, thành phần hoạt tính và xuất xứ. Người tiêu dùng thường đối mặt với tình trạng "ngộ độc thông tin" (information overload), dẫn đến tỷ lệ bỏ rơi giỏ hàng trung bình lên đến 68.8% khi không thể tự chọn lựa sản phẩm phù hợp.

Đề tài "Ứng dụng bán mỹ phẩm trực tuyến tích hợp Recommendation System – Be Beauty" được nghiên cứu và phát triển bởi sinh viên Bùi Thanh Phú dưới sự hướng dẫn của ThS. Thái Thụy Hàn Uyển tại Khoa Công nghệ Phần mềm, Trường Đại học Công nghệ Thông tin (ĐHQG-HCM). Dự án tập trung giải quyết bài toán cốt lõi: Số hóa hoàn chỉnh quy trình kinh doanh mỹ phẩm đa kênh kết hợp cá nhân hóa trải nghiệm khách hàng thông qua hệ thống gợi ý thông minh (Recommendation System).

flowchart LR
    A[Khách hàng] -->|Tương tác / Tìm kiếm / Lọc da| B[Flutter Mobile Client]
    B -->|Xác thực / Đặt hàng / Realtime Data| C[Firebase Backend Service]
    B -->|Request Gợi ý Cá nhân hóa| D[Python Flask ML API]
    D -->|TF-IDF + Cosine Similarity| E[(Vector Không gian Đặc trưng)]
    E -->|Top-N Items Recommender| D
    D -->|JSON Response| B

Mục tiêu của đề tài

  1. Phát triển ứng dụng di động đa nền tảng (Cross-platform Mobile Application): Xây dựng ứng dụng hoàn chỉnh cho cả hai hệ điều hành iOS và Android bằng Flutter framework, tối ưu hóa giao diện người dùng (UI/UX) chuẩn Material Design và Cupertino.
  2. Nghiên cứu và triển khai Hệ thống Gợi ý (Recommendation System): Tích hợp thuật toán Lọc dựa trên nội dung (Content-based Filtering) sử dụng mô hình TF-IDF và độ đo Cosine Similarity để phân tích hành vi và thuộc tính sản phẩm nhằm đưa ra đề xuất Top-N chính xác.
  3. Xây dựng hệ thống quản trị và giao tiếp thời gian thực: Đồng bộ hóa dữ liệu danh mục, kho hàng, trạng thái vòng đời đơn hàng 7 bước và hệ thống nhắn tin trực tiếp (In-app Chat) giữa Khách hàng và Quản trị viên (Admin) qua cơ sở dữ liệu thời gian thực.

Phương pháp tiếp cận và Phạm vi

  • Phương pháp tiếp cận: Kiến trúc hướng dịch vụ tách rời (Decoupled Microservice Architecture), kết hợp giữa client di động hiệu năng cao, hệ thống Backend-as-a-Service (BaaS) từ Google Firebase và một RESTful Machine Learning Engine viết bằng Python Flask.
  • Phạm vi hệ thống: Ứng dụng hỗ trợ 29 Use Cases chi tiết bao gồm 2 phân hệ người dùng độc lập: Khách hàng (Client) và Chủ cửa hàng (Admin), bao phủ toàn bộ chu trình từ xem thông tin, lọc theo loại da, nhận gợi ý, đặt hàng, tính cước vận chuyển tự động theo khoảng cách địa lý đến hậu mãi, đánh giá (Rating/Review).

Phân tích và thiết kế giải pháp

Phân tích hiện trạng

Thị trường ứng dụng bán mỹ phẩm hiện nay tồn tại khoảng cách lớn giữa các nền tảng thương mại điện tử tổng hợp và các ứng dụng bán lẻ chuyên biệt:

Tiêu chí phân tích Nền tảng TMĐT tổng hợp (Shopee, Lazada) Ứng dụng bán lẻ truyền thống Giải pháp Be Beauty
Cá nhân hóa theo loại da/kết cấu Thấp (chủ yếu theo từ khóa tìm kiếm tổng quát) Rất thấp (chỉ hiển thị theo danh mục cố định) Rất cao (Lọc đa chiều theo Loại da, Kết cấu, Thương hiệu)
Cơ chế gợi ý sản phẩm Dựa trên Lọc cộng tác (Collaborative) quy mô lớn, Cold-start cao Không có hoặc gán nhãn thủ công Content-based Filtering với ma trận TF-IDF thuộc tính mỹ phẩm
Độ trễ cập nhật đơn hàng Phụ thuộc vào polling/webhook phức tạp Đồng bộ định kỳ (chậm trễ) Realtime Database Event-Driven (< 100ms)
Tích hợp Chat trực tiếp Hệ thống chat sàn trung gian Không tích hợp hoặc chuyển sang SMS/Zalo In-app Chat thời gian thực tích hợp trực tiếp Firebase

Ma trận ưu tiên yêu cầu người dùng (MoSCoW Prioritization)

  • Must-have: Xác thực tài khoản đa phương thức (Email, Google, Facebook), Tra cứu/Lọc sản phẩm theo danh mục và loại da, Động cơ gợi ý Content-based Top-N, Quản lý giỏ hàng và chốt đơn, Quản trị sản phẩm/thương hiệu cho Admin.
  • Should-have: Tính toán phí vận chuyển tự động qua Geolocation Maps API, Hệ thống chat realtime Client-Admin, Theo dõi trạng thái đơn hàng 7 giai đoạn.
  • Could-have: Module đánh giá/rating trực tiếp trên sản phẩm đã mua, Quản lý nhiều địa chỉ giao hàng.
  • Won't-have (giai đoạn này): Tích hợp cổng thanh toán trực tuyến quốc tế (Visa/Mastercard Gateway), Hệ thống gợi ý Hybrid đa luồng.

Thiết kế hệ thống

Technology Stack & Versions

  • Mobile Frontend: Flutter SDK v3.3.8, Dart SDK v2.18.4 (Kiến trúc State Management linh hoạt, AOT Compilation ra mã máy ARM).
  • Backend-as-a-Service: Google Firebase (Firebase Realtime Database, Firebase Authentication, Firebase Cloud Storage).
  • Machine Learning Engine: Python v3.9.12, Flask Micro-framework v2.2.2, Scikit-learn v1.1.3, NumPy v1.23.4, Pandas v1.5.1, Gunicorn WSGI Server.
  • Location Services: Google Geocoding API & Location Service SDK.
graph TD
    subgraph Client Layer
        A1[Customer UI - Flutter]
        A2[Admin UI - Flutter]
    end

    subgraph Service & Gateway Layer
        B1[Firebase Auth Service]
        B2[Flask RESTful API Service]
    end

    subgraph Data & Storage Layer
        C1[(Firebase Realtime NoSQL DB)]
        C2[(Firebase Cloud Storage)]
        C3[(Product Feature Vector Matrix)]
    end

    A1 -->|Token Auth| B1
    A2 -->|Token Auth| B1
    A1 -->|Sync Cart / Orders / Chats| C1
    A2 -->|Manage Catalog / Update Status| C1
    A1 & A2 -->|Upload/Download Media| C2
    A1 -->|GET /recommend/user, GET /recommend/item| B2
    B2 -->|Read Item Metadatas| C1
    B2 -->|Compute Cosine Sim| C3

Thiết kế Cơ sở Dữ liệu NoSQL (Data Schema)

Hệ thống sử dụng cơ sở dữ liệu phi quan hệ Firebase Realtime Database với cấu trúc JSON Tree phân tán:

{
  "Users": {
    "user_uid_01": {
      "fullName": "Nguyen Van A",
      "email": "user@uit.edu.vn",
      "phoneNumber": "0901234567",
      "role": "Customer",
      "addresses": {
        "addr_01": { "receiver": "Nguyen Van A", "lat": 10.8700, "lng": 106.8030, "detail": "Khu pho 6, Linh Trung, Thu Duc" }
      }
    }
  },
  "Products": {
    "prod_id_101": {
      "name": "Kem duong am phuc hoi B5",
      "brandId": "brand_laroche",
      "category": "Kem duong",
      "skinType": "Da nhay cam, Da kho",
      "texture": "Cream",
      "price": 385000,
      "stockQuantity": 150,
      "descriptionVector": "kem duong phuc hoi b5 la roche posay da nhay cam cream"
    }
  },
  "Orders": {
    "order_id_501": {
      "userId": "user_uid_01",
      "totalAmount": 770000,
      "shippingFee": 25000,
      "status": "Chưa xác nhận",
      "createdAt": 1665000000,
      "items": [{ "productId": "prod_id_101", "quantity": 2, "unitPrice": 385000 }]
    }
  }
}

Thiết kế API Endpoints (ML Microservice)

Hệ thống Recommendation giao tiếp qua giao thức RESTful HTTP/JSON:

  • POST /api/v1/recommend/content-based: Nhận vector định danh người dùng hoặc ID sản phẩm đang xem, trả về danh sách Top-$N$ ID sản phẩm tương đồng cao nhất.
  • GET /api/v1/recommend/trending: Trích xuất danh sách sản phẩm phổ biến nhất cho người dùng mới (giải quyết bài toán Cold-Start cơ bản).
  • POST /api/v1/matrix/reload: Endpoint dành cho Admin kích hoạt tính toán lại ma trận đặc trưng khi danh mục sản phẩm có cập nhật mới.

Methodology

Dự án áp dụng mô hình phát triển phần mềm linh hoạt (Agile Scrum) với chu kỳ Sprint 2 tuần, kéo dài tổng cộng 12 tuần:

  • Milestone 1 (Tuần 1 - 3): Khảo sát nghiệp vụ bán lẻ mỹ phẩm, lấy yêu cầu thực tế, thiết kế sơ đồ Use Case và lớp đối tượng (Class Diagram).
  • Milestone 2 (Tuần 4 - 6): Thiết kế kiến trúc, xây dựng UI/UX trên Flutter, cấu hình Firebase Authentication và NoSQL Schema.
  • Milestone 3 (Tuần 7 - 9): Xây dựng thuật toán Recommendation Content-based bằng Python, đóng gói REST API Flask, tích hợp vào client di động.
  • Milestone 4 (Tuần 10 - 12): Kiểm thử hệ thống, đo đạc hiệu năng, đánh giá mức độ tương đồng và hoàn thiện tài liệu kỹ thuật.

Implementation và kết quả

Development process

Trọng tâm kỹ thuật của đồ án là thuật toán Content-based Filtering xử lý ma trận dữ liệu văn bản thuộc tính mỹ phẩm. Các thuộc tính như Tên sản phẩm, Thương hiệu, Phân loại da, Kết cấu và Mô tả được trích xuất và nối lại thành một chuỗi đặc trưng tổng hợp (Feature Corpus).

Mô hình chuyển đổi văn bản sang vector không gian sử dụng thuật toán TF-IDF (Term Frequency - Inverse Document Frequency):

$$\text{TF-IDF}(t, d, D) = \text{TF}(t, d) \times \log\left(\frac{|D|}{1 + |{d \in D : t \in d}|}\right)$$

Sau khi chuyển đổi kho sản phẩm thành ma trận vector $N \times M$ ($N$ sản phẩm, $M$ đặc trưng từ khóa), độ tương đồng giữa hai sản phẩm $u$ và $v$ được tính toán bằng hàm Cosine Similarity:

$$\text{Cosine Similarity}(\vec{u}, \vec{v}) = \frac{\vec{u} \cdot \vec{v}}{|\vec{u}|2 |\vec{v}|2} = \frac{\sum{i=1}^{M} u_i v_i}{\sqrt{\sum{i=1}^{M} u_i^2} \sqrt{\sum_{i=1}^{M} v_i^2}}$$

Code Snippet: Động cơ gợi ý bằng Python & Flask

import numpy as np
import pandas as pd
from flask import Flask, request, jsonify
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity

app = Flask(__name__)

class ContentBasedRecommender:
    def __init__(self):
        self.vectorizer = TfidfVectorizer(stop_words='english', lowercase=True)
        self.tfidf_matrix = None
        self.df_products = None
        self.indices = None

    def fit(self, df):
        self.df_products = df.reset_index(drop=True)
        # Kết hợp các trường đặc trưng mỹ phẩm
        self.df_products['metadata_soup'] = (
            self.df_products['name'] + ' ' +
            self.df_products['brand'] + ' ' +
            self.df_products['category'] + ' ' +
            self.df_products['skinType'] + ' ' +
            self.df_products['texture']
        )
        self.tfidf_matrix = self.vectorizer.fit_transform(self.df_products['metadata_soup'])
        self.indices = pd.Series(self.df_products.index, index=self.df_products['productId']).drop_duplicates()

    def get_recommendations(self, product_id, top_n=5):
        if product_id not in self.indices:
            return []
        idx = self.indices[product_id]
        
        # Tính toán vector Cosine Similarity cho item chỉ định với toàn bộ kho
        cosine_sim_scores = cosine_similarity(self.tfidf_matrix[idx], self.tfidf_matrix).flatten()
        
        # Sắp xếp chỉ số độ tương tự giảm dần (loại bỏ chính nó ở vị trí đầu)
        similar_indices = cosine_sim_scores.argsort()[-(top_n + 1):-1][::-1]
        
        recommended_ids = self.df_products['productId'].iloc[similar_indices].tolist()
        return recommended_ids

engine = ContentBasedRecommender()

@app.route('/api/v1/recommend', methods=['POST'])
def recommend():
    payload = request.get_json(force=True)
    product_id = payload.get('productId')
    top_k = payload.get('topK', 5)
    
    results = engine.get_recommendations(product_id, top_n=top_k)
    return jsonify({"status": "success", "recommendedProductIds": results}), 200

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000, debug=False)

Testing và validation

Hệ thống được kiểm thử toàn diện trên các phương diện tính năng, độ chính xác thuật toán và độ trễ phản hồi:

  • Kiểm thử chức năng (Functional Testing): 29/29 Use Cases được kiểm thử đạt 100% tỷ lệ pass trên cả trình giả lập Android Pixel 4 (API 30) và thiết bị thực iPhone 11 (iOS 15.4).
  • Kiểm thử hiệu năng (Performance Benchmarking):
    • Thời gian khởi động ứng dụng (Cold Start): 1.24 giây.
    • Tốc độ phản hồi API gợi ý từ Flask Server: 118ms với ma trận 1,000 items.
    • Tốc độ đồng bộ tin nhắn Realtime qua Firebase: < 85ms trong điều kiện mạng 4G tiêu chuẩn.
  • Đánh giá thuật toán Recommendation: Đánh giá trên tập dữ liệu thử nghiệm 500 người dùng và 1,200 sản phẩm mỹ phẩm đa danh mục:
    • Độ chính xác tương đồng thuộc tính (Feature Matching Precision@5): 86.4%.
    • Điểm hài lòng của người dùng trong thử nghiệm mù (User Acceptance Testing - UAT): 4.65/5.0.
stateDiagram-v2
    [*] --> ChưaXácNhận: Khách hàng chốt đơn
    ChưaXácNhận --> ĐangChuẩnBị: Admin xác nhận đơn
    ChưaXácNhận --> ĐãHủy: Khách/Admin hủy đơn
    ĐangChuẩnBị --> ĐangGiaoHàng: Bàn giao vận chuyển
    ĐangChuẩnBị --> ĐãHủy: Admin hủy do hết kho
    ĐangGiaoHàng --> ĐãNhậnHàng: Giao thành công
    ĐãNhậnHàng --> ĐãRating: Khách đánh giá sao
    ĐãNhậnHàng --> ĐãHoànThành: Tự động đóng đơn
    ĐãRating --> ĐãHoànThành: Lưu review xong
    ĐãHoànThành --> [*]
    ĐãHủy --> [*]

Kết quả đạt được

  1. Giao diện Client hoàn chỉnh: Bao gồm toàn bộ màn hình Trang chủ, Danh sách phân loại động, Chi tiết sản phẩm tích hợp tab mô tả/đánh giá, Khối "Recommend For You", Giỏ hàng và màn hình Checkout tích hợp bản đồ định vị.
  2. Quản trị Admin chuyên sâu: Theo dõi thời gian thực danh sách đơn hàng theo 7 trạng thái, thêm/sửa sản phẩm và thương hiệu tức thời, quản lý kho tự động trừ tồn kho khi chốt đơn.
  3. Module Chat thời gian thực: Tạo phòng chat riêng biệt giữa từng khách hàng và cửa hàng, hỗ trợ lưu vết lịch sử hội thoại trên Cloud.

Đổi mới và đóng góp

Điểm cải tiến kỹ thuật nổi bật

  1. Mô hình trích xuất đặc trưng đa tầng cho ngành mỹ phẩm: Khác với các hệ thống gợi ý tổng quát chỉ dựa vào tên sản phẩm, giải pháp xây dựng vector đặc trưng chuyên biệt lồng ghép sâu các thuộc tính: skinType (loại da) và texture (kết cấu). Điều này giúp thuật toán tự động ngăn chặn việc gợi ý sản phẩm dành cho "da dầu" cho một người dùng đang xem sản phẩm "da khô nhạy cảm".
  2. Kiến trúc phi máy chủ kết hợp Microservice (BaaS + ML Engine): Loại bỏ hoàn toàn sự phức tạp trong việc duy trì máy chủ cơ sở dữ liệu quan hệ truyền thống bằng cách tận dụng Google Firebase, đồng thời cô lập mô hình Machine Learning thành một service độc lập, dễ dàng nâng cấp hoặc mở rộng quy mô mà không làm gián đoạn Client di động.
  3. Tối ưu hóa hiệu suất mua sắm: Giảm thời gian tìm kiếm sản phẩm phù hợp của khách hàng xuống 42%, tăng tỷ lệ tương tác sản phẩm gợi ý (Click-Through Rate) lên 34.8% so với việc hiển thị sản phẩm ngẫu nhiên.

Ứng dụng thực tế và triển khai

Hướng dẫn cài đặt và triển khai hệ thống

1. Yêu cầu hệ thống (System Requirements)

  • Client di động: Thiết bị chạy Android 6.0 (API level 23) trở lên hoặc iOS 11.0 trở lên, RAM tối thiểu 2GB.
  • Server ML API: Máy chủ Linux (Ubuntu 20.04 LTS), 2 vCPU, 4GB RAM, cài đặt Python 3.9+ và Git.

2. Cấu hình Backend Firebase

  1. Tạo dự án trên Firebase Console.
  2. Bật dịch vụ Authentication (Email/Password, Google Sign-in).
  3. Khởi tạo Realtime Database và cấu hình Security Rules:
{
  "rules": {
    ".read": "auth != null",
    ".write": "auth != null"
  }
}
  1. Tải file cấu hình google-services.json (Android) và GoogleService-Info.plist (iOS) đặt vào thư mục tương ứng trong source code Flutter.

3. Triển khai Python Flask Recommender Engine

# Clone source code và tạo môi trường ảo
git clone https://github.com/buithanhphu/be-beauty-recommender.git
cd be-beauty-recommender
python3 -m venv venv
source venv/bin/activate

# Cài đặt thư viện phụ thuộc
pip install flask scikit-learn pandas numpy gunicorn

# Chạy service thông qua Gunicorn WSGI
gunicorn --bind 0.0.0.0:5000 --workers 3 app:app --daemon

4. Biên dịch ứng dụng Flutter

cd be_beauty_mobile_app
flutter clean
flutter pub get
flutter build apk --release

Phân tích chi phí - lợi ích (Cost-Benefit Analysis)

  • Chi phí vận hành: Nhờ sử dụng gói Firebase Spark (miễn phí khởi điểm) và API Server cấu hình thấp, chi phí hạ tầng hàng tháng cho cửa hàng quy mô dưới 5,000 người dùng duy trì ở mức xấp xỉ 10 - 15 USD/tháng (chi phí VPS lưu trữ mô hình ML).
  • Hiệu quả kinh tế: Tự động hóa 100% khâu tiếp nhận đơn hàng, hỗ trợ trực tuyến và cá nhân hóa đề xuất, giúp các cửa hàng mỹ phẩm vừa và nhỏ tăng doanh thu ước tính từ 20% - 30% mà không cần mở rộng nhân sự trực tổng đài.

Hạn chế và hướng phát triển

Hạn chế kỹ thuật hiện tại

  • Vấn đề Cold-Start cho người dùng mới: Do sử dụng thuần thuật toán Content-based, hệ thống cần ít nhất một vài tương tác ban đầu hoặc việc chọn sản phẩm đầu tiên để sinh ra các đề xuất tương ứng chính xác nhất.
  • Dữ liệu thưa (Sparsity): Khi danh mục sản phẩm mở rộng lên hàng chục ngàn mặt hàng, ma trận TF-IDF sẽ tăng chiều không gian đặc trưng, đòi hỏi tối ưu hóa bộ nhớ RAM của server.
  • Phụ thuộc kết nối Internet: Do đặc thù đồng bộ thời gian thực qua Firebase, ứng dụng yêu cầu kết nối mạng liên tục để cập nhật trạng thái đơn và giỏ hàng.

Hướng phát triển trong tương lai

  1. Chuyển dịch sang Hệ thống Gợi ý Lai (Hybrid Recommender System): Kết hợp Content-based FilteringCollaborative Filtering (sử dụng thuật toán Matrix Factorization SVD hoặc Deep Neural Networks) để nâng cao độ chính xác khi tập dữ liệu người dùng lớn mạnh.
  2. Tích hợp AR (Augmented Reality) trang điểm ảo: Nghiên cứu tính năng thử son môi/phấn mắt trực tiếp trên khuôn mặt qua Camera điện thoại.
  3. Tích hợp cổng thanh toán trực tuyến: Kết nối API cổng VNPay, MoMo, ZaloPay để thanh toán không tiền mặt.

Đối tượng hưởng lợi

  • Sinh viên & Học viên CNTT: Nguồn tài liệu thực nghiệm rõ ràng về cách tích hợp một mô hình Trí tuệ nhân tạo (Python/Machine Learning) vào một ứng dụng di động thực tế (Flutter) qua mô hình Client-Server.
  • Lập trình viên Mobile/Backend: Tham khảo mô hình phân tích thiết kế hệ thống chuẩn với 29 Use Cases, lược đồ NoSQL trên Firebase và cơ chế quản lý trạng thái đơn hàng thời gian thực.
  • Doanh nghiệp & Chủ cửa hàng mỹ phẩm: Một giải pháp mẫu hoàn chỉnh để chuyển đổi số mô hình kinh doanh truyền thống sang trực tuyến với chi phí vận hành tối ưu và khả năng cá nhân hóa người dùng cao.

Câu hỏi thường gặp

1. Ứng dụng Be Beauty có thể chạy mượt mà trên cả iOS và Android không?

Hoàn toàn có. Nhờ sử dụng framework Flutter với kiến trúc dựng hình Skia/Impeller và biên dịch AOT (Ahead-of-Time) trực tiếp sang mã máy gốc, ứng dụng duy trì tốc độ khung hình ổn định 60 FPS trên cả hai hệ điều hành mà không cần viết lại mã nguồn.

2. Thuật toán gợi ý Content-based xử lý như thế nào khi có sản phẩm mới được thêm vào hệ thống?

Khi Admin thêm sản phẩm mới vào Firebase, server Flask hỗ trợ endpoint /api/v1/matrix/reload để cập nhật lại ma trận TF-IDF trong bộ nhớ tạm thời mà không cần khởi động lại server, giúp sản phẩm mới sẵn sàng được gợi ý ngay lập tức.

3. Tại sao hệ thống lại chọn Firebase Realtime Database thay vì Cloud Firestore hoặc MySQL?

Firebase Realtime Database có độ trễ cực thấp trong việc lắng nghe các sự kiện thay đổi dữ liệu theo dạng cây JSON, đặc biệt phù hợp cho các tính năng Chat trực tiếp và cập nhật trạng thái đơn hàng tức thời giữa Khách hàng và Admin.

4. Hệ thống tính phí vận chuyển đơn hàng dựa trên nguyên lý nào?

Ứng dụng sử dụng Geocoding và Location API để lấy tọa độ kinh độ/vĩ độ từ địa chỉ giao hàng của người dùng, sau đó tính toán khoảng cách hình học theo đường chim bay đến địa chỉ cố định của cửa hàng và áp dụng công thức bậc thang để tính cước phí giao hàng chính xác.

5. Chi phí duy trì hệ thống này cho một cửa hàng nhỏ là bao nhiêu?

Với quy mô một cửa hàng mỹ phẩm đơn lẻ (dưới 5,000 khách hàng hoạt động hàng tháng), gói miễn phí của Firebase hoàn toàn đáp ứng đủ lưu lượng. Cửa hàng chỉ cần chi trả khoảng 150,000 - 250,000 VNĐ/tháng để thuê một Cloud VPS cơ bản chạy mô hình gợi ý Python Flask.


Kết luận

Đồ án "Ứng dụng bán mỹ phẩm trực tuyến tích hợp Recommendation System – Be Beauty" của sinh viên Bùi Thanh Phú đã hoàn thành xuất sắc các mục tiêu nghiên cứu và ứng dụng kỹ thuật phần mềm hiện đại. Dự án không chỉ giải quyết toàn diện bài toán nghiệp vụ thương mại điện tử với 29 ca sử dụng chi tiết mà còn chứng minh tính khả thi cao trong việc ứng dụng thuật toán học máy (Content-based Filtering qua TF-IDF và Cosine Similarity) nhằm cá nhân hóa trải nghiệm khách hàng theo đặc thù ngành mỹ phẩm. Đây là nguồn tài liệu tham khảo giá trị cho sinh viên chuyên ngành Công nghệ phần mềm và Khoa học dữ liệu trong việc hiện thực hóa các giải pháp Trí tuệ nhân tạo ứng dụng trên nền tảng di động.