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

Nhu cầu tìm kiếm nhà ở tại các đô thị lớn như Hà Nội luôn ở mức cao, với hai nhóm đối tượng chính là sinh viên và người lao động ngoại tỉnh. Theo số liệu được dẫn trong đồ án, tính đến tháng 9/2021, Sở Lao động – Thương binh và Xã hội Hà Nội ghi nhận khoảng 106.000 lao động tự do ngoại tỉnh cư trú không cố định trên địa bàn, trong khi thành phố có gần 70 trường đại học và 22 trường cao đẳng với tổng quy mô trên 300.000 sinh viên. Phần lớn nhóm dân số này đều có nhu cầu tìm kiếm nơi ở thông qua internet.

Khảo sát thực tế cho thấy các website tìm kiếm nhà trọ hiện nay như phongtro123.com, dithuenha.com và phongnhatro.com — ba trang có lượng truy cập cao theo thống kê của similarweb.com trong giai đoạn tháng 9/2021 đến tháng 11/2021 (kenhnhatro.com đạt 413.877 lượt, phongnhatro.com đạt 65.261 lượt) — đều hoạt động theo cơ chế tìm kiếm truyền thống: trả về kết quả khớp trực tiếp với các tiêu chí (khu vực, giá, diện tích) mà người dùng nhập vào. Cơ chế này chưa khai thác mối tương quan giữa nhu cầu của các người dùng khác nhau và chưa tích hợp học máy vào chức năng tư vấn.

Mục tiêu và nhiệm vụ nghiên cứu:

  1. Thử nghiệm hiệu quả của phương pháp khai phá nhật ký truy vấn (query log mining) bằng kỹ thuật phân cụm K-means trên tập dữ liệu AOL.
  2. Xây dựng website tư vấn tìm kiếm nhà cho thuê đơn giản.
  3. Thử nghiệm và đánh giá phương pháp khai phá nhật ký truy vấn áp dụng trực tiếp trên website tự xây dựng.

Đối tượng nghiên cứu: Nhật ký truy vấn (query log) người dùng trong hệ thống tìm kiếm nhà cho thuê; kỹ thuật phân cụm K-means trong khai phá dữ liệu.

Phạm vi: Website tìm kiếm nhà cho thuê tự xây dựng, thử nghiệm bổ sung trên tập dữ liệu AOL được công bố năm 2006. Thời gian thực hiện trong năm học 2021.


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

Khung lý thuyết và mô hình tham chiếu

Đồ án dựa trên công trình nghiên cứu "Hệ tư vấn website cho máy tìm kiếm dựa trên khai phá query log" của Nguyễn Song Hà và cộng sự, áp dụng nguyên lý lọc cộng tác (collaborative filtering) trong đó các truy vấn thay thế vai trò của người dùng: hai truy vấn tương đồng được xem như hai người dùng có sở thích giống nhau. Phương pháp này giải quyết bài toán không thể định danh người dùng trong các hệ tìm kiếm không bắt buộc đăng nhập.

Các khái niệm lý thuyết được sử dụng bao gồm: hệ tư vấn (recommender system), khai phá nhật ký truy vấn (query log mining), phân cụm phân hoạch (partitional clustering), độ đo Silhouette, phương pháp khuỷu tay (Elbow method), biểu diễn văn bản bằng mô hình túi từ (bag of words) và trọng số TF-IDF, giảm số chiều bằng PCA, mã hóa One-Hot Encoding cho thuộc tính hạng mục, MinMax Scaler cho thuộc tính số, và khoảng cách Euclide dể tính độ tương đồng giữa các vector truy vấn.

Phương pháp nghiên cứu

Đồ án áp dụng phương pháp thiết kế và xây dựng hệ thống kết hợp với thực nghiệm:

  • Khai phá dữ liệu: Phân cụm K-means, tiền xử lý văn bản (chuẩn hóa, loại từ dừng, đưa về từ gốc), tính trọng số TF-IDF, giảm số chiều PCA, mã hóa One-Hot Encoding và MinMax Scaler.
  • Thu thập dữ liệu: Crawl tự động từ phongtro123.com bằng thư viện BeautifulSoup và requests (Python).
  • Đánh giá: Điểm Silhouette, phương pháp Elbow, tập kiểm thử thủ công gồm 5 query với 3 URL mong muốn mỗi query.

Nguồn dữ liệu

Nguồn Mô tả Quy mô
Tập dữ liệu AOL (2006) Query log máy tìm kiếm, gồm các trường AnonID, Query, QueryTime, ItemRank, ClickURL ~3 triệu query; sau lọc chủ đề điện tử còn ~15.000 query
Website phongtro123.com (crawl) Bài đăng nhà cho thuê ~1.000 bài đăng
Query log website tự xây dựng Thu thập bằng tay trong quá trình thử nghiệm 2.000 query

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

Chương 1 – Bài toán tư vấn tìm kiếm nhà cho thuê

Chương này xác lập bài toán cần giải quyết, khảo sát hiện trạng ba website nhà trọ phổ biến và trình bày giải pháp tổng thể. Kết quả khảo sát chỉ ra điểm chung của các website hiện tại là chưa áp dụng học máy vào chức năng tìm kiếm: phongtro123.com và dithuenha.com cho phép tìm theo các hộp chọn tiêu chí cố định; phongnhatro.com không có bộ lọc tìm kiếm. Từ đó, đồ án xác định ba công việc cần thực hiện: (1) thử nghiệm khai phá truy vấn trên tập AOL, (2) xây dựng website tư vấn nhà cho thuê, (3) thử nghiệm khai phá truy vấn trên website tự xây dựng. Giải pháp đề xuất sử dụng thuật toán K-means để phân cụm các truy vấn, sau đó xếp hạng URL theo độ tương đồng Euclide giữa query mới và các query cùng cụm đã click vào URL đó.

Chương 2 – Kỹ thuật phân cụm dựa trên K-means trong khai phá nhật ký truy vấn

Chương này xây dựng nền tảng lý thuyết cho toàn bộ đồ án. Nội dung bao gồm:

  • Tổng quan phân cụm: Định nghĩa, các bước cơ bản, các kiểu dữ liệu và độ đo tương tự (khoảng cách Minkowski, Euclide, Manhattan với thuộc tính khoảng; hệ số Jaccard với thuộc tính nhị phân; phương pháp Label Encoding và One-Hot Encoding với thuộc tính hạng mục). Trình bày sáu phương pháp phân cụm điển hình: phân hoạch, phân cấp (CURE, BIRCH), dựa trên mật độ (DBSCAN, OPTICS, DENCLUE), dựa trên lưới (STING, WAVECluster, CLIQUE), dựa trên mô hình, và có ràng buộc.
  • Thuật toán K-means: Nguyên lý, ba bước thực thi (khởi tạo tâm cụm, gán điểm vào cụm gần nhất theo khoảng cách Euclide, cập nhật tâm cụm), điều kiện dừng. Hai kỹ thuật chọn số cụm: Elbow method (dựa trên chỉ số Inertia) và Average Silhouette method (điểm Silhouette trong đoạn [-1, 1], giá trị càng cao phân cụm càng tốt).
  • Khai phá nhật ký truy vấn: Cấu trúc query log (Query, URL, Time, IP, user agents, Cookie), cấu trúc dữ liệu AOL và MSN. Quy trình hai giai đoạn: xử lý ngoại tuyến (tiền xử lý → phân cụm K-means → xác định tập URL tư vấn theo ngưỡng θ) và xử lý trực tuyến (tiền xử lý query mới → phân cụm → xếp hạng URL theo công thức rank(u) dựa trên tổng độ tương đồng Euclide).
  • Tiền xử lý dữ liệu: Xử lý văn bản (TF-IDF, giảm số chiều PCA và LSA, độ tương tự cosine); xử lý dữ liệu hỗn hợp (Tìm kiếm và thay thế, Label Encoding, One-Hot Encoding, Custom Binary Encoding).

Chương 3 – Ứng dụng website tìm nhà cho thuê dựa trên khai phá nhật ký truy vấn

Chương này trình bày phân tích và thiết kế hệ thống. Website được xây dựng theo mô hình Client-Server, cung cấp hai chức năng chính: Tìm kiếm (tích hợp tư vấn) và Xem chi tiết bài đăng. Dữ liệu bài đăng (~1.000 bài) được thu thập tự động từ phongtro123.com bằng BeautifulSoup, requests, csv, os. Sau thu thập, dữ liệu được chuẩn hóa với các trường: id, title, type, address, price, area, des, name, phone, imgLink. Cơ sở dữ liệu gồm hai quan hệ chính:

  • Post: lưu thông tin bài đăng (id, title, type, address, price, area, des, name, phone, imgLink).
  • Query: lưu nhật ký truy vấn gồm 11 thuộc tính (district, ward, type, air, nl, wifi, xe, dtmin, dtmax, giamin, giamax) và clickedURL.

Biểu đồ usecase mô tả hai actor chính; biểu đồ tuần tự thể hiện luồng xử lý từ bước người dùng nhập tiêu chí đến khi hệ thống trả về danh sách kết quả tìm kiếm kết hợp danh sách bài đăng tư vấn. Máy chủ được cài đặt bằng Flask (Python 3.8), kết nối MySQL 8.x.

Chương 4 – Kết quả thử nghiệm và đánh giá

Chương này trình bày hai vòng thử nghiệm độc lập:

Thử nghiệm trên tập AOL: Môi trường Python 3.8, Visual Studio Code 1.3, các thư viện Sklearn, Pandas, Nltk, Wordcloud, Matplotlib. Từ ~3 triệu query, lọc chủ đề điện tử thu được ~15.000 query. Sau tiền xử lý, làm giàu query bằng cách bổ sung URL vào nội dung query, tính TF-IDF, giảm số chiều xuống còn 2 bằng PCA. Phương pháp Elbow cho các ứng viên k ∈ {3, 4, 5}; điểm Silhouette chọn k = 3 (điểm 0,780, cao nhất trong ba trường hợp). Kết quả đánh giá trên 5 query kiểm thử: tỷ lệ URL mong muốn được tư vấn trung bình ~67% (danh sách top 5 URL trả về chứa ít nhất 2/3 URL mong muốn).

Thử nghiệm trên website nhà cho thuê: Tập dữ liệu 2.000 query thu thập bằng tay, phân theo 7 nhóm chủ đề (theo địa điểm, theo loại nhà trọ, theo loại nhà trọ có giới hạn giá/diện tích, theo chung cư mini, theo chung cư mini có giới hạn, theo yêu cầu nội thất, theo giá và diện tích). Tiền xử lý: bỏ các trường {id, district, ward, clickedURL}; áp dụng One-Hot Encoding cho {type, air, nl, wifi, xe} và MinMax Scaler cho {dtmin, dtmax, giamin, giamax} bằng ColumnTransformer trong Pipeline của Sklearn. Phương pháp Elbow xác định số cụm phù hợp cho tập website; kết quả phân cụm được kiểm chứng qua điểm Silhouette và minh họa qua ba ví dụ tìm kiếm cụ thể trên giao diện website.


Thiết kế và triển khai

Kiến trúc hệ thống: Mô hình Client-Server. Client là giao diện web hiển thị kết quả tìm kiếm và danh sách tư vấn; Server xử lý yêu cầu HTTP(S), chạy logic phân cụm và truy vấn cơ sở dữ liệu.

Công nghệ sử dụng:

Thành phần Công nghệ / Thư viện Phiên bản
Ngôn ngữ lập trình Python 3.8
Web framework Flask —
IDE Visual Studio Code 1.3
Cơ sở dữ liệu MySQL 8.x
Machine learning Sklearn (KMeans, PCA, Pipeline, ColumnTransformer, MinMaxScaler, OneHotEncoder) —
Xử lý dữ liệu Pandas —
Xử lý ngôn ngữ Nltk —
Trực quan hóa Matplotlib, Wordcloud —
Thu thập dữ liệu BeautifulSoup, requests —

Quy trình xử lý ngoại tuyến: Tiền xử lý → TF-IDF / One-Hot + MinMax → PCA → K-means → Xác định tập URL theo ngưỡng θ → Lưu mô hình cụm.

Quy trình xử lý trực tuyến: Nhận query mới → Tiền xử lý → Áp dụng mô hình → Xếp hạng URL theo rank(u) → Trả về top N URL tư vấn (N = 5 trong thử nghiệm AOL).

Kiểm thử: Đánh giá định lượng bằng tập 5 query thủ công (AOL); đánh giá định tính qua ba ví dụ truy vấn minh họa trực tiếp trên website (thử nghiệm nhà cho thuê).


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

Kết quả chính:

  • Trên tập AOL (~15.000 query điện tử): số cụm tối ưu k = 3 (điểm Silhouette 0,780); tỷ lệ URL tư vấn đúng trung bình đạt ~67% trên 5 query kiểm thử.
  • Trên website nhà cho thuê (2.000 query, 7 nhóm chủ đề): xác định được số cụm phù hợp bằng phương pháp Elbow kết hợp Silhouette; hệ thống trả về danh sách bài đăng tư vấn ("TIN ĐỀ XUẤT") song song với kết quả tìm kiếm thông thường, được kiểm chứng qua ba ví dụ tìm kiếm cụ thể trên giao diện.

Giải pháp và sản phẩm đề xuất: Website tư vấn tìm nhà cho thuê tích hợp chức năng tư vấn dựa trên phân cụm nhật ký truy vấn, sử dụng Flask và MySQL, với dữ liệu ~1.000 bài đăng crawl từ phongtro123.com.

Đóng góp so với nghiên cứu trước: Đồ án mở rộng công trình của Nguyễn Song Hà và cộng sự (vốn áp dụng trên query log dạng văn bản của máy tìm kiếm thông thường) sang bài toán tìm kiếm nhà cho thuê với dữ liệu truy vấn hỗn hợp (categories + numeric), đòi hỏi pipeline tiền xử lý khác biệt (One-Hot Encoding + MinMax Scaler thay cho TF-IDF).


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

Đồ án không liệt kê tường minh một mục riêng về hạn chế, nhưng từ phạm vi thực hiện có thể xác định một số điểm sau:

  • Tập dữ liệu AOL được công bố từ năm 2006, nhiều URL trong bộ dữ liệu đã không còn tồn tại, ảnh hưởng đến khả năng đánh giá khách quan kết quả tư vấn.
  • Tập query log website nhà cho thuê chỉ gồm 2.000 query thu thập bằng tay, chưa phản ánh điều kiện vận hành thực tế với quy mô lớn.
  • Website được xây dựng ở mức demo với ~1.000 bài đăng; cơ sở dữ liệu chưa được tối ưu hóa cho môi trường sản xuất.
  • Hướng mở: mở rộng quy mô dữ liệu thực, thử nghiệm các thuật toán phân cụm khác (DBSCAN, phân cụm mờ FCM), bổ sung các phương pháp làm giàu query (xác định chủ đề ẩn LSA), và tích hợp nhận dạng phiên (session) người dùng để cải thiện chất lượng tư vấn.

Giá trị tham khảo

Đồ án phù hợp với các đối tượng sau:

  • Sinh viên ngành Công nghệ thông tin, Hệ thống thông tin đang tìm hiểu về khai phá dữ liệu, thuật toán phân cụm K-means, hoặc xây dựng hệ thống tư vấn; đặc biệt là phần lý thuyết Chương 2 về các kiểu dữ liệu, độ đo tương tự và quy trình khai phá nhật ký truy vấn hai giai đoạn.
  • Sinh viên thực hiện đồ án tốt nghiệp về recommender system tham khảo quy trình từ thu thập dữ liệu (crawl) đến xây dựng pipeline tiền xử lý hỗn hợp và triển khai ứng dụng web bằng Flask + MySQL.
  • Người làm đề tài về tìm kiếm bất động sản hoặc tìm kiếm thông tin tham khảo cách mô hình hóa truy vấn người dùng và phương pháp xếp hạng URL dựa trên độ tương đồng Euclide giữa các vector truy vấn.

Phần đáng tham khảo nhất là Mục 2.4 (quy trình khai phá nhật ký truy vấn, công thức rank(u)), Mục 2.3 (xử lý dữ liệu hỗn hợp), và Chương 4 (cách thiết lập pipeline Sklearn kết hợp ColumnTransformer cho dữ liệu categories + numeric).


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

1. Tại sao đồ án chọn thuật toán K-means thay vì các thuật toán phân cụm khác như DBSCAN hay phân cụm phân cấp?
Đồ án lựa chọn K-means do tính hiệu quả cho chất lượng phân cụm với độ chính xác có thể đạt trên 90% (theo đánh giá của tác giả) và đặc biệt là thuật toán có độ phức tạp thấp, dễ triển khai. Trong phạm vi đồ án, tập dữ liệu thuộc loại phân cụm phân hoạch và K-means là phương pháp heuristic điển hình cho loại này.

2. Trên tập dữ liệu AOL, số cụm k = 3 được chọn dựa trên tiêu chí nào và kết quả điểm cụ thể là bao nhiêu?
Phương pháp Elbow cho ra các ứng viên k ∈ {3, 4, 5}; sau đó điểm Silhouette được tính cho từng trường hợp: k = 3 đạt 0,780; k = 4 đạt 0,631; k = 5 đạt 0,642. Điểm Silhouette cao nhất tại k = 3 dẫn đến lựa chọn số cụm này.

3. Dữ liệu query log trên website nhà cho thuê khác tập AOL ở điểm nào, và điều đó ảnh hưởng thế nào đến quy trình tiền xử lý?
Tập AOL gồm các query dạng văn bản (tiếng Anh) nên dùng TF-IDF để biểu diễn và PCA để giảm số chiều. Tập query log website nhà cho thuê gồm 11 thuộc tính hỗn hợp (7 thuộc tính hạng mục: district, ward, type, air, nl, wifi, xe; và 4 thuộc tính số: dtmin, dtmax, giamin, giamax), do đó cần áp dụng One-Hot Encoding cho thuộc tính hạng mục và MinMax Scaler cho thuộc tính số thông qua ColumnTransformer trong Pipeline của Sklearn.

4. Hệ thống tư vấn xếp hạng URL trả về cho người dùng bằng cách nào?
Sau khi query mới được phân vào một cụm, tập URL trong cụm đó được xếp hạng bằng công thức rank(u) = Σ 1/sim(q, qᵢ), trong đó sim(q, qᵢ) là khoảng cách Euclide giữa query mới q và query qᵢ cùng click vào URL u. URL có rank cao hơn (nhiều query tương đồng cùng click vào) được đưa lên trước trong danh sách tư vấn. Đồ án chọn top 5 URL để tư vấn trong thử nghiệm AOL.

5. Kết quả đánh giá tư vấn trên tập AOL đạt mức nào và phương pháp đánh giá là gì?
Đồ án xây dựng tập kiểm thử thủ công gồm 5 query, mỗi query gồm 3 URL được coi là kết quả mong muốn (tham khảo từ kết quả tìm kiếm AOL thực tế kết hợp với dataset cũ). Top 5 URL trả về từ thuật toán được so sánh với danh sách mong muốn; tỷ lệ trung bình đạt ~67%, tức danh sách trả về chứa ít nhất 2 trong 3 URL mong muốn cho hầu hết các query kiểm thử.


Kết luận

Đồ án xây dựng và thử nghiệm một hệ thống tư vấn tìm kiếm nhà cho thuê dựa trên khai phá nhật ký truy vấn bằng kỹ thuật phân cụm K-means, áp dụng phương pháp lọc cộng tác trong đó các truy vấn đóng vai trò đại diện cho người dùng. Kết quả thực nghiệm trên tập dữ liệu AOL đạt tỷ lệ tư vấn đúng ~67%, xác nhận tính khả thi của phương pháp trước khi chuyển sang áp dụng trên website tự xây dựng với dữ liệu truy vấn hỗn hợp. Sản phẩm cuối cùng là một website chức năng tích hợp tư vấn, trả về đồng thời kết quả tìm kiếm thông thường và danh sách bài đăng được tư vấn dựa trên nhu cầu tương đồng của người dùng khác. Đồ án đặt nền tảng cho các nghiên cứu tiếp theo về mở rộng quy mô dữ liệu, cải thiện chất lượng phân cụm và tích hợp các kỹ thuật làm giàu truy vấn phức tạp hơn trong lĩnh vực bất động sản trực tuyến.