当前位置:首页 > 科研成果库

复杂系统建模:在还原论的惯性里接住涌现的信号

2026-10-13 18:01:17小研科研成果库13
上次和南大数据院的老师在仙林校区的咖啡馆聊,窗外香樟落了一地。他把电脑转过来给我看去年长三角城市群碳排放模型的残差图,歪歪扭扭的点连起来像个乱跳的心电图,根本不符合回归模型要求的随机分布特征。 一开始他们拿传统的多元回归拟合,把16个核心城市的GDP、产业结构、能源消费强度全部塞进去,R²算出来有0.92,看起来漂亮得很。结果2022年的实际数据出来,整体预测偏差超过27%,苏州的预测值比实际值低了近三分之一——因为模型默认所有城市的碳排放下降是线性的,根本没考虑当年疫情管控下,工业产能波动带来的非线性跳变。 差到什么程度? 比瞎猜好不了多少。 后来他们换了基于个体交互的仿真框架,把每个城市的产业主体、交通流、居民生活排放都做成独立的决策单元,允许单元之间根据政策、外部冲击动态调整行为,同样的数据集,预测误差直接降到8%以内。

被高估的拟合精度,藏着建模的底层误区

很多人对这类建模的误解,从一开始就错了。 他们觉得只要把历史数据拟合得足够好,R²冲到0.9以上,模型就算成功了。可复杂系统的核心属性是“系统整体行为无法被拆解为组分行为的线性加总”,你拿还原论的思路,把系统拆成一个个独立的变量,靠历史相关性拟合出参数,从根上就没摸到这类系统的运行逻辑。 举个最常见的例子,城市早高峰交通建模。很多团队一开始把所有路段的通行能力、红绿灯周期、历史车流量数据全部做成固定参数,拟合出来的延误曲线看着平滑又准确。可只要遇到一个路口临时出事故,整个模型的预测误差能直接冲到60%以上——因为你建模的时候根本没考虑,每个司机遇到事故的绕行选择是异质的,有人会直接绕上高架,有人会拐进旁边的支路,这些个体决策的叠加,会让整个路网的流量分布出现完全不同于历史规律的变化,这种变化是固定参数的拟合模型永远算不出来的。 城市早高峰交通流元胞自动机仿真示意图城市早高峰交通流元胞自动机仿真示意图 我之前见过一个团队做的交通模型,为了追求拟合精度,给每个路段加了17个修正参数,最后模型在历史测试集上的误差不到5%,可拿到新的城区路段上跑,误差直接翻了10倍。说白了,那些参数根本不是对系统运行规律的提炼,只是为了拟合历史数据凑出来的数字,换个场景就完全失效。

不是所有系统都值得上复杂建模的工具

说句实在话,我见过太多项目为了显得“技术先进”,不管面对的系统到底是什么性质,上来就堆多智能体、贝叶斯网络、元胞自动机,折腾大半年,最后出来的结果和简单的移动平均模型差不了2%,成本翻了十几倍。 这很蠢。 真的。 判断一个系统是不是需要用复杂的仿真框架,其实有非常明确的标准:当系统内的组分存在持续的自适应交互,且系统边界外存在无法被预先量化的扰动源时,这类建模的投入才是有回报的。 反过来,如果系统的组分是固定的,交互规则是稳定的,扰动是可以被提前量化的,就完全没必要上复杂工具。比如你要算学校食堂的月度食材采购量,整个系统的组成就是固定的几个窗口、稳定的师生客流、可预测的每周消费波动,这种系统的行为是线性的,拿带季节调整的移动平均模型就足够准确,非要上多智能体仿真,最后算出来的采购量和简单模型的偏差不到2%,但光是数据清洗、参数校准的时间就要花两周,完全是性价比极低的自嗨。 当然,我也见过把这个边界卡得特别准的例子。2020年武汉疫情早期,一开始大家用经典的SEIR仓室模型做传播预测,为什么误差那么大?因为模型默认所有人群的接触率是固定的,可实际上,从社区封控开始,居民的出行范围、接触频率、防护行为每天都在动态变化,不同社区的人员流动强度、老年人口占比、医疗资源配置都不一样,这些组分之间的交互是自适应的,根本不是固定参数能概括的。后来有团队把每个社区的居民做成独立的agent,把他们的出行半径、接触率、防护行为的动态调整全部放进模型,结合当时的流调数据校准参数,对后续疫情峰值出现时间的预测误差,从最初的两周缩小到3天以内,给防控资源的调配帮了大忙。 多agent传染病传播仿真节点连接图多agent传染病传播仿真节点连接图

建模的边界感,比模型的复杂度更重要

现在很多人做这类建模,有个走偏的趋势:觉得模型的节点越多、参数越细、结构越复杂,就越厉害。 结果呢? 大部分都掉进了维数灾难的坑里。 之前接触过一个做黄河流域生态水文模型的团队,一开始雄心勃勃建了300多个子流域的交互节点,把土壤渗透率、植被覆盖度、地下水补给系数全部套上全国平均参数,跑一次仿真要花整整一天。最后拿近5年的实测径流数据做验证,模型预测值和实际值的相关系数还不到0.3,说白了就是一堆随机参数凑出来的数字,根本反映不了真实的水文过程。 后来他们咬着牙删了200多个没有本地实测数据支撑的节点,只保留核心的10个水文站的交互链路,把没有办法准确校准的参数全部用随机项代替,只留最核心的水流传导规则、降水入渗系数,用近10年的实测数据做校准。最后仿真时间从一天缩到20分钟,预测精度反而涨了4倍。 这里面的道理其实特别简单:复杂系统建模的核心不是“把所有可能的因素都装进去”,而是“找到系统里真正能触发涌现行为的关键交互链路”。 比如做金融市场的异常波动建模,你根本不需要把每个散户的交易行为都做成独立的agent——大部分散户的交易是随机的,对整体市场的波动贡献不到10%,完全可以用随机项来概括。真正需要精细建模的,是几个关键的传导节点:两融的平仓阈值、公募基金的仓位调整规则、北向资金的流动阈值,这些节点之间的连锁反应,才是触发市场异常波动的核心,把这些链路算准,模型的预测精度就足够用了。 之前有个做城市配电网灾变仿真的朋友跟我吐槽,他们一开始做的台风天停电模型,把每一根电线杆的腐蚀程度、每一个变压器的实时负载率都做成了独立的决策单元,跑一次仿真要算12个小时。后来他们发现,台风天的大面积停电,根本不是单个设备的随机故障引发的,而是故障的连锁传导——一个节点断电,相邻节点的负载突然升高,超过阈值就会接着断电,像多米诺骨牌一样。他们根本不需要每个设备的精细参数,只要把设备之间的连接关系、相邻节点的负载阈值算准,仿真时间直接从12小时缩到20分钟,预测的故障覆盖范围误差还比之前小了15%。 上周和他在河西的小馆子吃火锅,他说现在他们团队接项目,第一步从来不是写代码,是拉着甲方把系统里的关键交互链路列出来,列不出来的,直接不接。 毕竟做模型从来不是为了搭一个看起来高深莫测的黑盒子。 是要接住那些藏在复杂交互里,靠线性思维摸不到的信号。