Bối cảnh và vấn đề nghiên cứu

Trong bối cảnh bùng nổ thông tin và sự phát triển mạnh mẽ của ngành công nghiệp điện ảnh, số lượng tác phẩm được sản xuất và phát hành ngày càng lớn. Thực trạng này dẫn đến tình trạng quá tải thông tin, khiến khán giả gặp khó khăn trong việc tìm kiếm và lựa chọn các bộ phim phù hợp với sở thích cá nhân. Mặc dù các nền tảng trực tuyến như Netflix hay HBO đã chứng minh tính hiệu quả của các mô hình gợi ý tự động, nhưng tại các hệ thống rạp chiếu phim truyền thống và các cổng đặt vé trực tuyến, tính năng cá nhân hóa trải nghiệm vẫn chưa được tích hợp một cách toàn diện.

Đề tài "Xây dựng hệ thống khuyến nghị cho rạp chiếu phim" do sinh viên Nguyễn Cao Triều thực hiện dưới sự hướng dẫn của thầy Lê Văn Hạnh tại Trường Đại học Quốc tế Hồng Bàng (Khoa Công nghệ - Kỹ thuật, Bộ môn Công nghệ Thông tin, tháng 10/2024) tập trung giải quyết bài toán tối ưu hóa việc lựa chọn phim và hỗ trợ đặt vé cho người dùng, đặc biệt là nhóm đối tượng học sinh, sinh viên.

Đồ án xác định 5 mục tiêu nghiên cứu và triển khai cụ thể:

  1. Nghiên cứu và áp dụng các thuật toán khuyến nghị phù hợp (Collaborative Filtering, Content-Based Filtering và Hybrid Filtering) nhằm đề xuất phim dựa trên sở thích và hành vi của người dùng.
  2. Xây dựng cơ sở dữ liệu quản lý thông tin khách hàng (sở thích, lịch sử xem phim, đánh giá) và thông tin phim (thể loại, đạo diễn, diễn viên, ngày phát hành, độ tuổi, quốc gia) để làm đầu vào cho thuật toán.
  3. Thiết kế và phát triển giao diện tương tác trực quan, thân thiện, giúp người dùng dễ dàng tìm kiếm phim, xem lịch chiếu và nhận các danh sách đề xuất cá nhân hóa.
  4. Xác định các tiêu chí đo lường hiệu quả của hệ thống gợi ý thông qua mức độ tương đồng và phản hồi đánh giá của người dùng.
  5. Tích hợp mô hình khuyến nghị vào nền tảng đặt vé xem phim trực tuyến hoàn chỉnh.

Đối tượng nghiên cứu của đề tài là các thuật toán lọc cộng tác (Collaborative Filtering), lọc dựa trên nội dung (Content-Based Filtering), kỹ thuật kết hợp lai (Hybrid) cùng quy trình phát triển ứng dụng web đặt vé. Phạm vi nghiên cứu tập trung vào mô hình rạp chiếu phim tại Việt Nam, triển khai thực nghiệm trên tập dữ liệu đánh giá và danh mục phim tại thời điểm tháng 10 năm 2024.


Cơ sở lý thuyết và phương pháp

Đồ án xây dựng nền tảng lý thuyết dựa trên hai nhóm thuật toán khuyến nghị chính cùng kỹ thuật kết hợp lai (Hybrid):

1. Lọc cộng tác dựa trên người dùng (User-based Collaborative Filtering)

Phương pháp này khai thác hành vi đánh giá của người dùng để tìm kiếm những cá nhân có cùng sở thích (hệ số tương đồng cao), từ đó đưa ra gợi ý những bộ phim mà người dùng tương đồng đã đánh giá cao nhưng người dùng hiện tại chưa xem.

  • Đo lường độ tương đồng (Pearson Correlation): Đề tài sử dụng Hệ số tương quan Pearson ($r$) để tính toán mối tương quan giữa điểm số đánh giá của hai người dùng trên tập các bộ phim chung:

    $$r = \frac{\sum (x_i - \bar{x})(y_i - \bar{y})}{\sqrt{\sum (x_i - \bar{x})^2} \cdot \sqrt{\sum (y_i - \bar{y})^2}}$$

    Trong đó $x_i, y_i$ là điểm đánh giá của hai người dùng cho phim $i$; $\bar{x}, \bar{y}$ là điểm trung bình đánh giá của từng người dùng. Hệ số dao động từ $-1$ (đối nghịch hoàn toàn) đến $+1$ (tương đồng hoàn toàn).

  • Tính trọng số đánh giá (Weighted Rating) và điểm trung bình có trọng số (Weighted Average):

    $$\text{Weighted Rating} = r \times \text{Rating}$$

    $$\text{Weighted Average} = \frac{\sum \text{Weighted Rating}}{\sum |r|}$$

2. Lọc dựa trên nội dung (Content-Based Filtering)

Phương pháp này phân tích các thuộc tính đặc trưng của phim (thể loại, thông tin mô tả) mà người dùng đã từng đánh giá cao để tìm kiếm các bộ phim có thuộc tính tương đồng.

  • Vector hóa đặc trưng bằng TF-IDF (Term Frequency - Inverse Document Frequency):

    • Tần suất thể loại: $\text{TF}(t, d) = \frac{\text{Số lần từ } t \text{ xuất hiện trong tài liệu } d}{\text{Tổng số từ trong } d}$
    • Nghịch đảo tần suất văn bản: $\text{IDF}(t, D) = \log\left(\frac{N}{\text{Số tài liệu chứa từ } t}\right)$
    • Trọng số: $\text{TF-IDF}(t, d, D) = \text{TF}(t, d) \times \text{IDF}(t, D)$
  • Tính độ tương đồng Cosine (Cosine Similarity): Xác định góc giữa hai vector đặc trưng $\vec{A}$ và $\vec{B}$ đại diện cho hai bộ phim:

    $$\text{Cosine Similarity} = \cos(\theta) = \frac{\vec{A} \cdot \vec{B}}{|\vec{A}| \times |\vec{B}|}$$

3. Mô hình kết hợp lai (Hybrid Filtering)

Hệ thống kết hợp điểm số từ hai phương pháp trên thông qua trọng số $\alpha$ ($0 \le \alpha \le 1$):

$$\text{Final Score}(\text{movie}) = \alpha \times \text{Score}{\text{CF}}(\text{movie}) + (1 - \alpha) \times \text{Score}{\text{CBF}}(\text{movie})$$

Hệ thống sắp xếp các bộ phim có $\text{Final Score}$ từ cao xuống thấp và chọn Top $N$ phim đề xuất cho người dùng.


Thiết kế và triển khai

Hệ thống được thiết kế theo kiến trúc phân tầng đa dịch vụ (Microservices kết hợp Client-Server), phân tách rõ ràng giữa tầng giao diện, tầng điều phối nghiệp vụ và tầng xử lý học máy.

[ Giao diện React.js ] <---> [ Backend Spring Boot (Java) ] <---> [ Microservice Flask (Python) ]
                                         |                                     |
                                         +---------> [ MySQL Database ] <------+

1. Kiến trúc công nghệ và phân công nhiệm vụ

Thành phần Công nghệ / Ngôn ngữ Vai trò và nhiệm vụ chính
Frontend React.js (JavaScript), HTML5/CSS3 Xây dựng giao diện người dùng tương tác, tiếp nhận đánh giá, hiển thị danh mục phim, lịch chiếu, đặt vé và kết quả khuyến nghị.
Main Backend Spring Boot (Java), RESTful API Quản lý logic nghiệp vụ, xác thực người dùng, quản lý đặt vé/lịch chiếu, lưu trữ dữ liệu vào MySQL và làm trung gian giao tiếp với Flask.
AI Service Flask (Python), Pandas, Scikit-learn Truy xuất dữ liệu đánh giá từ CSDL/CSV, thực thi thuật toán User-based CF, TF-IDF, Cosine Similarity và trả về danh sách gợi ý qua API.
Cơ sở dữ liệu MySQL, MySQL Workbench Lưu trữ dữ liệu quan hệ gồm người dùng, phim, suất chiếu, lịch sử đánh giá và đơn hàng.
Môi trường IDE IntelliJ IDEA, VS Code IntelliJ IDEA phục vụ phát triển Spring Boot; VS Code phục vụ phát triển React.js và Flask microservice.

2. Thiết kế cơ sở dữ liệu quan hệ

Hệ thống xây dựng 11 bảng thực thể trong MySQL để phục vụ các phân hệ quản trị, đặt vé và khuyến nghị:

  1. users: Lưu trữ thông tin tài khoản (id, name, email, password, role mặc định là 'KhachHang', avatar, remember_token, timestamps).
  2. movies: Lưu trữ thông tin chi tiết phim (maPhim, tenPhim, trailer, hinhAnh, moTa, ngayKhoiChieu, danhGia, hot, dangChieu, sapChieu, theLoai, quocGia, gioiTinh, doTuoi, timestamps).
  3. user_history: Bảng phục vụ thuật toán khuyến nghị (maHistory, maUser, maPhim, ratings với ràng buộc từ 1 đến 5 sao, has_watched kiểu boolean).
  4. showtime: Quản lý lịch chiếu (maLichChieu, ngayChieu, gioChieu, maPhim, maRap, giaVeThuong, giaVeVip).
  5. rapchieu: Quản lý cụm rạp (maRap, tenRap, maTinh_id, diaChi).
  6. province: Quản lý địa bàn tỉnh thành (maTinh, tenTinh).
  7. orderdetail: Lưu trữ giao dịch đặt vé (maOrder, userId, maPhim, maLichChieu, danhSachGhe, tongTien).
  8. comment: Bình luận về phim và bài viết (maComment, username, useremail, comment, maBaiViet, maPhim).
  9. feedback: Ghi nhận phản hồi người dùng (maFeedback, email, tieuDe, noiDung, ngayXuLy, noiDungXuLy).
  10. tbnews: Quản lý tin tức điện ảnh (maBaiViet, title, content).
  11. banner_phim: Quản lý ảnh bìa quảng cáo trên trang chủ (maBanner, duongDan, fileName, hinhAnh).

Nội dung chính theo từng chương

Chương 1: Tổng quan về đề tài

Chương 1 trình bày lý do chọn đề tài xuất phát từ nhu cầu giải trí tăng cao và những khó khăn của khách hàng khi lựa chọn phim giữa hàng trăm tác phẩm phát hành mỗi năm. Tác giả khảo sát các mô hình đề xuất của Netflix, phân tích ý nghĩa thực tiễn đối với rạp phim (tăng tỷ lệ lấp đầy ghế, tối ưu tiếp thị) và với người học (nắm vững kỹ năng xử lý dữ liệu và phát triển ứng dụng full-stack). Đồng thời, chương này liệt kê chi tiết các yêu cầu chức năng: quản lý người dùng, tìm kiếm phim, đánh giá nhận xét, xử lý dữ liệu gợi ý qua Flask API, giao diện React.js, quản trị dữ liệu MySQL và thống kê báo cáo.

Chương 2: Các cơ sở lý thuyết sử dụng trong đề tài

Chương 2 đi sâu vào toán học và thuật toán nền tảng của hệ thống khuyến nghị:

  • Phân tích chi tiết thuật toán User-based Collaborative Filtering và giải thích lý do lựa chọn (độ cá nhân hóa cao, dễ triển khai với dữ liệu vừa và nhỏ, không cần phân tích sâu nội dung). Tác giả cung cấp bài toán mẫu (test case) tính toán bằng tay từng bước cho User 1 với các bước: tính trung bình điểm đánh giá, tính tử số và mẫu số của Pearson Correlation ($r$), tính điểm dự đoán Weighted Rating cho các phim chưa xem (Movie D, Movie E).
  • Phân tích chi tiết Content-Based Filtering: Quy trình chuyển đổi danh mục thể loại (Drama, Sci-Fi, Comedy, Animation...) sang ma trận One-Hot Encoding, tính chỉ số IDF, lập bảng ma trận TF-IDF cho từng bộ phim và tính tích vô hướng để xác định Cosine Similarity giữa các phim.
  • Trình bày công thức kết hợp Hybrid có trọng số $\alpha$ (thử nghiệm với $\alpha = 0.8$) để đưa ra danh sách đề xuất tổng hợp Top $N$. Giới thiệu vai trò kỹ thuật của ReactJS, Spring Boot, Flask và MySQL trong chuỗi xử lý dữ liệu.

Chương 3: Các công nghệ và công cụ sử dụng trong đề tài

Chương này mô tả chi tiết các công cụ và ngôn ngữ được áp dụng trong đồ án:

  • Môi trường phát triển: IntelliJ IDEA tối ưu cho quản lý mã nguồn Java Spring Boot và kết nối cơ sở dữ liệu; Visual Studio Code hỗ trợ tiện ích mở rộng cho React.js (ES7+ snippets) và Python Extension để gỡ lỗi Flask server; MySQL Workbench dùng để mô hình hóa sơ đồ thực thể EER và quản trị cơ sở dữ liệu quan hệ.
  • Ngôn ngữ lập trình: Java (xây dựng backend nghiệp vụ ổn định, hiệu năng cao), Python (tận dụng thư viện học máy để tính toán ma trận khuyến nghị), và JavaScript (xây dựng giao diện tương tác động với React.js).

Chương 4: Phân tích thiết kế hệ thống

Chương 4 hoàn thiện thiết kế kỹ thuật của hệ thống:

  • Xây dựng biểu đồ Use Case và phân tích chức năng chi tiết cho 8 phân hệ: Quản lý phim, Quản lý rạp chiếu, Quản lý lịch chiếu, Quản lý người dùng, Đặt vé và thanh toán ghế ngồi, Phản hồi và bình luận, Quản lý banner, Theo dõi lịch sử xem.
  • Trình bày cấu trúc chi tiết của 11 bảng dữ liệu trong MySQL với đầy đủ kiểu dữ liệu, khóa chính, khóa ngoại và ràng buộc (CHECK constraint cho điểm đánh giá 1–5).
  • Mô tả quy trình luân chuyển dữ liệu 4 bước giữa ReactJS $\rightarrow$ Spring Boot $\rightarrow$ MySQL $\rightarrow$ Flask $\rightarrow$ Spring Boot $\rightarrow$ ReactJS. Hướng dẫn khởi tạo và cấu trúc thư mục chuẩn của một dự án Spring Boot (config, controller, model, repository, service, static, templates, application.properties).

Chương 5: Triển khai ứng dụng

Chương 5 trình bày kết quả cài đặt và các kịch bản thực nghiệm:

  • Kiểm thử mô hình khuyến nghị: Demo thuật toán Collaborative Filtering và Content-Based Filtering trực tiếp trên tệp CSV; demo kết nối truy vấn dữ liệu từ MySQL; demo tích hợp API Flask kết hợp 2 thuật toán để trả về JSON danh sách phim đề xuất.
  • Giao diện người dùng hoàn thiện: Minh họa ảnh chụp màn hình các trang chức năng bao gồm: Giao diện trang chủ, Giao diện trang chi tiết phim, Giao diện đăng ký/đăng nhập, Giao diện gửi phản hồi, Giao diện trang cá nhân, Giao diện quản lý phim và lịch chiếu dành cho Admin, Giao diện tìm kiếm phim đa tiêu chí.

Kết quả và đóng góp

1. Kết quả kỹ thuật đạt được

  • Xây dựng thành công hệ thống gợi ý phim lai ghép (Hybrid) kết hợp giữa User-based Collaborative Filtering (dựa trên tương quan Pearson) và Content-Based Filtering (dựa trên vector thể loại TF-IDF và độ tương đồng Cosine).
  • Thiết kế và vận hành thành công mô hình tích hợp đa nền tảng: Spring Boot (Java) đóng vai trò backend quản trị dữ liệu và giao tiếp qua REST API với microservice Flask (Python) chuyên trách tính toán mô hình học máy.
  • Triển khai hoàn chỉnh ứng dụng web đặt vé với giao diện React.js, hỗ trợ đầy đủ quy trình từ đăng ký, xem chi tiết phim, theo dõi lịch chiếu, chọn ghế, lưu lịch sử đánh giá (1–5 sao) đến nhận danh sách phim gợi ý theo thời gian thực.
  • Thiết lập cơ sở dữ liệu quan hệ MySQL gồm 11 bảng được chuẩn hóa, quản lý toàn diện thông tin rạp, phim, suất chiếu, người dùng và lịch sử tương tác.

2. Đóng góp của đề tài

  • Cung cấp một tài liệu kỹ thuật chi tiết với các bước tính toán thuật toán cụ thể bằng tay (tính Pearson, TF-IDF, Cosine Similarity trên test case thực tế) làm cơ sở tham chiếu rõ ràng cho việc lập trình thuật toán.
  • Đưa ra giải pháp kiến trúc dung hòa giữa sức mạnh xử lý nghiệp vụ của Spring Boot và thế mạnh tính toán giải thuật khoa học dữ liệu của Python Flask trên cùng một hệ thống thực tế.

Hạn chế và hướng nghiên cứu tiếp

  • Hạn chế:
    • Dữ liệu thử nghiệm của đồ án được triển khai trên quy mô tập dữ liệu vừa và nhỏ, chủ yếu qua tệp CSV và bảng dữ liệu thử nghiệm trong MySQL.
    • Thuật toán lọc cộng tác dựa trên người dùng có thể gặp hiện tượng khởi đầu lạnh (Cold Start) khi người dùng mới chưa có lịch sử đánh giá phim trong bảng user_history.
    • Thuật toán lọc theo nội dung mới chỉ tập trung xử lý đặc trưng thể loại phim, chưa tích hợp sâu các đặc trưng văn bản dài như tóm tắt nội dung hay thông tin đạo diễn, diễn viên vào không gian vector.
  • Hướng nghiên cứu tiếp (theo tài liệu):
    • Mở rộng và tối ưu hóa các thuật toán khuyến nghị để xử lý hiệu quả với tập dữ liệu lớn hơn.
    • Tích hợp thêm các kỹ thuật nâng cao như Matrix Factorization (Phân rã ma trận - MF) hoặc k-Nearest Neighbors (k-NN) trong Collaborative Filtering.
    • Phát triển thêm các tiêu chí đo lường hiệu quả hệ thống trực tiếp trên môi trường thực tế (như tỷ lệ nhấp chuột CTR, số lượng vé chuyển đổi thành công từ gợi ý).

Giá trị tham khảo

Đồ án là tài liệu tham khảo thực tế và phù hợp cho:

  • Sinh viên ngành Công nghệ Thông tin, Kỹ thuật Phần mềm và Khoa học Dữ liệu: Tham khảo cấu trúc một đồ án chuyên ngành/khóa luận tốt nghiệp xây dựng hệ thống khuyến nghị từ khâu khảo sát, mô hình hóa toán học đến lập trình ứng dụng.
  • Lập trình viên phát triển ứng dụng Full-stack đa dịch vụ: Tham khảo mô hình tích hợp giữa frontend React.js, backend chính Spring Boot và microservice xử lý AI/Machine Learning bằng Python Flask.
  • Người nghiên cứu thuật toán Recommender Systems: Tham khảo các bảng tính test case chi tiết về cách tính Pearson Correlation và TF-IDF/Cosine Similarity từng bước được trình bày tường minh trong tài liệu.

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

1. Đồ án sử dụng kỹ thuật khuyến nghị nào và công thức đo lường tương đồng là gì?

Hệ thống sử dụng hai kỹ thuật chính:

  • User-based Collaborative Filtering: Đo độ tương đồng sở thích giữa các người dùng bằng Hệ số tương quan Pearson ($r$), sau đó tính điểm dự đoán cho phim chưa xem bằng trung bình trọng số ($\text{Weighted Average}$).
  • Content-Based Filtering: Vector hóa thể loại phim bằng kỹ thuật TF-IDF và đo độ tương đồng giữa các phim bằng Độ tương đồng Cosine (Cosine Similarity).

2. Hai thuật toán gợi ý được kết hợp trong hệ thống theo phương pháp nào?

Hệ thống sử dụng mô hình kết hợp có trọng số (Hybrid Filtering) với công thức: $$\text{Final Score}(\text{movie}) = \alpha \times \text{Score}{\text{CF}}(\text{movie}) + (1 - \alpha) \times \text{Score}{\text{CBF}}(\text{movie})$$ Trong thử nghiệm mẫu của đồ án, hệ số trọng số $\alpha$ được thiết lập bằng $0.8$, sau đó hệ thống sắp xếp điểm từ cao xuống thấp để lấy ra Top $N$ phim đề xuất.

3. Kiến trúc hệ thống phân chia vai trò của Spring Boot và Flask như thế nào?

Spring Boot (Java) đóng vai trò backend trung tâm, quản lý các nghiệp vụ đặt vé, xác thực tài khoản và lưu trữ dữ liệu vào MySQL. Flask (Python) hoạt động như một microservice độc lập, nhận yêu cầu từ Spring Boot để chạy các mô hình học máy trên dữ liệu đánh giá và trả về danh sách mã phim được gợi ý cho Spring Boot điều phối về giao diện React.js.

4. Dữ liệu đánh giá của người dùng được lưu trữ và ràng buộc như thế nào trong CSDL?

Dữ liệu đánh giá được lưu tại bảng user_history trong MySQL với các trường: maHistory (khóa chính tự tăng), maUser (khóa ngoại liên kết users), maPhim (khóa ngoại liên kết movies), ratings (điểm số có ràng buộc CHECK (ratings BETWEEN 1 AND 5)) và has_watched (kiểu BOOLEAN ghi nhận trạng thái đã xem).


Kết luận

Đồ án chuyên ngành "Xây dựng hệ thống khuyến nghị cho rạp chiếu phim" của tác giả Nguyễn Cao Triều đã hoàn thành đầy đủ mục tiêu nghiên cứu và triển khai một giải pháp gợi ý phim kết hợp (Hybrid) trên nền tảng web đặt vé. Đề tài kết hợp thành công quy trình tính toán khoa học dữ liệu (Pearson Correlation, TF-IDF, Cosine Similarity) với kiến trúc phần mềm phân tầng hiện đại sử dụng React.js, Spring Boot, Flask và MySQL. Báo cáo cung cấp thiết kế chi tiết từ biểu đồ chức năng, mô hình CSDL 11 bảng đến các kịch bản kiểm thử thuật toán, mang lại giá trị tham khảo hữu ích cho các dự án phát triển hệ thống khuyến nghị tương tự.