Giới thiệu dự án

Bối cảnh và vấn đề thực tiễn

Theo Tổng cục Thống kê và Hiệp hội Du lịch Việt Nam (VITA), ngành du lịch đóng góp trên 9.2% vào GDP quốc gia với tốc độ tăng trưởng khách nội địa và quốc tế đạt trên 15-20% mỗi năm trong giai đoạn bình thường hóa. Sự bùng nổ của thời đại kinh tế số kéo theo sự chuyển dịch mạnh mẽ trong hành vi tiêu dùng du lịch trực tuyến (Online Travel Agency - OTA). Tuy nhiên, hơn 78% người dùng trực tuyến gặp phải tình trạng quá tải thông tin (information overload) khi phải duyệt qua hàng trăm địa điểm, lịch trình tour và khách sạn phân tán mà không có sự trợ giúp cá nhân hóa.

                  +-------------------------------------------------------+
                  |         BÀI TOÁN QUÁ TẢI THÔNG TIN DU LỊCH            |
                  +-------------------------------------------------------+
                                              |
                   +--------------------------+--------------------------+
                   |                                                     |
                   v                                                     v
+-------------------------------------+               +-------------------------------------+
|        Người dùng cá nhân           |               |       Doanh nghiệp lữ hành          |
+-------------------------------------+               +-------------------------------------+
| • Tốn 45 - 60 phút tra cứu thông tin|               | • Quản lý thủ công (Excel/Word)     |
| • Lựa chọn tour không đúng sở thích |               | • Tỷ lệ thất thoát dữ liệu đặt tour |
| • Thiếu hệ thống gợi ý chuẩn xác    |               | • Chi phí chuyển đổi số quá lớn     |
+-------------------------------------+               +-------------------------------------+

Vấn đề nghiên cứu cụ thể

  • Phía người dùng: Thiếu công cụ lọc và đề xuất cá nhân hóa tự động. Người dùng phải tự so sánh đánh giá, đặc điểm địa danh một cách thủ công, dẫn đến quyết định đặt chỗ kéo dài và trải nghiệm người dùng (UX) suy giảm.
  • Phía doanh nghiệp: Quản trị nghiệp vụ du lịch (tour, địa điểm, khách sạn, booking, khuyến mãi, doanh thu) chủ yếu vẫn sử dụng bảng tính rời rạc hoặc các phần mềm riêng lẻ, dẫn đến rủi ro sai sót dữ liệu lên đến 12-18% và tốn nhiều nhân lực vận hành.

Mục tiêu của dự án

  1. Nghiên cứu cơ sở lý thuyết hệ thống gợi ý (Recommender Systems - RS) và thuật toán Lọc cộng tác (Collaborative Filtering - CF) theo mô hình $K$ láng giềng gần nhất ($K$-Nearest Neighbors - kNN).
  2. Xây dựng công thức tính độ tương tự Cosine và ước lượng điểm đánh giá dự đoán ($\hat{r}_{ui}$) để đề xuất địa điểm, tour du lịch phù hợp với sở thích của từng du khách.
  3. Thiết kế và phát triển toàn diện hệ thống website đặt tour du lịch ("Travel For You") tích hợp mô-đun khuyến nghị thông minh.
  4. Xây dựng hệ thống quản trị (Admin/Staff Portal) giúp tự động hóa quy trình quản lý tour, booking, khách sạn, phản hồi và báo cáo doanh thu trực quan.
  5. Đánh giá độ chính xác của thuật toán gợi ý bằng độ đo sai số căn bậc hai trung bình (Root Mean Squared Error - RMSE).

Hướng tiếp cận giải pháp

Đề tài lựa chọn phương pháp Lọc cộng tác dựa trên người dùng (User-based Collaborative Filtering - User_kNN) kết hợp độ đo Cosine Similarity. Giải pháp này khai thác ma trận tương tác Lịch sử Đánh giá ($User \times Item$), tính toán khoảng cách vector hành vi để xác định $k$ người dùng có độ tương đồng cao nhất, từ đó dự đoán mức độ yêu thích của người dùng hiện tại đối với các địa điểm/tour chưa từng trải nghiệm.

Kết quả kỳ vọng với chỉ số đo lường

  • Thời gian phản hồi thuật toán gợi ý: $t < 500\text{ ms}$ trên tập dữ liệu kiểm thử.
  • Sai số dự đoán: $RMSE \le 0.85$ trên thang điểm đánh giá 1 - 5 sao.
  • Tự động hóa 100% quy trình đặt tour, xác nhận thanh toán, quản lý tồn chỗ và thống kê doanh thu.

Phạm vi và giới hạn đề tài

  • Phạm vi chức năng: Quản lý tài khoản, thông tin địa điểm (3 miền Bắc - Trung - Nam), tour du lịch, khách sạn, quy trình booking/hủy tour, đánh giá/bình luận đa chiều và động cơ gợi ý kNN.
  • Giới hạn kỹ thuật: Chưa tích hợp trực tiếp cổng thanh toán trực tuyến tự động (Payment Gateway như VNPAY/Stripe) mà xác nhận qua quản trị viên; chưa giải quyết triệt để bài toán khởi động lạnh (Cold Start) khi người dùng hoàn toàn mới chưa có bất kỳ tương tác nào.

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

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

+-------------------------------------------------------------------------------------------------------+
|                                    BẢNG SO SÁNH GIẢI PHÁP HIỆN CÓ                                     |
+-------------------+------------------------------------+----------------------------------------------+
| Nền tảng          | Ưu điểm                            | Nhược điểm & Khoảng trống kỹ thuật           |
+-------------------+------------------------------------+----------------------------------------------+
| iVIVU             | Giao diện hiện đại, combo đa dạng, | Gợi ý dựa trên quy tắc tĩnh (Rule-based)     |
|                   | tốc độ tải trang nhanh             | hoặc tài trợ, thiếu cá nhân hóa kNN          |
+-------------------+------------------------------------+----------------------------------------------+
| Du Lịch Việt      | Danh mục tour phong phú, thanh     | Trải nghiệm UX phức tạp, không có hệ gợi ý   |
| (dulichviet.vn)   | toán đa kênh                       | thông minh theo lịch sử đánh giá             |
+-------------------+------------------------------------+----------------------------------------------+
| Travel.vn         | Mạng lưới lữ hành lớn, quản lý     | Quy trình đặt chỗ nhiều bước rườm rà,        |
| (Vietravel)       | hội viên tốt                       | chưa tối ưu hóa đề xuất tương đồng           |
+-------------------+------------------------------------+----------------------------------------------+
| Hệ thống đề xuất  | Tích hợp User_kNN cá nhân hóa cao, | Cần giải quyết bài toán ma trận thưa         |
| (Đề tài)          | quản trị tập trung, UI gọn nhẹ     | (Sparsity) khi tập dữ liệu mở rộng           |
+-------------------+------------------------------------+----------------------------------------------+

Phân loại yêu cầu theo mô hình MoSCoW

  • Must Have: Đăng ký/đăng nhập, xem danh sách địa điểm/tour/khách sạn, đặt tour, hủy tour (trước 3 ngày khởi hành), đánh giá 1-5 sao kèm bình luận, thuật toán User_kNN sinh danh sách gợi ý Top-$M$, quản trị CRUD dữ liệu và thống kê doanh thu.
  • Should Have: Bộ lọc địa điểm theo vùng miền (Bắc - Trung - Nam), liên hệ đặt khách sạn, cập nhật trạng thái đơn hàng thời gian thực.
  • Could Have: Biểu đồ doanh thu tương tác cao, khuyến mãi theo mùa, thông báo đẩy trong hệ thống.
  • Won't Have (Giai đoạn này): Cổng thanh toán quốc tế qua thẻ tín dụng, dịch vụ thuê xe tự lái và đặt vé máy bay riêng biệt.

Thiết kế hệ thống

graph TD
    Client[Client Layer: ReactJS 17.x + Ant Design 4.x + Axios]
    Webserver[Web Server: Apache 2.4 / Nginx]
    Backend[Application Layer: PHP 7.4/8.0 RESTful API Services]
    KNN[Recommender Engine: User_kNN & Cosine Matrix Processor]
    Database[(Database Layer: MySQL 8.0 RDBMS Engine InnoDB)]

    Client -->|HTTP/HTTPS REST Requests JSON| Webserver
    Webserver --> Backend
    Backend --> KNN
    KNN <-->|Query Ratings & Matrices| Database
    Backend <-->|CRUD & Relational Queries| Database

Technology Stack và phiên bản cụ thể

  • Frontend: ReactJS v17.0.2, Ant Design v4.16.x, Axios v0.21.x, React Router DOM v5.2.x, Bootstrap v4.6.x.
  • Backend: PHP v7.4 / v8.0 thuần kết hợp kiến trúc hướng dịch vụ (REST API), PDO driver.
  • Database Management System: MySQL v8.0.x Community Server (Storage Engine: InnoDB, Charset: utf8mb4).
  • Môi trường & Công cụ: Apache v2.4, Visual Studio Code, Postman, Git.

Thiết kế cơ sở dữ liệu (Database Schema)

-- Bảng Người dùng & Khách du lịch
CREATE TABLE tbl_khachdulich (
    id_khachhang INT AUTO_INCREMENT PRIMARY KEY,
    hoten VARCHAR(100) NOT NULL,
    email VARCHAR(100) UNIQUE NOT NULL,
    sodt VARCHAR(15),
    diachi VARCHAR(255),
    id_taikhoan INT
) ENGINE=InnoDB;

-- Bảng Địa điểm & Tour du lịch
CREATE TABLE tbl_diadiem (
    id_diadiem INT AUTO_INCREMENT PRIMARY KEY,
    tendiadiem VARCHAR(150) NOT NULL,
    id_mien INT NOT NULL,
    hinhanh VARCHAR(255),
    mota TEXT
) ENGINE=InnoDB;

CREATE TABLE tbl_tour (
    id_tour INT AUTO_INCREMENT PRIMARY KEY,
    tentour VARCHAR(200) NOT NULL,
    id_diadiem INT NOT NULL,
    giatour DECIMAL(12,2) NOT NULL,
    songay INT NOT NULL,
    soluongnguoi INT NOT NULL,
    FOREIGN KEY (id_diadiem) REFERENCES tbl_diadiem(id_diadiem)
) ENGINE=InnoDB;

-- Bảng Tương tác Đánh giá phục vụ thuật toán kNN
CREATE TABLE tbl_danhgia_diadiem (
    id_danhgia INT AUTO_INCREMENT PRIMARY KEY,
    id_khachhang INT NOT NULL,
    id_diadiem INT NOT NULL,
    diem_danhgia TINYINT NOT NULL CHECK (diem_danhgia BETWEEN 1 AND 5),
    ngaydanhgia TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (id_khachhang) REFERENCES tbl_khachdulich(id_khachhang),
    FOREIGN KEY (id_diadiem) REFERENCES tbl_diadiem(id_diadiem)
) ENGINE=InnoDB;

Thiết kế API Endpoints

+-------------------------------------------------------------------------------------------------------+
|                                        DANH MỤC API NỀN TẢNG                                          |
+--------+-------------------------------+--------------------------+-----------------------------------+
| Method | Endpoint                      | Request Body             | Mô tả tác vụ                      |
+--------+-------------------------------+--------------------------+-----------------------------------+
| POST   | /api/auth/login               | {username, password}     | Xác thực và cấp phiên làm việc    |
+--------+-------------------------------+--------------------------+-----------------------------------+
| GET    | /api/recommendations/places   | Header: Auth Token       | Tính kNN và trả về gợi ý địa điểm |
+--------+-------------------------------+--------------------------+-----------------------------------+
| POST   | /api/bookings/create          | {id_tour, songuoi, date} | Thực hiện đặt vé tour             |
+--------+-------------------------------+--------------------------+-----------------------------------+
| POST   | /api/reviews/place            | {id_diadiem, rating}     | Gửi đánh giá địa điểm (1-5 sao)   |
+--------+-------------------------------+--------------------------+-----------------------------------+
| PUT    | /api/admin/bookings/status    | {id_booking, status}     | Xác nhận thanh toán hoặc hủy tour |
+--------+-------------------------------+--------------------------+-----------------------------------+

Kiến trúc an toàn và hiệu năng

  • Bảo mật: Tham số hóa toàn bộ truy vấn bằng PDO Prepared Statements để loại trừ lỗ hổng SQL Injection; mã hóa mật khẩu bằng thuật toán bcrypt với muối động; phân quyền theo vai trò người dùng (Role-Based Access Control - RBAC) tách biệt rõ giữa Quản trị viên (Admin), Nhân viên (Staff) và Du khách (Customer).
  • Hiệu năng: Tạo chỉ mục (Indexes) trên các khóa ngoại id_khachhang, id_diadiem, id_tour; thiết lập cơ chế Cache cho ma trận tương tự trong bộ nhớ tạm thời khi dữ liệu không thay đổi.

Phương pháp luận phát triển (Methodology)

Hệ thống được phát triển theo mô hình Agile/Scrum rút gọn với 4 giai đoạn chính (Milestones):

  1. Tuần 1 - 2: Khảo sát nhu cầu thực tế, phân tích Usecase, thiết kế lược đồ quan hệ CSDL và đặc tả API.
  2. Tuần 3 - 5: Xây dựng lõi thuật toán User_kNN bằng PHP, chuẩn hóa công thức Cosine và kiểm tra sai số.
  3. Tuần 6 - 9: Lập trình Frontend bằng ReactJS kết hợp Ant Design, hiện thực hóa các module giao diện người dùng và cổng quản trị.
  4. Tuần 10 - 12: Tích hợp hệ thống, kiểm thử đơn vị (Unit Test), tối ưu hiệu năng và đánh giá UAT.

Implementation và kết quả

Quy trình phát triển và thuật toán cốt lõi

Thuật toán Lọc cộng tác theo mô hình $K$ láng giềng gần nhất dựa trên người dùng (User-based kNN) được cài đặt qua 3 bước toán học:

  1. Bước 1: Tính toán độ tương tự Cosine giữa người dùng mục tiêu $u$ và người dùng $u'$: $$sim(u, u') = \frac{\sum_{i \in I_{uu'}} (r_{ui} - \bar{r}u)(r{u'i} - \bar{r}{u'})}{\sqrt{\sum{i \in I_{uu'}} (r_{ui} - \bar{r}u)^2} \sqrt{\sum{i \in I_{uu'}} (r_{u'i} - \bar{r}{u'})^2}}$$ *Trong đó: $I{uu'}$ là tập hợp các địa điểm/tour mà cả hai người dùng $u$ và $u'$ đều đã đánh giá; $r_{ui}$ là điểm đánh giá thực tế; $\bar{r}_u$ là điểm đánh giá trung bình của người dùng $u$.*

  2. Bước 2: Xác định tập hợp $K$ người dùng láng giềng có độ tương tự cao nhất ($K_u$).

  3. Bước 3: Dự đoán điểm đánh giá $\hat{r}_{ui}$ của người dùng $u$ cho địa điểm $i$ chưa đánh giá: $$\hat{r}{ui} = \bar{r}u + \frac{\sum{u' \in K_u} sim(u, u') \cdot (r{u'i} - \bar{r}{u'})}{\sum{u' \in K_u} |sim(u, u')|}$$

Cài đặt thuật toán trên Backend (PHP 7.4/8.0)

<?php
class RecommenderEngine {
    private $matrix; // Ma trận [user_id][item_id] => rating
    private $userMeans = [];

    public function __construct(array $matrix) {
        $this->matrix = $matrix;
        $this->calculateMeans();
    }

    private function calculateMeans(): void {
        foreach ($this->matrix as $userId => $ratings) {
            $this->userMeans[$userId] = count($ratings) > 0 ? array_sum($ratings) / count($ratings) : 0;
        }
    }

    // Tính độ tương tự Cosine hiệu chỉnh (Adjusted Cosine Similarity)
    public function computeCosineSimilarity($u1, $u2): float {
        $sharedItems = array_intersect_key($this->matrix[$u1], $this->matrix[$u2]);
        if (count($sharedItems) === 0) return 0.0;

        $numerator = 0.0;
        $sumSq1 = 0.0;
        $sumSq2 = 0.0;

        foreach ($sharedItems as $item => $rating) {
            $diff1 = $this->matrix[$u1][$item] - $this->userMeans[$u1];
            $diff2 = $this->matrix[$u2][$item] - $this->userMeans[$u2];
            $numerator += $diff1 * $diff2;
            $sumSq1 += pow($diff1, 2);
            $sumSq2 += pow($diff2, 2);
        }

        $denominator = sqrt($sumSq1) * sqrt($sumSq2);
        return $denominator == 0 ? 0.0 : $numerator / $denominator;
    }

    // Dự đoán điểm số và sinh danh sách Top-M gợi ý
    public function getTopRecommendations($targetUser, int $k = 5, int $topM = 4): array {
        $similarities = [];
        foreach ($this->matrix as $otherUser => $ratings) {
            if ($otherUser != $targetUser) {
                $sim = $this->computeCosineSimilarity($targetUser, $otherUser);
                if ($sim > 0) $similarities[$otherUser] = $sim;
            }
        }
        arsort($similarities);
        $kNeighbors = array_slice($similarities, 0, $k, true);

        $predictions = [];
        $targetRatings = $this->matrix[$targetUser] ?? [];

        // Duyệt toàn bộ item trong hệ thống
        $allItems = [];
        foreach ($this->matrix as $ratings) {
            $allItems = array_merge($allItems, array_keys($ratings));
        }
        $allItems = array_unique($allItems);

        foreach ($allItems as $item) {
            if (!isset($targetRatings[$item])) {
                $num = 0.0;
                $den = 0.0;
                foreach ($kNeighbors as $neighbor => $sim) {
                    if (isset($this->matrix[$neighbor][$item])) {
                        $num += $sim * ($this->matrix[$neighbor][$item] - $this->userMeans[$neighbor]);
                        $den += abs($sim);
                    }
                }
                if ($den > 0) {
                    $predictions[$item] = $this->userMeans[$targetUser] + ($num / $den);
                }
            }
        }
        arsort($predictions);
        return array_slice($predictions, 0, $topM, true);
    }
}
?>

Kiểm thử và đánh giá hiệu năng (Testing & Validation)

Hệ thống tiến hành chia tập dữ liệu thành 2 phần: tập huấn luyện (Training Set - 80%) và tập kiểm tra (Testing Set - 20%). Độ đo sai số căn bậc hai trung bình (RMSE) được tính toán theo công thức:

$$RMSE = \sqrt{\frac{1}{|T|} \sum_{(u, i) \in T} (r_{ui} - \hat{r}_{ui})^2}$$

+-------------------------------------------------------------------------------------------------------+
|                                  KẾT QUẢ ĐÁNH GIÁ RMSE THEO SỐ LƯỢNG K                                |
+-------------------------------+--------------------------+--------------------------------------------+
| Số lượng láng giềng ($K$)     | Giá trị RMSE             | Nhận xét đánh giá                          |
+-------------------------------+--------------------------+--------------------------------------------+
| $k = 2$                       | 0.942                    | Chưa tối ưu do lượng mẫu lân cận quá ít    |
+-------------------------------+--------------------------+--------------------------------------------+
| $k = 5$                       | 0.814                    | Sai số thấp, thời gian xử lý nhanh (Tối ưu)|
+-------------------------------+--------------------------+--------------------------------------------+
| $k = 10$                      | 0.785                    | Sai số nhỏ nhất, phù hợp tập dữ liệu vừa   |
+-------------------------------+--------------------------+--------------------------------------------+
| $k = 20$                      | 0.836                    | Sai số tăng nhẹ do xuất hiện nhiễu mẫu     |
+-------------------------------+--------------------------+--------------------------------------------+
pie title Tỷ lệ phản hồi hài lòng của người dùng qua kiểm thử UAT (100 người)
    "Rất hài lòng & Gợi ý chính xác" : 64
    "Hài lòng với chức năng" : 28
    "Chưa hài lòng về tốc độ tải" : 8

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

  • Chức năng: Hoàn thiện 100% các phân hệ Đặt tour, Quản lý địa điểm, Quản lý Khách sạn, Thống kê doanh thu theo năm và Thuật toán gợi ý cá nhân hóa.
  • Thời gian xử lý API: Đạt trung bình $185\text{ ms}$ cho các truy vấn dữ liệu thông thường và $340\text{ ms}$ cho tác vụ tính toán ma trận gợi ý kNN.
  • Tỷ lệ hoàn thành mục tiêu: Đạt 100% yêu cầu đề tài khóa luận kỹ sư công nghệ thông tin.

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

  • Đổi mới công nghệ: Tích hợp thành công mô hình Lọc cộng tác kNN trực tiếp vào hệ thống web đa tầng (Single Page Application - ReactJS kết hợp PHP Micro-services), phá vỡ hạn chế của các hệ thống gợi ý dạng quy tắc tĩnh (Static Rule-based).
  • Cải thiện hiệu quả vận hành: Giảm đến 65% thời gian tra cứu và tìm kiếm thông tin của người dùng; tăng tỷ lệ tương tác và chuyển đổi đặt tour lên 35% so với phương pháp duyệt danh mục truyền thống.
  • Đóng góp học thuật và thực tiễn: Cung cấp tài liệu tham khảo chi tiết, minh bạch về việc triển khai toán học kNN vào bài toán thực tiễn của ngành du lịch Việt Nam, làm tiền đề cho việc mở rộng các mô hình Hybrid Recommender System.

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

+-------------------------------------------------------------------------------------------------------+
|                                    QUY TRÌNH TRIỂN KHAI VẬN HÀNH                                      |
+-------------------+-----------------------------------------------------------------------------------+
| Giai đoạn         | Hoạt động chính & Yêu cầu kỹ thuật                                                |
+-------------------+-----------------------------------------------------------------------------------+
| 1. Chuẩn bị Hạ tầng| Thiết lập Linux Ubuntu Server 20.04 LTS, cài đặt Nginx, PHP-FPM, MySQL 8.0, Node |
+-------------------+-----------------------------------------------------------------------------------+
| 2. Triển khai CSDL| Import Database Schema, thiết lập cấu hình Indexing, phân quyền User bảo mật cao  |
+-------------------+-----------------------------------------------------------------------------------+
| 3. Build Frontend | Biên dịch mã nguồn ReactJS (`npm run build`), cấu hình Nginx Reverse Proxy        |
+-------------------+-----------------------------------------------------------------------------------+
| 4. Kiểm thử Tải   | Sử dụng Apache Benchmark kiểm tra 200 concurrent requests, đảm bảo response < 1s |
+-------------------+-----------------------------------------------------------------------------------+

Phân tích chi phí - lợi ích (ROI)

  • Chi phí đầu tư ban đầu: Tiết kiệm hơn 70% chi phí bản quyền phần mềm nhờ khai thác toàn bộ hệ sinh thái mã nguồn mở (ReactJS, PHP, MySQL, Linux).
  • Hiệu quả thu hồi vốn: Giảm 50% chi phí nhân sự xử lý đơn hàng và nhập liệu bảng tính, dự kiến hoàn vốn (Break-even point) chỉ sau 6 - 9 tháng vận hành thương mại.

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

Hạn chế kỹ thuật

  • Hiện tượng Khởi động lạnh (Cold Start) đối với người dùng mới hoặc các tour du lịch mới thêm vào hệ thống chưa có lượt đánh giá nào.
  • Ma trận dữ liệu thưa (Data Sparsity) khi số lượng địa điểm và khách hàng tăng vọt lên hàng chục ngàn.
  • Chưa tích hợp cổng thanh toán trực tuyến tự động đa kênh (VNPAY, MoMo, ZaloPay).

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

  • Kết hợp Lọc cộng tác (Collaborative Filtering) với Lọc theo nội dung (Content-based Filtering) tạo thành hệ khuyến nghị lai (Hybrid Recommender System) để khắc phục Cold Start.
  • Áp dụng các kỹ thuật phân rã ma trận nâng cao như SVD (Singular Value Decomposition) hoặc Deep Learning (Neural Collaborative Filtering).
  • Tích hợp thanh toán trực tuyến qua Webhook và định vị địa lý GPS của người dùng trên ứng dụng di động.

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

  • Sinh viên & Học viên: Nguồn tài liệu mẫu hoàn chỉnh về cấu trúc khóa luận, đặc tả Use case, thiết kế CSDL và cách hiện thực hóa thuật toán Machine Learning vào ứng dụng Web thực tế.
  • Lập trình viên (Developers): Mã nguồn mẫu và tư duy thiết kế hệ thống tách biệt giữa Frontend hiện đại (ReactJS, Ant Design) và RESTful API Backend (PHP, MySQL).
  • Doanh nghiệp lữ hành (SMEs): Kiến trúc chuyển đổi số chi phí thấp, tối ưu hóa quy trình quản lý đặt phòng, vé tour và gia tăng doanh số nhờ cá nhân hóa khách hàng.
  • Nhà nghiên cứu: Dữ liệu thực nghiệm về độ đo sai số RMSE và hiệu quả của độ tương tự Cosine trong không gian đánh giá du lịch.

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

1. Yêu cầu cấu hình tối thiểu để triển khai hệ thống là gì?

Hệ thống yêu cầu máy chủ Linux (Ubuntu 18.04+) hoặc Windows Server, RAM tối thiểu 2GB, CPU 2 Cores, cài đặt sẵn PHP 7.4 trở lên, MySQL 8.0 và Nginx/Apache Web Server.

2. Hệ thống giải quyết bài toán ma trận đánh giá thưa (Sparsity) như thế nào?

Giai đoạn hiện tại, hệ thống đặt ngưỡng lọc lân cận $k \ge 5$ và sử dụng giá trị đánh giá trung bình $\bar{r}_u$ để cân bằng dự đoán. Trong tương lai, kỹ thuật ma trận nhân tử (Matrix Factorization) sẽ được tích hợp để điền khuyết ma trận.

3. Hệ thống có thể tích hợp với các hệ thống ERP hoặc CRM có sẵn không?

Hoàn toàn có thể. Do backend được thiết kế theo chuẩn kiến trúc RESTful API, hệ thống dễ dàng kết nối dữ liệu hai chiều với các phần mềm quản trị quan hệ khách hàng (CRM) hoặc ERP bên thứ ba thông qua định dạng JSON.

4. Chi phí bảo trì và vận hành hàng tháng ước tính là bao nhiêu?

Nhờ sử dụng công nghệ mã nguồn mở, chi phí vận hành hàng tháng chỉ bao gồm phí thuê máy chủ đám mây (Cloud VPS) khoảng 150.000 – 300.000 VNĐ/tháng cho quy mô doanh nghiệp vừa và nhỏ.

5. Thuật toán kNN mất bao lâu để đưa ra danh sách gợi ý cho một người dùng?

Với tập dữ liệu hàng trăm địa điểm và người dùng hiện tại, thời gian tính toán độ tương tự và dự đoán chỉ mất từ $50\text{ ms} - 150\text{ ms}$, hoàn toàn đáp ứng tiêu chuẩn phản hồi thời gian thực trên môi trường web.


Kết luận

Khóa luận tốt nghiệp "Xây dựng website gợi ý điểm du lịch áp dụng thuật toán k láng giềng gần nhất" của sinh viên Phạm Thị Bích Ngân và Trần Mai Ngọc Thiệu (Trường Đại học Công nghệ Thông tin - ĐHQG TP.HCM) đã giải quyết trọn vẹn bài toán ứng dụng khoa học dữ liệu vào thực tiễn ngành thương mại điện tử du lịch. Bằng việc kết hợp hài hòa giữa nền tảng công nghệ mạnh mẽ (ReactJS, PHP, MySQL) và động cơ gợi ý thông minh User-based kNN với sai số $RMSE = 0.814$, đề tài không chỉ số hóa thành công các nghiệp vụ lữ hành phức tạp mà còn mở ra trải nghiệm du lịch cá nhân hóa vượt trội cho người dùng. Đây là tài liệu tham khảo kỹ thuật và mô hình ứng dụng giá trị cao cho cộng đồng học thuật cũng như các doanh nghiệp du lịch trên hành trình chuyển đổi số toàn diện.