恒美微站 Logo 恒美微站
  • 首页
  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心
  • 联系我们

多层网络系统性风险传染模型:从银行压力测试到政策模拟系统

  • 首页
  • 资讯中心
  • /
  • 多层网络系统性风险传染模型:从银行压力测试到政策模拟系统

相关资讯

视频画质修复全攻略:从模糊原理到AI超分,让老视频重新变清晰 2026/9/19 18:29:08
3个硬核降AIGC工具,让你的论文彻底告别AI痕迹[必看] 2026/9/19 18:29:08
智能鱼缸物联网系统设计:从传感器采集到MQTT远程监控的完整实现 2026/9/19 18:29:08

最新资讯

Excel数据透视表高级技巧与实战应用
KaTrain围棋AI工具实操指南:本地化训练与复盘全解析
告别论文“硬伤”:让汇写AI辅助写作,回归精准与合规
毕业排版“噩梦”:AI智能排版,一键匹配院校格式
多模态学习驱动保险智能升级:客户分群、风险评估与动态定价实践
深入解析 react-beautiful-dnd 中的图片闪烁问题(Image Flickering)与缓存优化方案

今日推荐

oh-my-hermes:打造跨工具的命令编排与插件化工作流
OpenClaw.NET 用 /goal start 跑长任务,模型 Base URL 改到 TaoToken
SYB创业计划书财务逻辑拆解:从销售收入预测到现金流量计划

本周热门

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验
Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化
Flutter应用改名全指南:从Android到iOS的配置与工具实践

本月精选

自研推理加速器Redwood:两周内实现PyTorch模型高效部署的实战教程
V4L2摄像头采集实战:从camera_client.rar到出图全流程解析
从“谁发明了钢琴键”到知识问答智能体:RAG与记忆工程实践

多层网络系统性风险传染模型:从银行压力测试到政策模拟系统

发布时间:2026/9/19 18:29:08
多层网络系统性风险传染模型:从银行压力测试到政策模拟系统 简介面向金融风险管理与系统性风险研究领域这份资源以中国银行业为对象完整复现了基于银行间借贷、交叉持股与共同资产持有三个渠道的多层网络系统性风险传染模型。内容兼顾理论推导与工程实现既阐明模型原理又提供可直接运行的Python代码与逐步解释适合金融研究人员、监管机构工作者及相关方向学者用来理解DebtRank模型在多层网络上的扩展、冲击情景模拟与系统重要性银行识别。压缩包为单个PDF文档约1002KB代码部分涵盖MultilayerBankNetwork类、三层网络构建、DebtRank传染算法、损失传播计算等核心模块同时给出了非线性叠加效应的数学表达增强、资产价格反馈机制、系统重要性识别算法改进及动态网络与机器学习整合方向等扩展设计。模拟实验覆盖个体银行冲击、行业冲击和宏观经济冲击可输出传染路径与机构损失排序。目前已吸引151人学习浏览是一份兼具理论深度与工程落地性的系统性风险分析参考。1. 一个看似稳定的银行体系为什么会在几天内失去流动性对一个包含数百家银行样本的金融网络做压力测试时结果往往比业内预期更极端单看同业拆借层传染损失不足总资本的 2%把共同基金持仓这一层加上后损失瞬间放大到 8% 以上。原因在于真实体系不是一张网而是无数张网叠在一起——银行间拆借、共同债券持仓、批发融资赎回、衍生品担保品再抵押每张网都有各自的传染速度和触发条件。这个标题谈的金融领域基于多层网络的系统性风险传染模型就是把中国银行业系统性风险评估与政策模拟系统设计从单一敞口视角升级为多视角叠加评估最终落成可运行的代码。适合做监管科技、金融工程、量化风控的工程师也适合研究系统性风险和宏观审慎的研究者。只要会用 Python 和基础网络概念后面每章都可以直接复现。2. 多层网络的基础设定三类传染通道与阈值传染方程2.1 为什么单层网络解决不了价格传染和挤兑经典的单层银行网络模型把银行间的同业拆借刻成一张有向图节点是银行边是授信关系。这种模型的优点是直观压力测试时把一批银行设为违约观察冲击沿图扩散多少轮。但它是静态的默认风险只沿债权债务关系传播忽略了两个更常见的传染机制。第一个是价格传染。许多银行持有相似度极高的国债、信用债和基金份额一家银行因亏损抛售资产后市场价格下跌其他持有相同资产的银行净值同步缩水哪怕它们之间没有任何直接授信。第二个是挤兑传染。一家银行出现问题后其批发融资对手方会收紧敞口导致出现问题的银行需要更快变现资产市场因此进一步下跌形成融资收缩—资产甩卖—价格下跌—再融资收缩的负反馈。这两类渠道在单层网络里无法表达必须把资产持有关系和融资结构拆成独立的层。2.1.1 网络定义层、节点和跨层映射在多层网络设定里层不是子图而是代表一种独立的交互关系。以中国银行业为对象时我一般会构建三层层边定义权重计算层 1银行间资产层同业拆出、买入返售等直接敞口敞口金额 / 受损方资本层 2共同资产层两家银行持仓间市值重合度持仓向量点积或余弦相似度层 3负债流动层批发融资契约的到期关系到期金额 × 压力赎回率层与层之间的节点是一一映射的同一家银行在两个层里的状态不同但在传染方程里共享同一个健康状态变量。这样既保留了每层的独立性又能把跨层冲击串联起来。2.2 阈值传染方程把多层冲击统一进一个状态向量每轮传染开始时每家银行有一个初始资本缓冲 $C_i$ 和健康状态 $h_i(t)$1 表示正常0 表示违约。三层网络统一用同一个损失更新方程$$ L_i(t1) L_i(t) \sum_{\ell1}^{3} \sum_{j} W_{ij}^{(\ell)} \cdot g\left(h_j(t)\right) \cdot s_{\ell} $$其中 $W_{ij}^{(\ell)}$ 是第 $\ell$ 层从 $i$ 到 $j$ 的归一化冲击权重$g(h_j)$ 是违约状态指示函数$s_\ell$ 是该层在压力情景下的放大系数。当 $L_i(t1) \geq C_i$ 时银行违约$h_i$ 置为 0。这个方程的要点是先假设、后验证每层贡献的损失前面加一个乘数 $s_\ell$就可以把政策工具变成可调参数。比如提高资本充足率要求等价于提高 $C_i$限制同业集中度等价于压低层 1 的 $W_{ij}^{(1)}$。这样参数校准就落在数值上而不是落在条文解释上。2.3 最小可运行示例用 Python 模拟两层传染路径为了把上面的方程落到代码下面这个例子只保留层 1同业拆借和层 2共同资产10 家银行跑 10 轮迭代import numpy as np def run_two_layer_simulation( exposures, # (n, n) 同业拆借损失传导矩阵 common_assets, # (n, n) 共同资产价格冲击矩阵 capital, # (n,) 每家银行资本缓冲 shock_level0.05, # 共同资产价格冲击基准 max_rounds10 ): n exposures.shape[0] health np.ones(n, dtypefloat) # 1 正常0 违约 loss np.zeros(n) for _ in range(max_rounds): # 层1同业敞口违约传染(1-health) 标记违约方 interbank_loss exposures (1 - health) # 层2共同资产价格冲击违约方抛售加剧市场下跌 asset_loss (common_assets health) * shock_level * (1 - health).sum() loss (interbank_loss asset_loss) * health old_health health.copy() health (loss capital).astype(float) if np.array_equal(health, old_health): break return loss, health # 构造10家银行前4家互相持有高额同业敞口 rng np.random.default_rng(42) exposures np.zeros((10, 10)) exposures[0, 1] 0.12 exposures[1, 2] 0.15 exposures[2, 3] 0.10 exposures[3, 0] 0.08 # 共同资产矩阵用随机对称矩阵对角线为0 common np.triu(rng.random((10, 10)), k1) common common common.T np.fill_diagonal(common, 0.0) capital np.full(10, 0.25) loss, health run_two_layer_simulation(exposures, common, capital) print(违约银行:, np.where(health 0)[0]) print(损失率:, loss)逻辑说明exposures (1 - health)是典型的邻接矩阵乘法行表示受损银行列表示违约方common_assets health先算出每家银行在共同资产上的损失敞口再乘以shock_level和违约数量模拟抛售压力随违约规模放大的非线性关系。loss ... * health这一步只在银行尚未违约时累计损失避免重复计算。参数说明shock_level不是市场价格跌幅而是单位违约银行对资产价格造成的影响程度通常标定在 0.02 到 0.08 之间capital统一设为 0.25 表示资本缓冲为 25%实际银行网络应替换为各行真实的一级资本充足率。最大迭代轮数影响稳定性20 轮以上网络状态基本收敛50 轮可消除绝大部分循环引用造成的震荡。这个例子已经包含多层网络模拟需要的全部要素层矩阵、状态向量、损失累计和阈值判定。实际系统里需要替换成真实数据、压力情景层权重和救助机制。3. 中国银行业系统性风险评估网络构建、DebtRank 与传染损失3.1 从公开资产负债数据到网络矩阵的四种建网方式做中国银行业的多层网络数据来源是年报与审计报告、同业存单发行记录、中债登和基金披露的持仓报告、银行间市场交易数据。没有内部监管数据时常见做法分为四种按可靠性从低到高排列建网方式输入适用场景局限性最大熵法各行总资产、同业资产、同业负债快速构建基准网络假设最分散连接低估真实集中度实际敞口法年报附注披露的前十大交易对手系统重要性银行分析非逐笔数据存在滞后共同资产法债券持仓、基金重仓股价格传染层只能覆盖披露资产类别混合法上述数据拼接完整多层网络需要权衡各层可靠性对于中国银行业系统性风险评估我一般以最大熵法为基线再用实际敞口法做层 1 的稳健性检验。这样做的原因是最大熵法对数据要求低能立刻跑通流程但真实网络中少数几家大行的交易对手集中度远高于最大熵假设所以必须在报告中标记该结果使用最大熵基线实际敞口按披露数据可上浮 30% 以上。3.1.1 矩阵构建的规模归一化构建各层矩阵时不要直接用敞口金额而要先对每行做相对资本的比例变换。设 $E_{ij}$ 为银行 $i$ 对 $j$ 的原始敞口则 $W_{ij} E_{ij} / C_i$即用受损银行的资本缓冲作分母。这样所有层的权重可比传染条件也从损失超过资本变成损失超过 $C_i$跨层加总时不会出现数量级失衡。3.2 系统性风险量化指标对照传染损失与 DebtRank 的区别单看一个指标容易误导。两个最常用的指标是累计传染损失CIL和 DebtRank两者都衡量从初始违约到全网络稳态的损失但计算对象不同指标计算对象说明CIL全网络累计损失 / 总资本适合做压力情景总量的排名DebtRank单个节点节点受袭后的传导效率适合排序系统重要性银行传染介数中心性边/节点该节点出现在多少条最短传染路径上定位关键桥梁违约传播速度全网络达到稳态所需轮数衡量传染加速度CIL 回答总体损失多大DebtRank 回答从哪家开始损失最大。政策模拟中两者都要算因为资本充足要求覆盖的是总量风险而交易对手集中度限制针对的是单点传导。3.3 Python 实现DebtRank 与按层分解的传染损失计算下面这段代码是独立可跑的 DebtRank 实现核心公式是 $h_i(t1) \min{1, h_i(t) \sum_j W_{ij} h_j(t)}$其中权重矩阵按列归一化保证同一传染源不会重复贡献。这里用一个 4 银行链式敞口例子说明计算过程import numpy as np def debtrank(A, capital, initial_default_idx, threshold0.1, max_round20): A: (n,n) 损失传导矩阵A[i,j] 表示 j 违约对 i 造成冲击的边际损失 capital: (n,) 资本缓冲 initial_default_idx: 初始违约集合 threshold: 冲击超过该节点资本的比例才判定受影响 返回: 每个节点最终状态以及累计损失 n A.shape[0] # 按列归一化每个违约方对所有受影响方的总冲击为 1 col_sum A.sum(axis0) col_sum[col_sum 0] 1.0 W A / col_sum # 状态编码0 未受影响1 受影响2 已违约/inactive state np.zeros(n, dtypeint) state[list(initial_default_idx)] 2 loss_total 0.0 for _ in range(max_round): new_state state.copy() for i in range(n): if state[i] ! 1 and state[i] ! 2: # 只接收 state2 节点的冲击 impact W[i] (state 2).astype(float) if impact threshold: new_state[i] 1 loss_total impact * capital[i] elif state[i] 1: # 受影响节点下一轮变成 inactive不再继续传播 new_state[i] 2 if np.array_equal(new_state, state): break state new_state return state, loss_total A_example np.zeros((4, 4)) A_example[0, 1] 0.35 # 银行1违约对银行2的边际损失 A_example[1, 2] 0.40 A_example[2, 3] 0.50 capital np.full(4, 0.25) # 每家银行统一 25% 资本缓冲 state, loss debtrank(A_example, capital, [0]) print(受影响机构:, np.where(state 0)[0]) print(累计损失占资本比例:, loss / capital.sum())逻辑说明state 2表示已违约节点下一轮会把冲击沿权重矩阵W向外传播state 1表示受影响但尚未违约再等一轮后转为 inactive这与标准 DebtRank 的有限轮传播一致。用column_sum归一的含义是违约方无论有多少条出边总冲击都限制在其资本损失的 100% 以内避免单节点反复加码导致损失超过真实边界。参数说明A[i,j]各行要预先除以受损方资本capital[i]这样impact是一个无量纲比率threshold默认 0.1表示冲击超过该节点资本的 10% 才判定受影响实际模拟中可按压力情景调低到 0.05但要注意低阈值会拉高传染速度。max_round取 20 在这个链式结构中足够收敛。3.4 识别系统重要性节点的扰动删除法单独看 DebtRank 排序还不够。要判断哪些银行是系统重要性的我一般用扰动删除法把候选节点设为不传播但也不抵抗的隐性节点重新计算全网络 CIL对比删除前后的损失差异。差异越大说明该节点在传染结构中的唯一性越强越值得被重点监测。做法是对候选节点 $k$先令其所有出边权重置 0保留其入边再跑一次全传染。如果删除后损失显著下降说明该节点是传染路径上不可替代的桥梁如果损失基本不变说明网络存在大量等价替代路径该节点个体重要性没有想象中高。这一步在代码上只需要把矩阵的对应行置零再重跑模拟计算量很小适合在监控模块里每批样本都跑一遍。4. 政策模拟系统设计从压力情景参数到事件驱动的传染引擎4.1 政策工具如何转成模拟参数政策模拟不直接建模监管规则条文而是通过参数映射把每个工具变成网络中的变量。常见的映射关系如下政策工具映射变量模拟效果资本充足率附加$C_i$ 上调初始违约阈值提高吸收损失能力增强流动性覆盖率要求层 3 赎回率上限缩短挤兑正反馈的强度同业集中度限制层 1 边权上限限制单一对手方冲击共同资产集中度限制层 2 持仓相似度上限阻断价格传染通道这样设计的好处是每个工具都有明确的模拟入口政策组合就是参数向量的叠加。实际做政策模拟时会把 3 个压力情景和 3 个政策方案做笛卡尔积共 9 组实验每组跑 200 次蒙特卡洛抽样取分位数。4.2 系统模块划分与数据流一个可维护的多层风险模拟系统至少要有六个模块。模块设计直接决定后续能否接新数据源、能否做敏感性分析。模块职责输出数据管道解析年报附注、持仓报告、市场数据标准化的银行-资产-负债表网络重建器最大熵法/实际敞口法构建各层矩阵3 个邻接矩阵 元数据情景生成器按压力系数生成一组扰动参数情景参数表传染引擎时间步进模拟传染、救助、清算每轮的状态快照指标计算器计算 CIL、DebtRank、边激活概率指标 Dataframe报告服务输出 Tail Risk 图表和预警网页仪表盘工程实现上核心传染引擎用 numpy 向量化多轮蒙特卡洛用 multiprocessing 并行。数据量不大时几百家银行单机完全够用如果接入逐笔交易数据可以把网络重建放到 Spark 上传染引擎保持单机事件循环。4.3 压力情景参数表与敏感性变量压力情景不是拍脑袋而是围绕违约概率 市场冲击 流动性收缩三个维度设置三档。下表中价格冲击和赎回率均取正数表示损失比例代码里直接使用情景同业敞口放大证券价格冲击短期融资赎回率救助成功比例常规压力1.0x10%5%100%中度压力1.3x20%15%60%严重压力1.6x30%30%30%参数优先级依次是证券价格冲击 救助成功比例 同业敞口放大 融资赎回率。因为共同资产层的传染面最广救助成功率则直接决定传染是否收敛。敏感性分析时固定其他参数只扫价格冲击从 10% 到 30%通常能看到损失出现非线性跳变点那个点就是当前网络的脆弱阈值。4.4 事件驱动主循环传染、救助与清算的 Python 实现政策模拟的核心是一个时间步进的事件循环。每一轮先根据当前违约集合计算各层冲击再按救助参数决定是否注入流动性最后清算违约银行并记录状态快照。核心循环如下import numpy as np def simulate_policy_scenario( layer_matrices, # 列表每个元素是 (n,n) 权重矩阵 capital, # (n,) 资本缓冲 price_shock, # 证券价格冲击正数表示损失比例如 0.2 recovery_ratio, # 救助成功比例如 0.6 common_exposureNone, # (n,n) 共同资产持仓矩阵可为 None max_rounds50 ): n len(capital) health np.ones(n, dtypefloat) loss np.zeros(n) history [] for t in range(max_rounds): # 1. 多层冲击累加所有层都参与传播 shock np.zeros(n) for W in layer_matrices: shock W (1 - health) # 2. 共同资产价格冲击按持仓矩阵加权 if common_exposure is not None: shock price_shock * (common_exposure (1 - health)) # 3. 救助判断单轮损失超过资本 50% 但未崩溃的银行 for i in range(n): if health[i] 1 and shock[i] capital[i] * 0.5: # 救助成功比例高则恢复低则直接进入违约 if recovery_ratio 0.5: health[i] 1 else: health[i] 0 loss[i] capital[i] elif health[i] 1 and shock[i] capital[i]: health[i] 0 loss[i] capital[i] history.append(health.copy()) # 状态不再变化则提前结束 if len(history) 1 and np.array_equal(history[-1], history[-2]): break return health, loss, history逻辑说明第一步把多层矩阵统一做 (1-health)计算与第 2 章的单层实现保持一致第二步按共同资产持仓矩阵放大价格冲击违约节点越多、抛压越大模拟市场流动性螺旋第三步是政策干预入口recovery_ratio大于 0.5 时对单轮损失超过资本一半的银行救助否则让市场出清。history记录每轮健康状态既用于收敛判断也供后续边激活概率分析。参数说明price_shock传入正数如 0.2 表示资产价格下跌 20%recovery_ratio取 0.3 时相当于救助成功率 30%此时大部分受损银行会在下一轮彻底违约。需要注意本例中loss只在违约时记为全额资本损失救助成功则不记入损失便于观察政策效果对比实际系统里应在此基础上叠加折价资产处置损失并把累计损失拆到每一层单独统计。5. 用边激活概率定位“关键桥梁”节点多层网络的最优监控位5.1 度中心性与介数中心性在多层网络里的局限普通单一网络里度中心性和介数中心性已经很成熟但放到多层网络会出现两个问题一是层间权重不可比层 1 的单位敞口和层 2 的持仓重合度不能直接相加二是传染路径不是单纯几何最短路径而是受状态阈值影响的时变路径。简单用一个中心性指标排序会漏掉那些平时不显眼、一到压力情景就被同时触发的边。5.2 从压力模拟记录中统计边激活概率的示例代码更可靠的做法是从模拟记录里统计边激活概率把第 4 章的simulate_policy_scenario放到多组随机扰动下重复运行记录每次传染中实际被激活的边最后除以总情景数。这条边激活概率比任何静态中心性都贴近实证含义。import numpy as np # 依赖第 4 章的 simulate_policy_scenario 函数 def edge_activation_probability( layer_matrices, capital, scenario_list, # [(price_shock, recovery_ratio), ...] n_trials200, common_exposureNone ): n len(capital) activation np.zeros((n, n)) for shock, recovery in scenario_list: for _ in range(n_trials): health, _, _ simulate_policy_scenario( layer_matrices, capital, shock, recovery, common_exposurecommon_exposure ) for W in layer_matrices: for i in range(n): if health[i] 0: # 找到对 i 冲击贡献最大的违约源 contributions W[i] * (1 - health) j np.argmax(contributions) if j ! i: activation[j, i] 1 return activation / (len(scenario_list) * n_trials)逻辑说明scenario_list里每个元组是一组压力参数n_trials控制重复次数对每条违约边通过np.argmax(contributions)找冲击贡献最大的源节点重复采样后激活矩阵趋近于概率分布。运行结束后取activation 0.2的边就是高概率传染桥梁。这里用稳态反推会低估多轮接力传染精确做法是在模拟每轮结束时记录实际被激活的边但稳态反推在样本量较大时已经能稳定排序。参数说明激活阈值 0.2 是经验值意思是在 200 组模拟中至少 40 次被触发。阈值太低0.05会淹没关键边太高0.8只能看到最明显的风险通常先用 0.2 定位 Top 边再降到 0.1 做稳健性确认。落成系统后把edge_activation_probability加入每日监控当某条边的激活概率相比上周出现陡增优先检查对应两家机构的备付流动性和共同资产持仓而不是一上来就调整全局资本缓冲——这正是这套多层网络系统落地后第一个能用起来的功能。本文还有配套的精品资源点击获取

关于恒美微站

恒美微站专注于为个体商户、工作室提供极简自助建站服务,让每个人都能轻松拥有专业网站。

快速链接

  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心

服务项目

  • 可视化建站
  • 拖拽编辑
  • 主题定制
  • SEO 优化
  • 网站托管

联系方式

  • 📍 地址:北京市朝阳区建国路 88 号
  • 📞 电话:400-888-8888
  • ✉️ 邮箱:info@hmyw.cn
  • 🕐 时间:周一至周日 9:00-18:00

© 2024 恒美微站 hmyw.cn 版权所有 | 京 ICP 备 12345678 号