问题出发:市场需要的不是一份PDF,而是一个可配置的工具
上周Realtor.com发布了2026住房报告卡,印第安纳76.3分(A)拔得头筹,纽约8.5分(F)垫底。作为产品经理,我第一反应不是惊叹“差距好大”,而是问:这76.3分怎么算的?我能否改变权重看自己关心的维度?我能把自己的收入代入看看在印第安纳的真实压力吗?
答案全是否定的。报告是一份静态PDF,只给最终排名和少数几个指标(中位价、收入占比、建房缺口)。对购房者来说,它是个“新闻”,不是“决策工具”。对开发者来说,这恰恰是个机会——用公开数据构建一个可交互、可个性化的评分系统,让用户不只“知道”结果,还能“理解”并“配置”结果。
现有方案的设计分析:好在哪里,差在哪里
Realtor.com 报告卡(权威但封闭)
- 好的地方:数据源权威(自家MLS、美国人口普查局),评分维度覆盖建房、价格、库存,且与全美均值对标,量化了“住房需要缺口”(population-based housing need)。每个州有明确等级,易于传播。
- 差的地方:权重不透明(为什么印第安纳A?是房价低权重高还是建房速度快?)。不支持个人化输入(年收入10万美元 vs 5万美元对同一个州的感受天差地别)。一年一版,滞后性明显。
Zillow 数据(开放但离散)
Zillow 提供州/都市中位房价、租金指数、预测等,通过其 API(RapidAPI 上有一份非官方封装)或官方 Research 数据下载。数据更细粒度,但缺少“综合健康度”的打分。用户得自己拼凑多张表,认知成本高。
我的判断:两者各有所长。开发者应该借鉴 Realtor.com 的“评分框架”,但用 Zillow 等实时数据,加入个性化权重,并让整个过程可解释。
产品决策逻辑:构建你自己的住房可负担性评分系统
1. 数据源选择:实时性 vs 权威性
| 指标 | 推荐数据源 | 优缺点 |
|---|---|---|
| 中位挂牌价 | Zillow API(实时)或 Realtor.com 官方数据(滞后1个月) | 实时性好,但需要付费或关注授权 |
| 家庭收入中位数 | 美国人口普查局 ACS 1年估计(官网 API) | 权威但滞后1-2年,更新慢 |
| 建房许可量 | 美国人口普查局 Building Permits Survey(BLS) | 月度数据,可免费获取 |
| 库存月数 | Zillow 或 NAR(全国房地产经纪人协会) | 更新频率不一 |
我的建议:对于 MVP,先使用 Zillow Research 提供的免费 CSV(每月更新)和 Census API。代码中预留接口,后续可切换更实时数据。
2. 评分维度与权重:简单才能说服用户
Realtor.com 的评分方法未公开,但通过其说明可推断包含:房价收入比、建房缺口率(实际建房量÷目标建房量)、库存供需比等。
我设计的简化评分模型(各州满分100):
import pandas as pd
def affordability_score(median_price, median_income, building_permits, target_need):
# 房价收入比得分(越低越好)
income_ratio = median_price / mean_income # 以全美均值为基准
income_score = max(0, 100 - (income_ratio - 1) * 50) # 比例1.0时得100,每高0.2扣10分
# 建房满足率(越高越好)
building_rate = building_permits / target_need
building_score = min(100, building_rate * 100)
# 综合权重可调(示例:各50%)
final = 0.5 * income_score + 0.5 * building_score
return round(final, 1)
注意:这里的 target_need 需要估算。Realtor.com 的方法是根据人口增长和现有库存计算的。一个简便方式是:用全美平均每千人建房许可量乘以该州人口。
产品决策点:让用户拖动权重滑块(比如“房价占60%,建房占40%”),实时看到排名变化。这样用户会信任评分逻辑,而不是黑盒。
3. 避免过度拟合:少即是多
不要加入太多变量(如通勤时间、犯罪率),因为数据可靠性和更新频率参差不齐,且会模糊核心“可负担性”。保持3-5个关键指标,标注数据源和更新时间。
交互设计要点
地图热力图——一目了然
将各州得分映射到美国地图,用颜色梯度(A绿色→F红色)。支持点击州,查看详细指标和排名历史。
个人化输入——真正有用
允许用户输入自己的年收入、家庭人数,自动重新计算“你的收入在该州需多少年才能买得起”。例如:
你年薪$80,000,在印第安纳(中位价$295,810)需要不到4年可付清(假设100%投入)。在纽约($668,173)需要8年以上。
数据来源标注——建立信任
每个数字旁边显示“数据来源:Zillow 2026年5月 / Census ACS 2024”,点击可跳转。
可执行的改进建议
用 Python 和 Streamlit 快速搭原型
以下是一个可运行的最小代码片段(需要安装 streamlit``python-dotenv``requests,并去 Census API 申请密钥):
import streamlit as st
import pandas as pd
import requests
import json
st.title("🏠 住房可负担性州评分(Demo)")
# 获取 Census 2024 年收入中位数(示例:密钥放 .env)
# 这里用模拟数据演示
state_data = {
"Indiana": {"median_price": 295810, "median_income": 68000, "pop": 6800000},
"New York": {"median_price": 668173, "median_income": 82000, "pop": 20000000},
# ... 实际可从CSV读取
}
def score_for_state(price, income, pop):
income_ratio = price / income
score = max(0, 100 - (income_ratio - 4.35) * 10) # 4.35是全美均值? 简化
return round(score, 1)
df = pd.DataFrame(state_data).T
df['score'] = df.apply(lambda r: score_for_state(r['median_price'], r['median_income'], r['pop']), axis=1)
st.dataframe(df[['score']].sort_values('score', ascending=False))
这只是一个演示,实际产品需要:
- 使用真实 API(Zillow RapidAPI、Census API)
- 加入历史数据曲线
- 增加用户收入输入框,动态计算
产品化建议:利用 AI 提供解释
当用户点击某个州时,用 LLM 生成一句话解释:“印第安纳州得分高主要因为房价中位数仅$295k,是全美均值的70%,而收入水平与全国持平。” 不要只是展示数字,要讲“为什么”。
总结
不要再在别人的 PDF 里找答案。用公开数据和简单模型,你完全可以造出一个更透明、更个性化的工具。核心不是代码,而是决定“用户需要什么权重”、“如何让评分可解释”。下一次当类似报告发布时,你的产品可以一键生成自己的版本。
(https://via.placeholder.com/800x400?text=Housing+Score+Map+Example)
题图:示意地图。实际请用 folium 或 plotly 生成。