简介:《层析分析法在城市竞争力评价中的应用》是一份经济预测与决策课程学习报告,适合经济学、统计学、城市规划及系统工程领域的师生和研究人员阅读。资源以层次分析法(AHP)为核心,针对城市竞争力这一多因素、多维度的综合评价问题,系统展示了从层次结构模型建立、判断矩阵构造、权重计算到一致性检验的完整流程。文档还以中国城市竞争力为例,初步统计71项指标,构建“目标层—准则层—要素层—指标层”的四层指标体系,并给出具体判断矩阵和权重赋值过程,具有较强的实操参考价值。资源为1个doc文档,大小832KB,内容结构完整、步骤清晰,便于研究者直接借鉴建模思路和计算细节。目前已有139人学习下载,适合需要掌握AHP综合评价方法或开展城市竞争力量化分析的相关学者参考。
1. 层析分析法在城市竞争力评价中到底解决什么问题
城市竞争力评价这类课题,最尴尬的地方在于指标太多:经济总量、产业结构、创新能力、公共服务、生态环境、对外开放……每个维度都能找到一堆数据。可数据再多,最后总要落到一个综合排名上。排名靠什么定?靠权重。而权重怎么来,恰恰是所有评价模型里最容易“拍脑袋”的环节——要么用专家打分直接平均,要么用熵值法默认数据自己说话,要么干脆主观指定一个比例。层析分析法(层次分析法,AHP,在部分行业资料里沿用“层析”这一叫法)就是用来打破这个僵局的。它把“城市竞争力”这样一个模糊的大命题,拆成目标层、准则层、指标层,再通过两两比较把人的主观判断量化成判断矩阵,最后算出一组能解释、能复盘、能调整的权重。
我用这个方法的场景很具体:某机构要做一组城市的竞争力评价排序,数据是公开统计年鉴里的常规指标,但决策层对“创新比基建重要多少”这类问题始终达不成一致。AHP的价值不在于让权重“更客观”——它本质上还是主观赋权,但它的优势是让主观判断变得透明、可回溯。哪位专家认为交通权重应该翻倍,哪一轮比较矩阵的一致性没过,全部有据可查。对城市竞争力这种动辄十几个指标、结果要拿去支撑资源分配或政策参考的评价任务来说,可解释性比所谓的“客观”更值钱。
这篇文章想解决的问题很直接:AHP在城市竞争力评价里从指标分解到矩阵构建再到权重合成的完整操作流程是什么,判断矩阵怎么填才不翻车,一致性校验卡住怎么办,权重算出来之后如何合成排名。适合正在做城市评价课题、写规划报告、或者刚接触多准则决策模型、想找一个能落地而非停留在理论层面的方法的读者。文中所有案例均为虚构数据,用于演示计算过程。
2. 把城市竞争力拆成层次结构:目标、准则、指标三层怎么定
2.1 为什么城市竞争力评价适合用层次结构
城市竞争力不是一个可测量的单一变量,而是多个维度共同作用的结果。常见做法是把它拆成经济实力、创新能力、公共服务、生态环境、对外开放、基础设施等板块,每个板块再往下拆成统计年鉴里能查到的具体指标。这种拆法天然就是一棵树:根节点是“城市竞争力”,中间层是准则(维度),叶子节点是指标(数据)。AHP的处理对象恰好就是这种树形结构。它要求决策者对同一层级内的元素做两两比较,进而推导出每个元素相对于上一层目标的权重。
选择AHP而不是纯数据驱动方法(比如熵值法、主成分分析)的理由,在我实际做过的项目里有一条很关键:评价体系往往需要体现决策意图。比如某地区未来五年的重心是科技创新,那么在评价模型里“创新能力”这个准则的权重就应该高于“经济总量”。熵值法会根据数据本身的离散程度分配权重,数据波动大的指标天然权重大,这不一定符合政策导向。而AHP允许决策者显式地表达“我认为谁比谁重要”,并且通过一致性检验来约束这种表达不要自相矛盾。
另外AHP对数据完整性的容忍度也比较高。城市评价的常见麻烦是某个指标在部分城市缺数据。主成分分析遇到缺失值要么插补要么删样本,而AHP在构造判断矩阵阶段用的是定性比较,数据缺失影响的是最后一层得分合成,可以在合成前单独处理,不至于让整个模型跑不动。这也是我在做跨区域城市对比时最终选AHP的核心原因。
2.2 一个可直接套用的三层指标体系模板
以我做过的模拟项目X为例,评价对象是某省内的8个地级市。指标体系只做三层:目标层是“城市综合竞争力”,准则层选6个维度,指标层每个维度对应3到5个定量指标。切记指标不是越多越好,准则层控制在6个以内比较稳妥——后面构造判断矩阵是n×n规模,6个准则要做15次两两比较,已经不算轻松,加到8个就是28次,填表的人会崩溃。
这里给出一套可以直接替换的指标体系模板(这组结构适合大多数地级市层面的竞争力评价):
| 准则层(维度) | 指标层(统计年鉴口径) |
|---|---|
| 经济实力 | GDP总量、人均GDP、一般公共预算收入、固定资产投资增速 |
| 创新能力 | 研究与试验发展(R&D)经费投入强度、发明专利授权量、高新技术企业数 |
| 公共服务 | 每千人医疗机构床位数、中小学师生比、基本养老保险参保率 |
| 生态环境 | 空气质量优良天数比例、建成区绿化覆盖率、污水集中处理率 |
| 对外开放 | 实际利用外资额、进出口总额占GDP比重 |
| 基础设施 | 人均道路面积、互联网宽带接入用户数、轨道交通里程(没有则记为0) |
这套结构有几个设计要点:第一,指标层全部选择年鉴可得数据,不引入问卷调查型指标,保证可复现;第二,每个准则下的指标数量尽量均衡,避免某个维度因为指标过多在合成阶段天然占优;第三,指标方向必须统一——都是正向指标,即数值越大竞争力越强。如果有逆指标(比如单位GDP能耗),要先做正向化处理,否则合成排名会出现“能耗越高排名越靠前”的荒谬结果。正向化的常见做法是取倒数,或者用最大值减去当前值。
2.3 指标筛选的实操判断:用什么标准决定留还是砍
很多人在这一步会犯“收集癖”的毛病,把年鉴里能查到的指标全塞进去。指标一多,AHP的判断矩阵规模失控,专家填表质量急剧下降。我一般用三个条件筛选指标:
第一是数据完备率。城市竞争力评价通常涉及多个城市,只要有两个以上城市缺该指标数据,且找不到合理的补数口径,这个指标就砍掉。备选方案是使用相邻年份数据补齐,但必须在报告里注明。第二是区分度。如果某个指标所有城市数值都差不多,比如某省所有地级市的养老保险参保率都在93%到95%之间,这个指标对排名几乎没有贡献,建议替换成区分度更高的指标。第三是与其他指标的相关性。如果两个指标相关系数超过0.9(比如GDP总量和一般公共预算收入往往高度相关),保留一个即可,否则等于变相给某个维度加了重复的权重。
实际操作中,我建议先用Excel或Python对指标做一次相关矩阵分析,把高相关对列出来,再逐个判断保留哪一个更合理。这个过程不用太复杂,pandas和DataFrame.corr()就能完成。筛完之后把指标清单发给决策方确认,而不是自己默默决定——指标层的取舍本质上是在定义“竞争力”的含义,这个定义权应该留给业务方。
3. 构造判断矩阵与权重计算:从两两比较到一致性校验
3.1 判断矩阵的比例标度怎么选:1到9标度还是1到5标度
AHP的核心输入是判断矩阵。对同一准则下的n个元素,决策者需要回答“元素i比元素j重要多少”。这个“多少”需要一个标度。最经典的是1到9标度:1表示同等重要,3表示稍重要,5表示明显重要,7表示强烈重要,9表示极端重要,2、4、6、8是中间值。
我在城市竞争力评价项目里的经验是:对于城市评价这类偏宏观、偏综合的比较,1到9标度容易让专家产生畏难情绪——问“创新能力比公共服务强烈重要?”专家会犹豫。反而1到5标度更顺滑:1同等,2稍微,3明显,4强烈,5极端。实际操作中把标度表打印出来附在问卷前面,提醒专家尽量用1、3、5三个档,2、4作为拿不准时的折中,不要轻易用7以上——标度值拉得越大,矩阵的一致性越难保证。
无论用哪种标度,判断矩阵的构建逻辑一致:第i行第j列元素aij表示元素i相对元素j的重要程度,那么aji就是aij的倒数。对角线元素恒为1。所以对n个元素只需要填写n×(n-1)/2个比较。6个准则层维度的比较矩阵,需要填15个值。指标层每个维度下如果挂4个指标,需要填6个值。一份完整的城市竞争力评价问卷,通常包含1个准则层矩阵加6个指标层矩阵,总计15+6×6=51个判断,这个量级在可接受的范围内。
3.2 Python实现权重计算:特征向量法还是几何平均法
判断矩阵构造出来之后,需要求解权重。理论上最严谨的做法是计算矩阵的最大特征值对应的特征向量,归一化后就是权重。工程上更常用的是几何平均法(也称乘积方根法):把每行元素相乘,开n次方,再归一化。两种方法在一致性较好的矩阵上结果差异很小。
以下是我常用的权重计算和一致性校验代码:
import numpy as np def ahp_weight(matrix): """ 基于几何平均法计算AHP权重向量并返回一致性检验指标 matrix: n x n 的判断矩阵,numpy数组 返回: (权重向量, 最大特征值, CI, CR) """ n = matrix.shape[0] # 几何平均法计算权重 row_product = np.prod(matrix, axis=1) # 每一行元素连乘 row_root = np.power(row_product, 1 / n) # 开n次方 weights = row_root / np.sum(row_root) # 归一化得到权重 # 计算最大特征值 lambda_max matrix_dot_weights = np.dot(matrix, weights) # 矩阵乘权重向量 lambda_max = np.sum(matrix_dot_weights / weights) / n # 一致性指标 CI ci = (lambda_max - n) / (n - 1) # 随机一致性指标 RI(Saaty给出的标准值,只列到n=10) ri_list = {1: 0, 2: 0, 3: 0.58, 4: 0.90, 5: 1.12, 6: 1.24, 7: 1.32, 8: 1.41, 9: 1.45, 10: 1.49} ri = ri_list[n] # 一致性比率 CR cr = ci / ri if ri != 0 else 0 return weights, lambda_max, ci, cr # 示例:准则层6个维度的判断矩阵(虚构调参数据) matrix_example = np.array([ [1, 3, 2, 5, 4, 3], # 经济实力 [1/3, 1, 1/2, 3, 2, 1], # 创新能力 [1/2, 2, 1, 4, 3, 2], # 公共服务 [1/5, 1/3, 1/4, 1, 1/2, 1/3], # 生态环境 [1/4, 1/2, 1/3, 2, 1, 1/2], # 对外开放 [1/3, 1, 1/2, 3, 2, 1] # 基础设施 ]) weights, lambda_max, ci, cr = ahp_weight(matrix_example) print("权重向量:", np.round(weights, 4)) print("最大特征值 lambda_max:", round(lambda_max, 4)) print("CI:", round(ci, 4)) print("CR:", round(cr, 4)) if cr < 0.1: print("一致性检验通过") else: print("一致性检验不通过,需要调整判断矩阵")代码逻辑说明:np.prod(matrix, axis=1)对每一行做连乘,得到的是每个准则在几何平均意义下的“综合比较分数”,开n次方后再归一化,就是权重向量。np.dot(matrix, weights)计算权重向量被矩阵变换后的结果,用特征值的定义反推lambda_max。CI表示判断矩阵偏离完全一致性的程度,CR则是消除矩阵阶数影响后的比率。
参数说明中需要重点关注的是CR < 0.1这个阈值。这是AHP应用中的通用接受标准,也是Saaty最初建议的经验值。但要记住,0.1不是数学推导的结论,而是实践经验的约定。在城市竞争力评价这种主观判断本来就比较模糊的场景里,CR落在0.1到0.15之间,我通常不会直接打回重填,而是先检查哪些比较值最“可疑”,定向调整。后面避坑章节会展开讲。
3.3 一致性不过怎么办:逐行排查还是整体重填
CR超过阈值时,大部分人的第一反应是重新填写整份矩阵,这其实是低效的做法。判断矩阵里的值只有n×(n-1)/2个,真正导致不一致的往往是其中某几个比较值。比如专家填了“经济实力比创新能力略重要(3)”“创新能力比对外开放强烈重要(7)”“但经济实力比对外开放仅明显重要(5)”——前两者相乘是3×7=21,第三个却是5,明显矛盾。
定位问题比较值的方法是观察“最大偏差”所在的行列。把矩阵的每一行元素除以对应两元素的权重比(matrix[i][j] / (weights[i]/weights[j])),偏离1最多的那个元素通常就是干扰项。把它调整为接近weights[i]/weights[j]的值,重新计算一致性,往往一轮就能通过。
在真实项目中,我不会自己直接改专家填的数值,而是把这个分析结果反馈给专家本人——告诉他“您填的这两个判断存在不一致,按照您其他判断的趋势,这里应该是3或4,您觉得哪个更符合实际判断?”这样既保证了矩阵一致性,又没有篡改专家原始意见,评价过程的公信力反而更高。需要强调一点:一致性检验的目的是发现填表过程中的粗心或逻辑矛盾,而不是用数学手段强行“修正”专家的真实偏好。如果为了过CR而大幅调整比较值,算出来的权重就不再代表决策者的意图了。
4. 从权重到城市竞争力综合排名:数据归一化和加权合成
4.1 指标数据归一化:极差法还是Z-score法
有了指标层的权重,也有了各城市在各指标上的实际数值,接下来要把两者合成一个综合竞争力得分。这里有一个前置步骤:指标量纲差异太大——GDP总量动辄几千亿元,空气质量优良天数比例在90%上下,轨道交通里程可能只有几十公里。不能直接加权相加,必须先归一化到同一量纲。
城市竞争力评价中最常用的是极差(Min-Max)归一化。对正向指标,公式是(x - min) / (max - min),把所有城市某指标的数值映射到0到1之间。分母是评价样本内的最大值减最小值,这带来一个特点:归一化结果依赖样本范围,加入一个新城市,所有城市的归一化值都会变化。另一种选择是Z-score标准化,公式是(x - mean) / std,处理后会存在负值,且对离群值敏感。在综合评价合成中,Z-score的负值会给排名解释带来麻烦——“负分”在报告里不好向决策者交代。
我在这类项目里统一使用极差法。数据口径保持一致的情况下,归一化后的值就是该城市在这个指标上的相对位置,0到1之间,语义清晰。指标合成的形式通常是加权和:每个指标的归一化值乘以该指标的全局权重(准则层权重乘指标层权重),再对每个城市求和。
4.2 一层一算还是直接合成:权重传递与得分计算的完整代码
权重传递的逻辑是:指标层权重乘以所属准则层权重,得到全局权重。比如“经济实力”准则权重是0.32,其下“GDP总量”在准则内权重是0.40,那么“GDP总量”的全局权重是0.32×0.40=0.128。所有指标的全局权重之和应为1。下面是完整的数据合成流程代码:
import pandas as pd import numpy as np # 1. 模拟指标数据:8个城市,16个指标(虚构数据,路径按实际替换) # 列名对应指标层,前缀表示所属准则:eco_=经济实力, inn_=创新能力等 data = pd.DataFrame({ 'city': ['城市A', '城市B', '城市C', '城市D', '城市E', '城市F', '城市G', '城市H'], 'eco_gdp': [4200, 3100, 2800, 5600, 1900, 4600, 2300, 3800], 'eco_per_gdp': [9.2, 7.8, 6.5, 11.3, 5.2, 8.9, 6.1, 7.5], 'eco_budget': [380, 210, 190, 460, 120, 350, 155, 270], 'eco_invest': [8.5, 9.1, 7.2, 12.4, 6.8, 10.2, 7.8, 9.8], 'inn_rd': [2.8, 2.1, 1.5, 3.4, 1.2, 2.5, 1.8, 2.2], 'inn_patent': [6800, 4200, 3100, 9500, 1200, 5600, 2000, 3900], 'inn_hi_tech': [1200, 680, 540, 1800, 300, 980, 420, 760], 'pub_hospital': [5.8, 5.1, 4.6, 6.2, 4.2, 5.5, 4.8, 5.0], 'pub_teacher': [16.5, 15.2, 14.8, 17.1, 13.9, 16.0, 14.2, 15.5], 'pub_social': [94.5, 93.2, 92.1, 95.8, 90.5, 94.0, 91.8, 93.6], 'env_air': [78, 82, 85, 74, 88, 80, 86, 83], 'env_green': [41, 38, 40, 43, 37, 42, 39, 40], 'env_water': [96, 94, 95, 92, 97, 95, 96, 94], 'open_fdi': [95, 48, 35, 130, 22, 78, 28, 55], 'traffic_road': [12.5, 11.2, 9.8, 13.8, 8.5, 12.0, 9.2, 10.5], 'traffic_net': [35, 28, 22, 42, 15, 33, 18, 30] }) # 2. 正向指标极差归一化 def minmax_normalize(series): return (series - series.min()) / (series.max() - series.min()) # 排除city列,对所有指标列归一化 indicator_cols = [c for c in data.columns if c != 'city'] for col in indicator_cols: data[col + '_norm'] = minmax_normalize(data[col]) # 3. 权重配置(来自AHP计算的虚构调参结果) # 准则层权重:经济0.32 创新0.21 公共服务0.17 生态0.10 开放0.09 基础设施0.11 # 指标层权重(准则内): weights = { 'eco_gdp': 0.32 * 0.40, 'eco_per_gdp': 0.32 * 0.25, 'eco_budget': 0.32 * 0.20, 'eco_invest': 0.32 * 0.15, 'inn_rd': 0.21 * 0.45, 'inn_patent': 0.21 * 0.35, 'inn_hi_tech': 0.21 * 0.20, 'pub_hospital': 0.17 * 0.40, 'pub_teacher': 0.17 * 0.30, 'pub_social': 0.17 * 0.30, 'env_air': 0.10 * 0.40, 'env_green': 0.10 * 0.30, 'env_water': 0.10 * 0.30, 'open_fdi': 0.09 * 1.00, 'traffic_road': 0.11 * 0.60, 'traffic_net': 0.11 * 0.40 } # 4. 加权合成综合得分 data['total_score'] = 0.0 for col, w in weights.items(): # 指标列归一化之后的列名加_norm后缀,乘以全局权重累加 data['total_score'] += data[col + '_norm'] * w # 5. 按综合得分排序输出 result = data[['city', 'total_score']].sort_values('total_score', ascending=False).reset_index(drop=True) result['排名'] = result.index + 1 print(result.round(4)) # 6. 全局权重的完整性校验:所有权重之和应等于1 total_w = sum(weights.values()) print("全局权重合计:", round(total_w, 6))逻辑说明:minmax_normalize函数完成正向指标的极差归一化。权重配置部分把准则层权重和指标层权重相乘得到全局权重,直接写在一个字典中,便于核对及其后续修改。合成时遍历权重字典,把每个指标的归一化值乘对应全局权重后累加到total_score。最后排序得到城市竞争力从高到低的排名。
需要特别看两个参数:一是归一化函数中的min和max由当前样本决定,这要求最终评价的城市集合在归一化阶段必须一次性确定。如果分两批处理数据,后一批的极差取值变化会让两批得分不可比。二是全局权重合计输出——严格为1才能保证综合得分落在0到1区间内。如果因为指标筛选或权重配置错误导致合计不为1,得分会被系统性抬高或压低,排名虽然可能不变,但报告里每个城市的得分绝对值就失真了。
4.3 得分构成拆解:哪些指标在推动排名
排名算完不是终点。做城市竞争力评价,决策方几乎一定会追问一个问题:“为什么A城市排名第二,但落后第一名那么多?”单纯的综合得分回答不了这个问题,需要查看得分构成。把每个城市的得分按准则层维度拆分,可以看到它在哪个维度领先、哪个维度拖后腿。
实现方法很简单:在合成循环里,不是只累加total_score,而是按准则前缀分组累加。比如所有eco_开头的指标归一化值乘权重求和,得到“经济实力”维度得分。然后输出一张透视表:行是城市,列是准则维度,值是各维度得分,最后一列是综合。这张表通常会让决策者一目了然——有的城市强在经济,有的城市靠生态拉分,有的城市基础设施短板明显。
这步分析还引出一个关键判断:AHP权重确定之后,排名结果对权重变化的敏感度如何。如果“经济实力”权重从0.32调到0.50,排名还是不变,说明头部城市的优势足够稳固,评价结论稳健;如果有几个城市的名次因为权重微调出现互换,说明这些城市竞争力接近,排名结论对权重依赖较强。后续所有决策建议都要基于这种敏感性判断来写,而不是把一次权重计算的结果当成铁律。这也是做城市评价项目时避免“一算定终身”的最重要习惯。
5. 层次分析法用进城市竞争力评价:5个高频翻车点与排查方法
5.1 翻车点一:指标层塞了逆指标,归一化方向反了导致排名倒挂
现象:某个城市明显经济发展水平更高,综合排名却低于所有欠发达城市。核查各指标得分时发现,该城市在“单位GDP能耗”这一项得分极低——归一化时直接套用正向公式,能耗高的城市得分反而高。
原因:AHP判断矩阵阶段不涉及指标数值,指标方向问题只在数据合成阶段暴露。做指标清单时只写指标名称,没标注正向还是逆向。单位GDP能耗、失业率、碳排放强度这类逆指标在年鉴中很常见,极差归一化公式用错方向后,指标值越大、归一化得分越高,结果就是把“高能耗”当成“竞争力强”。
解决:指标层建立时,同步维护一个正逆向标记。对逆指标,归一化改用(max - x) / (max - min)。更稳妥的做法是在数据预处理阶段就完成方向统一,比如把逆指标取倒数再归一化。还有一条血泪经验:归一化完成后打印所有指标的最大值、最小值和对应城市,快速扫一眼就能发现是否有指标方向异常。不需要等到综合排名出来再到处找原因。
5.2 翻车点二:专家填写的判断矩阵CR值死活过不了
现象:判断矩阵反馈回来,计算CR是0.16,超过0.1的接受阈值。退回重填,专家为了“让数学通过”,把所有比较值都往1靠拢,CR倒是过了,但权重变得趋同,区分度消失。
原因:专家把一致性检验理解成了考试,以为填得越接近越安全。实际上CR超标往往只有一两个判断值自相矛盾,全盘压低比较值是过度修正。另一种情况是判断矩阵阶数高(6阶以上)时,即便专家判断基本合理,CR也容易超标,这是高阶矩阵的数学特性,不代表专家水平不行。
解决:先做定位分析,把偏离权重比最大的比较值找出来,单独反馈给专家。比如上一节代码里matrix[i][j] / (weights[i]/weights[j])偏离1最多的那个元素,直接指出“这个值您填的是5,按您其他判断的隐含逻辑,它应该是3或4”。让专家只调整这一个值,重新计算CR,绝大多数情况下能降到0.1以下。高阶矩阵实在降不下来,把接受阈值放宽到0.15,并在报告中注明理由,也比让专家为了过验而“猜”出一份假矩阵强。
5.3 翻车点三:权重计算正确但指标权重是分开算的,全局权重之和不是1
现象:准则层权重矩阵算了三次,每次都对。合成排名时发现所有城市得分普遍偏高,好几个超过0.9。检查后发现问题出在权重传递:某些指标在指标层的权重配置里写的是准则内归一化权重,忘了乘准则层权重,全局权重合计只有0.73。
原因:AHP分两个层级计算权重后,如果直接在合成脚本里手写各指标的全局权重,很容易漏乘或重复乘。城市竞争力项目里指标数量多,每个维度下又有3到5个指标,人工维护一个16维的全局权重字典,出错几乎是必然的。
解决:不要手写最终权重。程序里维护两个变量:criterion_weights(6个准则的权重向量)和indicator_weights(每个准则内指标权重矩阵),合成前做一次嵌套乘法得到全局权重,再自动校验sum(global_weights) == 1。即使专家后续调整了某个准则层权重,全局权重也会自动联动更新,不至于改一处漏一处。
5.4 翻车点四:指标体系在不同城市间不可比,部分指标口径不统一
现象:A城市和B城市在“轨道交通里程”上差距悬殊,但B城市的轨道交通数据为0,用的是“暂无轨道交通”替代。归一化后B城市得0分,而A城市接近满分。这个指标对排名产生了不成比例的影响——但它反映的其实是城市发展阶段差异,不完全是竞争力差异。
原因:城市竞争力评价的指标体系设计时没有强制统一指标口径。有些指标天然与城市规模相关(GDP、财政收入、专利授权量),用绝对量对比对小城市不公平;有些指标只有特定层级城市才有数据(轨道交通),绝大多数城市只能填0。
解决:在指标体系设计阶段做两类处理。一是规模敏感型指标改用相对量(人均GDP、每万人专利拥有量、地均产出),而不是绝对量。二是存在大量零值的指标,要么直接剔除,要么引入虚拟变量标注“有无该项设施”,不要用原始数值做归一化。轨道交通这类指标,10公里和0公里之间不是线性的竞争力差距,强行线性归一化会让几个零值城市在基础设施维度集体吃大亏。
5.5 翻车点五:归一化在分批数据上进行,两批城市的得分不可比
现象:第一轮评价了5个城市,排名发布后新增3个城市参与评价。直接沿用第一轮的归一化参数(min和max),把这3个城市的数据代入旧模型计算得分,结果新增城市得分普遍偏高,但排名与直觉严重不符。
原因:极差归一化的min和max是从样本中提取的。第一轮5个城市的最小值和第二轮8个城市的最小值不一样。如果某个新城市在某个指标创了样本新高,它在这个指标上得1分,其他城市按原有min和max归一化的值就失真了。本质上是样本变化后,原有归一化基准已经失效。
解决:归一化必须基于最终确定的完整样本一次性计算。新增城市时,不能用旧的min和max,必须把8个城市全部重新归一化、重新合成、重新排名。这正是跨期对比场景中的一个隐患,城市竞争力评价如果要做年度对比,建议固定基准期:比如固定以2020年作为min和max的取值年份,后续年份都沿用同一套基准,这样各年份得分可比,但要注意指标数值如果整体增长,所有城市得分都会被压缩,需要结合实际情况解释。
6. 两个让城市竞争力评价结果更可信的进阶习惯
第一个习惯是群决策而非单人打分。单个人对“经济实力比创新能力重要多少”的判断,随机性和个人倾向太强,导致同一套指标体系算出来的权重在不同时间可以差出一大截。常见做法是邀请多位专家各自独立填写判断矩阵,然后对判断矩阵做几何平均——注意不是对权重做平均,而是对矩阵中的每个对应位置做几何平均,得到“综合判断矩阵”,再对这个综合矩阵计算权重。几何平均可以避免算术平均被极端值带跑,也能保留个体判断的一致性信息。我在多轮项目中用这个方法后,最终权重的稳定性和向决策层汇报时的说服力都有明显提升。
第二个习惯是做完排名必须做权重敏感性分析。最简单的操作是:把准则层权重分别上下浮动20%,重新计算综合排名,观察哪些城市名次大起大落。输出一张“排名变动表”——每个城市在各组权重下的名次范围。名次跨度大的城市,说明它的竞争力结构不均衡,高度依赖特定评价视角;名次稳定的城市,说明多维度都比较扎实。决策建议要优先围绕那些“怎么调权重都靠前”的城市展开,而不是只看一次排名的第一名。
如果看了这些还想再挖深一层,可以试试把AHP算出的权重作为后续分析的前置输入,比如结合灰色关联分析做动态排名,或者引入时间维度做年度竞争力变化分解。这套方法和AHP的衔接都很自然,但那是把模型铺大之后的事。城市竞争力评价这类问题,先判断清楚“这个城市强在哪、弱在哪、差距有多大”,比把模型搞得花哨重要得多。我一次做年度报告时,就因为迷信更复杂的模型,差点把“靠工业起家、服务业短板明显”这个一目了然的结构性问题埋进一堆算子里。后来回到权重分解,一张维度得分表就把问题讲透了。希望这篇笔记能帮你少走那段弯路。
本文还有配套的精品资源,点击获取