Phương pháp luận
Tài liệu này mô tả cách chỉ số thị trường tại /market được tính, và quan trọng không kém: những gì nó không nói được. Mọi con số đã công bố đều dựng lại được từ tài liệu này cộng với tệp CSV gốc. Nếu một định nghĩa ở đây đổi tới mức làm đổi một con số đã công bố, phiên bản sẽ tăng và thay đổi được ghi ở mục 12.
Số liệu trong tài liệu là ảnh chụp tính đến ngày 30/08/2026, kỳ công bố gần nhất tại thời điểm ra phiên bản này.
Chỉ số đo hai thứ trên thị trường bất động sản nhà ở thứ cấp (nhà đã có chủ rao bán lại): mặt bằng giá rao (trung vị VND/m² và trung vị giá trị tin) và thanh khoản (tin đăng mới, tin bị gỡ, tuổi tin đang rao, thời gian bán trên các tin đã kết thúc).
Các báo cáo thị trường hiện có tại Việt Nam đo tỷ lệ hấp thụ của thị trường sơ cấp: dự án mở bán, do chủ đầu tư công bố. Chỉ số này đo phần còn lại của thị trường, phần lớn hơn và gần như không được đo thường xuyên.
Mỗi dòng dữ liệu là một ô: một cửa sổ thời gian nhân với một chiều (toàn quốc, tỉnh/thành, quận/huyện, phường/xã, loại hình) nhân với một giá trị của chiều đó. Cửa sổ mặc định dài 7 ngày và được đặt tên theo ngày kết thúc (cột window_end).
Phạm vi tính đến 30/08/2026: 20 cửa sổ tuần từ 19/04/2026 đến 30/08/2026; trong kỳ gần nhất có 32 tỉnh/thành, 124 quận/huyện, 593 phường/xã và 4 loại hình đủ mẫu để công bố. Mọi ô được công bố đều có tối thiểu 30 tin đang rao.
Đây không phải phần phụ lục. Bốn điều dưới đây là những gì chỉ số không đo được, và chúng tôi công bố trước thay vì để người đọc tự phát hiện.
1. Đây là giá rao, không phải giá giao dịch. Mọi con số lấy từ tin đăng công khai. Thị trường thứ cấp Việt Nam gần như luôn thương lượng xuống dưới giá chào, nên mặt bằng ở đây cao hơn giá chốt thực tế một khoảng mà chúng tôi chưa đo được: không có nguồn giá giao dịch nào để đối chiếu. Chỉ số theo dõi mức và xu hướng của giá chào, cùng chênh lệch giữa các khu vực. Nó không phải chỉ số giá giao dịch và không thay thế được một chỉ số như vậy.
2. Một sàn duy nhất. Toàn bộ dữ liệu đến từ batdongsan.com.vn. Nếu cơ cấu tin trên sàn dịch chuyển (sàn đẩy mạnh một phân khúc, một nhóm môi giới lớn chuyển sang sàn khác, sàn đổi chính sách đăng tin) thì chỉ số dịch chuyển theo, dù thị trường ngoài đời không đổi. Với một nguồn duy nhất, chúng tôi không có cách nào tách hiệu ứng sàn ra khỏi hiệu ứng thị trường. Bổ sung nguồn thứ hai là việc đang làm; khi có, phần chênh giữa hai nguồn sẽ được công bố tại đây.
3. Chưa khử tin trùng. Cùng một bất động sản có thể được nhiều môi giới đăng lại thành nhiều tin. Vì vậy cột số tin đăng (
n_listings) là số tin, không phải số bất động sản, và bị thổi lên ở những khu vực nhiều môi giới. Ảnh hưởng lên trung vị giá nhỏ hơn ảnh hưởng lên số đếm, vì bản sao của một tin nằm quanh cùng một mức giá, nhưng nó không bằng không.Đã đo (31/08/2026): tỷ lệ tin trùng trên toàn quốc là 1,59% số tin đang rao (Hồ Chí Minh 2,32%, Hà Nội 0,84%; nhà riêng 2,50%, căn hộ 0,52%). Gộp các bản trùng làm trung vị toàn quốc dịch −0,48%. Hai tin được coi là một bất động sản khi trùng phường, loại hình, diện tích và giá (±1%), và có bằng chứng cấp căn: ảnh chụp dùng chung, hoặc cùng đường kèm nội dung rao trùng rõ rệt. Tin trong dự án chịu điều kiện chặt hơn — trùng phần lớn album ảnh, nội dung gần giống hệt và khớp mọi con số trong tin — vì các căn khác nhau trong một tòa hợp lệ có thể trùng phường, đường, dự án, diện tích lẫn giá. Kiểm định mù 191 nhóm đã gộp: 3 nhóm (1,6%) là bất động sản khác nhau, 3 nhóm (1,6%) không phân định được. Tỷ lệ công bố là cận dưới: tin đăng lại với ảnh mới, nội dung viết lại và giá lệch quá ngưỡng thì không phát hiện được. Bản trùng không bị xóa — việc gộp là lớp phủ có thể đo lại hoặc gỡ bỏ bất kỳ lúc nào. Từ 31/08/2026, cột
n_listings_dedup(số bất động sản sau gộp trùng) được công bố song song trong tệp CSV; cộtn_listings(số tin) vẫn là con số chính, để chuỗi đã công bố không bao giờ bị điều chỉnh lại.4. Trung vị của tồn kho, không phải chất lượng cố định. Mỗi tuần chúng tôi lấy trung vị của những tin đang rao trong tuần đó. Nếu tuần này rổ hàng có nhiều căn cao cấp hơn tuần trước, trung vị tăng mà không cần một bất động sản nào tăng giá. Nói cách khác, chỉ số chưa tách được thay đổi giá khỏi thay đổi cơ cấu hàng. Đây là giới hạn nghiêm trọng nhất khi đọc biến động giữa hai tuần liền kề, và nhẹ hơn khi so sánh giữa các khu vực trong cùng một tuần.
Đã bổ sung (31/08/2026): chỉ số điều chỉnh cơ cấu. Tin đăng được chia thành 53 ô theo tỉnh/thành và loại hình, mỗi ô mang trọng số bằng tỷ trọng của nó trong kỳ gốc (19/4 – 3/5/2026), và chỉ số là trung bình nhân có trọng số mức biến động giá mỗi m² của từng ô so với kỳ gốc của chính ô đó. Trọng số cố định, nên chỉ biến động giá trong nội bộ từng ô mới làm chỉ số dịch chuyển: dòng hàng dịch từ quận đắt sang căn hộ rẻ không thể. Kết quả đầu tiên: trên cùng khoảng so sánh 19/04 – 23/08/2026, giá trung vị công bố giảm 0,96% trong khi chỉ số điều chỉnh cơ cấu thay đổi +0,01% — gần như toàn bộ mức giảm của con số công bố đến từ thay đổi cơ cấu nguồn cung, không phải mặt bằng giá. (Tính đến kỳ 30/08, kỳ chưa có giá trị điều chỉnh cơ cấu, mức giảm của giá công bố là 1,06%.) Chỉ số này không loại trừ dịch chuyển cơ cấu bên trong một ô và chỉ bao phủ tin có đủ tỉnh và loại hình (90% tồn kho). Cột
mix_adj_unit_price_vnd_m2trong tệp CSV.
Nguồn duy nhất là tin rao bán trên batdongsan.com.vn (không tính tin cho thuê). Dữ liệu do một hệ thống thu thập riêng chạy liên tục sinh ra, hiện lưu khoảng 192.000 tin rao bán, ước tính bao phủ khoảng 88% lượng tin bán đang hoạt động trên sàn.
Điểm khác biệt so với một lần cào dữ liệu: mỗi tin được kiểm tra lại theo chu kỳ để biết còn trên sàn hay đã bị gỡ. Chính vòng kiểm tra lại này, chứ không phải bản thân tin đăng, tạo ra toàn bộ dữ liệu thanh khoản: tin mới, tin gỡ, tuổi tin và thời gian bán.
Chỉ số chỉ công bố số liệu tổng hợp. Tệp CSV cũng vậy: không có dòng nào ở cấp tin đăng, và sẽ không có. Công bố thống kê tổng hợp là việc khác với phát hành lại nội dung của sàn.
Một tin phải thỏa toàn bộ các ràng buộc dưới đây mới được vào bất kỳ phép tính nào:
| Ràng buộc | Ngưỡng |
|---|---|
| Loại giao dịch | Rao bán (không tính cho thuê) |
| Giá rao | 0,8 tỷ – 200 tỷ VND |
| Diện tích | 15 – 2.000 m² |
| Đơn giá | 15 – 800 triệu VND/m² |
Các ngưỡng này giống hệt mệnh đề lọc của ml_features, tập huấn luyện của mô hình định giá. Giữ chúng bằng nhau là có chủ đích: nếu để lệch, chỉ số thị trường và trang /benchmarks sẽ mô tả hai tập bất động sản khác nhau và không còn đối chiếu được với nhau.
Tin nằm ngoài các ngưỡng này bị loại khỏi cả tử số lẫn mẫu số. Chúng không bị gán giá trị 0 và không bị kéo về biên.
Chỉ số bắt đầu chạy hàng tuần từ 30/08/2026. Phần lịch sử trước đó được dựng lại từ dấu vết vòng đời của từng tin. Việc dựng lại quá khứ chỉ có một câu hỏi khó: tin này có đang rao tại thời điểm T hay không? Có ba câu trả lời, và mỗi cửa sổ ghi rõ nó dùng câu trả lời nào.
| Cơ sở | Cửa sổ áp dụng | Quy tắc “đang rao tại T” | Sai lệch đã biết |
|---|---|---|---|
| live | Từ 30/08/2026 (1 kỳ) | Trạng thái thực tại thời điểm máy chạy | Không dựng lại, không suy luận |
| asof_interval | 19/04 – 02/08/2026 (16 kỳ) | Lần đầu nhìn thấy ≤ T ≤ lần cuối xác nhận còn sống | Không có tồn kho ma; cần 28 ngày trưởng thành |
| asof_lifecycle | 09/08 – 23/08/2026 (3 kỳ) | Lần đầu nhìn thấy ≤ T, và chưa bị phát hiện gỡ tính đến T | Cao hơn thực tế khoảng 1–2% |
Vì sao ưu tiên khoảng sống. Cách khoảng sống (interval) trả lời câu hỏi bằng hai mốc quan sát được trực tiếp: lần đầu nhìn thấy tin, và lần cuối xác nhận tin còn sống. Một tin đã chết từ lâu nhưng chưa được phát hiện sẽ không có lần xác nhận nào sau T, nên không bị tính là tồn kho tại T. Nó không tạo ra tồn kho ma, và đó là lý do nó được chọn cho phần lịch sử.
Cái giá phải trả là thời gian. Muốn chứng minh một tin còn sống tại T thì phải có ít nhất một lần kiểm tra lại sau T; những cửa sổ quá gần hiện tại vì thế bị đếm thiếu. Mức thiếu này đã được đo trực tiếp: ở 22 ngày trưởng thành, chuỗi interval thấp hơn chuỗi lifecycle 0,9%; ở 8 ngày, thấp hơn 46%. Vì vậy chỉ những cửa sổ đã đủ 28 ngày mới dùng interval; các cửa sổ gần hơn rơi về lifecycle, chấp nhận sai lệch cao khoảng 1–2% thay vì sai lệch thiếu hàng chục phần trăm.
Vì sao tin được cách làm này. Ngày 26/07/2026, cơ chế dọn tin chết được bật và đánh dấu gỡ 11.222 tin đã chết từ trước. Trước đợt dọn đó, chuỗi lifecycle cao hơn chuỗi interval khoảng 11%: đúng bằng lượng tồn kho ma mà nó mang theo. Sau đợt dọn, hai chuỗi hội tụ về nhau trong khoảng 0,9%. Hai phương pháp độc lập, dựng trên hai loại dấu vết khác nhau, gặp nhau sau khi nguyên nhân gây lệch bị loại bỏ. Đó là một lần kiểm chứng, không phải một giả định.
Hàng dựng lại không bao giờ ghi đè một hàng đã chạy trực tiếp cho cùng cửa sổ, và cơ sở dùng cho từng kỳ được ghi lại cùng dữ liệu. Bảng trên là bản đồ đầy đủ giữa cửa sổ và cơ sở tính.
Trung vị, không phải trung bình. Giá bất động sản Việt Nam có đuôi rất dài: một biệt thự 200 tỷ định giá sai đủ sức kéo lệch số trung bình của cả một quận. Mọi thống kê mức giá ở đây là phân vị, vì lý do đó. Khoảng p25–p75 được công bố kèm để người đọc thấy độ phân tán chứ không chỉ điểm giữa.
Ngưỡng 30 tin đang rao. Mọi ô có dưới 30 tin đang rao đều không được công bố: ô đó bị bỏ hẳn, không làm tròn, không gộp vào ô khác, không nội suy. Một trung vị trên vài quan sát sẽ nhảy loạn giữa các tuần và tạo ra tín hiệu giả ở đúng những khu vực mỏng dữ liệu nhất, nơi người đọc dễ tin nhất.
Ngưỡng 30 tin đã kết thúc. Thời gian bán trung vị chỉ được công bố khi ô đó có ít nhất 30 tin đã kết thúc vòng đời. Vì thế cột này để trống ở phần lớn các ô, và trống ở đây nghĩa là chưa đủ mẫu, không phải bằng 0.
Không có làm mượt, không nội suy, không điều chỉnh mùa vụ và không gắn trọng số. Mỗi cửa sổ đứng độc lập, tính trên đúng tập tin quan sát được trong cửa sổ đó.
Tuổi tin (median_age_days) là tuổi của hàng đang rao. Vòng đời của những tin này chưa kết thúc, nên đại lượng bị cắt cụt bên phải và luôn thấp hơn thời gian bán thực tế. Nó trả lời câu hỏi “hàng đang rao cũ tới đâu”, không trả lời câu hỏi “bán mất bao lâu”.
Thời gian bán (median_dom_days) chỉ tính trên các tin đã kết thúc, từ lần đầu ghi nhận đến khi bị gỡ khỏi sàn. Đây mới là thời gian trên thị trường theo đúng nghĩa. Nó hiếm: tính đến 30/08/2026 mới có khoảng 205 tin đã kết thúc đủ điều kiện trên toàn quốc, trung vị 32 ngày. Vì hiếm nên cột này để trống ở hầu hết các ô.
Hai đại lượng này không được dùng thay cho nhau, và một chênh lệch giữa chúng không phải tín hiệu thị trường.
Cả hai chỉ tính những tin được nhìn thấy lần đầu từ 05/05/2026 trở đi. Trước ngày đó, mốc “lần đầu nhìn thấy” là dấu thời gian của lần quét đầu tiên chứ không phải lúc tin lên sàn, nên mọi khoảng thời gian tính trên nó đo tuổi của lần quét, không đo tuổi thị trường.
Gỡ tin không phải là đã bán. Một tin bị gỡ nghĩa là nó rút khỏi sàn: có thể đã bán, có thể hết hạn đăng, có thể chủ nhà đổi ý hoặc chuyển sang môi giới khác. Không có nguồn nào xác nhận giao dịch, nên chúng tôi không gọi đó là đã bán, và bạn cũng không nên.
Thời điểm gỡ là thời điểm phát hiện, không phải thời điểm tin thực sự biến mất. Chu kỳ kiểm tra lại khoảng hai tuần, nên số tin gỡ trong tuần bị dịch phải và thời gian bán đo được dài hơn thực tế, nhiều nhất là bằng một chu kỳ kiểm tra.
Tỉnh/thành đi qua một hàm chuẩn hóa duy nhất, canonical_province(). Sàn ghi cùng một nơi theo nhiều cách, ví dụ “Bình Dương” và “Bình Dương (Hồ Chí Minh mới)”. Nếu không gộp, số liệu của 26 tỉnh bị chia đôi và mọi so sánh giữa các tỉnh đều sai: 89 giá trị thô rút về 63 giá trị chuẩn.
Phường/xã được chuẩn hóa qua một bảng ánh xạ riêng, độ phủ 93,8%. Tên phường lấy từ dữ liệu đã làm giàu chứ không từ trường thô của tin đăng, vốn chỉ có 0,32% số tin điền.
Quận/huyện dùng nguyên trạng: đã kiểm tra và không bị phân mảnh tên.
Cùng một hàm chuẩn hóa được dùng cho cả chỉ số thị trường lẫn mô hình định giá, nên hai bên luôn nói về cùng một địa bàn.
Đây là quy ước quan trọng nhất khi xử lý tệp CSV bằng máy. Ô trống nghĩa là không quan sát được. Số 0 nghĩa là đã quan sát và kết quả bằng không. Ba trường hợp cụ thể:
n_newtrống với mọi cửa sổ trước 05/05/2026: trước ngày đó chưa phân biệt được tin mới với tin đã có sẵn.n_delistedtrống với mọi cửa sổ trước 07/06/2026: vòng đời gỡ tin bắt đầu được ghi nhận từ ngày đó, nên trước đó không có gì để đếm.median_dom_daystrống khi ô có dưới 30 tin đã kết thúc.
Trong CSV các ô này là chuỗi rỗng. Nếu bạn đọc bằng pandas chúng thành NaN: đừng fillna(0). Trung bình một cột có lẫn số 0 giả sẽ sai theo hướng khó phát hiện.
- 09/08/2026: điểm chuyển cơ sở ước lượng. Từ tuần này chuỗi chuyển từ cơ sở khoảng sống sót sang cơ sở vòng đời (mục 5). Bước giảm giá trung vị lớn nhất toàn chuỗi (−0,22%) nằm đúng tại điểm chuyển này; khoảng 60% của bước đó là thay đổi cơ cấu, phần còn lại là chênh lệch giữa hai cơ sở (~1–2%, thu hẹp dần khi tồn đọng rà soát được xử lý). Đọc biến động vắt qua 09/08/2026 cần nhớ điểm chuyển này.
- 26/07/2026: đỉnh tin gỡ là hệ quả chính sách, không phải thị trường. Cơ chế dọn tin chết được bật trong tuần đó và đánh dấu gỡ 11.222 tin vốn đã chết từ trước, dồn vào một cửa sổ duy nhất. Đừng đọc đỉnh
n_delistedtuần này như một đợt rút hàng của thị trường. - 19/04, 26/04 và 03/05/2026 giống hệt nhau. Hệ thống thu thập tạm dừng giữa hai đợt quét, nên ba cửa sổ này chia nhau cùng một ảnh chụp. Đó là sự im lặng của dữ liệu, không phải sự im lặng của thị trường.
- Trễ phát hiện khoảng hai tuần. Xem mục 7: tin gỡ được ghi vào tuần phát hiện, nên dòng tin gỡ bị dịch phải và thời gian bán hơi dài hơn thực tế.
- Chu kỳ gỡ rồi đăng lại. Khi một tin bị gỡ rồi xuất hiện trở lại, dấu vết lần gỡ trước bị xóa, nên một quãng chết giữa đời của tin sẽ được dựng lại thành liên tục sống. Hiếm, và đẩy tồn kho lên một chút.
n_price_changeskhông phải tỷ lệ giảm giá. Đây là bộ đếm khả năng quan sát: tính đến 30/08/2026 mới có 0,69% số tin từng được ghi nhận đổi giá. Không đủ để tính bất kỳ tỷ lệ cắt giá nào, và chúng tôi không công bố tỷ lệ đó. Cột này để người đọc theo dõi thời điểm nó đủ dùng.
Chỉ số được phát hành theo giấy phép Creative Commons Ghi công 4.0 Quốc tế (CC BY 4.0). Bạn được sao chép, phân phối, chuyển thể và dùng cho mục đích thương mại, kèm một điều kiện: ghi nguồn và dẫn liên kết về trang chỉ số.
VnAppraise (2026). Chỉ số thị trường bất động sản Việt Nam: giá rao bán và thanh khoản thị trường thứ cấp. Phương pháp phiên bản 1.0. https://vnappraise.tech/market
VnAppraise (2026). Vietnam Residential Resale Market Index: asking prices and liquidity. Methodology v1.0. https://vnappraise.tech/market
Theo chỉ số thị trường VnAppraise (https://vnappraise.tech/market)
Khi trích một con số cụ thể, hãy ghi kèm kỳ công bố (ngày kết thúc cửa sổ) và phiên bản phương pháp: cùng một khu vực ở hai kỳ khác nhau là hai con số khác nhau, và một định nghĩa có thể đã đổi giữa hai phiên bản.
Dữ liệu gốc: https://vnappraise.tech/api/market/export
Tệp CSV chứa toàn bộ các kỳ đã công bố, chỉ ở dạng tổng hợp, kèm các cảnh báo quan trọng ngay trong phần chú thích đầu tệp. Đây là địa chỉ ổn định: đường dẫn này không đổi giữa các kỳ, nên có thể dẫn thẳng trong bài báo hoặc trong mã nguồn.
Tài liệu này: https://vnappraise.tech/market/methodology
| Phiên bản | Ngày | Thay đổi |
|---|---|---|
| 1.0 | 31/08/2026 | Bản công bố đầu tiên: tập mẫu, ba cơ sở dựng cửa sổ, ngưỡng công bố, hai đại lượng thời gian, các đứt gãy đã biết và bốn giới hạn của khung đo. |
Khi một định nghĩa thay đổi tới mức làm đổi một con số đã công bố, phiên bản sẽ tăng và thay đổi được ghi vào bảng này. Sửa lỗi chính tả hay diễn đạt thì không.
Cập nhật lần cuối 31/08/2026. Trang chỉ số: https://vnappraise.tech/market