信用风险建模 in Python 系列 5 - 阈值模型概述

2020-08-20 16:06:09 浏览数 (1)

本文含 1845 字,2 图表截屏

建议阅读 10 分钟

引言

本文是「信用风险建模 in Python」系列的第五篇,其实在之前的 Cufflinks 那篇已经埋下了信用风险的伏笔,

  1. 信用组合可视化
  2. 信用风险 101
  3. 独立模型 - 伯努利模型
  4. 独立模型 - 泊松模型
  5. 混合模型 - 概述

:由于每次我都是在 word 里写好,然后再在微信公众里编辑。但是文章里太多数学公式和符号,每次截图和调整符号都让我崩溃,本来写文花了不少时间,编辑又花了差不多同样的时间。事情太多而最近身体一直不好,不能再这么低效下去了。以后我就直接把 word 里的东西以图片形式发出来。我知道从手机上看字有些小,真想学的建议用网页打开,或者将图片存下来是可以看的。

东西都是干货,还是能学到不少只是的。只是我真的没有时间用在排版编辑了,见谅。

文中计算条件概率的代码:

代码语言:javascript复制
def cond_PD(p, rho, G):
    num = norm.ppf(p) - np.sqrt(rho)*G
    denom = np.sqrt(1-rho)
    return norm.cdf(num/denom)

文中计算二维高斯分布的 CDF 的代码:

代码语言:javascript复制
import numpy.linalg as nla
import scipy.integrate as nInt

def JDP(x1, x2, rho):
    bounds = [[-7, norm.ppf(x1)],[-7, norm.ppf(x2)]]
    f, err = nInt.nquad( GaussianDensity2D, bounds, args=(rho,) )
    return f

def GaussianDensity2D(x1, x2, rho):
    omega = np.array([[1,rho],[rho,1]])
    t1 = 2*np.pi*np.sqrt(nla.det(omega))
    t2 = np.dot(np.dot(np.array([x1,x2]),nla.inv(omega)),np.array([x1,x2]))
    return np.exp(-t2/2) / t1

文中的两幅图:

0 人点赞