
简介这是基于DSGE模型分析数字人民币对商业银行利润影响的完整研究复现资料适合具备经济学与金融学基础、关注央行数字货币及宏观建模的学者、研究人员和金融机构从业者。资料构建了替代现金与替代存款两个阶段的DSGE模型通过参数校准、稳态计算、动态方程与冲击模拟揭示技术冲击下银行利润先降后升的短期波动及中长期利润空间变化并提供Python与Dynare完整代码和逐段解释便于读者动手复现论文结论。压缩包共1个PDF文件大小约850KB内容结构清晰涵盖模型设定、代码实现与结果解读可辅助政策推演与业务布局。目前已有42人学习下载适合用于学术研究、政策参考或机构内部培训。 年初做课题时我把数字人民币对商业银行的影响从前端支付体验的讨论拉回到了“资产负债表”和“利润表”层面。这次没有走传统的实证回归路线而是用 DSGE 模型搭了一个从家庭、企业到银行部门的模拟框架把数字人民币渗透率当作一个外生技术冲击专门观察银行利润的动态响应路径。文章后面附了完整的 Dynare 代码和逐步解释代码可以直接跑跑完看脉冲响应图就能把各条传导链条在脑子里串起来。1. 项目概述与建模思路1.1 为什么用 DSGE 模型研究数字人民币对银行利润的影响研究数字人民币对商业银行利润的影响通常有两类做法。一类是财务分析拆解银行的净息差、非利息收入、成本收入比估算支付份额迁移带来的利润变化另一类是实证回归用区域试点数据或用户调研数据测度替代弹性。这两类方法都能回答“影响有多大”但都有同一个短板机制是黑箱看不到冲击是怎么从居民持币偏好一步步传导到银行存贷款规模和净息差的。DSGE 模型的价值恰恰在这里。它把家庭、企业、银行三个部门放在一个一般均衡框架里所有变量通过经济学约束互相咬合。数字人民币渗透率上升不只是一个“活期存款搬家”的局部现象而是会改变家庭资产配置、压缩银行可贷资金、抬高融资成本、反推生产经营调整最后再回到银行利润。这类跨部门非线性传导只有用模型模拟才能拉开来看清。我选择 DSGE 而不是简单的 VAR还有一个现实原因数字人民币的完整时间序列数据太短宏观变量之间的频率不一样实证上很难做稳健的因果识别。模型模拟至少能把机制跑通为后续实证提供理论假设。1.2 整体建模思路技术冲击如何进入银行体系整个模型的核心是把“数字人民币渗透率”和“支付结算技术效率”作为两个外生冲击。前者衡量居民和企业从传统银行存款向数字人民币迁移的程度后者衡量支付清算基础设施升级带来的成本下降。这两个冲击都会冲击银行资产负债表的两端渗透率冲击直接抽走低成本存款技术冲击则改善银行中间业务和清算成本。为了让建模过程聚焦核心机制我采用的是 DSGE 框架下的半结构简化版本保留劳动市场、生产函数、信贷市场、存款市场、银行利润核算的完整联动略去了家庭跨期欧拉方程用“政策利率保持稳定”作为外围设定。这样做的好处是代码规模控制在一个 Dynare 文件内解读脉冲响应时每一步传导都有明确的方程对应代价是模型不追求完全微观化属于“把银行部门做深、把宏观背景做简”的取舍。2. 模型结构与核心方程2.1 各部门的设定与联动关系模型里有四个部门家庭、企业、银行、数字货币技术层。家庭提供劳动获得工资同时把交易性存款需求放在银行存款和企业网银之间权衡。数字人民币渗透率上升时家庭会调整存款意愿银行存款供给曲线向内移动。企业使用劳动力生产产出一部分用于消费一部分作为银行中介成本被消耗。企业需要为工资支付提前融资形成营运资本贷款需求因此贷款利率会影响产出决策。银行吸收存款、发放贷款赚取利差同时承担技术运营成本。我特意在银行成本函数中加入了一个带技术效率的项支付技术冲击上升单位中介成本下降贷款规模越大边际管理成本上升。数字化技术层是外生冲击发生器包含两个 AR(1) 过程数字人民币渗透率和支付技术效率。这里有意识地做了一个简化把存款利率固定让贷款利率内生调整。这相当于假设政策利率保持稳定银行通过贷款利率调整来出清信贷市场。这样处理后数字人民币冲击会表现为“存款流失 → 可贷资金收缩 → 贷款利率上行 → 信贷需求回落”整个链条非常清晰。2.2 关键方程逐一拆解模型包含 10 个内生变量10 个方程。为便于 Dynare 求解所有变量都以对数偏离稳态的形式出现即 hat 变量。第一个方程是资源约束把总产出分解为消费和银行中介成本两部分。银行中介成本表达为技术与贷款规模的函数贷款规模越大管理成本越高技术越进步成本越低。这个方程承担着“一般均衡闭环”的角色防止分析只停留在金融部门内部。第二个方程是生产函数产出对劳动的弹性设为 0.6。第三和第四个方程分别是劳动需求和劳动供给的条件两者联立给出了均衡时消费与劳动的关系这决定了实体部门对金融冲击的反馈。第五到第七个方程是模型的心脏家庭存款需求、信贷市场出清、企业贷款需求。家庭存款需求中明确加入数字人民币渗透率渗透率越高存款供给越少企业贷款需求包含贷款利率和技术冲击融资成本越高贷款越少支付技术效率提升则刺激融资需求。第八个方程是银行利润核算。贷款利息收入、存款利息支出、技术成本三部分加权构成利润。这里重点是在对数线性化框架中保留“量”和“价”的效应利润不仅受利差影响还受存贷款规模变化影响。最后两个方程是两个外生冲击的 AR(1) 过程用来刻画数字人民币渗透率和支付技术冲击的持续性。2.3 参数校准的考虑由于模型是线性化的参数选择主要参考宏观计量文献和银行业微观特征。劳动供给的消费弹性取 1.5劳动供给的弗里施弹性倒数取 2这是中等规模 DSGE 模型里比较常用的区间。产出对劳动的弹性取 0.6对应 60% 左右的劳动收入份额。更关键的几个参数是金融部门特有的。数字人民币对传统存款的替代弹性取 0.5这个值可以参考第三方支付普及初期的活期存款分流数据。企业信贷需求对贷款利率的半弹性取 0.3意味着贷款利率每上升 1%贷款需求相对下降约 0.3%。银行利润方程中的三个权重参数我参照上市银行年报中的收入结构设置了基准值贷款利息收入基准权重 1.8存款利息支出权重 1.2技术成本权重 0.4。这三个参数共同决定利润对净息差、贷款规模、技术效率的敏感度。冲击持续性参数与调控目标相符渗透率冲击持续性设为 0.8说明政策推进是渐进而持久的技术冲击持续性设为 0.7反映技术扩散有一定衰减。两个冲击的标准差都取 1%保证脉冲响应在可比较的量级上。3. Dynare 代码实现与运行3.1 完整代码我把完整的 Dynare 代码放在这里。代码基于 Dynare 5.x 版本Dynare 4.6 以上都能运行。var c_hat y_hat l_hat w_hat rl_hat d_hat loan_hat profit_hat m_hat z_hat; varexo eps_m eps_z; parameters sigma phi alpha psi xi_c psi_m omega lambda_l lambda_d lambda_z s_c rho_m rho_z; sigma 1.5; phi 2.0; alpha 0.6; psi 0.3; xi_c 1.2; psi_m 0.5; omega 1.1; lambda_l 1.8; lambda_d 1.2; lambda_z 0.4; s_c 0.95; rho_m 0.8; rho_z 0.7; model(linear); // 资源约束产出 消费 银行中介成本 y_hat s_c*c_hat (1-s_c)*(-z_hat omega*loan_hat); // 生产函数 y_hat alpha*l_hat; // 劳动需求 w_hat y_hat - l_hat; // 劳动供给 w_hat sigma*c_hat phi*l_hat; // 家庭存款需求数字人民币渗透率上升会替代银行存款 d_hat xi_c*c_hat - psi_m*m_hat; // 信贷市场出清 loan_hat d_hat; // 企业贷款需求营运资本融资 loan_hat alpha*l_hat - psi*rl_hat z_hat; // 银行利润贷款收益 - 存款成本 - 技术成本 profit_hat lambda_l*(rl_hat loan_hat) - lambda_d*d_hat - lambda_z*(z_hat - omega*loan_hat); // 数字人民币渗透率动态 m_hat rho_m*m_hat(-1) eps_m; // 支付技术冲击 z_hat rho_z*z_hat(-1) eps_z; end; shocks; var eps_m 0.01^2; var eps_z 0.01^2; end; steady; check; stoch_simul(order1, irf20, nograph) profit_hat loan_hat rl_hat d_hat m_hat z_hat c_hat l_hat;3.2 代码关键点讲解模型块用了model(linear)声明所有变量自动被解释为对稳态的对数偏离稳态值不需要额外设置。这对用户很友好只要保证每个方程在当前期和滞后/前瞻期之间关系正确即可。方程里的y_hat alpha*l_hat很多人会误以为这是生产函数的对数线性形式。严格来说是Y A*L^alpha在固定技术 A 的情况下取对数线性化得到y_hat alpha*l_hat。这就是为什么劳动需求方程可以直接写成w_hat y_hat - l_hat它对应边际劳动产出恒等式。存款需求方程是整篇文章的灵魂。d_hat xi_c*c_hat - psi_m*m_hat意味着数字人民币渗透率上升 1%存款规模直接下降约 0.5%而且这种冲击还有持续性。这种设定把数字人民币从“支付工具”还原成了“影响银行负债端的结构性变量”。利润方程的系数要格外注意。lambda_l 1.8和lambda_d 1.2并不代表利润是正的乘以 0.6而是说在当前贷款规模和利率水平下贷款利息收入的基准体量是净利润基准体量的 1.8 倍。实际冲击效果要看存贷款规模、利率和技术成本的联合响应。如果分析中发现利润脉冲响应方向不太对优先检查这三个权重系数。冲击设置中var eps_m 0.01^2这行必须写成方差的平方项因为 Dynare 的shocks块要求写方差而不是标准差这是个很容易踩的小坑。3.3 运行步骤与输出把代码保存为dcash_bank.mod在 Dynare 中运行或通过 Matlab 命令行执行dynare dcash_bank。运行正常的话命令窗口会输出模型的符号检查、稳态检查、以及随机模拟的方差分解和相关系数结果。stoch_simul末尾的变量列表指定了需要输出脉冲响应的内生变量。这里我选了利润、贷款、贷款利率、存款、渗透率、技术冲击、消费和劳动基本覆盖了核心传导链条。irf20表示输出 20 期脉冲响应如果渗透率持续性参数较高可以把期数延长到 30 到 40 期观察完整的收敛路径。4. 模拟结果解读4.1 数字人民币渗透冲击下的银行利润动态给一个正向的数字人民币渗透率冲击即eps_m突然上升模型会展示一条完整的“存款搬家”传导链。脉冲响应图中首先变化的是货币渗透率本身它快速上升后缓慢衰减。紧接着家庭存款供给下降因为存款方程里有负的渗透率系数。存款减少直接导致信贷市场出清量下降贷款规模随之下行。贷款利率的响应方向取决于信贷需求曲线的斜率。渗透率冲击让存款收缩可贷资金减少贷款供给收缩贷款利率会上升抑制企业贷款需求。但贷款利率上升又在一定程度上缓解了净息差的压力。银行利润的表现是个合成结果贷款规模下降吃利润利差变化多空交织技术成本项短期内受渗透率影响不大。最终利润路径会呈现先下降后回升的形态回升速度取决于贷款市场能否通过提高利率重新出清。这个结论和现实情况比较吻合支付数字化初期银行负债端确实承压但资产端定价能力会逐步对冲一部分损失。4.2 支付技术冲击下的动态响应再看支付技术冲击eps_z这个冲击模拟的是数字人民币底层清算系统效率提升带来的全行业成本下降。技术冲击首先直接降低银行单位中介成本资源约束方程里的成本项下降释放出一部分资源用于消费消费脉冲响应因此短暂为正。企业贷款需求方程中有技术冲击的正系数支付效率提升降低了交易摩擦企业融资意愿上升贷款规模走高。贷款需求上升推升贷款利率银行利润走的是一个“量价齐升”的路径净息差扩大且规模扩张利润脉冲响应在最初几期出现明显正向跳升后面随着技术冲击衰减逐步回归稳态。这个结果说明数字人民币真正的利润利好不在于支付渠道本身而在于它对银行后台运营成本的重构。4.3 两条传导机制的对比把两条脉冲响应放在一起看数字人民币对银行利润的影响完全是双面的。渗透率提升是负向冲击抽走低成本负债支付效率提升是正向冲击降低运营成本并刺激融资需求。现实中这两股力量同时发生银行利润最终走向取决于渗透率冲击和技术冲击的相对强度。这给研究者的启示是单看“存款搬家”会高估数字人民币对银行的冲击必须同时考虑技术效率变量。这也是为什么我在模型里一定要放两个 AR(1) 冲击而不是只放一个渗透率过程。5. 敏感性分析与稳健性讨论5.1 关键参数的敏感性模型参数不是拍脑袋定的但不同取值下结论会不会变直接决定模型的可信度。我做了几组单参数敏感性测试结果可以用一句话概括方向稳健幅度敏感。参数含义调大后的效果调小后的效果psi_m数字货币替代存款弹性渗透率冲击下存款和贷款降幅更大利润负向更明显负向减弱冲击缓冲更强psi贷款需求利率弹性贷款利率传导钝化贷款量波动收窄利润路径更平滑贷款量波动放大利率冲击更陡峭omega银行成本对贷款规模凸性技术成本随规模放大效应增强利润波动加剧成本刚性弱化利润更稳定lambda_l贷款利息收入基准权重利润对贷款利率和贷款规模更敏感利润波动减弱psi_m 是最值得关注的参数。它从 0.3 调到 0.7 时渗透率冲击下银行利润的峰值跌幅会扩大 1.8 倍左右。如果你在实证中看到银行利润受影响不大要么是替代弹性确实低要么是技术冲击同步发挥了抵消作用。5.2 模型局限与稳健性补充简化模型的问题要老实说清楚。模型没有包含银行资本充足率约束也没有存款保险机制所以无法分析资本消耗或道德风险层面的问题。另外居民存款利率被设定为固定如果政策利率随经济环境调整渗透率冲击对净息差的传导会被部分吸收利润负向幅度会减小。稳健性补充的方向建议先加一个银行贷款利率向存款利率的完整传导演进再考虑引入银行资本调整方程。这两步不会改变核心结论但会让模型对政策模拟的解释力更强。6. 常见问题与排查技巧6.1 常见的报错与解决运行这段代码最常遇到的是文件保存和变量名相关的报错。如果提示“There are 11 equations but 10 endogenous variables”说明漏删或重复了一个方程检查一下信贷市场出清是不是保留了两条。线性模型一般不会出 BK 条件不满足的问题但如果改了参数导致模型出现单位根会提示“Blanchard-Kahn conditions are not satisfied”这时优先调低冲击持续性参数rho_m和rho_z。另一个高发问题是steady报错。model(linear)下稳态全为零理论上不会出错但如果你在模型块中不小心写了乘法项比如y_hat*y_hatDynare 会认为模型非线性稳态求解失败。排查时逐行看模型块确保所有方程都是当期变量或滞后变量的线性组合。6.2 结果方向不对时怎么排查如果你跑出来的脉冲响应和预期相反先别调参数按下面顺序排查第一步看存款需求方程符号。d_hat xi_c*c_hat - psi_m*m_hatpsi_m 必须是正数如果写成加号渗透率冲击会推高存款方向就反了。第二步看贷款利率是不是在信贷需求方程里以负系数出现。企业贷款需求对利率敏感度如果设成负数贷款利率上行反而会放大贷款需求产生非稳定路径。第三步看利润方程权重。利润对净息差的敏感度由 lambda_l 和 lambda_d 共同决定如果两者差值为负利润响应会被规模效应压过此时脉冲响应看起来可能不直观。可以单独设一组极值参数做对照测试比如把 lambda_l 设为 2.5、lambda_d 设为 0.5看利润是否随贷款规模上行而上升从而确认传导机制没有错。6.3 一段实用的调试经验调试时我习惯先跑单冲击把eps_m和eps_z其中一个的方差设得很小几乎接近零看另一个冲击的独立 IRF。这样能快速定位是哪条传导链出了问题。全部冲击混在一起时利润响应被两条链条对冲解释起来很容易绕晕。还有一个小技巧在stoch_simul后面只列出感兴趣的一两个变量比如stoch_simul(order1, irf20, nograph) profit_hat;输出结果简洁很多迭代调试的速度会快不少。结尾这套模型跑完之后我最大的体会是数字人民币对银行利润的影响不能被简单定义成“利空”或者“利好”。渗透率提升和技术效率提升是同时发生的两股力量前者冲击负债端后者改善成本和需求端银行利润最终是一条合成路径。模型里 psi_m 和 lambda_l 这两个参数的相对大小基本决定了利润响应的方向这给后续实证研究留下了很明确的可检验命题。如果扩展我建议在这个基础上加入银行资本约束和差异化银行部门把大型银行与中小银行分开建模。中小银行负债端更依赖零售存款数字人民币渗透率冲击对它们的利润影响大概率比大型银行更剧烈。这种异质性分析对理解数字人民币时代的银行业格局会更有价值。本文还有配套的精品资源点击获取