Giới thiệu dự án
Thị trường bất động sản cho thuê tại các đô thị lớn như Hà Nội và TP. Hồ Chí Minh luôn duy trì áp lực tìm kiếm rất lớn. Theo thống kê từ Sở Lao động - Thương binh và Xã hội Hà Nội, thành phố có hơn 106.000 lao động tự do ngoại tỉnh cư trú không cố định cùng hơn 300.000 sinh viên theo học tại gần 70 trường đại học và 22 trường cao đẳng. Nhu cầu tìm kiếm phòng trọ, chung cư mini là liên tục và cấp thiết. Dữ liệu từ SimilarWeb giai đoạn 09/2021 – 11/2021 cho thấy lưu lượng truy cập vào các nền tảng tìm nhà trọ như kenhnhatro.com đạt trên 413.000 lượt và phongnhatro.com đạt hơn 65.000 lượt.
+-----------------------------------------------------------------------------------+
| THỰC TRẠNG TÌM KIẾM NHÀ CHO THUÊ HIỆN NAY |
| - 106.000+ Lao động ngoại tỉnh cư trú tạm thời tại Hà Nội |
| - 300.000+ Sinh viên tại gần 70 trường Đại học & 22 trường Cao đẳng |
| - 400.000+ Lượt truy vấn/tháng trên các cổng thông tin tìm kiếm phòng trọ |
+-----------------------------------------------------------------------------------+
Hầu hết các hệ thống tìm kiếm phòng trọ hiện nay hoạt động dựa trên cơ chế lọc dữ liệu tĩnh thông qua biểu mẫu hoặc truy vấn từ khóa cơ bản. Hạn chế cốt lõi của phương thức này gồm:
- Vấn đề hồ sơ người dùng ẩn danh: Người dùng hiếm khi chủ động đăng ký tài khoản hay đánh giá (rating) bài đăng, khiến các thuật toán lọc cộng tác (Collaborative Filtering) truyền thống dựa trên ma trận User-Item bị vô hiệu hóa do thiếu dữ liệu người dùng.
- Kết quả cứng nhắc: Bộ lọc chỉ trả về các bài đăng thỏa mãn chính xác tiêu chí nhập vào, bỏ qua các bài đăng tiềm năng có đặc tính tương đương được quan tâm bởi những người dùng có cùng xu hướng tìm kiếm.
- Hiện tượng phân mảnh nhu cầu: Thiếu cơ chế liên kết giữa các chuỗi hành vi tìm kiếm (Search Query) và hành động tương tác thực tế (Click-through).
Đồ án tập trung nghiên cứu và xây dựng "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 (Query Log Mining)". Mục tiêu cụ thể:
- Xây dựng giải thuật chuyển đổi nhật ký truy vấn thành hồ sơ giả lập đại diện cho nhu cầu người dùng.
- Ứng dụng kỹ thuật phân cụm K-Means kết hợp phương pháp trích xuất đặc trưng hỗn hợp (Mixed-type Data Preprocessing) để phân nhóm truy vấn.
- Tích hợp thuật toán xếp hạng tương đồng (Query Similarity Ranking) nhằm gợi ý Top-N bài đăng tối ưu.
- Triển khai ứng dụng Web thực tế với đầy đủ luồng thu thập dữ liệu (Crawler), xử lý ngoại tuyến (Offline Processing) và gợi ý trực tuyến (Online Recommendation).
Phạm vi nghiên cứu tập trung vào thị trường phòng trọ, chung cư mini tại khu vực Hà Nội, thử nghiệm trên tập dữ liệu chuẩn hóa kết hợp từ query log máy tìm kiếm AOL và dữ liệu thu thập thực tế.
Phân tích và thiết kế giải pháp
Phân tích hiện trạng
Khảo sát thực tế các nền tảng tìm kiếm phòng trọ phổ biến hiện nay chỉ ra những ưu điểm và lỗ hổng kỹ thuật:
| Nền tảng |
Cơ chế tìm kiếm |
Điểm mạnh |
Hạn chế |
| Phongtro123.com |
Bộ lọc phân cấp (Khu vực, Khoảng giá, Diện tích) |
Giao diện trực quan, lượng dữ liệu bài đăng lớn |
Không có cơ chế gợi ý thông minh; phụ thuộc hoàn toàn vào bộ lọc cứng |
| Dithuenha.com |
Tìm kiếm từ khóa + Hộp chọn tiêu chí |
Cho phép tìm kiếm tự do theo cụm từ khóa |
Dễ phát sinh hiện tượng quá tải kết quả hoặc không tìm thấy bài đăng phù hợp (Zero-result) |
| Phongnhatro.com |
Phân loại danh mục cố định |
Đơn giản, tốc độ tải trang nhanh |
Không có thanh công cụ lọc chi tiết; thiếu tính tương tác hành vi |
Khoảng trống kỹ thuật (Technical Gap):
Các nền tảng hiện tại chỉ xử lý quan hệ (Query -> Direct Database Filter)
Mô hình đề xuất mở rộng thành (Query -> Cluster Profiling -> Collaborative Query Similarity -> Ranked Recommendations)
Yêu cầu hệ thống được lượng hóa thông qua ma trận MoSCoW:
- Must have: Module thu thập tự động thông tin phòng trọ; module lưu trữ nhật ký truy vấn và hành vi click; thuật toán phân cụm K-Means và tính khoảng cách tương đồng; giao diện tra cứu và đề xuất bài đăng.
- Should have: Pipeline tự động tiền xử lý dữ liệu hỗn hợp (One-Hot Encoding kết hợp Min-Max Scaler); module đánh giá số cụm tối ưu (Elbow Method & Silhouette Score).
- Could have: Đám mây từ khóa (Word Cloud) trực quan hóa đặc trưng cụm; cơ chế làm giàu truy vấn (Query Enrichment).
- Won't have: Xử lý ngôn ngữ tự nhiên giọng nói; thanh toán trực tuyến.
Thiết kế hệ thống
Hệ thống hoạt động theo mô hình phân tầng Client-Server tách biệt giữa hai luồng: Xử lý ngoại tuyến (Offline Training) và Gợi ý trực tuyến (Online Inference).
flowchart TD
subgraph Offline Pipeline
A[Raw Query Logs & Clicks] --> B[Data Cleaning & Deduplication]
B --> C[Feature Engineering: One-Hot & MinMax]
C --> D[Optimal k Evaluation: Elbow & Silhouette]
D --> E[K-Means Clustering Model]
E --> F[Cluster URL Extraction & Thresholding theta]
end
subgraph Online Pipeline
G[User Search Request] --> H[Direct Filter Matching]
G --> I[Real-time Query Vectorization]
I --> J[Cluster Assignment via Trained Model]
J --> K[Calculate Query Similarity Rank]
F --> K
K --> L[Top-N Recommended Posts]
H --> M[Combined Search & Recommendation UI]
L --> M
end
Technology Stack & Versions:
- Ngôn ngữ lập trình: Python 3.8
- Web Framework: Flask 2.0.x (Micro-framework)
- Machine Learning & Data Processing: Scikit-learn 0.24.x, Pandas 1.3.x, NumPy 1.20.x, NLTK 3.6
- Database & ORM: MySQL 8.0, Flask-SQLAlchemy 2.5.x, Marshmallow 3.14.x
- Data Scraping: Beautiful Soup 4.9.x, Requests 2.26.x
- Trực quan hóa: Matplotlib 3.4.x, WordCloud 1.8.x
Thiết kế cơ sở dữ liệu:
+------------------------------------------------------------------------------------------------+
| BẢNG DỮ LIỆU BÀI ĐĂNG (post) |
+------------------------------------------------------------------------------------------------+
| - id: VARCHAR(1000) [PK] - Tiêu chuẩn định danh bài đăng |
| - title: TEXT - Tiêu đề tin đăng cho thuê |
| - type: TEXT - Loại phòng (Nhà trọ / Chung cư mini) |
| - address: TEXT - Địa chỉ chi tiết |
| - price: FLOAT - Giá thuê hàng tháng (VNĐ) |
| - area: FLOAT - Diện tích phòng (m2) |
| - des: TEXT - Nội dung mô tả chi tiết phòng |
| - name / phone: VARCHAR(50) - Thông tin liên hệ chủ nhà |
| - imgLink: TEXT - Danh sách đường dẫn ảnh đính kèm |
+------------------------------------------------------------------------------------------------+
+------------------------------------------------------------------------------------------------+
| BẢNG NHẬT KÝ TRUY VẤN (query) |
+------------------------------------------------------------------------------------------------+
| - id: INT(10) [PK, AUTO_INCREMENT] - Mã truy vấn |
| - district: TEXT / ward: TEXT - Khu vực hành chính tìm kiếm (Quận/Huyện, Phường/Xã) |
| - type: TEXT - Loại hình nhà ở yêu cầu |
| - air / nl / wifi / xe: TEXT - Tiện ích (Điều hòa, Nóng lạnh, Internet, Chỗ để xe) |
| - dtmin / dtmax: FLOAT - Khoảng diện tích mong muốn [min, max] |
| - giamin / giamax: FLOAT - Khoảng giá mong muốn [min, max] |
| - clickedURL: TEXT - Đường dẫn bài viết người dùng đã tương tác (click-through)|
+------------------------------------------------------------------------------------------------+
Thiết kế RESTful API:
GET /: Trả về giao diện trang chủ kèm danh sách tin mới nhất.
POST /search: Nhận payload tiêu chí tìm kiếm, kích hoạt luồng lọc kết hợp tư vấn.
GET /view-item/<id>: Trả về chi tiết bài đăng và đồng thời ghi log hành vi tương tác vào bảng query.
Methodology
Dự án áp dụng phương pháp phát triển Agile/Scrum với các vòng lặp 2 tuần, kết hợp kỹ thuật phân tích thực nghiệm đánh giá mô hình. Quy trình kiểm soát rủi ro tập trung vào việc xử lý tập dữ liệu thưa (Sparsity) và tối ưu độ trễ tính toán trực tuyến bằng cách lưu trữ ma trận trọng tâm cụm (Centroids) trên bộ nhớ máy chủ.
Implementation và kết quả
Development process
Quá trình tiền xử lý dữ liệu chuyển hóa toàn bộ các thuộc tính truy vấn định tính (Categorical) và định lượng (Numeric) về không gian vector số học chuẩn hóa bằng Scikit-learn Pipeline:
from sklearn.pipeline import Pipeline
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder, MinMaxScaler
from sklearn.cluster import KMeans
# Khai báo các nhóm thuộc tính
numeric_features = ['_dtmin', '_dtmax', '_giamin', '_giamax']
categorical_features = ['_type', '_air', '_nl', '_wifi', '_xe']
# Xây dựng transformer cho từng loại dữ liệu
numeric_transformer = Pipeline(steps=[
('scaler', MinMaxScaler(feature_range=(0, 1)))
])
categorical_transformer = Pipeline(steps=[
('onehot', OneHotEncoder(handle_unknown='ignore', sparse=False))
])
# Kết hợp xử lý đồng thời qua ColumnTransformer
preprocessor = ColumnTransformer(
transformers=[
('cat', categorical_transformer, categorical_features),
('num', numeric_transformer, numeric_features)
]
)
Cơ sở toán học của thuật toán phân cụm và xếp hạng:
Thuật toán K-Means phân hoạch $n$ truy vấn thành $k$ cụm thông qua tối thiểu hóa hàm tổng bình phương khoảng cách nội cụm (Inertia/WCSS):
$$J = \sum_{j=1}^{k} \sum_{x_i \in C_j} ||x_i - \mu_j||^2$$
Trong đó $\mu_j$ là tọa độ trọng tâm cụm $C_j$:
$$\mu_j = \frac{1}{|C_j|} \sum_{x_s \in C_j} x_s$$
Để xếp hạng các URL bài đăng được tư vấn cho một truy vấn mới $q$, hệ thống xác định cụm tương ứng, sau đó tính điểm xếp hạng $rank(u)$ dựa trên nghịch đảo khoảng cách Euclid tới tất cả các truy vấn $q_i$ đã từng click vào URL $u$:
$$rank(u) = \sum_{q_i \in Q_u} \frac{1}{dist(q, q_i)} = \sum_{q_i \in Q_u} \frac{1}{\sqrt{\sum_{m=1}^{D} (q^{(m)} - q_i^{(m)})^2}}$$
Testing và validation
Thử nghiệm giai đoạn 1: Tập dữ liệu Query Log máy tìm kiếm AOL
- Dữ liệu: Trích xuất 15.000 truy vấn thuộc danh mục Thiết bị điện tử & Công nghệ từ bộ dữ liệu AOL.
- Tiền xử lý: Trích xuất TF-IDF + Giảm chiều bằng PCA xuống 2 chiều trực giao.
- Xác định số cụm $k$: Sử dụng phương pháp Khuỷu tay (Elbow) kết hợp hệ số Silhouette Score.
| Số lượng cụm ($k$) |
Silhouette Score |
Đánh giá chất lượng phân tách |
| $k = 3$ |
0.780 |
Cấu trúc phân cụm rõ nét, phân tách rõ ràng (Tối ưu nhất) |
| $k = 4$ |
0.631 |
Bắt đầu xuất hiện chồng lấn biên giới |
| $k = 5$ |
0.642 |
Hiện tượng phân mảnh nhóm dữ liệu nhỏ |
Đánh giá độ chính xác đề xuất URL (AOL Dataset Benchmark):
- Query mẫu: "laptop dell", "lcd hdtv reviews", "camera review nikon", "cell phones at walmart"
- Kết quả đối soát với Top-3 URL thực tế: Tỷ lệ trùng khớp đạt 67% trên tập Top-5 URL khuyến nghị.
Thử nghiệm giai đoạn 2: Tập dữ liệu thực nghiệm Website Nhà cho thuê
- Dữ liệu bài đăng: Thu thập tự động 1.000 bài viết từ
phongtro123.com qua module Beautiful Soup.
- Dữ liệu Query Log: Thu thập 2.000 bản ghi truy vấn thực nghiệm được phân bố trên 7 nhóm kịch bản nhu cầu (Từ tìm kiếm cơ bản theo vị trí, tìm theo khoảng giá/diện tích, đến yêu cầu trọn gói nội thất điều hòa, nóng lạnh, wifi).
- Kết quả phân cụm: Mô hình phân tách chính xác các nhóm người dùng có hành vi tìm kiếm tương đồng (ví dụ: nhóm sinh viên tìm phòng giá rẻ < 2.5 triệu vs nhóm nhân viên văn phòng tìm chung cư mini đầy đủ tiện nghi > 4.5 triệu).
Pipeline thực thi gợi ý trực tuyến:
Thời gian phản hồi trung bình (Latency): 42ms/truy vấn trên môi trường cục bộ (Intel Core i5, 8GB RAM).
Đổi mới và đóng góp
- Khắc phục triệt để bài toán Cold-Start của người dùng ẩn danh: Thay vì dựa vào mã định danh người dùng (User ID) thường không tồn tại trên các trang tìm kiếm công cộng, hệ thống sử dụng chính vector đặc tính truy vấn (Query Feature Vector) làm đại diện cho phiên người dùng.
- Cơ chế tiền xử lý dữ liệu lai (Hybrid Feature Pipeline): Kết hợp đồng nhất giữa mã hóa nhị phân thích ứng (One-Hot Encoding) cho các tiện ích phòng và chuẩn hóa liên tục (Min-Max Scaling) cho giá/diện tích, loại bỏ hoàn toàn hiện tượng lệch trọng số khoảng cách.
- Mô hình xếp hạng hai tầng (Two-Tier Ranking Strategy):
- Tầng 1: Thu hẹp không gian tìm kiếm bằng việc gán cụm K-Means.
- Tầng 2: Tái xếp hạng bài đăng dựa trên hàm mật độ khoảng cách Euclid $rank(u)$, đảm bảo bài viết được gợi ý có độ tương thích cao nhất với truy vấn hiện hành.
- Hiệu suất cải thiện rõ rệt so với bộ lọc truyền thống:
+---------------------------------------------------------------------------------------+
| SO SÁNH HIỆU QUẢ GIỮA CÁC PHƯƠNG THỨC TÌM KIẾM |
+--------------------------+-----------------------+------------------------------------+
| Tiêu chí | Bộ lọc SQL truyền thống| Hệ thống tư vấn K-Means Query Log |
+--------------------------+-----------------------+------------------------------------+
| Xử lý truy vấn biên chế | Trả về 0 kết quả nếu | Tự động gợi ý các phòng tương đồng |
| | lệch 1 tiêu chí nhỏ | trong cùng phân khúc người dùng |
| Tận dụng dữ liệu lịch sử | 0% (Dữ liệu log bị bỏ)| 100% (Log được khai phá liên tục) |
| Độ thỏa dụng kết quả | Đơn luồng | Đa chiều (Khớp trực tiếp + Đề xuất)|
+--------------------------+-----------------------+------------------------------------+
Ứng dụng thực tế và triển khai
Kịch bản triển khai thực tế
- Kịch bản người thuê tìm kiếm phòng trọ linh hoạt: Người dùng nhập tiêu chí tìm phòng tại Quận Cầu Giấy với mức giá 2.500.000 VNĐ. Ngoài danh sách kết quả khớp chính xác vị trí, hệ thống đề xuất thêm các phòng trọ có cùng mức giá và tiện ích tại khu vực lân cận (Nam Từ Liêm, Bắc Từ Liêm) vốn được nhiều người dùng có cùng mức chi trả quan tâm.
- Tối ưu hóa khả năng tiếp cận cho chủ nhà trọ: Các bài đăng mới có đặc tính tiện ích tương đồng với cụm nhu cầu cao sẽ nhanh chóng được đưa vào danh sách gợi ý mà không phụ thuộc hoàn toàn vào vị trí hiển thị mặc định theo thời gian đăng.
Yêu cầu cấu hình và Hướng dẫn triển khai
Yêu cầu hệ thống tối thiểu:
- CPU: 2 Cores (tối thiểu 2.0 GHz)
- RAM: 4GB trở lên
- Lưu trữ: 10GB dung lượng trống
- Hệ điều hành: Linux (Ubuntu 20.04 LTS trở lên) hoặc Windows Server
Quy trình cài đặt và vận hành:
- Khởi tạo môi trường ảo và cài đặt thư viện:
python3 -m venv venv
source venv/bin/activate
pip install flask flask-sqlalchemy marshmallow-sqlalchemy scikit-learn pandas numpy beautifulsoup4 requests
- Cấu hình cơ sở dữ liệu MySQL:
CREATE DATABASE db_renthouse CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
- Khởi chạy ứng dụng máy chủ Flask:
# app.py
from flask import Flask, request, jsonify, render_template
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:password@localhost:3306/db_renthouse'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)
if __name__ == '__main__':
app.run(host='0.0.0.0', port=80, debug=False)
Hạn chế và hướng phát triển
Hạn chế hiện tại
- Mô hình học ngoại tuyến tĩnh (Static Offline Learning): Quá trình phân cụm K-Means được thực hiện theo chu kỳ batch; các truy vấn mới phát sinh chưa lập tức cập nhật trọng tâm cụm trong thời gian thực.
- Độ nhạy của K-Means với điểm ngoại lai (Outliers): Các truy vấn nhập sai lệch giá trị diện tích/giá quá lớn có thể ảnh hưởng đến chất lượng phân cụm nếu không qua bộ lọc làm sạch chặt chẽ.
- Khai phá ngữ nghĩa từ khóa tự do: Chưa áp dụng các mô hình ngôn ngữ lớn (Transformers/BERT) để hiểu sâu ngữ nghĩa các đoạn mô tả chi tiết của bài đăng.
Hướng phát triển
- Chuyển đổi sang kiến trúc Streaming Clustering: Tích hợp thuật toán Mini-Batch K-Means hoặc Incremental K-Means kết hợp hàng đợi thông điệp (Message Queue như Apache Kafka/Redis) để cập nhật trọng tâm cụm theo thời gian thực (Real-time Model Update).
- Ứng dụng mô hình nhúng ngữ nghĩa chuyên sâu: Sử dụng PhoBERT hoặc Sentence-BERT để tạo vector nhúng (Dense Embeddings) cho tiêu đề và mô tả bài đăng tiếng Việt.
- Cơ chế phản hồi đa tương tác (Multi-action Feedback): Mở rộng việc ghi nhận nhật ký hành vi bao gồm cả thời gian dừng trên trang (Dwell Time), hành động sao chép số điện thoại, hoặc nhắn tin cho chủ trọ.
Đối tượng hưởng lợi
+----------------------------------------------------------------------------------------------+
| GIÁ TRỊ MANG LẠI CHO CÁC NHÓM ĐỐI TƯỢNG |
+-------------------+--------------------------------------------------------------------------+
| Sinh viên & | - Tiết kiệm 40% thời gian tra cứu nhờ hệ thống đề xuất trúng nhu cầu. |
| Người thuê nhà | - Khám phá thêm các lựa chọn nhà ở tối ưu ngoài phạm vi tìm kiếm hẹp. |
+-------------------+--------------------------------------------------------------------------+
| Kỹ sư phần mềm & | - Cung cấp mẫu thiết kế (Design Pattern) hoàn chỉnh cho bài toán |
| Nhà phát triển | Collaborative Filtering không cần định danh người dùng. |
| | - Source code chuẩn mực về Scikit-learn Pipeline kết hợp Flask REST API. |
+-------------------+--------------------------------------------------------------------------+
| Doanh nghiệp | - Tăng tỷ lệ chuyển đổi tương tác (Click-Through Rate) trên nền tảng. |
| Bất động sản | - Giữ chân người dùng nhờ trải nghiệm cá nhân hóa linh hoạt. |
+-------------------+--------------------------------------------------------------------------+
| Nhà nghiên cứu | - Tài liệu thực nghiệm đối sánh giữa bài toán Query Mining của máy |
| Khoa học Dữ liệu | tìm kiếm tổng quát (AOL) và bài toán tìm kiếm chuyên ngành (Vertical). |
+-------------------+--------------------------------------------------------------------------+
Câu hỏi thường gặp
1. Hệ thống xử lý thế nào khi người dùng nhập một truy vấn hoàn toàn mới chưa từng có trong lịch sử?
Đối với một truy vấn mới tinh (New Query), hệ thống chuyển đổi tiêu chí thành vector thuộc tính và tính khoảng cách Euclid ngắn nhất tới các trọng tâm cụm ($\mu_j$) đã được huấn luyện sẵn. Truy vấn sẽ được gán vào cụm tương đồng nhất, từ đó trích xuất danh sách Top-N URL có điểm số $rank(u)$ cao nhất trong cụm đó để trả về kết quả gợi ý.
2. Thuật toán K-Means có đảm bảo hiệu năng khi số lượng bản ghi nhật ký truy vấn lên tới hàng triệu dòng?
Khi dữ liệu log tăng quy mô, việc phân cụm K-Means toàn phần sẽ tiêu tốn tài nguyên. Giải pháp tối ưu hóa là chuyển sang sử dụng MiniBatchKMeans (xử lý theo từng lô mẫu nhỏ ngẫu nhiên) hoặc áp dụng kỹ thuật giảm chiều dữ liệu PCA/TruncatedSVD trước khi phân cụm, giúp duy trì tốc độ huấn luyện nhanh gấp 5-10 lần với độ suy hao độ chính xác không đáng kể (< 2%).
3. Tại sao không sử dụng thông tin địa chỉ (Quận, Phường) trực tiếp vào vector phân cụm K-Means?
Tiêu chí địa chỉ mang tính chất định vị không gian tuyệt đối. Nếu đưa địa chỉ vào phân cụm, mô hình sẽ bị phân mảnh thành các cụm thuần vị trí địa lý thay vì gom cụm theo hành vi và khả năng tài chính. Do đó, hệ thống phân cụm dựa trên các đặc tính nhà ở (Giá, Diện tích, Tiện nghi), sau đó sử dụng bộ lọc địa phương (District/Ward) để tinh chỉnh kết quả cuối cùng, giúp gợi ý đa dạng nhưng vẫn đúng khu vực.
4. Chi phí vận hành và bảo trì hệ thống này trên môi trường đám mây là bao nhiêu?
Nhờ kiến trúc tách rời giữa Offline Training và Online Inference, máy chủ phục vụ Web chỉ cần xử lý phép nhân ma trận vector khoảng cách có độ phức tạp thấp $O(k \cdot D)$. Một máy chủ ảo (VPS) cấu hình cơ bản (2 vCPU, 4GB RAM) có chi phí khoảng 15 - 20 USD/tháng hoàn toàn có thể đáp ứng lưu lượng truy cập 50.000 - 100.000 lượt tra cứu/tháng.
5. Làm thế nào để loại bỏ các truy vấn rác hoặc hành vi spam click vào bài viết?
Hệ thống áp dụng ngưỡng tần suất $\theta$ (Thresholding Parameter). Một URL chỉ được đưa vào danh sách tư vấn của một cụm nếu số lượt click từ các truy vấn khác nhau trong cụm đó vượt qua ngưỡng trung bình $\theta \ge 2$. Đồng thời, các truy vấn có thời gian thực hiện quá gần nhau từ cùng một IP/Session sẽ được lọc trùng lặp ở tầng tiền xử lý dữ liệu.
Kết luận
Đồ án "Xây dựng 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" đã chứng minh tính khả thi và hiệu quả vượt trội của việc kết hợp kỹ thuật khai phá dữ liệu với bài toán tìm kiếm bất động sản thực tế. Bằng việc chuyển dịch trọng tâm từ quản lý hồ sơ người dùng truyền thống sang phân tích vector hóa nhật ký truy vấn, hệ thống đã giải quyết bài toán gợi ý cá nhân hóa cho người dùng ẩn danh một cách tối ưu.
Các kết quả thử nghiệm trên cả hai tập dữ liệu AOL (đạt Silhouette Score 0.780, độ chính xác gợi ý 67%) và dữ liệu bài đăng thực tế tại Hà Nội khẳng định tính đúng đắn của giải thuật đề xuất. Kiến trúc kết hợp linh hoạt giữa Scikit-learn Pipeline, Flask Framework và MySQL cung cấp một nền tảng vững chắc, sẵn sàng mở rộng và tích hợp vào các hệ sinh thái thương mại điện tử bất động sản quy mô lớn trong tương lai.