金融數據挖掘之樸素貝葉斯
你和我之前的人生,
就像是來自同一個分布族的共軛曲線,
即使有各自的參數空間,
也註定要相識相念。
你和我之後的人生,
是我們相扶相持下不離不棄的最大似然,
用「信任與珍惜」的先驗去修正所有後驗,
用「包容和分享」的樣本去做無悔一生的推斷。
這是樸素的貝葉斯思想,
也是我們樸素的愛情宣言。
一、貝葉斯的故事
「托馬斯.貝葉斯……這個生性孤僻,哲學氣味重於數學氣味的學術怪傑,以其一篇遺作的思想重大地影響了兩個世紀以後的統計學術界,頂住了統計學的半邊天」。
——中國科學院院士陳希孺
- 托馬斯·貝葉斯(ReverendThomas Bayes, 1702-1761)是對歸納推理給出精確定量表達方式的第一人,他死後發表的論文,可以作為科學史上最著名的論文之一(Press,1989:P181)。
- 40歲當選英國皇家學會會員,相當於今天的英國科學院院士。
- 即使這樣,他在18世紀上半葉歐洲學術界也不算一個起眼的人物。在他生前,沒有片紙隻字的科學論著發表。那時,傳播和交流科學成果的一種方式,是學者間的私人通信。這些信件許多都得以保存下來並發表傳世。
- 他最偉大的論文《機遇理論中一個問題的解》,在他死後第三年才發表,1764年被發表在倫敦皇家學會的《Philosophical Transactions》上。
- 貝葉斯開創了統計學的貝葉斯學派,用先驗知識和邏輯推理來處理不確定命題,與古老的頻率學派分庭抗禮,頻率學派只從數據中獲得信息,完全不考慮先驗知識,即人的經驗。
二、貝葉斯定理
如果想判斷未知樣本的類別,比如,現在我們有三個自變數X1、X2、X3,通過這三個變數來判斷它是屬於第一類(C=1)還是第二類(C=2),我們可以用KNN、也可以用決策樹演算法來分析,本文介紹貝葉斯的思路:
- P ( C=c | X1=x1, X2=x2, X3=x3 ) ,代表當一個樣本X1、X2、X3三個變數值分別為x1、x2、x3時,該樣本類別為c的概率。
- P(C=1|X1,X2,X3) > P(C=2|X1,X2,X3),說明給定數據的X1、X2、X3後,數據屬於類別1的概率要大於屬於類別2,即說明現有樣本支持未知樣本屬於類別1,判定為類別1。
- P(C=1|X1,X2,X3)<P(C=2|X1,X2,X3),則說明現有樣本支持未知樣本屬於類別2,判定為類別2。
OK,那麼如何得到
P(C=1|X1,X2,X3)
P(C=2|X1,X2,X3)
這兩個概率呢?
答案是——得不到。但是沒關係,因為,只要知道這兩個誰大誰小就可以進行判斷,即:
- P(C=1|X1,X2,X3) > P(C=2|X1,X2,X3),則判定類別為1;
- P(C=1|X1,X2,X3) < P(C=2|X1,X2,X3),則判定類別為2;
貝葉斯定理就提供了方法進行這種比較。
(以上就是貝葉斯的思想,以下內容涉及到定理、公式、推導,如不感興趣可以直接跳到「三、金融應用實例部分」)
- 貝葉斯定理
貝葉斯定理用如下公式表示:
P(C|X)是給定屬性X下,C的後驗概率,P(C)是C的先驗概率,該公式被稱為「貝葉斯定理」。根據貝葉斯定理,我們想找出最大的P(C|X),只要找出最大的P(X|C)P(C)即可,因為P(X)對所有類為常數,這便是樸素貝葉斯分類的基礎。
- 樸素貝葉斯分類
利用貝葉斯定理,找出最大的P(X|C)P(C)即可對未知樣本進行分類,如
max{P(X|C)P(C)}=P(X|C=n)P(C=n),
則說明未知樣本屬於第n類,其中,
(1)P(C=i) = Si/S,Si 是類Ci 中的訓練樣本數,S 是訓練樣本總數;
(2)P(X|C=i) 的計算開銷可能非常大,因為會涉及到很多屬性變數,這裡可以做「屬性值互相條件獨立」的假定,即屬性間不存在依賴關係:
即,如果用三個屬性值X1、X2、X3,來推測類別C,那麼有:
P(X1,X2,X3|C=i)= P(X1|C=i)*P(X1|C=i)*P(X1|C=i)
這一假定是為了簡化所需計算,也因此該演算法被冠以「樸素的」定語。
(3)要注意的是,在計算P(Xk|C=i)時,要看Xk是分類屬性還是連續屬性:
- 如果Xk是分類屬性,則
,
比如
即在類別C=1的樣本中,X1占的比例;
- 如果Xk是連續屬性,則通常做正態分布假定:
,
是屬性Xk的密度函數,
為平均值和標準差。
樸素貝葉斯分類模型,與前面介紹的決策樹一樣被用於分類。它發源於貝葉斯定理,有著堅實的數學基礎和穩定的分類效率。
但受制於一些假定的不準確性(如類條件獨立),以及缺乏可用的概率數據,該演算法的準確率可能沒有理論表現的那麼美好。
然而,它的計算量KNN要小很多,其簡單的演算法又可以與決策樹和神經網路相媲美,是使用最廣泛的分類模型之一。
三、金融應用實例
- 選股
復旦大學的錢穎能、胡運發老師用樸素貝葉斯分類法進行選股:
(1)利用上交所中所有股票的基本會計和價格信息,用樸素貝葉斯法來辨別那些超過市場指數而可望獲得額外彙報的股票。
(2)由樸素貝葉斯法選擇的股票所組成的同等權重證券組合,1年半內總共獲得21%的回報,明顯優於市場指數的-9%的回報。
- 反洗錢
西安交通大學的張成虎、趙小虎(2009)利用樸素貝葉斯分類來識別可疑金融交易,發現洗錢行為。在他們的論文「基於貝葉斯分類的可疑金融交易識別研究」中提到,從反洗錢檢測實踐來看,可疑金融交易行為主要有以下幾類特徵:
(1)交易金額、交易頻率的異常。
如短期內發生資金收付行為,長期閑置的賬戶不明原因突然啟用等。
(2)交易流向、交易來源的異常。
如與來自販毒、走私、恐怖活動、賭博嚴重的地區或者避稅型離岸中心客戶之間的資金往來活動在短期內增多;多個境內居民接受一個離岸賬戶匯款等。
(3)交易用途或交易性質異常。
如沒有正常原因的多頭開戶、銷戶,且銷戶前發生大量資金收付;保險機構通過銀行頻繁大量對同一家投保人發生賠付或者辦理退保等。
論文中他們先用聚類分析、小波分析、鏈接分析來分別對以上幾種可疑行為進行識別,並對識別有問題的交易行為標註為1,在利用貝葉斯來對整個交易行為進行判定。
四、軟體實現
本文主要介紹Python和MATLAB的實現思想,僅以分類變數為例:
- PYTHON
如果現在有已知數據data:
分類向量c_value=[「yes」,」no」]兩類,未知數據test:
test={"outlook":"sunny","temp":"cool","humidity":"high","wind":"strong"}
那麼如何在python中實現對未知樣本test的樸素貝葉斯分類呢?主要需要三段代碼:
- MATLAB
Matlab最好先把分類變數值以字元串形式轉變為數字形式,在上個例子中,
(1)outlook有三個分類:sunny、overcast、rain,分別賦值為1、2、3;
(2)temp有三個分類:hot、mild、cool,分別賦值為1、2、3;
(3)humidity有兩個分類:high、normal,分別賦值為1、2;
(4)wind有兩個分類:strong、weak,分別賦值為1、2;
(5)class有兩個分類:yes、no,分別賦值為1、2;
data = [
1 1 1 2 2;
1 1 1 1 2;
2 1 1 2 1;
3 2 1 2 1;
3 3 2 2 1;
3 3 2 1 2;
2 3 2 1 1;
1 2 1 2 2;
1 3 2 2 1;
3 2 2 2 1;
1 2 2 1 1;
2 2 1 1 1;
2 1 2 2 1;
3 2 1 1 2;
]
我們把Python實現思想轉化成MATLAB形式:
function p =p(data,c_id,c_value)
count=0.0;
for i=1:size(data,1)
if data(i,c_id)==c_value
count=count+1;
end
end
p=count/size(data,1)
end
function pp=pp(data,c_id,c_value,a_id,a_value)
count1=0.0;
count2=0.0;
for l=1:size(data,1)
if data(l,c_id)==c_value
count1=count1+1;
if data(l,a_id)==a_value
count2=count2+1;
end
end
end
pp=count2/count1;
end
function nb(data,test,c_id,c_value)
pv=0*c_value
for i=1:size(c_value,2)
pv(1,i)=p(data,c_id,c_value(1,i));
end
for i=1:size(c_value,2)
for j=1:size(test,2)
pv(1,i)=pv(1,i)*pp(data,c_id,c_value(1,i),j,test(1,j));
end
end
pv
end
- END -
推薦閱讀:
※應該如何制定CFA Level II的複習計劃?
※有哪些專業性強,讀著過癮的金融類書籍?
※什麼是商業票據?
※在中國都有哪些方式可以實現大額交易在線支付平台?
※得「職業病」也是有門檻的啊!
TAG:贝叶斯分类 | 金融 | 深度学习DeepLearning |