今早的新闻说:本港定息按揭占比创逾 8 年新高,8 月新批按揭 322 亿、按月跌 28.2%,转按宗数创 33 个月新高。新闻数字能不能站得住?我把金管局「住宅按揭统计调查」的零鉴权 API 完整拉了下来——2016 年 12 月到 2026 年 7 月,116 个月无断档。对账结果:三条核心数字两条精确对上、一条能用基数复算自洽,另有一处「连升月数」对不齐;顺带踩到两个连我自己都会中的坑——「N 个月新高」的锚点算法,和一个差点读错 100 倍的字段。
目录
- 一、先钉口径:这张表里有三种「按揭」
- 二、定息占比:7% → 34.1%,回到 2018 年
- 三、转按:33 个月新高的锚点,和一处对不齐
- 四、那 322 亿怎么验?用基数复算
一、先钉口径:这张表里有三种「按揭」
数据源是金管局金融数据月报的 T0307 表(住宅按揭统计调查结果),零鉴权,一次请求返回全量,环境只要 Python 3.13 加标准库:
curl-H"User-Agent: Mozilla/5.0""https://api.hkma.gov.hk/public/market-data-and-statistics/monthly-statistical-bulletin/banking/residential-mortgage-survey?segment=new&pagesize=400"-o原始返回/hkma_mortgage.bin但表里的「新按揭」有三个完全不同的口径:新批出(approved)、已提取(drawn)、新申请(received)。新闻标题说「8 月新批出按揭 322 亿」——对应的是 approved;它和 drawn 是两回事:7 月新批 448 亿,同期已提取只有 294 亿,中间 154 亿是批了还没放的在途量。读任何按揭新闻,第一步先把这三个词分开。
importjson recs=json.load(open("原始返回/hkma_mortgage.bin",encoding="utf-8-sig"))["result"]["records"]print("API 返回顺序:",recs[0]["end_of_month"],"→",recs[-1]["end_of_month"])recs=sorted(recs,key=lambdar:r["end_of_month"])# 转时间升序ms=[r["end_of_month"]forrinrecs]idx={r["end_of_month"]:rforrinrecs}assertlen(ms)==116and(ms[0],ms[-1])==("2016-12","2026-07")assertall(int(b[:4])*12+int(b[5:])-int(a[:4])*12-int(a[5:])==1fora,binzip(ms,ms[1:])),"有断档"# 占比恒等式:H + P + 定息 + 其他 = 1bad=[mforminmsifabs(idx[m]["ir_new_loans_approved_hibor"]+idx[m]["ir_new_loans_approved_blr"]+idx[m]["ir_new_loans_approved_fixed"]+idx[m]["ir_new_loans_approved_other"]-1)>0.005]assertbad==[],badprint("116 个月无断档;占比恒等式(含 other 项)116/116 成立")两个小坑顺手记下:API 返回是最新月份在前的降序,直接当升序用整条时间轴就反了;恒等式是四项求和——H 按 + P 按 + 定息之外还有一项「其他」,7 月占 3.7%,少算它恒等式就破。
二、定息占比:7% → 34.1%,回到 2018 年
116 个月的利率结构图里,2026 年这条红色楔形非常扎眼:
fixed={m:idx[m]["ir_new_loans_approved_fixed"]forminms}assertabs(fixed["2026-02"]-0.070)<1e-9assertabs(fixed["2026-07"]-0.341)<1e-9prev=[mforminmsifm<"2026-07"andfixed[m]>=fixed["2026-07"]]assertprev[-1]=="2018-04"gap=(2026-2018)*12+(7-4)assertgap==99print(f"定息占比:2026-02 的 7.0% → 2026-07 的 34.1%(4.9 倍);"f"上一个不低的月份是{prev[-1]},距 7 月{gap}个月")五个月,定息占比从 7.0% 涨到 34.1%,4.9 倍;同期 H 按从 87.5% 滑到 61%。新闻说「创逾 8 年新高」——用 API 独立验证:34.1% 之前最后一次被追平要回到2018 年 4 月(当时峰值 51.2%),距今年 7 月 99 个月,正好 8 年零 3 个月。「逾 8 年」成立,而且 8 月占比更高的话,这句只会更成立。顺带校准一下体感:本轮的 34.1% 其实只回到 2018 年峰值的三分之二——「8 年新高」和「历史极值」是两个量级的说法,标题里混用就会放大情绪。至于资金为什么从 H 按迁往定息,利率环境变化是背景,本文只对账数字、不下判断。这是三条新闻数字里验证得最干净的一条。
三、转按:33 个月新高的锚点,和一处对不齐
第二条新闻数字——「转按宗数创 33 个月新高」——验证时我差点自己翻车:
ref_n={m:idx[m]["new_loans_approved_pt_refin"]forminms}ref_a={m:idx[m]["new_loans_approved_pt_amt_refin"]forminms}assertref_n["2026-07"]==1468andref_a["2026-07"]==7305anchor=max(mforminmsifm<"2026-07"andref_n[m]>ref_n["2026-07"])assertanchor=="2023-11"assert(2026-2023)*12+(8-11)==33# 金额连升streak=0foriinrange(len(ms)-1,0,-1):ifref_a[ms[i]]>ref_a[ms[i-1]]:streak+=1else:breakassertstreak==7# 宗数连升(2 月断过一次)streak_n=0foriinrange(len(ms)-1,0,-1):ifref_n[ms[i]]>ref_n[ms[i-1]]:streak_n+=1else:breakassertstreak_n==5andref_n["2026-02"]<ref_n["2026-01"]print(f"转按宗数锚点{anchor},距 2026-08 满 33 个月;金额连升{streak}个月;"f"宗数连升{streak_n}个月(2 月曾回落)")我的第一版算法数出「72 个月新高」——把 116 个月里所有比 1,468 高的月份(71 个)都数了进去,但它们挤在 2017-2019 和 2023 年末。「N 个月新高」的正确锚点是「最近一个更高值的月份」:7 月宗数 1,468 宗,上一个更高的月份是 2023 年 11 月,距 2026 年 8 月恰好 33 个月——新闻精确对上。同一个数字,两种算法,一个会让你把周期性高估一倍。
对得上的还有金额:转按金额连升 7 个月(至 7 月),8 月再升就是新闻说的第 8 个月。对不齐的一处也要如实说:新闻称转按宗数「连升 7 个月」,但 API 序列里宗数连升只有 5 个月——2026 年 2 月宗数 607,比 1 月的 650 回落过一次。可能是分析口径不同,也可能是把回落月计入了;8 月数据还没进 API,终判等更新,先存疑不下结论。
四、那 322 亿怎么验?用基数复算
API 最新只到 2026 年 7 月,新闻里的 8 月数据它还没有——官方 API 比新闻报道慢一个月。但这不等于没法验,我给自己定了一个三步核验顺序:第一步,先找到 API 的最新期数(这表是 7 月),别拿旧数据硬验新月份;第二步,用上月实值乘新闻给的环比做复算——7 月 448.1 亿是 API 实值,乘 (1−28.2%) 得 32,173,即 321.7 亿,与新闻的 322 亿自洽;第三步,方向性说法(比如「H 按降至 57%」)去 API 里看前一期的值和趋势是否同向——7 月 61% 的滑落方向吻合。三步都过,这条数字才敢引用;任何一步对不上,就标「存疑」等下期数据,而不是替新闻圆场。
顺带说下这张表的更新节奏:月度更新、滞后一到两个月,引用前先看end_of_month的最大值,这一眼能避免「拿 7 月的表去验 9 月的新闻」的错位。另外本次开工前我把原始返回抓了两次、比对内容指纹,完全一致才开始解析——对零鉴权接口来说,这一步的成本只是多一条 curl,换来的是「我引用的不是缓存残片」的确定感。
最后记一个差点读错 100 倍的坑:这张表的环比字段mom是小数不是百分数——7 月新批的 mom 是 −0.114,意思是 −11.4%;直接当成 −0.114% 引用,跌幅缩水 100 倍。同类表还有一列全 116 行都是星号的哑值列(贷款无条件豁免相关比率,分母为零时官方直接填*),to_numeric之前先看一眼取值分布,别让一列星号悄悄变 NaN。
这段对账代码和「新高锚点算法」可以直接搬走,收藏备用;如果这篇帮你避开一次错误引用,收藏+点赞。声明:本文只对账官方统计数字,不构成任何置业或投资判断。你引用新闻数字前会先找原始表核对吗?评论区聊聊你的「新闻 vs 数据」翻车现场。这类香港公开数据对账持续更新,关注不迷路。
参考链接
- https://api.hkma.gov.hk/public/market-data-and-statistics/monthly-statistical-bulletin/banking/residential-mortgage-survey
- https://apidocs.hkma.gov.hk/documentation/market-data-and-statistics/monthly-statistical-bulletin/banking/residential-mortgage-survey