Dự đoán giá nhà ở Hà Nội
Ộ Ể Ặ Ẫ Ỹ Ở Ừ ộ ể ặ ẫ ỹ
Bạn có 90 phút để dự đoán giá thuê nhà. Điểm được chấm trên tập kiểm tra ẩn; bảng xếp hạng public chỉ dùng 30% dữ liệu, kết quả cuối cùng dùng điểm private.
| Hạng | Thí sinh | Điểm | Tổng |
|---|---|---|---|
| 1 | Uma Lê | 0.9344 | 101.90 |
| 2 | Thảo Bùi | 0.7631 | 81.62 |
| 3 | Quang Đỗ | 0.6817 | 51.00 |
Mã nguồn (khối mã và mã trong dòng) luôn dùng JetBrains Mono, giống nhau ở cả năm font.
Dự đoán giá nhà ở Hà Nội
Dự đoán giá thuê căn hộ theo tháng từ vị trí, diện tích, tiện ích và lịch sử giao dịch.
- Trung bình
- ML cổ điển · Hồi quy, Xây dựng đặc trưng
- tabularbất động sản
- Tác giả: Sally Trần
- 312 người tham gia
- 1284 bài nộp
Bối cảnh
Thị trường nhà ở Hà Nội biến động mạnh trong năm năm qua. Một công ty môi giới muốn có mô hình dự đoán giá thuê theo tháng cho từng căn hộ, dựa trên vị trí, diện tích, tiện ích và lịch sử giao dịch. Mô hình tốt giúp người thuê so sánh giá nhanh hơn và giúp chủ nhà đặt giá sát với thị trường.
Bạn nhận được dữ liệu của 48.215 căn hộ ở 12 quận nội thành, thu thập từ tháng 01/2021 đến tháng 06/2026. Mỗi dòng là một tin đăng đã có giao dịch thành công. Giá ghi bằng triệu đồng mỗi tháng; ví dụ 12.5 nghĩa là 12.500.000 ₫.
Dữ liệu tốt quan trọng hơn mô hình phức tạp. Hãy dành thời gian đọc dữ liệu trước khi huấn luyện.
— Ban tổ chức
Nhiệm vụ
Với mỗi căn hộ trong tập kiểm tra, dự đoán giá thuê price (triệu đồng/tháng). Bài tập này là bài toán hồi quy; bạn có thể dùng bất kỳ thư viện nào, miễn là không dùng dữ liệu ngoài danh sách được phép ở mục Quy định.
Các bước gợi ý:
- Đọc
train.csvvà kiểm tra các cột bị thiếu. - Tạo đặc trưng mới, ví dụ:
- giá trung bình theo quận và theo năm;
- khoảng cách đến hồ Hoàn Kiếm (km);
- số tiện ích trong bán kính 500 m.
- Huấn luyện mô hình và đánh giá bằng cross-validation theo thời gian.
- Nộp file
submission.csvđúng định dạng.
Lưu ý
Tập kiểm tra chỉ gồm các giao dịch sau ngày 01/01/2026, nên chia dữ liệu theo thời gian sẽ sát với điểm thật hơn chia ngẫu nhiên.
Dữ liệu
| Cột | Kiểu | Mô tả | Ví dụ |
|---|---|---|---|
id | số nguyên | Mã căn hộ, duy nhất | 10342 |
district | chuỗi | Quận | Cầu Giấy |
area | số thực | Diện tích (m²) | 68.5 |
bedrooms | số nguyên | Số phòng ngủ | 2 |
floor | số nguyên | Tầng | 17 |
built_year | số nguyên | Năm xây dựng | 2018 |
lat, lon | số thực | Tọa độ | 21.0368, 105.7826 |
price | số thực | Giá thuê (triệu đồng/tháng) | 14.20 |
Thống kê nhanh trên tập huấn luyện:
| Quận | Số căn | Giá trung vị | Diện tích TB (m²) |
|---|---|---|---|
| Hoàn Kiếm | 2.104 | 21.50 | 62.3 |
| Ba Đình | 4.817 | 16.80 | 71.9 |
| Cầu Giấy | 7.392 | 13.40 | 74.6 |
| Đống Đa | 6.055 | 12.90 | 66.1 |
| Hà Đông | 9.288 | 8.70 | 81.4 |
Đoạn mã đọc dữ liệu mẫu:
import pandas as pd
train = pd.read_csv("train.csv", parse_dates=["listed_at"])
train["age"] = train["listed_at"].dt.year - train["built_year"]
# Giá trung vị theo quận, dùng làm đặc trưng
median = train.groupby("district")["price"].median().rename("district_median")
train = train.join(median, on="district")
print(train[["district", "area", "age", "district_median"]].head())
Cách chấm điểm
Điểm là RMSLE (Root Mean Squared Logarithmic Error) giữa giá dự đoán và giá thật :
Điểm càng thấp càng tốt. Vì dùng logarit, sai 2 triệu với căn giá 5 triệu bị phạt nặng hơn sai 2 triệu với căn giá 40 triệu. Nếu , hệ thống coi .
Với một mô hình tuyến tính có trọng số , bạn có thể tối ưu trực tiếp trên với hàm mất mát
Mẹo
Huấn luyện trên log1p(price) rồi dùng expm1 để đổi lại. Cách này thường giảm RMSLE từ 0.25 xuống khoảng 0.19 chỉ với LightGBM mặc định.
Bảng xếp hạng public dùng 30% tập kiểm tra; kết quả cuối cùng dùng 70% còn lại (private) và chỉ công bố sau khi kết thúc.
Định dạng bài nộp
File CSV có tiêu đề, đúng một dòng cho mỗi id trong test.csv:
id,price
10342,14.20
10343,9.85
10344,22.10
Kiểm tra nhanh trước khi nộp:
head -n 3 submission.csv
wc -l submission.csv # phải bằng 9.644 dòng (kể cả tiêu đề)
Quan trọng
Mỗi ngày bạn được nộp tối đa 5 bài. Bạn có thể chọn 2 bài để tính điểm private; nếu không chọn, hệ thống lấy 2 bài có điểm public tốt nhất.
Quy định
- Làm bài cá nhân hoặc theo đội tối đa 3 người.
- Được dùng dữ liệu công khai về bản đồ (OpenStreetMap) và lịch nghỉ lễ;
dữ liệu giá từ trang môi giới kháckhông được phép. - Không chia sẻ mã hoặc dự đoán giữa các đội trong thời gian thi.
- Đội đạt giải phải gửi mã nguồn tái tạo được kết quả1.
Cảnh báo
Bài nộp có dấu hiệu dùng nhãn của tập kiểm tra sẽ bị loại, kể cả khi điểm public không thay đổi.
Thận trọng
Không đăng dữ liệu cuộc thi lên nơi công khai. Dữ liệu chỉ dùng cho mục đích học tập trong MLArena.
Danh sách kiểm tra
- Đọc kỹ đề bài
- Tải dữ liệu
- Nộp bài đầu tiên với mô hình cơ sở
- Thử ít nhất ba nhóm đặc trưng
Câu hỏi thường gặp
Có được dùng mô hình đã huấn luyện sẵn không? Có, nếu mô hình công khai trước ngày bắt đầu và bạn ghi rõ nguồn trong báo cáo.
Điểm hòa thì xếp thế nào? Đội nộp bài sớm hơn xếp trên. Xem thêm hướng dẫn chung của MLArena.
Tôi có thể hỏi ban tổ chức ở đâu? Hãy dùng mục thảo luận của bài tập; câu trả lời được ghim cho mọi người cùng đọc2.