数学建模竞赛复盘:从Spearman相关系数到ANP主客观综合赋权实战

发布时间:2026/8/24 11:35:53
数学建模竞赛复盘:从Spearman相关系数到ANP主客观综合赋权实战 1. 从“她”说起一次数学建模竞赛的完整复盘第一次参加数学建模竞赛那种感觉就像和一个完全陌生的“她”进行了一场长达三天三夜的深度对话。这个“她”不是某个具体的人而是那个由问题、数据、算法和逻辑构成的、充满挑战又魅力无穷的数学建模世界。赛前你可能觉得自己学了不少模型看了不少论文但真正拿到赛题、面对空白文档和一堆杂乱数据时那种茫然和压力是前所未有的。赛后当提交完论文、关掉电脑疲惫之余更重要的是把这场“相遇”中的得失、感悟和思考系统地沉淀下来。这篇笔记就是我对那次竞赛经历的赛后分析和总结希望能把那些抽象的算法、纠结的决策和深夜的灵光一闪还原成可供后来者参考的、有血有肉的经验。很多人赛后可能就松一口气把资料一扔再也不看。但在我看来赛后复盘的价值甚至可能超过比赛本身。它是对你三天思维过程的“逆向工程”能让你看清自己在哪里走了弯路在哪里灵光一现哪些工具用起来得心应手哪些知识还存在盲区。特别是当我们看到热搜词里那些具体的算法比如Spearman相关系数、折衷型模糊多属性算法、主客观综合赋权法、网络层次分析法ANP它们不再是教科书上冰冷的名词而是在解决某个具体问题时你权衡再三后选出的“武器”。复盘就是审视这些“武器”的选用是否得当威力是否发挥了出来。2. 赛题拆解与核心需求定义问题比答案更重要拿到赛题的第一时间切忌直接扎进文献或开始敲代码。我们那次遇到的题目大致是关于“区域可持续发展能力评估”一类的问题给出了若干年的经济、环境、社会等多维度指标数据要求建立评价模型并对未来趋势进行分析。这听起来很像是综合评价类问题而热搜词里的主客观综合赋权法、网络层次分析法等恰恰是这类问题的常用工具箱。2.1 第一步将口语化问题转化为数学语言题目描述通常比较笼统比如“请建立评价模型分析各区域发展状况”。我们的第一步是进行问题转化评价对象是哪些区域是省份、城市还是其他行政单元数据是否支持评价目标什么是“发展状况”是综合实力排名是协调发展水平还是可持续性这决定了模型的输出形式。评价依据题目给了哪些指标这些指标是效益型越大越好还是成本型越小越好指标间是否存在明显的相关性或冲突这里Spearman相关系数就可以登场了用于分析非正态分布指标间的相关性比Pearson相关系数适用范围更广。模型任务是单纯排序还是分类如领先、中等、落后或是需要计算一个具体的综合得分我们当时花了近两个小时在白板上反复讨论最终将问题明确为“基于给定的多时段、多指标面板数据构建一个能够融合指标间相互影响关系的综合评价模型计算出各区域每年的综合发展得分并据此进行排序、分类和趋势预测。” 这个定义直接指引了后续的模型选择需要处理指标关联想到ANP需要赋权想到主客观综合法需要处理模糊性想到模糊算法。2.2 第二步识别关键难点与潜在“坑点”定义清楚问题后就要预判难点。这对时间管理至关重要。数据预处理之坑数据是否有缺失如何填补指标量纲不统一如何标准化/归一化我们当时就遇到了个别指标存在极端值用常规的Min-Max标准化会导致大部分数据挤在中间后来改用了“均值-方差标准化”或“向量归一化”效果更好。模型复杂度与可解释性之平衡网络层次分析法ANP可以考虑指标间的反馈与依赖比AHP更精细但构建超矩阵、计算极限超矩阵的过程复杂且需要依赖专家打分构造判断矩阵主观性强。在有限时间内其可靠性和可解释性能否保证“综合”的哲学主客观综合赋权听起来很全面但主观权重如AHP/ANP所得和客观权重如熵权法、CRITIC法所得以什么比例融合简单加权平均是一种折衷型模糊多属性算法的思想体现但如何确定折衷系数这本身又成了一个需要建模的小问题。3. 模型构建的“武器库”选择与实战应用面对综合评价问题我们的武器库里有好几把“枪”。选择哪一把甚至如何组合使用直接决定了论文的深度和说服力。3.1 客观赋权法让数据自己说话我们首先用客观赋权法从数据本身提取信息。这里主要使用了两种方法进行对比熵权法核心思想是指标值差异越大其包含的信息量熵越小权重应越大。计算过程相对机械完全依赖数据分布。我们用它快速得到了第一版客观权重。但它的缺点是对指标的具体含义不敏感有时会给出与常识不符的权重比如某个重要但历年数据很稳定的指标权重可能很低。CRITIC法这个方法比熵权法更全面。它同时考虑了指标的对比强度用标准差衡量和指标间的冲突性用相关系数衡量。冲突性小的指标说明它们反映的信息重复应适当降低权重。我们计算了指标间的Spearman相关系数矩阵作为CRITIC法中冲突性的输入。这一步让我们发现了几个高度相关的指标组为后续的指标筛选或ANP中关系网的构建提供了依据。注意计算相关系数时要根据数据特征选择方法。我们的数据部分不符合正态分布因此选择了非参数的Spearman秩相关系数而不是Pearson相关系数。这是很多新手容易忽略的细节直接调用corr()函数默认计算Pearson系数可能导致结论偏差。3.2 主观赋权法融入领域知识为了弥补纯客观方法的不足我们决定引入主观权重。AHP层次分析法太基础且无法处理指标间的依赖关系。题目中经济、环境、社会指标之间显然存在相互影响例如经济发展可能影响环境因此我们选择了更复杂的网络层次分析法ANP。构建网络结构我们将所有指标放在一个层次网络层然后通过小组讨论判断哪些指标之间存在影响关系如“人均GDP”对“污水处理率”有影响用箭头画出影响网络。这个过程非常耗时但至关重要。构造判断矩阵针对每个指标需要对其有影响的其他指标进行两两比较打分1-9标度法。我们三个人各自独立打分然后对存在分歧的地方进行讨论最终达成一致。这里的一个心得是不要追求绝对的精确ANP本身就能容纳一定的不一致性通过一致性比率CR检验关键是要逻辑自洽能自圆其说。超矩阵与极限超矩阵这是ANP计算的核心也是编程实现的重点。我们将所有判断矩阵的结果填入未加权超矩阵然后通过计算其极限超矩阵即求幂直到矩阵稳定得到各指标的稳定权重。我们使用MATLAB编写了迭代程序来实现这一过程。踩坑记录最初我们直接对未加权超矩阵求极限结果不收敛。后来才发现必须先将未加权超矩阵的每一列归一化得到加权超矩阵再对加权超矩阵求极限。这个细节在不少教程里是一笔带过的。3.3 权重的融合折衷的艺术现在我们有了客观权重熵权法结果、CRITIC法结果和主观权重ANP结果。如何融合我们采用了基于“离差最大化”思想的折衷型模糊多属性算法的变体。 我们不是简单地将主客观权重加权平均而是构建了一个优化模型寻找一组综合权重使得该权重下各评价方案即各区域的综合得分尽可能分散离差最大化同时该综合权重与主、客观权重的偏差之和最小。这实际上是一个主客观综合赋权法的典型实现。 具体来说我们建立了以下数学模型 设客观权重向量为 ( w_o )主观权重向量为 ( w_s )待求的综合权重向量为 ( w )。 目标函数是最大化各区域得分的离差平方和体现区分度并最小化 ( w ) 与 ( w_o )、( w_s ) 的偏差常用欧氏距离的平方。 通过引入一个折衷系数 ( \alpha )0 ≤ α ≤ 1来平衡两个目标最终转化成一个线性规划或二次规划问题用MATLAB的linprog或quadprog函数求解。 这个过程的优势在于它通过数学优化自动确定了主客观的“混合比例”而不是人为指定一个α值比如0.5说服力更强。4. 综合评价计算、可视化与结果分析得到综合权重后计算各区域每年的综合得分就相对直接了将标准化后的数据矩阵乘以权重向量即可。但故事还没完如何呈现和分析结果是论文能否出彩的关键。4.1 结果的可视化让图表说话我们制作了以下几类图表综合得分年度趋势折线图将主要区域的得分随时间变化画在同一张图上可以清晰看到“马太效应”、“收敛趋势”或“格局变动”。我们使用了不同线型和颜色并添加了数据标记点。区域排名年度热力图用热力图展示每年各区域的排名1-N颜色从深到浅代表名次从高到低。这种图能非常直观地展示排名的稳定性与变化。哪个区域一直领先深色带哪个区域排名波动大颜色斑驳一目了然。雷达图蜘蛛网图选取有代表性的年份和区域绘制其各一级指标经济、环境、社会得分的雷达图进行横向不同区域同一年和纵向同一区域不同年对比。这能直观展示区域发展的“短板”和“优势结构”的变化。聚类分析树状图我们使用综合得分对各区域进行了系统聚类分析将区域划分为“领先型”、“发展型”、“追赶型”等类别并用树状图展示聚类过程。这比简单按得分排序更深入能发现“梯队”结构。4.2 深度分析不止于给出排名如果论文只给出排名和得分那深度是不够的。我们基于计算结果进行了如下分析稳定性分析计算各区域历年排名的标准差或变异系数分析其排名的稳定性。我们发现有些区域虽然某一年得分高但历年波动很大说明其发展可能依赖特定政策或资源可持续性存疑。贡献度分析对于某个区域计算每个一级指标经济、环境、社会对其综合得分的贡献值该指标得分×其权重并分析贡献结构的变化。这能回答“这个区域是靠什么发展起来的”这个问题。敏感性分析鲁棒性检验这是很多论文忽略但评委很看重的一点。我们微调了ANP中的部分判断矩阵在一致性允许范围内或者改变客观赋权法从熵权法切换到CRITIC法重新计算综合权重和排名。观察排名变化较大的区域分析其脆弱性。这能检验模型结论的可靠性。我们发现在权重微小变动下中间梯队的区域排名容易发生变化而头部和尾部区域非常稳定这个结论增加了我们模型的说服力。5. 论文写作、编程实现与团队协作的实战心得数学建模竞赛是“三分建模七分写作”而写作和编程都依赖于高效的团队协作。5.1 论文写作逻辑清晰是生命线论文不是代码和结果的堆砌而是一个完整的论证过程。摘要这是重中之重需独立撰写最后完成。采用“总-分-总”结构首句概述解决了什么问题接着用两三句话分别说明“用了什么方法/模型”、“得到了什么主要结果/结论”最后一句点明模型的特色或优势。务必精炼避免细节。模型假设这是模型的边界必须清晰列出。好的假设既能简化问题又要合理。例如我们假设“不同区域的数据统计口径一致”、“未来几年政策环境不发生剧变”。这为模型的适用性划定了范围。模型建立与求解这部分要像讲故事一样层层递进。为什么选择这个模型现有方法的不足我们模型的优势模型具体怎么构建公式、流程图参数如何确定求解过程遇到什么困难如何解决的我们详细描述了从ANP超矩阵构建到求解极限权重的过程并附上了关键的MATLAB代码片段非全部。结果分析与第四部分的可视化深度结合。不要只说“如图X所示”而要解读图表“从图3可以看出A区域在2018年后环境得分显著提升与其当年开始实施的绿色产业政策在时间上吻合说明……”。模型评价与推广客观评价自己模型的优点考虑指标关联、主客观综合等和缺点ANP依赖主观判断、未考虑指标非线性关系等。并提出改进方向可引入神经网络处理非线性和模型在其他领域的应用可能性如企业竞争力评估、城市宜居性评价。5.2 编程实现效率与可靠性的平衡我们队由两人主要负责编程MATLAB/Python一人主要负责写作和资料查找。工具选择数据处理和基础绘图用PythonPandas, NumPy, Matplotlib, Seaborn因为其库丰富处理表格数据方便。复杂的矩阵运算和优化求解用MATLAB因为其语法更贴近数学公式调试矩阵操作更直观。两者通过CSV文件交换数据。代码管理极其重要我们使用Git配合Gitee进行版本管理。每天结束前必须将当天可运行的代码和生成的图表提交。这避免了最后一天合并代码时的“地狱景象”。每个主要函数都有清晰的注释说明输入、输出和功能。调试技巧对于ANP这种复杂计算我们采用了“分步验证”法。先手动计算一个3x3微型网络的权重确保代码逻辑正确再推广到全尺寸数据。绘制中间结果如判断矩阵、未加权超矩阵进行人工抽查。利用MATLAB的矩阵可视化工具检查矩阵是否异常。5.3 团队协作1113三天时间团队状态是成败的关键。角色定位与动态调整我们虽有大致分工建模、编程、写作但绝不僵化。当建模遇到瓶颈时所有人都参与讨论当写作需要某个图表时编程的同学立刻生成当代码调试卡住时其他人帮忙查文献或检查公式。核心是保持沟通畅通目标一致。时间管理我们制定了粗略的时间表第一天上午理解问题、下午确定模型主体第二天全天实现模型、计算、出初步结果第三天上午完善分析、下午全力写作、晚上修改摘要和检查。实际执行中会有偏差但大框架保证了进度。决策机制当出现分歧时比如该用AHP还是ANP我们采用“快速验证法”。花半小时分别查阅两种方法的核心步骤和所需时间评估优劣然后投票决定。避免在争论中消耗过多时间。心态管理第二天晚上通常是“至暗时刻”模型结果可能不理想或者程序报错。这时需要互相打气吃点东西短暂休息一下。记住一个能跑通、能解释的简单模型远胜过一个复杂但漏洞百出、无法实现的“完美”模型。6. 赛后反思那些如果重来我会做得更好的事比赛结束尘埃落定。回顾整个过程有几个地方如果当时能做得更好论文质量或许能再上一个台阶。第一对赛题背景知识的储备不足。我们的题目涉及“可持续发展”赛前我们虽然复习了各种评价模型但对可持续发展理论如联合国SDGs指标框架了解不深。这导致我们在指标筛选和解释时深度不够。如果重来我会在赛前有针对性地阅读一些相关领域的综述文献了解该领域的核心争议和常用指标集这样在构建模型网络ANP和解释结果时会更有底气也更容易提出创新点。第二在模型复杂度和时间成本之间权衡可以更果断。我们花了大量时间在ANP的判断矩阵讨论和计算验证上。虽然ANP增强了模型的理论深度但也极大地压缩了后续灵敏度分析、模型对比和写作的时间。赛后想想或许可以采用一个“简化版ANP”或者先用AHP快速得到一个基础主观权重再用更精细的客观权重去修正把节省下来的时间用于更丰富的后续分析。在数模竞赛中“完成度”和“亮点”的平衡非常重要一个完整的、有逻辑的、包含稳健性检验的中等复杂度模型往往比一个半成品的复杂模型得分更高。第三论文的“讲故事”能力可以更强。我们的论文在技术细节上很扎实但在整体叙事上略显平淡。如果重来我会在引言部分就构思一个更强的“故事线”例如从某个典型区域的发展困境切入引出综合评价的必要性在分析结果时不仅描述现象更尝试构建一个“驱动因素-发展状态-政策启示”的叙事逻辑让整篇论文读起来像一个有起承转合的案例分析而不仅仅是技术报告。这需要队长或主笔人有更强的宏观把控能力。第四对可视化工具的掌握可以更深入。我们用的都是Matplotlib和Seaborn的基础图表。赛后看到一些优秀论文使用了交互式图表如Plotly、Pyecharts生成的网页图表截图插入论文、地理信息可视化将结果映射到地图上等效果非常出彩。虽然评委看的是纸质论文但更专业、更直观的图表无疑能极大提升印象分。这提醒我在平时就需要积累一些高级可视化技能而不仅仅是赛前突击。与数学建模这位“她”的初次相遇充满了挑战、焦虑也充满了突破后的喜悦和团队协作的温暖。这场比赛教会我的远不止几个算法和模型更是一种系统化解决问题、在压力下协作、将复杂现实抽象为数学语言的综合能力。这份赛后总结既是对过去的梳理也是写给未来自己和所有同路人的一份实战指南。建模之路山高水长每一次“相遇”都是成长。