0
引言
Cufflinks是将pandas和plotly无缝链接在一起的可视化库。 前者的dataframe在数据分析中无处不在,后者的交互性将可视化更进一步。 Cufflinks连接了两者,必须理解。
首先引入可能需要的包。
importosimportpandasaspdimportnumpyasnpimportseabornassnsimportmatplotlib.pyplotasplt % matplotlibinline
引入cufflinks软件包,别名为cf。
导入cuff links as cf
如果选择脱机模式并生成本地图像,则不会上载到这些系统。
cf.go_offline (
熟悉我的风格后,我就知道我喜欢的颜色。 RGB的设定如下。
color=[ RGB (220,38,36 ) ]、RGB ) 43、71、80 )、) RGB ) 69、160、162 )、RGB ) 232、122、89 )、) RGB、145 )
在Cufflinks中,曲线函数为df.iplot,虽然一手吃了好几次,但是iplot函数中参数很多,一些参数说明如下。
kind:Scatter、pie、histogram等图的类型
模式: lines、markers和lines markers。 分别表示折线、点、折线、点
colors :与轨道对应的颜色
dash )与轨道对应虚实线、solid、dash、dashdot这3种
width :轨道粗细
xTitle :横坐标名称
yTitle :纵坐标名称
title :图表标题
现在正在学习Cufflinks。 也就是说,我在学习新的东西。 我从一开始就再也看不到与之相关的所有内容了。 没有时间也没有能量。 我只是用Cufflinks处理特定的任务,然后找合适的知识点,完成任务就行了。
我们今天的任务是可视化信用组合。
样品组合
考虑包含100个不同出借人的“示例组合”(sample portfolio )。 有以下三个假设。
的总规模为1000,意味着平均每个贷款人的“开放”(exposure )为10。
实际开放根据韦伯分布(Weibull )模拟,范围从1到小于50。
贷款人的无条件违约概率(unconditionaldefaultprobability )根据卡方分布(chi-square )模拟,平均值设定为1%。
我将违约率和开放保存模拟为两个numpy格式的文件,加载到变量p和c中进行保存,n为借贷人数,100。
DP file=OS.getcwd ((defaultprobabilties.npy ' exp file=OS.getcwd ) )exposures.npy'c=NP.load
违约率分布
在Cufflinks中,我们在DataFrame中创建了一些东西,所以我们首先将p转换为DataFrame df,然后使用df.iplot ) )函数。
因为想看违约率的分布函数,所以kind设定为histogram,分成100箱。 在此基础上加上垂直线vline,发现作为p的平均值,值接近1%,非常接近以前的卡方分布的平均值。 之后,设定几个坐标名、图名、颜色和主题(ggplot美如画,据说用过)很简单,所以不再详细说明。
df=PD.dataframe(p*100 ) df.IPlot ) kind='Histogram ',histnorm='probability ',bins=100,vline=df.meame
由上图可知,违约概率的值域从0%到7%,而且向右倾斜(skew to the right )。
损失分布
用同样的方法画出损失的分布图。
df=PD.dataframe(c ) df.IPlot ) kind='Histogram ',histnorm='probability ',bins=100,vline=df.mean ) )
e',xTitle='USD',yTitle='Relative Frequency',color='rgb(220,38,36)',theme='ggplot' )从上图可看出,损失的值域从 0 到 50,而且也向右偏斜(skew to the right)。
组合可视化
信用组合有 p 和 c 两层信息,组合成新的 DataFrame。这时我们想显示了每个借贷人的损失敞口(横轴)和其无条件违约概率(纵轴)的散点图(scatter plot),因此 kind 设置 scatter。
为了看起来更加直观,我们用每个散点的面积来代表损失敞口,面积越大损失敞口越大,那么点随着向右侧移动而变大,因此 size 设置成 c,而 c 是损失敞口的值。
df = pd.DataFrame( np.vstack((p*100,c)).T,columns=['Default Probability', 'Loss Exposure'] )df.iplot( kind='scatter',x='Loss Exposure',y='Default Probability',mode='markers',size=c,title='Loss Exposure Vs Default Probability',xTitle='USD',yTitle='Percent',color=color,theme='ggplot' )
我们可以做一些观察:
大部分大头寸的违约概率都不高,但有几个例外的点。比如有个损失敞口为 30 的违约率为 7 %。
没有其他高违约的借贷人的损失敞口超过 10。
最大的单一头寸(接近 50)的违约概率极小,几乎为 0。
接下来我们来看信用组合在不同区域的分布。广义来讲,区域可按地理,行业或者借贷人规模来分类。
在该案例中,我们将 100 个借贷人随机分配到三个虚构的区域,分别为 Alpha,Beta 和 Gamma。我们同样随机生成些区域数据并存城 regions.npy。
rgnFile = os.getcwd() + '\regions.npy'region = np.load(rgnFile)
在画图中,每个散点都以根据区域分类而用不同的颜色来显示(在代码将 category 设置为 'Region')。在实际环境中,每个散点还会包含借贷人 ID 或名称,可帮助我们能够锁定某些特定的借贷人。
df = pd.DataFrame( np.vstack((p*100,c,region)).T,columns=['Default Probability', 'Loss Exposure', 'Region'] )df.loc[df['Region']==1, 'Region'] = 'Alpha'df.loc[df['Region']==2, 'Region'] = 'Beta'df.loc[df['Region']==3, 'Region'] = 'Gamma'df.iplot( kind='scatter',x='Loss Exposure',y='Default Probability',mode='markers',categories='Region',size=20,title='Regional Distribution',xTitle='USD',yTitle='Percent',color=color,theme='ggplot' )
我们可以做一些观察:
数据按区域划分,没有显示出任何模式。
最上面那个深青色点 (30.41, 6.82) 对应的借贷人是高风险头寸(损失敞口大,违约率高)。
最右边那个深青色点 (47.80, 0.02) 对应的借贷人头寸最大,但是违约风险不大。
底部和中部有一组借贷人(1 个深青色,2 个红色,2 个青色),虽然损失敞口大,但违约率不高,约为 1%。
左上角有一组借贷人(2 个深青色,3 个红色)虽然违约率高,但是损失敞口小。
将信贷组合可视化一下,我们就可以迅速看到组合里的一些特性。下篇我们来计算该组合的一些有用指标,如预期损失(expected loss, EL),损失波动(loss volatility, LV),风险价值(value-at-risk, VaR)和期望损失(expected shortfall, ES)。
Stay Tuned!