說概率前複習下歷史函數create_rand_list() #創建一個含有指定數量元素的listsum_fun() #累加len_fun() #統計個數multiply_fun() #累乘sum_mean_fun() #算數平均數sum_mean_rate() #算數平均數計算回報median_fu ...
本次有以下函數
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個花生,壞花生數不變,結果會有很大差異
那麼函數就有了
def unite_rate_fun(condition_count,all_count): p_a_with_b = float(condition_count) / all_count return 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
這個函數就是
def condition_rate_fun(p_a_with_b,p_b): p_a_from_b = p_a_with_b / p_b return 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
def e_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 in range(e_len)] e_num = sum_fun(e_list) else: return None return e_num
5、隨機變數方差
和樣本方差功能一樣,不多說了
σ^2 = NΣ[Xi-E(X)]^2P(Xi)
def var_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 in range(var_len)] var_num = sum_fun(var_list) else: return None return var_num
6、隨機變數協方差
函數簡單,套用協方差函數即可
def covar_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)
def covar_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 in range(covar_len)] covar_rand_xy_num = sum_fun(covar_rand_xy_list) else: return None return covar_rand_xy_num
8、組合期望回報
用最小的風險能獲得的最大回報
E(P) = wE(X) + (1 - w)E(Y)
w是投資資產x的比例
def e_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_num return e_p_num
9、投資組合風險
這個沒有搞懂是做什麼的,應該是期望回報的偏差值吧
σ(p) = [w^2σ(x)^2 + (1 - w)^2σ(y)^2 + 2w(1 - w)σ(xy)]^0.5
def var_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