混淆矩陣(Confusion Matrix)是機器學習裡用來判斷模型好壞的一種方法,然而就如其名,許多人學習混淆矩陣是相當混淆。這篇文章我想利用機器學習演算法所開發交易策略為例,介紹這常令人混淆的混淆矩陣。
假設我們有一個機器學習演算法,目的是『預測明天股票是否會漲?』。演算法回答Yes (Positive, 陽性)代表預測“要漲”。演算法回答No (Negative, 陰性)代表預測“不漲”,或著也可以視為要跌。有了此演算法,我們便可根據其輸出的答案做交易,當演算法預測要漲的時候,我們便進場做多;但若預測不漲,我們則按兵不動
(注意到並不是進場放空)。
那如何判斷機器學習演算法是否夠厲害呢?這時混淆矩陣就上場了。混淆矩陣為一個2 by 2矩陣,矩陣“列”代表兩種情況:1. 演算法預測Positive(預測漲)。2. 演算法預測Negative(預測不漲)。而矩陣“行”所代表的情況亦有兩種:1. 實際漲。2. 實際跌。如下所示:
混淆矩陣Confusion Matrix
|
實際漲
|
實際跌 (不漲)
|
預測漲
|
True
Positive (TP)
|
False
Positive (FP)
Type I Error
|
預測跌
(不漲)
|
False
Negative (FN)
Type II Error
|
True
Negative (TN)
|
我們分別解釋模糊矩陣的四個值:
1. True Positive (真陽性,TP):預測漲,且實際真的漲,我們稱為True Positive。這裡的“Positive”指的是預測“漲”,而True是因為“預測正確”(預測漲實際也真的漲),所以為True。
2.
True Negative (真陰性,TN):預測不漲(跌),實際也真的不漲(跌)。我們稱之為真陰性。真陽性與真陰性在機器學習裡,都是預測正確的情形。
3. False Positive (偽陽性,FP): 預測漲,但實際卻不漲(跌)。這裡的“Positive”是因為預測“漲”,而False是因為“預測錯誤”(預測漲實際卻跌),所以為False。偽陽性在混淆舉證裡有個專有名詞,稱為Type I Error。以此例來說,Type I Error是很嚴重的錯誤。想想看演算法預測漲,投資者根據演算法的預測進場做多,但實際卻跌,也就是真的賠到錢了。那難道有不嚴重的錯誤嗎? 有的。以此例(預測明天股票是否會漲)來說,較不嚴重的錯誤是False Negative,也稱之為Type II Error。
4.
False Negative (偽陰性,FN):預測不漲(跌),但實際卻漲。Negative是因為演算法預測“不漲”,但是判斷錯了(False),故稱之False Negative。為何此例底下的False Negative (Type II Error)沒那麼嚴重呢? 因為演算法預測不漲(跌),投資者就是不動作而已,並不會進場做空。雖然後來確實漲了,Type II Error發生,但在這樣的情形下,投資者就只是原本有機會賺到的錢沒賺到而已,並不是遭受損失。因此,以此例來說,若發生Type II Error的偽陰性並沒有那麼嚴重。
注意到,發生Type I Error或是Type II Error誰比較嚴重,是取決於機器學習演算法的應用情境。一般來說,以交易策略的機器學習演算法,若Positive(陽性)是有正面影響的事,則發生Type I
Error (偽陽性)會比Type II Error (偽陰性)來的嚴重;若Positive(陽性)是有負面影響的事,則Type II Error (偽陰性)會比Type I Error (偽陽性)來的嚴重。
這裡舉個Type II Error比Type I Error嚴重的例子。假設今天有另一個機器學習演算法,預測『明天大盤是否會有大波動?』,這裡定義的大波動為漲或跌超過2%以上。若預測大波動則為Positive(陽性),若預測沒有大波動則為Negative(陰性)。投資者會根據此機器學習演算法,進行選擇權賣出勒式的交易。選擇權賣方在於穩穩地收取權利金,但要再沒有波動的前提下。選擇權賣方最怕發生大波動(Positive),一旦履約價被貫穿,價外變價內,那很有可能損失慘重。
假設今天演算法出現Type I Error (偽陽性),也就是預測大波動,但結果預測錯誤,大波動沒有發生,那其實並不會有損失,因為只是按兵不動沒有進場(賣出勒式)。但若出現Type II Error (偽陰性),預測沒有大波動,投資者很放心地做出選擇權賣出勒式的交易,然而預估錯誤出現了大波動,導致履約價被貫穿,那很有可能造成嚴重損失。此為Type II Error比Type I Error嚴重的例子。
再來要介紹機器學習演算法的度量品質方式。首先是正確率(Accuracy)。顧名思義,正確率指的是機器學習演算法預測正確的機率。定義如下:
注意到混淆矩陣裡面預測正確的有True Positive與True Negative。因此分子的情況為真陽性(TP)與真陰性(TN)相加,而分母為所有情形的總和。正確率的意義在於機器判斷結果的正確比例。
大部分人可能會覺得正確率很重要,事實上大部分情況的確如此,但不是絕對。舉例來說,假設今天另有一個機器學習演算,判斷「明天股票是否會漲跌板?」。預測會漲停板為Positive,預測“不會漲停板”為Negative。由於股票漲停板的機率本來就低,演算法只要設定always預測不會漲停板(Negative),那True Negative的值就會很高,使得演算法的Accuracy也跟著高。然而,這樣的演算法卻是沒有任何效用的。
上面「預測大盤是否會有大波動」的機器學習演算法,更適用於用精準度(Precision)去衡量。精準度的定義是
Precision = TP/(TP+FP)
其意義是當演算法預測有大波動(Positive)的條件下,確實發生大波動的機率。若是做選擇權賣出勒式的交易,精準度比較像是交易策略裡的勝率(註:還是有些不一樣)。
另一個很重要的度量為召回率(Recall),定義如下:
Recall = TP/(TP+FN)
根據召回率的定義,確實出現Positive的情況下,能辨別出來Positive的機率。再以「預測大盤明天是否會有大波動?」的演算法為例,召回率表示一旦確實發生大波動,我們能避免掉幾次(召回多少?)。一般來說大盤大波動次數本來就少,股市大部分時間都在盤整(小波動)。但若是靠選擇權賣方靠賺取時間價值維生的,最希望不要有大波動。因此召回率就會相對重要。召回率要高,才能避免掉那幾次可能的大賠。
我們做個小結論:
以「預測明天股票是否會漲?」的演算法來說,Accuracy大約一半一半,若能超過50%那是演算法設計的好。Precision相對就比Accuracy重要,因為Precision決定是否進場買進,這裡Precision也類似此策略的勝率。Recall在此例若是在多頭市場,那就跟Precision同等重要,若是在空頭市場,Recall就比Precision更為重要(避免賠錢)。在此應用情景下,Type I Error會比Type II Error來的嚴重。
以「預測明天大盤是否會有大波動?」的演算法來說,Accuracy肯定很高,因為股市大部分時間都在盤整(小波動),演算法只須都預測沒有大波動發生(Negative)就好。而Precision當然希望越高越好,這代表著用波動做為策略的勝率。而Recall也是希望用盡所有技巧越高越好,最好是每一次出現大波動都要抓到,畢竟出現的機會不多,但沒抓到就會損失慘重。
還有許多衡量混淆矩陣的方法:ROC, AUC, F1-Score...等,我們陸續再談。
0 意見:
張貼留言