---
# System prepended metadata

title: Machine Learning

---

# Machine Learning

## 資料
資料的收集可以說是整個專案最重要的步驟之一。

ML模型學習的對象就是我們提供給模型訓練的資料，處理資料的工作包括：
(1)資料擷取：收集內外部的資料來源。外部來源像是向其他廠商購買資料、爬蟲。內部資料可能包含跨部門以及跨單位的資料授權。
(2)驗證：驗證資料收集的格式，是否符合需求。
(3)探索：透過視覺化或者統計指標，來看資料的各特徵是否與我們理解的相符。
(4)特徵工程：在驗證資料以及探索資料的過程，根據應用情境決定是否要將資料集去除某些資料，或是跟其他部門溝通，將資料整理過轉換成適合這個專案的資料集。
(5)標記：在監督式學習的情境下，需要標記哪些資料相對應於哪些標籤、類別。
(6)資料集拆分：訓練、驗證和測試資料集。
這些工作內容時常是Data engineer的工作範疇。當一個資料及被稱作是高品質的資料集，通常符合以下條件：

(1)內容格式一致：包含(a)檔案編碼(utf-8, 或其他)、(b)同一欄位使用語言統一(非中英夾雜)、(c)資料表裡面沒有空值，當沒有相對應的數值時，至少會有預設值。

(2)資料邏輯對應商業邏輯：(a)資料表裡面若有分類或是標籤，一率有相對應的號碼解釋對照文件可查閱、(b)若是不同地域性、不同國家，則須標示清楚時區、使用幣別、測量單位(例如公尺、英呎)。

(3)即時性：(a)資料表具有建立時間和更新時間、(b)資料的更新程度與公司提供的服務熱門程度、使用者使用網站所建立的資料量是相對應的、(c)收集資料的過程當中如果有偶發性事件，或是特殊事件，同時也必須反映在資料及的處理上。

當資料的品質越好，模型就越能反映出在這個資料相對的業務問題。在未來市場擴展的時候，也需要時常回頭看，資料是否因為數據局部性，而不足以反映整個市場的樣貌。開資料取樣則應該調整，針對不同用戶的人口資料收集與訓練。

## 模型
(1)演算法選擇：
這個問題屬於ML問題的哪一類，根據資料集的特徵，例如資料偏移(data skew)、或是空資料很多的狀況下，有哪些演算法可以克服這些狀況？提供相對好的預測？

(2)超參數(hyper-parameter)訓練：
在設計演算法實驗的時候，有許多參數是可以影響實驗結果的，這些參數少則3-5種，多則20種也是可能的。在這些參數的組合當中，要如何找到最好的組合，常常也是資料科學家在跑實驗的必要過程。關於演算法的選擇跟超參數的選擇，現在都已經有一些工具可以協助完成，資料科學家可以不必再用手動一次次紀錄實驗結果，而是透過自動化的實驗去完成這些選擇。

(3)模型測試：
完成模型與超參數訓練之後，接下來則是要測試模型的訓練結果。由於資料量的大小不同，以及各種演算法的複雜程度不同，有些模型訓練的時間特別長，因此也會花更久的時間才能夠對模型測試，決定要不要修正模型，還是準備要送出模型到下一個階段。在模型訓練期間，資料科學家們也會運用Tensorboard、SageMaker Debugger等工具在訓練進行的過程中，就可以看到模型的訓練以及測試狀況，讓時間的成功與失敗可以被及早觀察，及早修正。

(4)模型評估：
模型測試與評估的不同點在於：模型測試完全注重於演算法的metrics，像是precision、accuracy、F1-score等等。模型評估則必須與商業期待相互對齊，舉例來說，符合公司重要VIP的輪廓的使用者都能夠準確地被預測，因此公司可以帶給重要的客戶更好的品質。或是說公司希望給客戶一個慷慨大方的形象，即便不符合VIP的條件還是有可能會收到獎勵等等。在這個階段確保模型的表現比過去更加優秀、或者更有效地提供使用者好的服務。

(5)模型註冊：
在評估過後，發現新的模型相對過去的版本表現較優良，這時候就可以將模型註冊，將模型的參數檔案送往儲存的地方。以便系統可以使用該檔案發布或者回溯到某一版本。

(6)模型發佈：
模型的發佈與服務使用者的產品息息相關，我們曾經談過，ML產品本身是依附在某一產品之下，也就是說使用者大多會先接觸到使用者面向的產品，該產品的服務後端再去呼叫ML產品。因此模型發布包含的細節像是
(a)開發環境：模型上線時所對接的服務，同樣也有開發、測試、產品等開發環境，如何讓產品在不同環境，都能使用到預設的模型版本，並確保在各環境的行為都相同。
(b)A/B test：另一個則是在發布的過程當中，是否會需要A/B test，將使用者導流到不同版本的模型，這些導流是要從ML產品這邊進行交通引流，抑或是在使用者產品的階段就有規劃引流了。
(c)可擴張性：ML產品本身是否支援高穩定度、安全以及可擴張性等等規格，讓使用者產品在呼叫ML產品的時候，可以享有同樣規格的體驗。

(7)模型監測：
模型監測的同時，也須觀察使用者呼叫模型時候的資料，也可能會與過去收集的資料分布不大相同，我們稱這個狀況叫做模型衰減、資料偏移。

https://ithelp.ithome.com.tw/articles/10260274