random模块中金融领域常用分布函数
numpy.random.beta
numpy.random.binomial
numpy.random.chisquare(卡方分布)
numpy.random.exponential
numpy.random.f
numpy.random.gamma
numpy.random.geometric
numpy.random.lognormal
numpy.random.multivariate_normal(多元正态分布)
numpy.random.pareto
numpy.random.poisson
numpy.random.power(指数分布)
numpy.random.standard_t(t分布)
numpy.random.normal
numpy.random.randn(标准正态分布,可定义维度)
numpy.random.standard_normal(标准正态分布,不可定义维度)
numpy.random.rand(标准均匀分布)
numpy.random.randint(均匀分布,给定区间内抽取整数)
numpy.random.uniform(任意区间的均匀分布)
β分布
1、可用来刻画银行贷款违约回收率,有两个参数α和β,size表示抽取随机数的个数;
2、size不写默认为1,size也可用多维表示
3、参数名称可省略
>>> import numpy.random as npr
>>> beta=npr.beta(a=2,b=4,size=10000)
>>> print(beta.mean(),beta.std())
0.33310797251028923 0.1766576703083821
卡方分布
可用于刻画保单索赔金额,df表示自由度,size是抽取个数
>>> x=npr.chisquare(df=4,size=10000)
>>> print(x.mean(),x.std())
3.9848330295046677 2.8230233856316285
F分布
前两个参数代表自由度n1和n2,size同理
>>> f=npr.f(dfnum=6,dfden=8);f
3.966614282489191
对数正态分布
可用于刻画股票收益率。变量的对数服从正态分布,参数分别为均值、标准差和size
xlog=npr.lognormal(0.5,1,(2,3));xlog
array([[0.67216224, 0.67250885, 0.65827427],
[0.58681578, 2.40758209, 0.27557731]])
正态分布与标准正态分布
变量服从正态分布,参数分别为均值、标准差和size
>>> xnor=npr.normal(0,1,1000)
>>> print(xnor.mean(),xnor.std())
0.0186942322604807 1.0069583077954158
>>>
变量服从标准正态分布,还可用randn和standard_normal,参数均为size,但是randn可生成多维
>>>snor=npr.randn(2,3);snor
array([[-0.29098965, 1.41606237, -0.37613379],
[-0.26822167, 1.29213016, -0.37025113]])
>>>snor1=npr.standard_normal(6);snor1
array([ 1.27020406, -0.58505078, -0.88146249, -0.16921353, -1.07142416,
-0.16886138])
>>> snor2=npr.standard_normal(10000)
>>> print(snor2.mean(),snor2.std())
-0.001636269023124208 1.0039272342265035
t分布
参数分别为自由度和size,自由度越大t分布越接近于标准正态分布
>>> t=npr.standard_t(200,1000)
>>> print(t.mean(),t.std())
-0.00527027933254543 1.0066469571435286
均匀分布
1、rand(d0,d1,…dn)函数用于在给定维度数组中加入在[0,1)之间服从均匀分布的随机样本;
2、randint(low, high,size)返回随机整数,范围区间为[low,high);
3、uniform(low,high,size)从一个均匀分布[low,high)中随机采样。
>>> a=npr.rand(2,3);a
array([[0.58316103, 0.729972 , 0.61602387],
[0.58347881, 0.83084338, 0.12654253]])
>>> b=npr.randint(1,20,10);b
array([16, 4, 19, 7, 3, 3, 6, 1, 11, 17])
>>> c=npr.uniform(1,20,(2,5));c
array([[ 4.20412068, 14.64988062, 14.09626989, 12.39333325, 19.34367783],
[11.55343021, 4.81221372, 4.48002327, 4.05814398, 14.88917283]])