數據給你一雙看透本質的眼睛,這裡是《數據分析思維課》。
從今天開始,我們就要進入數據算法基礎部分了。一說到算法,很多人都會覺得神秘、複雜、高大上……那究竟什麼是算法呢?
官方把算法定義為一個計算過程,這個過程輸入某一個值或一個值的集合,終會産生一個值和一個值的集合作輸出,這就是一個算法。官方的說法比較抽象,簡單來說,你可以把算法當成一個具有科學依據的算命箱子,你給這個箱子輸入你的面相、體重生辰八字,最終它會根據你的需求給你算出一個很有可能的結果,比如最近你買比特币會發大财,生的孩子是男孩一類的。這個輸入輸出的箱子就是一個算法,箱子裡面裝的我們就叫做算法模型。
看到這,你可以停個五秒鐘想一想,這種感覺是不是似曾相識?我們前面講了很多的統計分布,假如我們知道收入和投資是成正相關的,我們是不是就可以知道在未來某一個投入情況下,收入會有多少了?之前我們介紹的統計分布是不是算法模型呢?
是的,我們在數據分析基礎裡介紹的各種分布,就是算法模型的一種。其實數據算法模型包括很多大類,簡單說來可以分為統計分析、數據挖掘和人工智能幾大類,聚類、分析、關聯、神經網路等等很多種算法。我們有非常多的算法模型,到底哪個算得準呢?今天這節課,我就給你講幾個衡量這些算法模型的重要指标:準确率、精确率、召回率和置信區間。
準确率 / 精确率 / 召回率
衡量一個算法準不準,我們的第一感覺就是要看這個模型的準确率。的确,在算法衡量裡就有一個指标就叫準确率,英文叫做 Accuracy。顧名思義,準确率就是看整體裡預測準确的概率是多少。
準确率 = 預測正确的樣本數量 / 預測總的樣本數量
這個公式乍一看很有作用,但是用這樣的方式來評估一個算法模型是有問題的。假設我設計了一個算法來辨别鹿的照片。我準備了 100 張圖片,圖片裡邊有 1 張鹿,99 張馬。現在,我要讓算法來識别這個圖片裡到底是鹿還是馬。
假如這個算法模型很準确,把一個鹿識别出來了,然後我們看這個準确率是多少呢,用剛剛的那個公式,你容易得出是 1/100,也就是說隻有 1% 的準确率。這個和我們當時預期的明顯不一樣。
那怎麼樣更好的去衡量這個算法模型呢?我們就有了一個新的概念,叫做精确率,英文叫做 precision,也叫作 P 值、查準率。這個概念稍微複雜了一些。還是用剛才預測鹿和馬的這個例子,我們先把幾種預測結果的情況都列出來,整體上就是 4 種:預測馬,它的确是馬;本來是鹿,預測成馬;本來是馬,把它預測成鹿了;本來是鹿,預測對了還是鹿。你可以參考下面這個表,會更為直觀一些。
官方說法是精确率為預測正确的正例 (TP) 在所有預測為正例的樣本中出現的概率,即分類正确的正樣本個數占分類器判定為正樣本的樣本個數的比例。是不是有點繞?你可以把表格和下面這個公式對照起來看,會更容易理解一些。
精确率 =TP(指馬為馬)/(TP(指馬為馬) FP(指鹿為馬))
比如說,現在有馬和鹿共 100 匹,其中 40 隻鹿,60 匹馬。預測出來的結果,如下面這個表。
那麼 AI 算法模型精确率就是 40/(40 10)=80%。
光有精确率不夠,如果我們現在下個指令,要把那些指鹿為馬的 AI 算法都給幹掉,這樣可以把精确率直接提到 100%(指鹿為馬變成 0)。
這樣做,看起來精确度足夠高、足夠精确了。但卻會導緻最後很多的馬識别不出來,因為 AI 看到很多稍微長得像鹿的馬,完全不敢識别成馬,甯願說這些馬是鹿。
那我們怎麼能避免這種情況出現呢,我們就會用到另外一個指标——召回率(recall,也叫作查全率)。召回率用官方的說法是預測正确的正例 (TP) 在原始的所有正例樣本中出現的概率,即分類正确的正樣本個數占真正的正樣本個數的比例。用公式來表示就是下面這樣。
召回率 =TP(指馬為馬)/(TP(指馬為馬) FN(指馬為鹿))
那麼上面這個 AI 算法模型召回率就是 40/(40 20)=66.7%。
簡單來說,召回率就是看你查得全不全。目标就是不讓你太過于嚴查指馬是鹿,出現上面說的 AI 即使看到真的馬也不敢指出來它是馬的情況。
我們現在把精确率和召回率放在一起看,精确率 80%,召回率 67.7%。這個數據說明什麼呢,說明 AI 算法怕把馬認錯了,甯可指馬為鹿,也不指鹿為馬。在這樣一個結論下,接下來我們可以适當優化模型,去找一個最優解。
精确率和召回率(也叫查準率和查全率)是一對孿生兄弟,一般情況下它們是成對出現,用來衡量一個算法模型到底好不好。單一指标高并沒有意義,避免指鹿為馬也避免指馬為鹿才是最好的模型。
置信區間
光有精确率和召回率就可以衡量一個算法到底好不好麼?其實還是不夠的,我們現實中很多時候不是光看鹿和馬的,而是要去預測一些連續的數字。舉個例子,你高考完不知道多少分,你找算命先生幫你預測一下高考成績。有一個算命先生告訴你,我有 100% 的把握,你考的分數在 0 到 750 分之間。另外一個算命先生說,我有 95% 的把握,你在 600 到 630 之間。
這兩個算命先生,誰強誰弱,一眼就看出來了,對吧?為了解釋每個算命先生(算法)的識别能力範圍,我們有了一個新的衡量指标,叫做置信區間。
用官方說法來說,置信區間估計是參數估算的一種,它是用一個區間來估計參數值,英文叫做 confidence interval 也就是一定信心下的區間。這個信心我們可以用前面講到的準确率來去衡量,這個時候準确率有了一個新名字,叫做置信度。剛剛提到的 95%、100% 就是置信度,[0,750]和[600,630]就是置信區間。
一般來講置信度和置信區間是同向的,啥意思呢?就是置信度和置信區間一般是相同趨勢。當置信度很高時,置信區間也會很大;當置信區間很大時,置信度也會很高。不過越高其實這個算法越沒有用處。如果一個算命先生告訴你,我有 100% 把握你生命是在 1 歲到 200 歲之間,雖然置信度高,但顯然是一句廢話。所以置信度和置信區間是一組參數,來告訴你這個算法模型誤差有多大。
我在附錄部分給你舉了一個置信區間計算的例子,你要是感興趣,可以去進一步學習。
取舍的藝術
精确率、召回率、置信區間這三個參數是衡量一個數據算法的核心指标,算命先生既要算得準、算得全還不能範圍猜得太大,這才是好的算命先生。但是現實工作中,要想達到這樣的效果,其實是很難的。
就拿最近比較火爆的“自動駕駛遇到行人自動刹車”這個算法來說,精确率代表着識别出來一個人他就是人的準确度(不要指鹿為馬);召回率代表着算法不會把人當成其他物體而不判斷(不要指馬為鹿)。置信區間代表着置信度比較好的時候,能識别多少種物體(人行道紅綠燈、卡車、廣告牌裡的人涵蓋不涵蓋,置信度是多少)。
現在自動駕駛這麼難,就是因為對于現在的算法來說,這幾個指标很難同時都達到最高。這時候,我們就要學會取舍。
如果你的精準度低了,代表着你遇到不是人的物體時,算法會把它判斷成人,然後刹車。這個系數太低,你開車就經常會出現莫名其妙的刹車的情況。如果我們召回率低了,代表着本來路上有一個人,我沒有把人識别出來,直接撞上去了,這個也不行。置信區間代表着能識别出多少物體,廣告牌上的人像要不要考慮?如果考慮了,會不會影響模型的召回率和精确率?
所以如果讓你隻能選擇一個參數作為最關鍵的核心調優指标,你會選擇哪一個參數呢?如果是我,我會優先選擇召回率,這樣算法如果不好,至多也就會和新手一樣,甯可多刹點車也不要撞到人。畢竟對于汽車駕駛來講,安全最重要。
所以在實際的場景當中,我們要結合當下的情況來設置這些參數,結合你自己的業務場景來選擇最合适的算法。如果有數據科學家對你說某個算法精确率特别高時,你可以追問兩句,召回率如何?置信區間如何?
當然在數據挖掘和人工智能領域還有很多複雜的方法去衡量一個算法的好壞,例如 AUC 曲線、F1 Score、PR 曲線、增益和提升圖等等。你要是感興趣,我們可以在留言區進一步交流。
小結
最後依舊是我們的小結時間。今天我們主要講了準确率、精确率、召回率和置信區間、置信度,這些是在衡量算法好壞時,使用頻率最高的指标:
其實在具體場景裡,沒有十全十美的算法,總是要做一些取舍。這個時候我們就更要去理解這些指标背後的含義,做到“斷舍離”,根據我們實際的業務場景去選擇最優的算法。
生活和工作做決策的時候也是如此,現實世界裡很少有“兩好選其優”的機會,大部分都是“兩害取其輕”。究竟哪個害處更大不可接受,我們要自己衡量好。這樣才可以在我們自己的生活和工作當中逐步的優化自己生活工作的算法,提高我們自己生活的最終的精确率,召回率和置信區間。
數據給你一雙看透本質的雙眼,做好斷舍離,選好自己生活的精确率和置信區間。
思考
你在你的工作當中遇到某些算法和一些業務場景需要做取舍的時候,對于精确率,召回率和置信區間你的選擇是什麼?同時,你覺得在你生活裡,什麼時候也是可以用到這些指标的?分享出來我們一起共同提高。
附錄:置信區間計算過程
現在我們要去調查某一地區男性的平均身高,通過抽樣得到 100 人的身高樣本,樣本平均值為 170cm,樣本标準差為 0.2cm。
如果我們現在要 95% 的置信度,我們就可以算出來置信區間在[169.9608,170.0392]之間,也就是說,我們用 100 個人去推測這個地區的男性平均身高,盡管我們隻調研了 100 個人,但是我們有 95% 的這些男性的平均身高是在[169.9608,170.0392]之間。
計算過程如下。
1. 樣本大小大于 30,符合正态分布,我們要通過樣本的平均值來估計總體的平均值。
2. 标準誤差:标準誤差為 se=0.2/√100=0.02。
3. 置信度 95%,左右标準誤差各 2.5%。查正态分布表,标準分 z=-1.96;
置信區間下限 =170-1.96*0.02=169.9608;
置信區間下限 =170 1.96*0.02=170.0392。
因此,此區域男性平均身高在置信度 95% 情況下,置信區間為[169.9608,170.0392]。
關注緻用教育,我們共同成長
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!