You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

已知EMI、本金、还款期数,如何通过EMI公式反算利率?

已知EMI、本金、期数时批量求解利率的技术方案

核心原理

分期还款额(EMI)的计算公式为:

EMI = P × i × (1+i)ⁿ / [(1+i)ⁿ - 1]
各参数定义:

  • P:放款本金
  • n:分期总期数
  • i:每期利率(与分期周期对应,按月分期即为月利率)
  • EMI:每期固定还款额

由于该公式是关于i的超越方程,不存在解析解,因此只能通过数值迭代方法求解,推荐使用收敛速度快、精度高的牛顿-拉夫逊迭代法。

批量实现方案(Python + Pandas)

针对存储了P、EMI、n的DataFrame,可以通过自定义迭代函数+行级apply的方式批量计算每一行的利率,实现代码如下:

import pandas as pd

def calculate_rate(row, max_iter=100, tol=1e-8):
    P = row['本金(P)']
    emi = row['分期还款额']
    n = row['分期数(n)']
    
    # 异常值过滤,避免计算报错
    if P <= 0 or emi <=0 or n <=0 or emi * n <= P:
        return None
    # 迭代初始值,可根据业务场景调整,默认设为1%月利率
    i = 0.01
    for _ in range(max_iter):
        # 计算f(i)
        pow_1i = (1 + i) ** n
        f = P * i * pow_1i - emi * (pow_1i - 1)
        # 计算导数f'(i)
        f_prime = P * pow_1i * (1 + i * n) / (1 + i) - emi * n * pow_1i / (1 + i)
        # 迭代更新i
        i_new = i - f / f_prime
        # 误差小于阈值则返回结果
        if abs(i_new - i) < tol:
            return round(i_new, 6)
        i = i_new
    # 超出最大迭代次数未收敛,返回空标记异常
    return None

# 读取你的DataFrame,示例如下:
df = pd.DataFrame([{
    '本金(P)': 5300,
    '分期还款额': 187,
    '分期数(n)': 35
}])
# 批量计算利率
df['利率(i)'] = df.apply(calculate_rate, axis=1)

注:示例中的本金5.300默认单位为千元,即实际本金5300元,若单位为元可自行调整参数逻辑

注意事项

  • 计算得到的i为单期利率,若需要年化利率可直接乘以对应周期数(按月分期则乘12)
  • 迭代初始值可根据业务场景调整,比如面向高息产品的场景可将初始值设置为0.03(3%月利率)提升收敛速度
  • 可根据业务需求调整精度阈值tol,默认1e-8可满足绝大多数金融场景的精度要求

内容的提问来源于stack exchange,提问作者Larx

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 03:36:01