不仅是评分:利用 Python 解析天远借贷行为验证API 的 T0-T11 借贷时间轴数据

1. 从"黑名单"到"借贷时间轴"

在金融信贷风控中,知道用户"是否在黑名单"只是第一步。更复杂的挑战在于评估用户当前的负债压力借贷急迫度。一个用户如果过去一年借贷平稳,和最近一个月突然在 10 个平台疯狂申请,其风险等级是完全不同的。

天远数据 推出的借贷行为验证API (接口代码:JRZQ8203),正是解决这一痛点的利器。与普通的黑名单查询不同,该接口提供了极为详尽的时间切片数据 。它不仅能返回最近 1/3/6/12 个月的累计借贷数据,更独特的是,它提供了从 T0(当前)到 T11(11个月前) 每一个月的独立借贷行为和还款压力指数。

对于 Python 开发者和数据分析师而言,这意味着我们可以通过 API 获取到用户完整的"借贷心电图",从而精准识别"多头借贷"、"以贷养贷"等高危行为。本文将演示如何使用 Python 对接该接口,并清洗解析这庞大的数据字段。

2. API 调用示例:Python 自动化对接

该接口涉及敏感数据(身份证、手机号),因此沿用了天远标准的高安全性加密传输协议:AES-128-CBC 加密 + Base64 编码 + Access-Id 鉴权。

2.1 接口基础配置

  • 接口地址https://api.tianyuanapi.com/api/v1/JRZQ8203
  • 请求方式:POST
  • 计费模式:按次计费(¥2.5/次)

2.2 Python 完整代码

我们需要使用 pycryptodome 库来处理 AES 加密(请确保 pip install pycryptodome)。

Python

jsx 复制代码
import requests
import json
import base64
import time
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad, unpad
from Crypto.Random import get_random_bytes

# === 配置区域 ===
API_URL = "https://api.tianyuanapi.com/api/v1/JRZQ8203" # 借贷行为验证接口
ACCESS_ID = "您的Access-Id"
ACCESS_KEY = "您的16位Access-Key"  # 必须是16字节

class TianyuanLendingClient:
    def __init__(self, access_id, access_key):
        self.access_id = access_id
        self.key = access_key.encode('utf-8')

    def _encrypt(self, data_dict):
        """AES-128-CBC 加密逻辑"""
        iv = get_random_bytes(16) # 随机生成IV
        cipher = AES.new(self.key, AES.MODE_CBC, iv)
        
        raw_json = json.dumps(data_dict).encode('utf-8')
        # PKCS7 填充
        encrypted_bytes = cipher.encrypt(pad(raw_json, AES.block_size))
        
        # 拼接 IV + 密文 -> Base64
        return base64.b64encode(iv + encrypted_bytes).decode('utf-8')

    def _decrypt(self, base64_str):
        """AES-128-CBC 解密逻辑"""
        try:
            encrypted_data = base64.b64decode(base64_str)
            iv = encrypted_data[:16] # 提取IV
            ciphertext = encrypted_data[16:]
            
            cipher = AES.new(self.key, AES.MODE_CBC, iv)
            # 解密并去除填充
            decrypted_bytes = unpad(cipher.decrypt(ciphertext), AES.block_size)
            return json.loads(decrypted_bytes.decode('utf-8'))
        except Exception as e:
            print(f"解密异常: {e}")
            return None

    def check_lending_behavior(self, name, id_card, mobile):
        """
        发起借贷行为验证
        """
        # 1. 构造三要素
        payload = {
            "name": name,
            "id_card": id_card,
            "mobile_no": mobile
        }
        
        # 2. 加密参数
        encrypted_data = self._encrypt(payload)
        
        # 3. 发送请求 (带时间戳)
        headers = {
            "Access-Id": self.access_id,
            "Content-Type": "application/json"
        }
        body = {"data": encrypted_data}
        url = f"{API_URL}?t={int(time.time() * 1000)}"
        
        try:
            resp = requests.post(url, headers=headers, json=body)
            resp_json = resp.json()
            
            if resp_json.get("code") == 0:
                # 4. 解密响应数据
                return self._decrypt(resp_json.get("data"))
            else:
                print(f"API 业务报错: {resp_json.get('message')}")
                return None
                
        except Exception as e:
            print(f"请求网络错误: {e}")
            return None

# === 调用演示 ===
if __name__ == "__main__":
    client = TianyuanLendingClient(ACCESS_ID, ACCESS_KEY)
    
    # 模拟输入
    result = client.check_lending_behavior(
        name="测试用户", 
        id_card="110101199001011234", 
        mobile="13800138000"
    )
    
    if result:
        # 打印部分核心数据
        print(f"数据标识: {result.get('flag_totalloan')} (1:成功)")
        print(f"最近一次借贷时间: {result.get('tl_id_eletail_lasttime')}")
        print(f"当前(T0)还款压力等级: {result.get('tl_id_t0_nbank_reamt')}")

3. 核心数据结构解析:读懂 130+ 个字段

借贷行为验证API 的响应字段非常丰富(超过 130 个字段),初次接触可能会感到眼花缭乱。作为开发者,我们可以通过命名规则将它们快速分。

3.1 字段命名"密码本"

API 的字段名遵循以下逻辑结构:

tl_{主体}_{时间段}nbank{指标}

  • 主体 (Dimension):
    • id: 基于身份证号查询的数据(覆盖面广)。
    • cell: 基于手机号查询的数据(时效性强,关联账户绑定)。
  • 时间段 (Time Window):
    • m1, m3, m6, m12: 最近 1/3/6/12 个月的累计数据。
    • t0 ~ t11: 具体到某一个月 的切片数据。t0 为当前月,t1 为上个月,以此类推。
  • 指标 (Metric):
    • passnum / num: 核准借贷次数。
    • passorg / org: 核准借贷机构数。
    • lendamt: 借贷金额等级(1-101,数值越高金额越大)。
    • reamt: 应还款等级(仅在 T0-T11 时间段出现,反映当月还款压力)。

3.2 关键字段示例表

字段名 业务含义 数据分析价值
flag_totalloan 输出标识 1 表示匹配成功,0 表示无数据(可能是白户)。
tl_id_eletail_lasttype 最近一次借贷机构类型 区分是"持牌消费金融"、"网络小贷"还是"P2P"。借贷类型越下沉,风险越高。
tl_id_t0_nbank_reamt 当前应还款等级 风控核心字段。取值 1-101,数值过高说明用户本月面临巨大的还款缺口。
tl_id_m1_nbank_passorg 近1个月借贷机构数 "多头借贷"直接指标。如该值 > 3,通常意味着用户在急用钱。

4. 应用价值分析:构建动态风险模型

有了这些数据,我们可以在 Python 中构建非常精细的业务规则。

场景一:借贷趋势突变检测

通过对比 m3(近3个月)和 m12(近12个月)的数据,或者分析 t0t5 的斜率。

  • 逻辑 :如果用户过去一年 (m12) 借贷次数很少,但最近一个月 (m1) passnum 激增。
  • 结论:用户可能遭遇突发财务危机,风险等级应从 Low 调至 High。

场景二:以贷养贷识别

利用 reamt(还款等级)和 lendamt(借贷等级)。

  • 逻辑 :观察 t1 (上个月) 的 reamt 是否很高,同时 t0 (本月) 的 lendamtorg 是否同步升高。
  • 结论:用户上个月还款压力大,本月立即新增借贷,极大概率是在"拆东墙补西墙"。

场景三:借贷渠道下沉预警

关注 tl_id_eletail_lasttype(最近一次机构类型)。

  • 逻辑:监控该字段的变化轨迹。
  • 结论:如果用户的借贷渠道从"b.网络零售银行"逐渐变为"d.持牌小贷"甚至"h.其他",说明优质机构已拒绝为其放款,信用资质正在恶化。

5. 总结

天远借贷行为验证API (JRZQ8203) 是一个高维度的风控数据源。它打破了传统征信"只看结果"的局限,通过 T0-T11 的时间轴数据,让开发者能够还原用户的借贷行为路径

对于 Python 开发者,处理此接口的关键在于:

  1. 安全封装:正确实现 AES-128-CBC 加密。
  2. 降维处理:将 130+ 个字段抽象为"频率"、"金额"、"压力"三个维度的特征向量。
  3. 动态监控:建议在贷前审批和贷后管理两个环节分别设置不同的阈值模型。

通过合理利用这一数据资产,金融机构将能更有效地识别潜在风险,制定精准的债务重组或催收策略。

相关推荐
Jackyzhe2 小时前
Flink源码阅读:窗口
大数据·flink
想学后端的前端工程师2 小时前
【Java JVM虚拟机深度解析:从原理到调优】
java·jvm·python
夜泉_ly2 小时前
期末速通 -Java程序设计基础 -理论
java·开发语言
m0_611349312 小时前
什么是副作用(Side Effects)
开发语言·前端·javascript
幽影相随2 小时前
TensorBoard 快速使用指南
pytorch·python·tensorboard
Psycho_MrZhang2 小时前
业务应用系统类型和常用名词
大数据
Hello.Reader2 小时前
Flink Procedures 用 SQL 的 `CALL` 跑 Flink Job(实现、类型推断、命名参数、Catalog 集成一篇搞懂)
大数据·sql·flink
其美杰布-富贵-李2 小时前
TensorBoard 与 WandB 在 PyTorch Lightning 中的完整指南
人工智能·pytorch·python·监控·调优
Python永远的神2 小时前
告别循环:Python 列表推导式,让你的代码飞起来!
python