城商行对公信贷风控数据能力建设实战
摘要:截至2025年末,A股17家上市城商行总资产31.3万亿,对公贷款占比67.77%,净息差1.37%。息差收窄、不良率分化(0.68%~2.94%)、大行下沉、新12号令合规压力四重叠加,数据能力已从"锦上添花"变成决定城商行生存的基础设施。本文从行业数据出发,结合企查查MCP数据平台的实际接入案例,给出城商行对公信贷"找人·看人·盯人"三大场景的技术落地方案。
一、息差困局:1.37%意味着什么?
2025年四季度,城商行整体净息差1.37%,在所有银行类型中最低,且已持续多年。
1.37%的数学含义:每放出去100元贷款,利息收入扣掉资金成本,只剩1.37元。这1.37元还要覆盖运营成本、拨备计提、资本占用,最后能变成利润的可能就几毛钱。
表面上看单季净利润同比增长12.8%,但拆开看——增长主要靠释放拨备,拨备覆盖率已降至173.38%,环比持续下行。不是赚得更多了,是以前存的安全垫在变薄。
北京银行案例:资产规模近5万亿的城商行龙头,2025年净息差1.27%,同比下降20个基点。全年归母净利润同比下降23.7%至200.86亿元,其中Q4单季计提信用减值损失128.5亿元,相当于当季营收的78%。拨备覆盖率已从高位降至198.04%。
息差收窄的三个结构性原因
| 压力来源 | 具体表现 |
|---|---|
| 资产端利率持续下行 | LPR多次下调;大行下沉加剧价格战,优质客户持大行报价单向城商行议价 |
| 负债端成本降不下来 | 存款利率降幅慢于资产端;城商行品牌力弱,揽储成本天然更高 |
| 收入结构过于单一 | 对公贷款占比67.77%,零售和高收益中间业务不足,无法对冲利率下行 |
二、以量补价的代价:贷款飙升背后的资本焦虑
城商行的直接应对是"以量补价"——利率降了没关系,多放贷款靠规模撑。
2025年对公贷款增量:
| 银行 | 对公贷款余额 | 年增量 | 增速 |
|---|---|---|---|
| 江苏银行 | 1.66万亿 | +3441亿 | 26.11% |
| 宁波银行 | 1.20万亿 | +2805亿 | 30.54% |
| 南京银行 | 1.09万亿 | +1531亿 | 16.35% |
| 杭州银行 | 7699亿 | +1382亿 | 21.88% |
增速超过25%,放在整个银行业都相当扎眼。但以量补价有三个硬伤:
- 资本消耗:2025年7月至2026年1月,半年内20余家城商行增资方案获监管批复;近60家银行发行永续债71只,合计8250亿元
- 集中度风险:部分银行平台类贷款占比接近一半,区域经济一出问题风险集中暴露
- 优质资产不增反降:降低准入标准放贷款,量增价跌的局面持续恶化
三、不良率分化:0.68%和2.94%之间隔着一条长江
17家上市城商行平均不良率1.3%左右,但平均数是最会骗人的指标。
三档梯队
第一梯队(不良率 < 1%):成都银行0.68%、宁波银行0.76%(连续19年低于1%)、杭州银行0.76%、苏州银行0.83%、南京银行0.84%、江苏银行0.84%——全部集中在长三角和成渝地区。
第二梯队(1%~2%):徽商银行0.98%、齐鲁银行1.09%、青岛银行1.12%、长沙银行1.17%、重庆银行1.17%、上海银行1.18%、北京银行1.30%、西安银行1.60%。
尾部阵营:江西银行2.36%(2025年半年报)、大连银行2.94%(2025年报)。
拨备覆盖率差距更能说明问题——杭州银行541.45%、苏州银行483.50%、成都银行426.17%,安全垫厚得能扛住两三轮冲击;尾部城商行拨备已逼近150%的监管红线。
联合资信2026年4月发布的城商行行业分析报告:城商行不良率小幅上行,拨备水平有所下降,“实质信用风险管控压力仍存”。
四、大行下沉:价格战+整合双重挤压
大行"掐尖"的三个层面
| 层面 | 行为 | 结果 |
|---|---|---|
| 客户流失 | 优质客户持大行低利率报价单找城商行议价 | 最优质的那批客户被抢走 |
| 定价压缩 | 城商行被迫降低贷款利率留住客户 | 净息差进一步被压缩 |
| 客群下沉 | 大行抢走优质客户后,留给城商行的是次级客群 | 资产质量承压,恶性循环 |
一个关键数据:农业银行县域网点净息差达2.0%,远超全行平均的1.42%。大行不是在下沉市场挣扎,而是带着技术资金优势进入利润更丰厚的领域。
中小银行整合加速:2025年以来村镇银行法人机构减少378家,降幅25%。中原银行、郑州银行、广西北部湾银行相继获批收购辖区内村镇银行。对部分城商行而言,被整合的风险比竞争风险更迫近。
五、数字化转型:科技团队不足200人的现实
70%以上的城商行科技团队不足200人,而一家头部科技公司一个业务线的开发团队就有这个规模。
行业趋势加速变化:银行数智化转型正从"AI辅助"迈向"AI原生"——不是把大模型当工具,而是把AI嵌入信贷审批、风险识别、营销决策的核心。窗口期可能只有两年(2025年大行试点→2026-2027年规模化部署)。
四个头部城商行的数字化路径
| 银行 | 策略 | 关键举措 | 效果 |
|---|---|---|---|
| 北京银行 | 自建+自研(重资产) | "京骐AI Agent"渗透业务全链条 | 科技与绿色贷款增速20%+,不良率连续五年下降 |
| 华兴银行 | 决策引擎+知识图谱+大模型 | 智慧营销平台+数智化风控系统 | 供应链融资投放增幅131% |
| 威海市商业银行 | 合作+采购(轻资产) | 湖仓一体数据底座(FusionInsight + GaussDB) | 日终批量缩短3小时,查询提速3倍,人均AUM提升24% |
| 重庆银行 | 第三方工具+场景落地 | "重银晓警"AI风控平台 | 整合13类数据源,覆盖35万+客户,核查工时降低50%+ |
结论:路径不同,但都绕不开一个前提——外部数据服务。数据能力正在成为城商行数字化转型的"水电煤"。
六、对公信贷数字化三大场景:找人·看人·盯人
6.1 找人——精准拓客
传统方式的硬伤:覆盖面窄(依赖客户经理人脉)、效率低(一家一家跑)、严重依赖个人能力(人走了客户也走了)。
数据驱动的三个拓客场景:
| 场景 | 数据需求 | 实现方式 |
|---|---|---|
| 新注册企业推送 | 工商登记+关联关系 | 每日自动筛选本区域新注册企业,与存量客户撞库匹配,输出高潜客户清单 |
| 产业链拓客 | 产业链上下游+企业画像 | 沿目标产业链批量挖掘供应商,按规模/经营年限/信用状况筛选 |
| 招投标商机 | 招投标+融资事件 | 监控目标客户中标事件,事件驱动营销,转化率远高于冷呼叫 |
Python示例:新注册企业高潜客户筛选
import requests
import pandas as pd
from datetime import datetime, timedelta
QCC_API_BASE = "https://openapi.qcc.com"
API_KEY = "your_api_key"
headers = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json"
}
def get_new_registrations(region: str, days: int = 7) -> pd.DataFrame:
"""获取指定区域近N天新注册企业列表"""
end_date = datetime.now().strftime("%Y-%m-%d")
start_date = (datetime.now() - timedelta(days=days)).strftime("%Y-%m-%d")
params = {
"region": region,
"startDate": start_date,
"endDate": end_date,
"pageSize": 100
}
resp = requests.get(f"{QCC_API_BASE}/eci/getNewRegistrations",
headers=headers, params=params)
return pd.DataFrame(resp.json()["result"])
def check_relation(company_name: str, existing_clients: list) -> dict:
"""核查新企业与存量客户的关联关系"""
params = {"keyWord": company_name}
resp = requests.get(f"{QCC_API_BASE}/eci/getRelationMap",
headers=headers, params=params)
relations = resp.json()["result"]
matched = [
r for r in relations.get("relations", [])
if r.get("name") in existing_clients
]
return {
"company": company_name,
"total_relations": len(relations.get("relations", [])),
"matched_clients": matched
}
# 使用示例
if __name__ == "__main__":
existing = ["某某科技有限公司", "某某制造集团"]
new_companies = get_new_registrations("浙江省杭州市")
high_potential = []
for _, row in new_companies.iterrows():
result = check_relation(row["companyName"], existing)
if result["matched_clients"]:
high_potential.append(result)
print(f"发现 {len(high_potential)} 家高潜关联企业")
for item in high_potential:
print(f" {item['company']} → 关联客户: "
f"{[c['name'] for c in item['matched_clients']]}")
6.2 看人——智能风控
对公信贷风控核心是回答三个问题:这家企业是谁?它背后站着谁?它有没有藏着没说的事?
| 问题 | 解决什么 | 关键数据维度 | 对接API |
|---|---|---|---|
| 是谁 | 身份核验 | 工商照面、经营状态、行业分类 | verify_company_accuracy、get_company_registration_info |
| 背后站着谁 | 关联关系穿透 | 实控人、受益所有人、关联企业、担保链 | get_actual_controller、get_beneficial_owners、get_shareholder_info |
| 藏着没说的事 | 隐性风险识别 | 空壳特征、频繁变更、被执行、经营异常 | get_business_exception、get_dishonest_info、get_judgment_documents |
关键洞察:大量对公信贷风险不是因为借款企业本身出了问题,而是因为关联方出了问题——风险沿着担保链或资金链传导。人工尽调一笔业务可能要花一天,接入数据接口后身份核验、关联穿透、风险扫描秒级完成。
Python示例:对公客户一键尽调
import requests
import json
QCC_API_BASE = "https://openapi.qcc.com"
API_KEY = "your_api_key"
headers = {"Authorization": f"Bearer {API_KEY}"}
def full_due_diligence(company_name: str) -> dict:
"""对公客户一键尽调:身份+关联+风险"""
result = {}
# 1. 身份核验
resp = requests.get(
f"{QCC_API_BASE}/eci/verifyCompanyAccuracy",
headers=headers, params={"keyWord": company_name}
)
result["identity"] = resp.json()["result"]
# 2. 股东穿透
resp = requests.get(
f"{QCC_API_BASE}/eci/getShareholderInfo",
headers=headers, params={"keyWord": company_name}
)
result["shareholders"] = resp.json()["result"]
# 3. 实控人识别
resp = requests.get(
f"{QCC_API_BASE}/eci/getActualController",
headers=headers, params={"keyWord": company_name}
)
result["controller"] = resp.json()["result"]
# 4. 受益所有人
resp = requests.get(
f"{QCC_API_BASE}/eci/getBeneficialOwners",
headers=headers, params={"keyWord": company_name}
)
result["beneficial_owners"] = resp.json()["result"]
# 5. 风险扫描(失信+经营异常+被执行)
risk_apis = {
"dishonest": "getDishonestInfo",
"exception": "getBusinessException",
"enforcement": "getJudgmentDebtorInfo"
}
result["risks"] = {}
for key, api in risk_apis.items():
resp = requests.get(
f"{QCC_API_BASE}/eci/{api}",
headers=headers, params={"keyWord": company_name}
)
result["risks"][key] = resp.json()["result"]
return result
# 预期返回结构
"""
{
"identity": {
"companyName": "XXX有限公司",
"legalPerson": "张XX",
"status": "存续",
"registeredCapital": "5000万人民币"
},
"controller": {
"controllerName": "李XX",
"controllerType": "自然人",
"controlRatio": "65%"
},
"beneficial_owners": [
{"name": "李XX", "benefitType": "直接持有", "ratio": "45%"},
{"name": "王XX", "benefitType": "间接持有", "ratio": "20%"}
],
"risks": {
"dishonest": [],
"exception": [],
"enforcement": [
{"caseNo": "(2026)XX执1234号", "amount": "156万"}
]
}
}
"""
6.3 盯人——动态监控
贷后管理是城商行对公业务最薄弱的环节。大量银行还在"定期翻档案"模式——客户经理每隔一段时间看一遍还款记录,没逾期就默认一切正常。
但风险不是慢慢累积的,是突然爆发的。一家企业可能在两周内完成法人变更、引入新股东、同时新增三条被执行记录。
需要覆盖的监控信号:
| 监控维度 | 具体信号 | 预警级别 |
|---|---|---|
| 工商变更 | 法人、股东、注册资本异动 | 高 |
| 司法风险 | 诉讼、执行、失信新增 | 高 |
| 经营异常 | 列入异常名录、税务异常 | 中 |
| 负面舆情 | 重大负面报道 | 中 |
Bash示例:定时监控脚本(cron配合)
#!/bin/bash
# 对公客户动态风险监控脚本
# 建议配置 crontab: 0 9 * * * /path/to/risk_monitor.sh
API_KEY="your_api_key"
QCC_API="https://openapi.qcc.com"
WEBHOOK_URL="https://your-oa-webhook/notify" # 钉钉/企微webhook
# 客户清单(生产环境建议从数据库/配置中心读取)
CLIENTS=("公司A" "公司B" "公司C")
DATE=$(date +%Y-%m-%d)
REPORT="/tmp/risk_report_${DATE}.json"
echo "[" > "$REPORT"
FIRST=true
for CLIENT in "${CLIENTS[@]}"; do
# 编码公司名
ENCODED_NAME=$(python3 -c "import urllib.parse; print(urllib.parse.quote('$CLIENT'))")
# 查询经营异常
EXCEPTION=$(curl -s -H "Authorization: Bearer ${API_KEY}" \
"${QCC_API}/eci/getBusinessException?keyWord=${ENCODED_NAME}")
# 查询被执行
ENFORCEMENT=$(curl -s -H "Authorization: Bearer ${API_KEY}" \
"${QCC_API}/eci/getJudgmentDebtorInfo?keyWord=${ENCODED_NAME}")
# 查询失信
DISHONEST=$(curl -s -H "Authorization: Bearer ${API_KEY}" \
"${QCC_API}/eci/getDishonestInfo?keyWord=${ENCODED_NAME}")
# 如果有任何风险信号,写入报告
HAS_RISK=$(echo "$EXCEPTION $ENFORCEMENT $DISHONEST" | python3 -c "
import sys, json
data = sys.stdin.read()
# 简单判断是否有非空结果
if '\"result\"' in data and '[]' not in data:
print('true')
else:
print('false')
")
if [ "$HAS_RISK" = "true" ]; then
if [ "$FIRST" = true ]; then
FIRST=false
else
echo "," >> "$REPORT"
fi
echo " {\"client\":\"${CLIENT}\",\"date\":\"${DATE}\"," >> "$REPORT"
echo " \"exception\":${EXCEPTION}," >> "$REPORT"
echo " \"enforcement\":${ENFORCEMENT}," >> "$REPORT"
echo " \"dishonest\":${DISHONEST}}" >> "$REPORT"
fi
done
echo "]" >> "$REPORT"
# 如果有风险,发送通知
RISK_COUNT=$(python3 -c "import json; data=json.load(open('$REPORT')); print(len(data))")
if [ "$RISK_COUNT" -gt 0 ]; then
curl -s -X POST "$WEBHOOK_URL" \
-H "Content-Type: application/json" \
-d "{\"msgtype\":\"text\",\"text\":{\"content\":\"⚠️ 对公风险预警 (${DATE})\\n共 ${RISK_COUNT} 家客户触发风险信号,详情见附件。\"}}"
fi
echo "[$DATE] 监控完成,发现 ${RISK_COUNT} 家风险客户。"
七、MCP接入:让AI Agent长出企业数据查询能力
7.1 从API到MCP:为什么要升级?
传统API对接的瓶颈:每次数据调用都需要开发团队提前写好逻辑、做好字段映射、处理异常返回。业务侧想查一个新数据维度,得先排队等IT排期。
**企查查MCP的核心能力:把企业数据查询能力装进AI Agent。不需要为每个数据维度单独开发接口和页面,AI直接理解业务意图,从179个原子能力中自动调用、组合、返回结果。
7.2 覆盖全景
| Server | 覆盖维度 | 典型工具 | 核心场景 |
|---|---|---|---|
qcc-company |
企业工商 | get_shareholder_info、get_actual_controller、get_beneficial_owners |
身份核验、股权穿透、实控人识别 |
qcc-risk |
风险信息 | get_dishonest_info、get_business_exception、get_judicial_documents |
风险扫描、合规核查 |
qcc-ipr |
知识产权 | get_patent_info、get_trademark_info、get_software_copyright_info |
知产评估、创新能力画像 |
qcc-operation |
经营数据 | get_bidding_info、get_recruitment_info、get_financing_records |
经营监测、招投标追踪 |
qcc-news |
舆情资讯 | get_news_sentiment |
舆情预警、负面监控 |
qcc-finance |
财务数据 | get_financial_data |
财务分析、授信辅助 |
7.3 MCP配置实战
第1步:获取API Key
打开企查查智能体数据平台,注册并登录,在个人中心获取API Key。
第2步:配置MCP Server
将以下JSON配置粘贴到你的AI客户端(以WorkBuddy为例):
{
"mcpServers": {
"qcc-company": {
"url": "https://mcp.qcc.com/sse/company",
"headers": {
"Authorization": "Bearer YOUR_API_KEY"
}
},
"qcc-risk": {
"url": "https://mcp.qcc.com/sse/risk",
"headers": {
"Authorization": "Bearer YOUR_API_KEY"
}
},
"qcc-ipr": {
"url": "https://mcp.qcc.com/sse/ipr",
"headers": {
"Authorization": "Bearer YOUR_API_KEY"
}
},
"qcc-operation": {
"url": "https://mcp.qcc.com/sse/operation",
"headers": {
"Authorization": "Bearer YOUR_API_KEY"
}
},
"qcc-news": {
"url": "https://mcp.qcc.com/sse/news",
"headers": {
"Authorization": "Bearer YOUR_API_KEY"
}
},
"qcc-finance": {
"url": "https://mcp.qcc.com/sse/finance",
"headers": {
"Authorization": "Bearer YOUR_API_KEY"
}
}
}
}
在对话框输入"请配置企查查MCP",粘贴配置后重启客户端。
第3步:验证连通性
> 查一下XXX有限公司的工商登记信息和股东结构
看到返回结果中出现 qcc-company (get_shareholder_info) · 运行成功,配置完成。
7.4 MCP实战Prompt示例
场景:对公客户准入尽调
> 帮我做一下"某某科技有限公司"的准入尽调,需要:
> 1. 核实企业身份(工商照面+经营状态)
> 2. 穿透实际控制人和受益所有人
> 3. 查一下这家公司及关联方有没有失信、被执行、经营异常记录
> 4. 看看最近的招投标和中标情况
> 最后给我一个风险等级判断:低/中/高
场景:贷后批量风险排查
> 帮我批量查一下这几家公司的最新风险状况:
> - A公司、B公司、C公司
> 重点看:最近一个月有没有新增诉讼、被执行、经营异常、法人变更
> 如果有风险信号,标注预警级别
八、新12号令合规:受益所有人识别的技术方案
2025年12月19日,央行发布《金融机构客户受益所有人识别管理办法》(新12号令),2026年1月20日起施行。
核心要求:穿透到最终受益自然人。过渡期——高风险存量客户6个月内完成识别,全量存量客户2年内完成。
技术挑战:
| 挑战 | 说明 |
|---|---|
| 工作量指数级增长 | 一个客户穿透后可能涉及数十家关联企业和十几个自然人 |
| 空壳识别需多维度综合判断 | 注册地址异常+零纳税+零社保+频繁变更法人 |
| "核实"比"识别"更难 | 工商登记可能滞后,代持、协议控制等隐性关系难以通过单一数据源判断 |
API示例:受益所有人穿透
import requests
def identify_beneficial_owner(company_name: str) -> dict:
"""受益所有人穿透识别(新12号令合规)"""
headers = {"Authorization": "Bearer your_api_key"}
result = {}
# Step 1: 获取股权结构
resp = requests.get(
"https://openapi.qcc.com/eci/getShareholderInfo",
headers=headers, params={"keyWord": company_name}
)
result["shareholders"] = resp.json()["result"]
# Step 2: 获取受益所有人
resp = requests.get(
"https://openapi.qcc.com/eci/getBeneficialOwners",
headers=headers, params={"keyWord": company_name}
)
result["beneficial_owners"] = resp.json()["result"]
# Step 3: 获取实控人
resp = requests.get(
"https://openapi.qcc.com/eci/getActualController",
headers=headers, params={"keyWord": company_name}
)
result["controller"] = resp.json()["result"]
# Step 4: 对外投资(识别持股平台)
resp = requests.get(
"https://openapi.qcc.com/eci/getExternalInvestments",
headers=headers, params={"keyWord": company_name}
)
result["investments"] = resp.json()["result"]
# Step 5: 空壳特征检测(经营异常+零社保+频繁变更)
resp = requests.get(
"https://openapi.qcc.com/eci/getBusinessException",
headers=headers, params={"keyWord": company_name}
)
result["exceptions"] = resp.json()["result"]
resp = requests.get(
"https://openapi.qcc.com/eci/getChangeRecords",
headers=headers, params={"keyWord": company_name}
)
result["changes"] = resp.json()["result"]
return result
# 预期返回结构
"""
{
"shareholders": [
{"name": "李XX", "ratio": "45%", "type": "自然人"},
{"name": "深圳XX投资合伙企业", "ratio": "55%", "type": "企业法人"}
],
"beneficial_owners": [
{"name": "李XX", "type": "最终受益自然人", "benefitRatio": "45%"},
{"name": "王XX", "type": "最终受益自然人", "benefitRatio": "22%"}
],
"controller": {
"name": "李XX",
"type": "自然人",
"controlChain": ["李XX → 45% → 目标公司"]
},
"exceptions": [], // 空壳信号
"changes": [
{"item": "法定代表人", "before": "张XX", "after": "李XX", "date": "2026-03-15"}
]
}
"""
违规成本:2025年城商行和农商行合计罚单1014张、罚没8.75亿元;2026年前4个月银行业累计罚没超7.69亿元,仅4月单月380张罚单。
九、数据能力就是分水岭
城商行的分化,终局不是"谁大谁赢",而是谁的数据能力强谁活得更好。
规模大的城商行如果数据能力跟不上,会在精细化竞争中输给规模小但数据能力强的同行。每一个BP的效率提升都意味着利润,每一次风险的提前发现都意味着拨备的节省。
数据不会直接多拉一个客户,但它能让客户经理一天多看20个客户、让风控团队提前一个月发现那家正在悄悄变更法人的企业、让贷后管理人员在风险爆发的第一时间收到预警而不是在季度复核时才后知后觉。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)