Python金融风控实战:集成天远多头借贷行业风险版API实现共债预警

击穿"拆东墙补西墙"的共债黑盒

在消费金融与小额信贷领域,"多头借贷"(借款人在多家机构同时借款)是导致坏账的核心元凶。传统的征信报告往往存在数据滞后性,难以实时捕捉借款人为了"以贷养贷"而在短时间内进行的疯狂申贷行为。一旦共债链条断裂,金融机构将面临巨大的资金损失。

天远多头借贷行业风险版 API 专为解决这一痛点设计。它不仅提供基础的黑名单筛查,更通过 5 类细分维度(通用、短周期、长周期、非银行、银行),输出 0-100 分的量化风险子分。结合借款人在 7天至 720天内 的跨平台申请轨迹,该接口能帮助风控系统精准识别"急用钱"、"多平台撸口子"的高危人群,是构建现代化贷前风控模型的数据基石。

Python 接口集成实战

本节演示如何使用 Python 对接该接口。由于接口返回的数据结构较为特殊(RiskCode 列表形式),我们在示例代码中增加了数据清洗逻辑,将复杂的 List 转换为易于查询的 Dict 结构。

前置配置

  • API Endpoint : https://api.tianyuanapi.com/api/v1/DWBG7F3A
  • 鉴权方式: AES-128-CBC 加密传输
  • 输入参数: 姓名、身份证号、手机号

核心代码实现

Python

jsx 复制代码
import requests
import json
import time
import base64
# 生产环境建议使用 PyCryptodome 库
# from Crypto.Cipher import AES

class MultiHeadRiskService:
    def __init__(self, access_id, access_key):
        self.url = "https://api.tianyuanapi.com/api/v1/DWBG7F3A"
        self.access_id = access_id
        self.access_key = access_key

    def query_risk_profile(self, name, id_card, mobile):
        """
        查询多头借贷风险详情
        """
        # 1. 构造带时间戳的请求URL
        timestamp = int(time.time() * 1000)
        request_url = f"{self.url}?t={timestamp}"
        
        payload = {
            "name": name,
            "id_card": id_card,
            "mobile_no": mobile
        }
        
        try:
            # 2. 数据加密 (AES-128-CBC)
            encrypted_data = self._encrypt_payload(json.dumps(payload))
            
            headers = {
                "Access-Id": self.access_id,
                "Content-Type": "application/json"
            }
            
            # 3. 发送请求
            response = requests.post(request_url, json={"data": encrypted_data}, headers=headers, timeout=8)
            
            if response.status_code == 200:
                res_json = response.json()
                
                if res_json.get("code") == 0:
                    # 解密响应数据
                    raw_data = self._decrypt_response(res_json.get("data"))
                    # 数据清洗:将 List 转为 Dict 方便业务使用
                    return self._parse_risk_report(raw_data)
                else:
                    print(f"业务异常: [{res_json.get('code')}] {res_json.get('message')}")
                    return None
            else:
                print(f"HTTP请求失败: {response.status_code}")
                return None
                
        except Exception as e:
            print(f"系统内部错误: {e}")
            return None

    def _parse_risk_report(self, raw_json):
        """
        将 [{"riskCode": "41001", "riskCodeValue": "43"}, ...] 
        转换为 {"41001": 43, ...} 格式
        """
        report_list = raw_json.get("riskInfo_report_v3.1", [])
        risk_map = {}
        for item in report_list:
            # 兼容 value 可能是字符串的情况,统一转为 int 或保留原值
            code = str(item.get("riskCode"))
            value = item.get("riskCodeValue")
            risk_map[code] = value
        return risk_map

    def _encrypt_payload(self, plain_text):
        """ [占位] AES加密逻辑: IV + AES(PKCS7) -> Base64 """
        return "base64_placeholder"

    def _decrypt_response(self, cipher_text):
        """ [占位] AES解密逻辑 """
        # 模拟解密后的 JSON 结构
        return {
            "riskInfo_report_v3.1": [
                {"riskCode": "41001", "riskCodeValue": "43"}, # 通用分
                {"riskCode": "40001", "riskCodeValue": "5"},  # 7天总申请次数
                {"riskCode": "17001", "riskCodeValue": "0"}   # 1周内逾期平台数
            ]
        }

# 调用示例
if __name__ == "__main__":
    service = MultiHeadRiskService("YOUR_ACCESS_ID", "YOUR_ACCESS_KEY")
    risk_profile = service.query_risk_profile("张三", "3201021990xxxx", "1380013xxxx")
    
    if risk_profile:
        # 业务决策示例
        short_term_score = int(risk_profile.get("41002", 0)) # 短周期共债分
        overdue_platforms = int(risk_profile.get("17001", 0)) # 1周内逾期平台数
        
        print(f"短周期共债分: {short_term_score}")
        if overdue_platforms > 0:
            print("拒绝:存在近期逾期行为")
        elif short_term_score > 80:
            print("复审:短周期共债风险极高")
        else:
            print("通过:风险可控")

核心风险指标深度解码

天远多头借贷行业风险版 返回的数据量极大(数百个指标),开发者无需全部使用,应根据业务场景选取核心特征。以下是关键字段的解析与建议:

1. 风险评分模型 (0-100分)

风险代码 描述 开发者注意 (Developer Notes)
41001 多头申请通用分 综合评估分。分值越高,风险越大。建议设定 60 分为初筛警戒线。
41002 短周期多头共债子分 聚焦 7天~3个月 的短期行为。若此分飙升,说明用户近期极度缺钱,存在"以贷养贷"嫌疑,是拒单的高权重指标。
41003 长周期多头共债子分 聚焦 6个月+ 的长期行为。反映用户的长期负债习惯,可用于定额定信策略。

2. 高危行为特征

风险代码 描述 业务含义
40001 7天内总申请次数 申请极其频繁(如 >10次),典型的高频借贷行为。
40049 7天内总申请平台数 相比次数,平台数更具参考价值。如果在 7 天内申请了 5 个不同的网贷平台,说明资金缺口很大。
40105 7天总申请夜晚次数 凌晨申请 (0点-7点) 占比高往往关联不良嗜好(如赌博)或极度焦虑,违约概率显著高于白天申请者。
17001 1周内逾期平台数 红线指标。一旦大于 0,建议直接拒单。

3. 欺诈与团伙风险

风险代码 描述 开发者注意
21007 圈团1浓度分 0-100分。检测是否属于欺诈团伙或中介代办。
31006 疑似准入风险 枚举值 1(低), 2(中), 3(高)。针对身份冒用或黑产攻击的防御指标。

构建精细化风控策略

基于该 API 丰富的数据维度,我们可以设计分层风控逻辑:

  1. 反欺诈熔断 (Anti-Fraud)

    在流程最前端,优先检查 31006 (疑似准入风险) 和 1700x (逾期指标)。

    • 策略 :若 31006 == 317001 > 0,直接拒绝,无需进入后续评分环节,节省征信查询成本。
  2. 多头借贷压力测试 (Debt Stress Test)

    计算用户的"申贷加速度"。利用 40161 (7天相对过去30天新增总平台数)。

    • 策略:如果 7 天内新增平台数占过去 30 天总数的 50% 以上,说明用户近期借贷需求激增,偿债压力断崖式上升,建议降低授信额度。
  3. 客群分层与差异化定价

    结合 41005 (银行多头子分) 和 41004 (非银行多头子分)。

    • 优质客群:银行分低,且非银分低 -> 给低息大额。
    • 次级客群:银行分高(被银行拒绝多次),转战非银机构 -> 给高息小额,并缩短借款周期。

结语

天远多头借贷行业风险版 API 提供的不仅是数据,更是透视借款人真实财务状况的"X光机"。通过 Python 脚本将其无缝集成到业务系统中,金融机构可以将风控颗粒度从"月"精细化到"天"甚至"小时"(如深夜申请监测),从而在激烈的信贷市场中有效平衡规模增长与资产质量。

建议开发者在数据落库时,将 riskCoderiskCodeValue 进行扁平化存储(如 MongoDB),以便后续进行模型回溯与策略调优。

相关推荐
Justice Young17 小时前
Hive第五章:Integeration with HBase
大数据·数据仓库·hive·hbase
Python极客之家17 小时前
基于深度学习的刑事案件智能分类系统
人工智能·python·深度学习·机器学习·数据挖掘·毕业设计·情感分析
Arvin_Zhang201617 小时前
使用python实现从PDF格式的control mapping获取gross die数量
python·pdf
Justice Young18 小时前
Hive第三章:HQL的使用
大数据·数据仓库·hive·hadoop
CodeCraft Studio18 小时前
国产化PDF处理控件Spire.PDF教程:使用Python批量自动化将PDF转换为黑白(灰度)
python·pdf·自动化·spire.pdf·文档自动化·pdf开发组件·国产化文档组件
web3.088899918 小时前
1688商品详情API接口深度解析
开发语言·python
幻云201018 小时前
Python机器学习:从入门到资深
人工智能·python
爱吃羊的老虎18 小时前
从零开始安装到精通的 Jupyter Notebook 完整教程
ide·python·jupyter
qq_124987075318 小时前
基于Spring Boot的电影票网上购票系统的设计与实现(源码+论文+部署+安装)
java·大数据·spring boot·后端·spring·毕业设计·计算机毕业设计