淺談資料專案的測試

更新於 發佈於 閱讀時間約 5 分鐘

測試驅動開發(Test-Driven Development, TDD)或是行為驅動開發(Behavioral-Driven Developement)是當代軟體工程裡面常見的方法論,然而以資料科學或是數據分析的專案來說,通常主要的「測試」會以模型的準確性或是資料分布的模式為核心,較少處理軟體工程裡面常見的單元測試(Unit Test)或是整合測試(Integration Test / Behavior Test),我一般跟案主在初期討論案子的時候也會先溝通這一點,通常在一開始導入資料科學技術的時候先不要花太多時間在軟體工程的測試上面,而是先以最小可行的方式驗證資料科學技術在原有商業模式上是否可以發揮價值,其優點是可以在最小的時間成本下儘速確認是否可以在既有的商業模式上透過資料技術產生正向的投資效益,然而缺點是隨著資料的增長與程式碼的增加,技術債(Technical Debt)的風險也會持續上升,因此我目前認為比較好的作法是在進行專案上架一到三個月已經產生初始的可驗證效益資料之後,立刻開始著手進行重構(Refactoring),事實上應該要說是重寫(Rewrite),因為沒有單元測試的程式碼是無法重構的。

一般來說,軟體專案的測試根據其目的可以分為以下幾類:

  • 單元測試(Unit Test):著重於單一功能的測試,邏輯明確,是TDD的基礎。
  • 探索性測試(Exploratory Test):在開始寫測試程式碼以前針對規格與功能面進行的試驗型測試。
  • 整合測試(Intergration Test):著重於功能面,測試許多單元整合起來以後是否能符合預期運作。
  • 效能測試(Performance Test):通常包含CPU使用、記憶體使用與延遲的測試。
  • 使用者介面與使用者經驗測試(UI & UX Test):屬於前端的測試工作。
  • 壓力測試(Pressure Test):著重於大流量情況下的測試,了解程式運作的硬體界限,以利未來進行擴張(Scale)的計畫準備。
  • 滲透測試(Penetration Test):著重於資安防護的測試。

就機器學習的專案來說,通常會使用以下幾種測試:

  • 交互驗證(Cross Validation):避免模型在訓練之後沒有產生過度適應(Overfitting)於訓練資料集的情況,通常使用RMSE(Root Mean Square Error)作為衡量的方式。
  • 混淆矩陣(Confusion Matrix)與ROC Curve:比較常聽見的用法是偽陰性(False Negative)與偽陽性(False Positive)這種說法,詳細探討可自成一章,可參考其他人的文章
  • AB testing:確認模型在實際的應用場景當中能夠優於對照組,或是進行參數調整。
  • 曲面圖(Surface Plot):通常透過擴大輸入輸出的範圍或是粒度,檢視模型是否有過度適應或是錯失全域最佳解的情況。
raw-image

通常我在進行專案的時候會先以交互驗證為主,然後透過曲面圖去了解輸入輸出的侷限以及有沒有跟預期不符的情況,然後才會開始進行AB testing與confusion matrix,因為這兩個測試都要等到模型真正上線之後去擷取使用者的回應才能夠有效的判斷,以訓練資料集與交互驗證資料集做出來的數據意義比較有限。

之前因為在模型佈署的時候直接包成API給案主使用,因此效能測試也成為其中一個項目,我所使用的flask原始設定並不適合production環境使用,因此會需要做一定的調整才能符合一般線上服務在concurrency的要求,不像nodejs原生就有很好的非同步能力,這部份就有像是locust這種開源的工具可以導入,未來有機會可能可以多探討一些以flask架構的服務應該如何調整以及如何作這方面的測試。

簡單的小結一下,以Google對員工撰寫python程式碼的code review標準而言,好的文件化跟好的測試都是相當重要的環節,然而在資料專案的部分測試與傳統的CI/CD流程相比,更多了一些偏向數據分布方面的需求,而非單純資料I/O的測試,如何妥善的將數據的測試流程整合到程式的工程測試流程與妥善的自動化測試與監控,也算是近年相當重要的題目之一,如果有興趣的話可以看看這篇關於據說是取代了資料科學家成為最性感職業的「DataOps工程師

留言
avatar-img
留言分享你的想法!
avatar-img
Ofa Hsueh的沙龍
263會員
38內容數
本專題著重於探討資料分析實務,從實務經驗出發,探索學校所教導的建模以外的各項技術,包含資料前處理、營運整合與成效評估、團隊文化建構等等內容。
你可能也想看
Thumbnail
孩子寫功課時瞇眼?小心近視!這款喜光全光譜TIONE⁺光健康智慧檯燈,獲眼科院長推薦,網路好評不斷!全光譜LED、180cm大照明範圍、5段亮度及色溫調整、350度萬向旋轉,讓孩子學習更舒適、保護眼睛!
Thumbnail
孩子寫功課時瞇眼?小心近視!這款喜光全光譜TIONE⁺光健康智慧檯燈,獲眼科院長推薦,網路好評不斷!全光譜LED、180cm大照明範圍、5段亮度及色溫調整、350度萬向旋轉,讓孩子學習更舒適、保護眼睛!
Thumbnail
創作者營運專員/經理(Operations Specialist/Manager)將負責對平台成長及收入至關重要的 Partnership 夥伴創作者開發及營運。你將發揮對知識與內容變現、影響力變現的精準判斷力,找到你心中的潛力新星或有聲量的中大型創作者加入 vocus。
Thumbnail
創作者營運專員/經理(Operations Specialist/Manager)將負責對平台成長及收入至關重要的 Partnership 夥伴創作者開發及營運。你將發揮對知識與內容變現、影響力變現的精準判斷力,找到你心中的潛力新星或有聲量的中大型創作者加入 vocus。
Thumbnail
模型上線前的評估的嚴謹與否,攸關上線後模型的表現。你知道模型評估需要注意哪些細節?在評估過程的嚴謹性又可以如何分級呢?一起來看看吧!
Thumbnail
模型上線前的評估的嚴謹與否,攸關上線後模型的表現。你知道模型評估需要注意哪些細節?在評估過程的嚴謹性又可以如何分級呢?一起來看看吧!
Thumbnail
過去在程式導師實驗課程中,整理過這兩篇筆記探討「測試」是怎麼回事: [week 3] 初探 Jest:如何測試程式? [week 22] React:用 SPA 架構實作一個部落格(三)- 淺談測試 在轉職後的第一家公司,組內曾嘗試在既有專案中撰寫測試,卻因時程緊湊而不了了之。
Thumbnail
過去在程式導師實驗課程中,整理過這兩篇筆記探討「測試」是怎麼回事: [week 3] 初探 Jest:如何測試程式? [week 22] React:用 SPA 架構實作一個部落格(三)- 淺談測試 在轉職後的第一家公司,組內曾嘗試在既有專案中撰寫測試,卻因時程緊湊而不了了之。
Thumbnail
介紹 通常我們程式寫完之後,要確保程式沒問題我們就會進行測試 在這裡我們將測試分兩大類: 單元測試(Unit Test,UT):對程式碼的最小單位所進行的測試 整合測試(Integration Test):系統/模組之間的測試,通常會接觸到真實系統 在這裡只會簡單介紹一下單元測試的概念 這裡在將單元
Thumbnail
介紹 通常我們程式寫完之後,要確保程式沒問題我們就會進行測試 在這裡我們將測試分兩大類: 單元測試(Unit Test,UT):對程式碼的最小單位所進行的測試 整合測試(Integration Test):系統/模組之間的測試,通常會接觸到真實系統 在這裡只會簡單介紹一下單元測試的概念 這裡在將單元
Thumbnail
最近負責的專案還在發散摸索期,有很多待確認待驗證的題目,討論過程中不停來回。在跟其他 UX 設計師討論過後,推薦閱讀《商業思維構想》這本書,思考新創公司或 MVP 推出時的商業模式思考。 以下紀錄我在書中獲得的啟發。 跨職能的驗證團隊,讓實驗不只發生在某個部門 實驗與驗證,不只有在 UX 可以做
Thumbnail
最近負責的專案還在發散摸索期,有很多待確認待驗證的題目,討論過程中不停來回。在跟其他 UX 設計師討論過後,推薦閱讀《商業思維構想》這本書,思考新創公司或 MVP 推出時的商業模式思考。 以下紀錄我在書中獲得的啟發。 跨職能的驗證團隊,讓實驗不只發生在某個部門 實驗與驗證,不只有在 UX 可以做
Thumbnail
完成對功能的了解之後,我們就要開始進入實現功能的開發階段。跟以往的開發流程不同的是,我們在敏捷開發中注重的是製作有價值的東西。也就是在計畫中,我們獲取的資訊都是對使用者有用、可以被看見以及操作和跨團隊協作的性質。
Thumbnail
完成對功能的了解之後,我們就要開始進入實現功能的開發階段。跟以往的開發流程不同的是,我們在敏捷開發中注重的是製作有價值的東西。也就是在計畫中,我們獲取的資訊都是對使用者有用、可以被看見以及操作和跨團隊協作的性質。
Thumbnail
這份難以言喻的成就感是催生這篇文章的主要原因,我想分享在專案規劃與數據分析技術上的經驗,並拆成為三個階段,分別為專案規劃、專案執行與成效評估,執行階段會著墨於程式設計面的分享。 專案規劃階段 定義問題 擬定行動方案
Thumbnail
這份難以言喻的成就感是催生這篇文章的主要原因,我想分享在專案規劃與數據分析技術上的經驗,並拆成為三個階段,分別為專案規劃、專案執行與成效評估,執行階段會著墨於程式設計面的分享。 專案規劃階段 定義問題 擬定行動方案
Thumbnail
從測試方法的名字中可以很輕鬆的了解到,TDD(測試驅動開發)的前提就是先寫測試,然後再去開發我們的系統。要達成這樣的條件,就會需要有明確的規格才能夠實行。
Thumbnail
從測試方法的名字中可以很輕鬆的了解到,TDD(測試驅動開發)的前提就是先寫測試,然後再去開發我們的系統。要達成這樣的條件,就會需要有明確的規格才能夠實行。
Thumbnail
大多數的工程師常常會有一個疑問,就是「測試」應該要怎麼測試才是正確的?在過去,軟體測試大多還是以人工為主,在這幾年逐漸的出現自動化測試之後,實際上我們是不清楚應該要怎麼寫測試。
Thumbnail
大多數的工程師常常會有一個疑問,就是「測試」應該要怎麼測試才是正確的?在過去,軟體測試大多還是以人工為主,在這幾年逐漸的出現自動化測試之後,實際上我們是不清楚應該要怎麼寫測試。
Thumbnail
tl;dr, 沒有測試談不上好軟件! 軟件編碼的質素和一間公司發展的關係,在之前的文章《Code 寫得好對公司有用嗎?》已有討論,那麼有什麼因素會左右編碼的質素?其中一樣就是軟件測試。
Thumbnail
tl;dr, 沒有測試談不上好軟件! 軟件編碼的質素和一間公司發展的關係,在之前的文章《Code 寫得好對公司有用嗎?》已有討論,那麼有什麼因素會左右編碼的質素?其中一樣就是軟件測試。
Thumbnail
測試驅動開發(Test-Driven Development, TDD)或是行為驅動開發(Behavioral-Driven Developement)是當代軟體工程裡面常見的方法論,然而以資料科學或是數據分析的專案來說,通常主要的「測試」會以模型的準確性或是資料分布的模式為核心
Thumbnail
測試驅動開發(Test-Driven Development, TDD)或是行為驅動開發(Behavioral-Driven Developement)是當代軟體工程裡面常見的方法論,然而以資料科學或是數據分析的專案來說,通常主要的「測試」會以模型的準確性或是資料分布的模式為核心
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News