昨天写了香港 7.3 万台升降机的安全与年龄留了一个尾巴法团每月交的那笔维护费官方有没有说法有——机电署还发布着一份「电梯维护价格」公告表住宅和商业各一张。这张表至少回答了一个疑问过去十年同样一部 15 层楼、低速的住宅电梯月维护费从 3,209 涨到 5,544 港元72.8%高速版从 3,620 涨到 6,97792.7%——年化 5.3%比同期多数官方价格指数都快。但真正值得写的是这笔涨幅里掺着的水分。目录一、公告型数据半年一发比钟还准二、涨幅同段同速十年 73% 到 93%三、协变量漂移涨幅里掺着「楼变高了」四、住宅对商业同一天两套分箱四个要点收尾一、公告型数据半年一发比钟还准先说发布节奏这是这份数据与前面写过的所有香港数据都不同的地方。它不是月度流量表像酒店入住率每月必有变化也不是静态快照像首登明细停在一个月份里而是公告型机电署每半年把市场上电梯维护合约的平均价汇总一次贴出来一份。住宅表 22 次公告2014-11-25 起商业表 21 次2015-05-27 起间隔最短 175 天、最长 191 天中位数正好 183 天——半年误差不超过一周。三种节奏对应三种用法月度表做时间序列快照做横截面公告表只能做「半年粒度」的阶梯线——你要是拿它按月插值再算环比等于把半年一次的采样伪造成了月度观测。另外它的时效也有个反差门户元数据写 2021 年 7 月修改内容却更新到 2025 年 5 月 26 日——与前几天那套「元数据 2025、内容 2018」的评级表正好是两个方向。元数据既可能比内容新也可能比内容旧结论不变判死活只能看内容本身。二、涨幅同段同速十年 73% 到 93%importcsvdefload(key):rows[rforrincsv.reader(open(f原始返回/maint_price/{key}_r0.csv,encodingutf-8-sig))ifrandany(x.strip()forxinr)]returnrows[0],rows[1:]hdr,rowsload(resi)table{(r[0],r[1],r[2]):(int(r[3]),int(r[4]))forrinrows}datessorted({r[0]forrinrows})first,lastdates[0],dates[-1]forspeedin(≤ 1.0 m/s, 1.0 m/s):lf,lltable[(first,1 to 15,speed)]lh,ll2table[(last,1 to 15,speed)]print(speed,lf,→,ll2,round((ll2/lf-1)*100,1),%,停靠数:,lf,→,ll2)# ≤ 1.0 m/s 3209 → 5544 72.8 % 停靠数: 8 → 8# 1.0 m/s 3620 → 6977 92.7 % 停靠数: 9 → 910.5 年年化5.3%。这组数字干净的地方在于首末两次公告里「平均停靠层数」一模一样8 层对 8 层、9 层对 9 层——样本结构没变涨幅就是涨幅。商业表同段同期是 77.0% 和 67.5%。三、协变量漂移涨幅里掺着「楼变高了」不是每一段都这么干净。16 到 25 层的住宅段平均停靠数从 2014 年的13 层漂到最近的15 层而 35 层以上那段反而从 36 层降到 33 层。停靠数电梯一路停多少层直接进维护成本——同样的「16-25 层、≤1.5 m/s」2024 年 5 月那次公告停靠数掉到 10 层费用却比停靠 14 层的上一次还高。换句话说series[]fordtindates:k(dt,16 to 25,≤ 1.5 m/s)ifkintable:series.append((dt,table[k][0],table[k][1]))lands[x[1]forxinseries]print(min(lands),max(lands))print(同段同速停靠数在 10 年里漂了,max(lands)-min(lands),层)# 10 15# 同段同速停靠数在 10 年里漂了 5 层同一维度、同一分箱样本的平均属性每期都在漂。直接把首末两个数相除得「78.6%」其中一部分是价格、一部分是样本构成——这份公告表没有给样本量多少部电梯参与平均连拆分都做不到。实操结论引用这种均值涨幅时把「平均停靠数」一起引出来它就印在旁边那列。还有一个结构性的坑「额定速度」这个维度在四个楼层段里是四套分箱——1-15 层切在 1.0 m/s16-25 层切在 1.526-35 层切在 1.7535 层以上切在 2.5。想按速度聚合比如「所有 ≤1.5 m/s 的电梯」四个楼层段里有两段根本没有这个分箱。维度分箱随组别变化是分组数据里最隐蔽的一类。四、住宅对商业同一天两套分箱两表最新一次公告是同一天2025-05-26正好做对照。按楼层段聚合段内两档速度取均值商业全面高于住宅1-15 层商业约 8,994 港元对住宅 6,260 港元35 层以上是 24,877 对 10,983差 2.3 倍。还有一处细节商业表的速度切点跟住宅完全不同——住宅四段切在 1.0/1.5/1.75/2.5商业切在 1.5/2.0/3.0/3.5同名维度在两张表里根本对不上号。但注意对照的局限——两表的速度切点不同住宅 1-15 层切 1.0商业切 1.5段内均值把不同速度混在一起严格说不是同口径比较只能看量级。这个对照的验法importcsvfromcollectionsimportdefaultdictdefavg_by_band(path,last_date):outdefaultdict(list)forrincsv.reader(open(path,encodingutf-8-sig)):iflen(r)5andr[0]last_date:out[r[1]].append(int(r[4]))return{b:sum(v)/len(v)forb,vinout.items()}P原始返回/maint_price/resiavg_by_band(Presi_r0.csv,2025-05-26)commavg_by_band(Pcomm_r0.csv,2025-05-26)forbin(1 to 15,more than 35):print(b,round(resi[b]),round(comm[b]))# 1 to 15 6260 8994# more than 35 10983 24877商业 35 层以上段月均 24,877 港元是两张表里最贵的一档——最贵的一格是 3.5 m/s的 27,042 港元而它对应的平均停靠层数也是全表最高的。还要强调一次两表的速度切点不同段内均值只是量级参考别当成逐项对价。另外全文反复出现的「平均」两个字都该打个星号——公告表没有给出参与平均的电梯数量一部电梯的合约和一百部的合约在表里的权重一样。这种没有分母的均值是官方公告里最需要读者自己留心的一类。四个要点收尾先辨认发布节奏月度流量、静态快照、半年公告是三种动物——公告表别拿去做月度插值快照别当时间序列均值涨幅要查协变量平均停靠数每期在漂78.6% 里混着样本构成变化旁边那列就是对照物引用时一起带维度分箱会随组别变同一个「额定速度」在四个楼层段是四套切点跨段聚合前先列清楚每段的分箱元数据的方向不可预测这次是 modified 2021 而内容 2025——判数据死活永远看内容里的最后日期。照例声明本文只讨论公开数据的口径与工程处理不构成任何物业管理的采购建议维护费的涨幅由市场决定本文只负责把官方公告的数字读准。全部数字可复现——两份文件双轮抓取的原始返回与审计脚本11 项断言放在仓库取数时间 2026-09-30。参考链接https://www.emsd.gov.hk/filemanager/en/content_826/dataset/maintenance_price_lift_private_residential.csvhttps://www.emsd.gov.hk/filemanager/en/content_826/dataset/maintenance_price_lift_private_commercial.csvhttps://data.gov.hk/en-data/api/3/action/package_show?idhk-emsd-emsd1-maintenance-price-lift-private-residential