于少聪, 郑山红
(长春工业大学 计算机科学与工程学院, 吉林 长春 130102)
长久以来,在我国利率管控的大环境下,商业银行在贷款中实行无差异化的统一定价模式,然而,随着近年来利率市场化进程的不断推进,传统的贷款定价方法已无法适应环境变化,急需做出改变。与此同时,更为复杂的业务逻辑也对系统提出了更高要求,传统单体架构下的老旧系统在响应速度、扩展性以及灵活性等方面遇到了诸多挑战。
针对上述行业痛点,以及遵循利率市场化的根本要求,提出一种基于成本加成定价法,并与客户关系理论相结合的贷款定价模型,根据客户在银行的历史业务来往情况给予按比例的利率优惠,通过二者的结合,最终得出差异化的定价结果。
在系统架构方面,以领域驱动设计思想指导微服务边界的划分是如今软件开发最高效的设计模式。系统采用Spring Cloud框架完成微服务的搭建,在服务内使用领域驱动四层架构模式,并将改进的定价模型应用到利率计算中。通过这样的设计模式,系统达成了高扩展性、敏捷开发以及部署灵活的开发目标。
领域驱动设计[1](Domain-Driven Design, DDD)是针对复杂性业务逻辑的最佳解决方案,其依靠敏捷开发[2]的手段及模型驱动开发的策略,是一种面向对象[3]的分析与设计思想,由Eric Evans[4]于2003提出。通过将业务逻辑融合进业务实体的形式,使业务发生变化时能以最低成本和最快速度做出响应。其中,DDD通过战术设计对领域模型进行定义。
1.1.1 实体、值对象
以充血模型的形式,包含唯一识别ID来区分不同实例,实体即可被持久化,同时也包含业务逻辑。值对象中不包含特定标识,生命周期内不可被更改。
1.1.2 聚合、聚合根
聚合作为不同业务逻辑的实体边界,可由多个实体或单一聚合根构成。作为数据修改的单元需要遵循“聚合内强一致性,聚合外最终一致性”。当外界对聚合进行访问时需先通过聚合根,继而实现对聚合内实体的访问。
1.1.3 领域服务
当单一聚合无法完成业务需求时,可被定义为领域服务,在操作时需要调用并修改多个聚合实例的状态。
1.1.4 限界上下文
将边界进行定义,需最大限度保留业务完整性,以及遵循高内聚低耦合的设计原则。限界上下文划定的业务边界与微服务的物理边界相对性。
随着分布式架构的兴起,人们提出了微服务[5](Micro-services, MS)的架构方案,通过以物理边界将业务进行分割的方式,将大而杂的系统拆分为小而精的自治微服务。这样的架构模式使得系统在搭建时更为灵活,扩展上更为简单。每个服务都可以独立进行开发以及部署,并通过组件进行交互,真正实现了敏捷开发与灵活部署的目的。同时微服务架构拥有以下几大优势:
1)可由更小的团队进行开发,仅需少量人员即可完成对其服务模块的开发;
2)技术异构,不同服务可通过不同的技术来实现,可以按照业务的需求自主选取技术栈对服务进行开发;
3)任意服务发生宕机故障,不会对其余服务产生影响,仅需对故障服务进行定位维护,不影响系统的正常运转;
4)每个服务可被独立部署于不同服务器,且配备单独的数据库,增强系统的可管理性。
传统的成本加成定价模型中,通过由定价成本因素组成的保本利率与目标利率共同得出该笔贷款的最终利率,这种做法所带来的弊端是显而易见的。即在同一笔业务中,不同类型的人群所得到的利率是相同的,“一刀切”的定价策略导致了商业银行缺乏市场竞争力,长此以往会导致客户流失。
因此,基于上述考虑,模型在成本加成定价模型的基础上,将客户与银行的关系引入定价计算模型中,由可被计算的定量优惠以及无法计算的定性优惠两部分进行综合考量,得出符合利率市场化要求的差异化利率模型,从而将传统的做业务模式向“做客户”进行转变。
首先在模型中引入经济附加值[6](Economic Value Added, EVA)的概念,即税后净营业利润中减去股权资本成本和债务资本成本的剩余收益,将客户的预先存款额所产生的经济附加值进行计算,作为模型中定量优惠部分。EVA的计算公式为:
EVA存款=(FTP价格-存款利率-运营成本率)*(1-所得税)*存款金额,
(1)
EVA贷款=(目标利率-FTP价格-运营成本率-风险成本率-资本成本率)*
(1-所得税)*贷款金额。
(2)
其次,将客户使用银行产品的情况以及在CRM客户关系管理系统中得出的信用等级作为定性优惠部分,对高端客户给予5BP的利率优惠减免,见表1。
表1 定性优惠表
综上所述,得出一种基于客户关系[7]的定价模型,如图1所示。
图1 定价模型
其中,运营成本率由银行内部成本分摊系统计算得出,针对未建成分摊系统的将由手工进行分摊并录入,公式为:
(3)
风险成本率=违约概率(PD)*违约损失率(LGD)。
(4)
贷款定价模块是系统的核心模块,在服务内部采用领域驱动思想指导设计。其中对领域模型的设计尤为关键,实施步骤为:
1)根据具体的业务逻辑展开需求分析;
2)对领域模型中的实体、值对象、领域服务等概念进行识别定位;
3)将识别出来的实体和值对象进行关联匹配;
4)划分出聚合的具体范围,以及确定聚合中的聚合根。
本节将以定价服务为例,通过四步走的方式对领域模型[9]进行设计。
聚合的划分遵循Vaugh Vernon的聚合划分原则如下:
1)将真正不变的条件封装进聚合;
2)设计小的聚合;
3)聚合间通过唯一识别ID进行关联、引用;
4)根据业务逻辑,将聚合进行组装,继而划定限界上下文范围,构成微服务的物理边界。
3.1.1 需求分析
定价模块负责贷款利率的计算。主要包括客户经理对贷款基本信息以及抵押品的录入,对贷款实施定价,计算优惠利率及RAROC值等,输入执行利率反算NI、EVA、RAROC等,如图2所示。
图2 定价模块用例图
3.1.2 领域模型设计
通过需求分析,可以得到贷款信息、抵押品、定价结果、定价单四个实体。根据Vaugh Vernon的聚合划分原则,贷款信息与抵押品实体分别负责贷款信息以及抵押品的录入,且具有唯一识别ID,因此分别作为聚合根独立构成聚合。由于定价单需要在定价结果实体中获取部分数据,没有定价结果也就无法生成定价单,且定价结果中含有定价单号作为唯一识别ID,因此定价结果作为聚合根与定价单实体属于同一聚合。领域模型如图3所示。
将聚合定义完成后,通过限界上下文的划分规则与业务独立性的根本要求,贷款信息聚合、抵押品聚合与定价聚合共同完成了贷款定价功能,构成了贷款定价子域,同属一个限界上下文。
3.2.1 整体架构
微服务下的客户关系定价系统中,整体架构[8]如图4所示。
图4 系统架构
系统选用Alibaba开源组件Nacos作为服务的注册与配置中心,负责系统的环境配置,以及服务的发现与注册。选用Zuul组件作为API网关,负责接受用户请求,并联合负载均衡向服务端发送用户请求。使用Spring Cloud框架中集成的Ribbon组件,实现请求转发的负载均衡。使用Apache的slf4j+log4j组件对微服务日志进行管理,使用Spring Boot Admin组件实现服务的实时监控。
微服务集群中由管理员方的授权服务以及机构管理服务构成,用户方由客户管理服务、定价服务、参数管理服务、审批服务组成。使用Feign组件完成服务的远程调用。选用MySQL数据库,通过Mybatis-plus框架对数据进行持久化。
3.2.2 技术架构
为了达到隔离业务逻辑的目的,以及遵循高内聚低耦合的设计原则,系统选用领域驱动的四层架构模型作为客户关系定价系统的技术架构,如图5所示。
图5 技术架构
3.2.2.1 接口层
接口层是架构设计中最顶端的一层,作为用户与系统间沟通的门户,负责对外展示后端处理的数据,以及接受用户请求进行对内的转发。使用Vue框架负责前端界面的编写以及界面逻辑处理工作。
3.2.2.2 应用层
应用层在四层中是最简单且直接的一层,体量最薄,起到协调接口层与领域层的作用。其中包含应用服务,领域层中的业务逻辑通过应用服务向外暴露,负责对不同业务用例之间执行顺序的编排与组装。
3.2.2.3 领域层
领域层处于架构的最核心位置,领域驱动设计要求设计富领域模型,定义了聚合,包括聚合根、实体以及值对象,并对领域服务进行封装,通过对聚合的调用完成具体业务逻辑的实现。该层还对仓储接口进行了定义,用来对基础设置层的仓储进行调用。
3.2.2.4 基础设施层
在基础实施层中包含Zuul网关以及Ribbon负载均衡组件,通过二者可以实现消息传递、动态路由转发以及负载均衡。同时仓储服务的实现类与领域层仓储接口对应,负责对持久化对象增删改查功能的实现。另外,该层还含有MySQL数据库用于数据的存储工作。
3.2.3 业务架构
通过领域驱动设计与微服务结合的相关理论,以及对系统服务职责单一性的设计原则两方面的共同考虑,对微服务进行了业务划分,系统的业务架构如图6所示。
图6 业务架构
随着技术更新以及定价业务模型的迭代改进,传统老旧系统的开发环境已经无法适应新一代系统对于性能与架构方面的需求,以及满足贷款业务的支撑,因此,针对原有的开发环境做出一定的改变,具体环境配置见表2。
表2 系统开发环境
在定价服务中实现了贷款信息以及抵押品的录入、客户目标利率、利率优惠等的计算、输入执行利率进行反算NI、EVA、RAROC等功能。在基础结构层中使用仓储服务,将数据进行持久化操作。领域层中通过领域服务将业务逻辑进行封装,通过应用层的应用服务将领域层提供的接口进行编排组合,实现系统功能。最终在接口层为前端界面提供相关接口。
用户进行贷款定价操作,进入定价流程后。第一步,调用addLnInfoAppService完成该名客户贷款信息的填写;第二步,调用addMortgageAppService完成对该笔贷款所需要的质押品信息进行输入;第三步,通过调用参数管理服务数据库表中的参数数据,完成保本利率、目标利率、目标EVA与RAROC的计算。公式为:
目标利率=资金成本率+运营成本率+违约概率×违约损失率+资本成本率+
增值税+附加税+所得税+目标收益率,
(5)
目标EVA=(目标利率-贷款FTP价格-运营成本率-风险成本率-资本成本率)×
(1-所得税)×规模,
(6)
(7)
利率优惠=[(存款FTP价格-存款利率-运营成本率)×(1-所得税)×存款金额+
(目标利率-FTP价格-运营成本率-风险成本率-资本成本率)×
(1-所得税)×贷款金额]×α-定性优惠减免。
(8)
当贷款利率计算完毕后,输入LPR基准利率与执行利率,分别计算该利率下的NI、EVA、RAROC[6]值以及利率浮动比例,如图7所示。
图7 定价计算
计算公式为:
(9)
执行NI=(执行利率-贷款FTP价格)×
金额×期限。
(10)
以利率市场化作为研究背景,抓住商业银行贷款定价业务的痛点,提出一种基于客户关系的贷款利率计算模型,在一定程度上实现了贷款利率差异化区分的目标。
在系统的搭建上,以业务需求为核心,以领域驱动设计思想为方法论,对业务进行领域模型设计。架构上通过引入微服务框架,浑然天成的将领域驱动设计出的逻辑边界与微服务的物理边界相对应,此外通过服务注册、服务网关、负载均衡等组件,对系统的运行提供支持。综上所述,通过对定价模型的再设计,以及系统架构重构,缓解了单体架构下系统扩张难、维护难的实际问题,基本上做到了可用性及合理性。