iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 5
0
自我挑戰組

類神經網路搭配啟發式演算法於時間序列之應用系列 第 5

DAY04 - 模型質量指標:準確度、精確度與查全率

  • 分享至 

  • xImage
  •  

累了圖就亂畫了,請見諒啦。

今天我們會離開前三天的內容,單獨來討論類神經網路模型的質量衡量指標,這邊我們會提到三個關鍵指標,一個是準確度,一個是精確度,另一個是查全率。這些指標你在網路上查絕對查的到對應的數學計算方法,今天在這邊我是要討論更多的觀念問題,也就是說我們為什麼要衡量類神經網路模型的好壞?到底衡量的意義是什麼。

今天廢話會比較多,講比較多觀念,可能要重複幾遍才會明白。

此外,如果你今天是一個類神經網路技術的應用產品的產品經理,這個你一定要了解。

模型追蹤:和 one-off 說掰掰

One-Off Model (一次性學習、一次性模型)就像是類神經網路世界中的 Ctrl-C Ctrl-V ,是所有在做類神經網路開發的人要避免的,什麼意思呢?一次性模型指的就有點類似統計出報告的感覺,今天資料來我就是算出某些東西,資料再來我再依照同樣的步驟算出一些統計分析,就是一個固定很死的流程再重複走,這樣很不好。

很多人在工作上使用類神經網路技術,最後都會變成兩種狀況:一種就是,不管三七二十一我就是固定每天、每周、每月我重新訓練就對了,我也不管我原本訓練出來的模型到底是還能不能用呢,還是模型其實很早就失效,反正我就是有一個和團隊或產品經理約定俗成的一個原則,當然如果沒出事是做好,如果出事那問題你也很難察覺,你就會很挫折一直沒辦法訓練出好的模型,因為你平常就沒有習慣應對各種複雜的挑戰。

one-off

另一個狀況是在資源比較緊迫的團隊比較常會看到的,就是老闆或是產品經理敦促說模型不太堪用了,開發人員才去重新訓練一組模型,然後拿著堆積已久新的資料和舊的資料大鍋炒,一起用。一樣老話一句,如果沒出問題那就沒事,如果出問題那這問題你大概也很難解決。

要避免以上兩種情況,一個最基本的原則就是你要持續的追蹤你的模型!

什麼意思呢?你每次訓練出來的類神經網路模型,你都要持續去追蹤他,看他到底還堪不堪用呢?是感覺可以用個一年半載呢?還是兩三周就要重新訓練呢?還是會依據資料的季節性變化需要有不同的訓練期間呢?這些都是你要去思考和測試的,你得親自對你的模型輸出值訂出質量驗證條件。

質量指標同心圓

因此除了你的模型是否能成功輸出一個值,和標籤值去做匹配之外,你在應用場景還要設定一個模型質量檢驗的標準。後面我會舉大賣場為例。

質量檢驗條件:大賣場預測存貨量

現在有一個大賣場,你擔任大賣場的銷售顧問,並利用類神經網路技術幫助大賣場做銷售,你有一批工程師會幫你建立類神經網路模型來預測銷量,藉銷量預測來提供大賣場一個建議,讓他們準備對應的存貨。

現在我們假設在這個應用場景中有一些現實限制,這家大賣場進貨量只能達 500 單位,一次進貨量最少 200 單位,因此你提供的建議進貨數字必須介在 200 - 500 之間。仔細注意,產品經理應該仔細搞清楚實際的應用場景中有什麼限制,並和開發人員討論到底這些限制要不要考量到模型之中(例如我們就專門訓練一組只能預測 200 到 500 進貨量的模型?這聽起來有點荒謬,但搞不好訓練得起來,天知道呢)還是把這些現實限制作為模型追蹤的質量檢驗標準。

200-500case

因此現在開發人員去開發一個類神經網路模型,他藉由大賣場各種大數據資料算出各種銷量並預測對應的進貨量,但是!只要預測值低於 200 或是高於 500 的時候,這個模型預測值就直接宣告無效,這個無效可能還是可以做為一個參考,但是對於大賣場來說他們的最終決策我們無法給予全盤支持,例如我們可能預測大賣場沒人來,所以進貨量可能只要 100 就好,但是一次進貨就要 200 ,因此是否決定進貨 200 就交給大賣場老闆決定。

你預測 100 可能是對的,但是在現實條件下你的模型就是沒辦法解決問題,我覺得接納這一點是很重要的,很多人在最近很火紅的人工智慧新聞炒作中,就覺得這個技術是萬能的,但實際模型的應用還是有一些場景上的限制,認知到這個限制是很寶貴的,他能砥礪你去開發更複雜的模型,或是將模型搭配更多配套措施來解決你更專注想解決的問題,用前面的例子來說,那就是應該在資料訓練的過程中就要察覺到模型預測可能最大值,並以此建議大賣場老闆可能要再多租用一個倉庫,以備不時之需。

好,從這個例子我們就明白,時間序列資料在類神經網路模型中除了預測之外,也必須考慮清楚預測出來的結果可能會在實際應用場景受到什麼限制,然後這些限制要和產品經理討論是否要添加到模型中,還是在模型外做為一個質量檢驗標準,在訓練資料中模型質量檢驗通過率是否達標,例如模型無效次數占總樣本數比例是多少,老闆能不能接受。

質量檢驗四象限

再次強調,類神經網路模型除了輸出值要和標籤值匹配之外,更重要的是模型是否在應用場景中有質量檢驗條件,根據質量檢驗條件我們會宣告模型無效或是僅供參考,此時可能造成應用場景產生新的成本。

但是更悲劇的是,模型可能預測出來的數字在合理範圍內,但是實際情況卻遠遠超乎預期,造成應用場景產生一個意外事件,此時也可能造成應用場景產生額外的成本。

根據這兩個面向,我們可以得到一個四象限:

質量檢驗四象限

在理論上,我們對這四種情況也有分別的正式稱呼:

模型面來說,若模型能派上用場,符合質量檢驗標準,則稱為【正例】,反之模型無法派上用場,沒有達到質量檢驗標準,則稱為【負例】

而在實際情況發生之後,如果模型當初預期無效/正確,且實際情況的確超乎/符合合理情況,則稱為【真例】,反之如果模型宣告無效但實際卻在合理範圍內(模型無能)或是模型給予一個合理推算,但是實際情況超乎合理範圍(模型失準)則皆稱作【假例】。

因此正、負搭配真、假,就分別有四種情況:真正例、假正例、真負例與假負例。

真假正負例

準確度 Accuracy

準確度是一種衡量模型是否誠實說真話的質量指標,也就是說如果模型無能就老實承認,如果模型有信心就大聲講出來,用數學來說就是等於真例佔總例數比例

準確度

由於真例除了受到你訂下的質量檢驗條件之外,也牽涉到你的模型是否能在質量檢驗中對的時候說隊的話,因此一般來說準確度在模型訓練初期不會要求太高,因為初期可能還會調整模型的結構,訓練的資料或是參數優化的方法之類的,通常實務上是準確度可能會在一個區間變動,這也很考量到應用場景和你要解決的問題。

舉例來說一個每日都能檢查真例的類神經網路模型,一個月可能有二十天是真例,但是因為模型剛開始測試,因此多數時候會落出質量檢驗標準外頭,所以這二十天真例中可能只有五天是真正例,也就是只有五天的預測在合理範圍且實際情況也在合理範圍內,但是沒關係,剛開始求的是準確度,20/30也有個六七成,然後你可以思考你的問題這樣是否足夠,如果足夠就可以進一步來要求精確度。

精確度 Precision

精確度是一種在理論上最常見到的衡量機器學習模型的指標,簡單來說就是真正例佔總真例的比例是多少。因為多數理論探討不會考量太複雜的應用場景條件,所以質量檢驗標準比較還好,大家比較在乎的是當正確判斷的時候,模型預測對且實際情況也在合理範圍的比例有多少。

精確度

一般對於老手而言,精確度是他們追求的目標,因為原則上精確度可以不斷修到更高,和準確度比較不同,原因是質量檢驗標準可能隨著時間會做相對應實務上的調整,或是透過考量到模型裡面來直接避免假例發生的機會,但這都會大大提升模型訓練的難度,也就是玩遊戲的關卡難度啦。

舉例來說,前面大賣場的例子 200 - 500 是質量檢驗標準,一般模型要訓練可能預測的輸出就是一個正數 N ,但是高手們可能會嘗試去訓練出一組模型是輸出預測在 150 - 650 之間,這可能合理也可能不合理,舉例來說在過去的樣本資料裡面如果每日固定銷量都在 150 以上且 650 以下,那這樣的假設可能是 OK 的,在下一天我們會談到歸納偏置,就會再來探討這種假設問題。

查全率 Recall

查全率是另一個在機器學習中常見的指標,查全率計算的是實際情況再合理範圍內的時候,有多少情況是模型預測的出來的?也就是真正例,佔真正例與假負例之和的比例是多少。

查全率

相較於準確度與精確度,查全率是一個我自己認為告訴你模型該換的主要判斷基準,有些人會說精確度差的時候也要換,這就要看情況和你處理的問題了,我的認知中準確率是一個你模型剛上線做測試的時候,可以快速反覆調教你的模型判斷的標準,而精確度是模型的使用效率,因為是看真正例佔總真例的比例,實務上我處理的問題精確度只要能訓練得起來大概都會持續一個期間,都維持在一個比例以上,然而查全率可能會開始變差,這時候我就重新訓練模型。

如果精度和查全率同時變差,我不只會重新訓練模型,我可能還會換模型,或是甚至休息一段時間,不對該段資料進行訓練,而是累積到一定量再做。這通常是發生在什麼時候呢?就是當資料的值不斷超出你的樣本的時候,舉例來說,假設過往你的黃金價格是訓練樣本,大概都在 900 - 1500 美元每盎司,但是突然之間發生了一個不可預期事件,黃金價格不斷飆高到 3500 , 4500 , 15000, 25000, 300000 完全超乎原本過往所有樣本的情況,這時候你的模型精度和查全率會一起掉,就告訴你不只要重新訓練,也要換模型。(洗完衣服就丟到舊衣回收箱,不要再穿了)

資訊檢索:F度量 F Measure

前面你聽我這樣子講過一遍,你會發現我好像把準確度、精確度和查全度分開來模型上線做追蹤的不同階段在使用,的確我實際上是這樣子在使用,但問題是你的資料不一定需要像我這樣子,尤其你如果處理的不是時間序列,甚至說你不太需要重新訓練,例如水文時間序列就是一種,地理水文不太會急遽變化,就算會那也是很明顯,你就那時候再重新訓練就好了,那你可以偷吃步使用一個同時衡量精確度和查全率的指標,叫做 F 度量。

簡單F度量的公式為: 1 / 查全度 + 1 / 精確度 ,也就是查全度和精確度倒數相加。

使用 F 度量的主要考量,是一般模型在實際應用場景中的精確度和查全度會交互作用,這點就考驗你的功力了,當然剛入門的新手還不會適時調整自己的類神經網路架構,可能先鑽研某一個架構,那這樣子你的模型彈性就可能很死,你沒辦法換模型來改善精確度,而一直使用同一個模型往往就會造成查全度和精確度的相互作用。

也就是說你會發現你追蹤你的模型的時候,有時候查全度高、精確度就低了,精確度高、查全度就低了,我是認為這還好,只要兩者震盪在一個合理區間就行了。那就推薦使用簡單F度量,或是有人稱之為F1度量,實務上 F 度量有廣義的式子,這邊就暫且不提,有個概念就好。


上一篇
DAY03 - 輻狀基底函數類神經網路
下一篇
Day 05 - 歸納偏置
系列文
類神經網路搭配啟發式演算法於時間序列之應用27
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言