python计算条件概率_统计算法_概率基础

本次有以下函数

1、简单边际概率

2、联合概率

3、条件概率

4、随机变量期望值

5、随机变量方差

6、随机变量协方差

7、联合协方差

8、组合期望回报

9、投资组合风险

说概率前复习下历史函数

create_rand_list() #创建一个含有指定数量元素的list

sum_fun() #累加

len_fun() #统计个数

multiply_fun() #累乘

sum_mean_fun() #算数平均数

sum_mean_rate() #算数平均数计算回报

median_fun() #中位数

modes_fun() #众数

ext_minus_fun() #极差

geom_mean_fun() #几何平均数

geom_mean_rate() #几何平均回报

var_fun() #方差-样本S^2

covar_fun() #协方差(标准差)-样本S

trans_coef_fun() #变异系数CV

pearson_fun() #相关系数-样本r

---------------以上是旧的------------------------------------------------------------------------

---------------以下是新的------------------------------------------------------------------------

概率这块整个给我看了个懵逼,后面的代码都是按照我自己理解写的,如果有错误,欢迎指正

另外说明的是概率是很精细的事情,所以浮点型的数字会比较多,而且小数位数十分精确,除特殊情况,我就四舍五入截取到小数点后4位

简单事件,就是只有一个特征的事件,所有可能事件的集合就是样本空间,举个例子

有两袋子花生米,第一个袋子有32个花生米,其中有3个坏的,第二个袋子有17个花生米,其中有5个坏的,这个例子的样本空间就是下面这样。我想说,要是我选了B袋子我一定诅咒卖花生的老板吃方便面没有调料

袋子|是否坏的|花生米个数

A   |0       |3

A   |1       |29

B   |0       |5

B   |1       |12

为了方便起见,是True用0表示,否false用1表示

1、简单边际概率,记做P(A)

这个容易理解,比如计算坏花生米的出现率,这个简单,就不单独写代码了

P(A) = 坏花生米/总数 = 8/49 = 0.1633

2、联合概率

既然是联合了,就需要两个事件,记为P(A且B),∩这玩意就是且

就是A事件和B事件联合成同一个事件的概率,从A袋子吃出一个坏花生米的概率就是联合概率,事件A是坏花生米,事件B是A袋子

这个比较有分歧,比较广泛使用的是

P(A∩B) = 3/49 = 0.0612

另一种就是

P(A∩B) = 3/32*0.5 = 0.0517

我个人比较同意第一种,但是受到其他事件的影响比较大,考虑如果B袋子有10000个花生,坏花生数不变,结果会有很大差异

那么函数就有了

defunite_rate_fun(condition_count,all_count):

p_a_with_b= float(condition_count) /all_countreturn p_a_with_b

3、条件概率

一个事件已发生的情况下,得到另一个事件的发生概率,比较文言的说法是,给定事件B,事件A的发生概率,当然也可以反过来

P(A|B) = P(A∩B)/P(B)

反过来

P(B|A) = P(A∩B)/P(A)

还是这个例子,现在已知B事件是从A袋子取,那么P(B) = 32/49

P(A|B) = (3/49)/(32/49) = 3/32 = 0.0937

这个函数就是

defcondition_rate_fun(p_a_with_b,p_b):

p_a_from_b= p_a_with_b /p_breturn p_a_from_b

下面的内容用花生米的例子就不合适了,换个学校的事

一个班英语考试各分数的比例

分数|占比

20  |0.1

40  |0.1

60  |0.3

80  |0.4

100 |0.1

4、随机变量期望值

和算数平均数差不多,实际结果不应与这个数有太多偏差

μ = E(X) = NΣXiP(Xi)

E(X) = 20 * 0.1 + 40 * 0.1 + 60 * 0.3 + 80 * 0.4 + 100 * 0.1 = 66

defe_x(count_list,rate_list):

e_len=len_fun(count_list)if e_len ==len_fun(rate_list):

e_list= [count_list[i] * rate_list[i] for i inrange(e_len)]

e_num=sum_fun(e_list)else: returnNonereturn e_num

5、随机变量方差

和样本方差功能一样,不多说了

σ^2 = NΣ[Xi-E(X)]^2P(Xi)

defvar_rand_fun(count_list,rate_list):

e_num=e_x(count_list,rate_list)

var_len=len_fun(count_list)if var_len ==len_fun(rate_list):

var_list= [((count_list[i] - e_num) ** 2) * rate_list[i] for i inrange(var_len)]

var_num=sum_fun(var_list)else: returnNonereturn var_num

6、随机变量协方差

函数简单,套用协方差函数即可

defcovar_rand_fun(count_list,rate_list):

var_rand_num=var_rand_fun(count_list,rate_list)

covar_num= var_rand_num ** 0.5

return covar_num

7、联合协方差

σxy = NΣ[Xi-E(X)][Yi-E(Y)]P(XiYi)

defcovar_rand_xy_fun(x_count_list,y_count_list,xy_rate_list):

e_x_num=e_x(x_count_list,xy_rate_list)

e_y_num=e_x(y_count_list,xy_rate_list)

covar_len=len_fun(x_count_list)if covar_len == len_fun(y_count_list) and covar_len ==len_fun(xy_rate_list):

covar_rand_xy_list= [(x_count_list[i] - e_x_num) * (y_count_list[i] - e_y_num) * xy_rate_list[i] for i inrange(covar_len)]

covar_rand_xy_num=sum_fun(covar_rand_xy_list)else: returnNonereturn covar_rand_xy_num

8、组合期望回报

用最小的风险能获得的最大回报

E(P) = wE(X) + (1 - w)E(Y)

w是投资资产x的比例

defe_p(x_count_list,y_count_list,xy_rate_list):

e_x_num=e_x(x_count_list,xy_rate_list)

e_y_num=e_x(y_count_list,xy_rate_list)

w= sum_fun(x_count_list) / (sum_fun(x_count_list) +sum_fun(y_count_list))

e_p_num= w * e_x_num + (1 - w) *e_y_numreturn e_p_num

9、投资组合风险

这个没有搞懂是做什么的,应该是期望回报的偏差值吧

σ(p) = [w^2σ(x)^2 + (1 - w)^2σ(y)^2 + 2w(1 - w)σ(xy)]^0.5

defvar_p_fun(x_count_list,y_count_list,xy_rate_list):

w= sum_fun(x_count_list) / (sum_fun(x_count_list) +sum_fun(y_count_list))

var_rand_x_num=var_rand_fun(x_count_list,xy_rate_list)

var_rand_y_num=var_rand_fun(y_count_list,xy_rate_list)

covar_rand_xy_num=covar_rand_xy_fun(x_count_list,y_count_list,xy_rate_list)

var_p_num= (w * w * var_rand_y_num + (1 - w) * (1 - w) * var_rand_y_num + 2 * w * (1 - w) * covar_rand_xy_num) ** 0.5

return var_p_num

other、贝叶斯

这个真的是看的最懵逼的,感觉我写的这个不准,就当做参考吧

defbayes(true_coef,event_rate,event_bool,manage_num):'True = 0,False = 1'manage_num= manage_num - 1false_coef= 1 -true_coef

event_count=len_fun(event_rate)if event_bool[manage_num] ==0:

main_rate= event_rate[manage_num] *true_coefelse:

main_rate= event_rate[manage_num] *false_coef

event_true_list= [event_rate[n] * true_coef for n in range(event_count) if event_bool[n] ==0]

event_false_list= [event_rate[n] * true_coef for n in range(event_count) if event_bool[n] == 1]

event_sum= sum_fun(event_true_list) + sum-fun(evemt_false_list)

event_succe_rate= main_rate/event_sumreturn event_succe_rate

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值