Cohen’s Kappa 和 RANSAC

這是兩個關鍵字類似的名詞,前者和 “隨機期望一致" 有關,後者和 “隨機抽樣一致" 有關。先講前者。

假設有兩個法官,一個是公職的法官 A,一個是國民法官 B。我們知道即使九位國民法官意見都一樣,但三位公職法官意見不一樣時,被告都是可教化的,所以我們只各找一位來當例子就好。這兩位法官剛好同時參加過 100 場審判,判決結果如下:

國民法官 B: 有罪國民法管 B: 無罪總和
法官 A: 有罪 60565
法官 A: 無罪102535
總和7030100

Kappa 的公式如下,有時簡稱 K 值:

其中,Po 是兩個法官都有共識的比例,Pe 是兩個法官做出相同判定的期望值。

P0 = (60+25) /100 = 85% (兩個對角線粗體)

Pe = 65/100 * 35/100 + 70/100 * 30/100 = 0.65 * 0.35 + 0.7 * 0.3 = 0.2275 + 0.21 = 0.5475 (紅配紅 + 藍配藍)

Kappa = (0.85 – 0.5475) / (1 – 0.5475) = 0.3025 / 0.4525 = 66.85%

這個值好嗎?

Kappa (k 值)意義
<0.20幾乎沒有共識
0.21–0.40尚可 (fair)
0.41–0.60中等 (moderate)
0.61–0.80高度共識 (substantial)
81–1.00幾乎完全一致

它的數學意義是:Pe 代表雙方意見一致的機率。Po 只是表示有多少比例意見一樣。看似是一樣的東西,但是假設公職法官 A 其實一律都喜歡判無罪,即使國民法官 B 只會判二成無罪,雙方理念根本不同,只是恰好有 20% 結果相似。此時 Po 還是有 20%。而 Pe = 0 + 0.2 = 0.2 = P0,Kappa 直接就歸零了。也就是說 Kappa 抹除了恰好答案一樣的機率。

國民法官 B: 有罪國民法管 B: 無罪總和
法官 A: 有罪000
法官 A: 無罪8020100
總和8020100

我們也可以推廣到是非題考試,甲生每一題都選 O,乙生靠轉公正的筆作答。結果兩人答案有 50% 一樣 (P0 = 50%),兩生有五成作弊的嫌疑…. 嗎?看 Pe (隨機期望一致) 就知道沒有作弊。


至於 RANSAC (RANdom SAmple Consensus) [1] 和 “隨機抽樣一致" 有關。顧名思義,隨機抽樣會抽好幾次。假設我們去夜市玩,遊戲是從摸彩箱中抽出乒乓球,抽中紅色有獎,抽中白色摃龜,抽完球要放回去。箱子裡總共有 100 顆球,其中有獎的機率是 {\displaystyle w}。我的玩法是一把抓 n 顆球,然後預算足夠玩 k 次。

如果我一把抓 n 顆球全部中獎,機率顯然是 {\displaystyle w^{n}} 。至少有一顆沒中 (白球) 的機率是 1-{\displaystyle w^{n}} 。K 次嘗試後,每次都至少有一顆白球的機率是 ( 1-{\displaystyle w^{n}})k。假設我的目標是,不管玩幾次,有一把全紅才叫做成功,假設這機率是 p,失敗率就是 1 – p

1 – p = ( 1-{\displaystyle w^{n}})k

{\displaystyle k={\frac {\log(1-p)}{\log(1-w^{n})}}}

這裡的 k 和 Kappa 的 k 顯然是兩回事。這個公式告訴我們,目標愈大 (n 大),通常要嘗試愈多次 (k)。想成功 (p 大),也要嘗試愈多次 (k 大)。挑戰的題目很大 (w 小),還是要嘗試很多次。雖然都是要嘗試,至少我們知道 w,決定 n 之後,大致能知道 kp 的關係。

Ransack 的中文意思是「洗劫」、「掠奪」或「翻箱倒櫃地徹底搜查」。RANSAC 比較正面,這個演算法是用來從一群有雜訊 (離群值) 的數據中,歸納出最多證據支持的數學模型 (可以是高維度,但通常只看到二維的例子)。

我們猜的模型可能需要 n 個點才畫得出來 – 直線只要兩點 (n = 2),雙曲線可能要 5 個點。假設,為了猜這些點是否能用雙曲線模型來模擬,我們需要先一把抓 5 點 (x1​,y1​),…,(x5​,y5​),看它能不能連成雙曲線?

它可以寫成矩陣 Mh=0,其中

這個模型有 A、B、C、D、E、F 共6 個係數,但只差一個比例因子,所以自由度是 5。只要看 B2 − 4AC > 0 成不成立?就知道基本像不像雙曲線?(先忽略退化檢查,嗚嗚嗚,難怪大家都愛舉直線為例。)如果看起來不像雙曲線,就再抓一把 5 個點來評估。

評估方法是把 “所有點" 都對雙曲線模型計算殘差 (測量距離方法可彈性選擇)。如果這個模型正確,顯然會有更多的點落在這條虛擬的雙曲線上。至於那些沒抓的點算不算是在模型之內?就要看誤差大小。若殘差小於門檻 τ,就當成 inlier (內點),反之是 outlier (離群值)。我們數數這次總共有多少點是內點?記下來找最大值。最後選出抓到最多內點的那個組合就是候選最佳模型。

我們考慮雙曲線模型的話,第一個變數就定下來,n = 5。接著我們還要對資料的品質有點手感,w 是內點的比例;假設這次是估 60% – 100 個點中有 60 個內點,40 個離群值。我希望成功率 99%,那麼至少應該嘗試抓幾次呢?根據前面公式的變化形態:

大約要跑 57 次 RANSAC iteration,才有 99% 信心至少一次抽到全內點的 5 點樣本,也就是可以直接畫出雙曲線。才試 10 次不用放棄!反之,那試了 570 次都失敗,是否模型一定猜錯呢?AI 很客觀地說,什麼事都有可能?模型猜錯只是其中一種可能,儘管模型正確的機率極低。

更有可能是資料很髒,w = 0.2,80% 的資料都是雜訊。那失敗 570 次也很正常,機率高達 83%。

總之,RANSAC 提供了一種客觀的評估邏輯。細看公式就會發現,一次抓 10 點又全對的機率反而比較小,導致要抓更多次才會過關。因此在嘗試階段只會抓 minimum 點數,到最後要修飾模型時,才會抓更大把的內點來調整模型的參數。

[REF]

  1. 隨機抽樣一致