# 機器學習解決問題五步驟之二：建立資料集為何最花時間？


<!--more-->

## 前言

這篇是「機器學習入門觀念」系列的第四篇。上一篇「[使用機器學習解決問題的五步驟：定義問題](../define-problem/)」講完了五個步驟的全貌，也把第一步「定義問題」拆開來看過一遍：先想清楚要解的到底是什麼任務，後面的每一步才有方向。

這篇要接著看第二步「建立資料集」。內容包含兩件事：為什麼這一步的份量遠比想像中重，以及實際動手時會經過哪四個階段。

## 建立資料集的意義

{{< image src="machine-learning-five-steps.jpg" alt="機器學習五步驟流程圖，第二階段「建立資料集」被標示出來。" caption="用機器學習解決問題的第二步驟：建立資料集" >}}

「建立資料集」大概是五個步驟裡最重要的一步。要用機器學習的技術解決問題，「資料」是一定得準備的，而且資料品質的好壞會直接反映在最後訓練出來的模型上。

這件事的邏輯其實很直觀：模型的規律是從資料裡學來的，資料本身如果有問題，模型就會把問題一起學走。同一套演算法、同一組超參數，換一份乾淨的資料，結果可能天差地遠。

{{< image src="data-preprocessing-in-ml.jpg" alt="機器學習專案中各階段時間佔比示意圖，資料準備佔了絕大部分。" caption="資料集準備與前處理佔據機器學習專案的大量時間" >}}

根據統計，利用機器學習解決任務時，「資料準備」花了將近 80% 的時間，「其他步驟」則總共使用 20% 的時間。可見資料準備的過程其實相當的重要也不簡單！

換個角度看這個數字：真正在調模型的時間，只佔整個專案的一小部分。剛入門的時候很容易以為機器學習的重頭戲在演算法，實際做過一輪就會發現，大部分的力氣都花在把資料弄到堪用的狀態。

## 建立資料集的步驟

{{< image src="prepare-dataset-in-ml.jpg" alt="建立資料集的四個步驟流程示意圖。" caption="機器學習中資料集的準備包含四個步驟" >}}

建立資料集的過程又可以拆分成以下 4 個步驟：

- Data Collection
- Data Inspection
- Summary Statistics
- Data Visualization

想要訓練出一個高品質的機器學習模型，資料數據的好壞相當重要。以下依序說明每一個步驟的意義。

## Data Collection

Data Collection 顧名思義就是「收集資料」。這一步可能很容易，也可能很困難，落差非常大。

比較幸運的情況是，網路上已經有人針對你的任務整理好現成的資料集，下載下來就能用。但如果找不到現成的，可能就得自己寫一支「爬蟲程式」到網路上爬取大量資料，甚至得自己標註。

這個步驟的關鍵在於：**收集到的資料，是否符合上一步驟中定義的機器學習任務？** 資料量再大，只要跟任務對不上，對訓練就沒有幫助。

## Data Inspection

Data Inspection 就是「檢查資料」。前面提過資料品質會直接影響模型，而網路上開源的資料集品質參差不齊，因此必須先經過檢查，再拿來訓練模型。

資料檢查可以朝以下三個方向前進：

- 資料集中的離群值 (Outlier)
- 資料集中的缺失數據 (Missing Value)
- 資料是否需進行預處理 (Preprocessed) 才能輸入模型

舉個具體一點的例子：一份使用者資料裡出現年齡欄位是 999 的紀錄，那多半是離群值；某些紀錄的欄位根本是空的，那就是缺失數據。這兩種狀況如果不處理就直接丟進模型，學出來的規律自然會被帶偏。

在不同的任務中，對於上述三種問題也有相對應的解決方法，將會在未來的文章中介紹。

## Summary Statistics

Summary Statistics 的概念是：對手上已經處理過的資料做統計分析。透過一些統計指標，我們可以對資料集有初步的認知。

例如平均值 (Mean)、中位數 (Median)、最大與最小值 (Max & Min) 與標準差 (Standard Deviation)。這些都只是統計中的基本指標，作用是讓我們對資料集數值的分佈有初步理解。

即使只是這幾個數字，也常常能看出端倪。像是平均值跟中位數差很多，通常代表分佈被少數極端值拉歪了；標準差大得不合理，也是值得回頭確認資料的訊號。

## Data Visualization

{{< image src="data-visualization.jpg" alt="多種資料視覺化圖表的組合示意圖，包含長條圖、折線圖與圓餅圖等。" caption="透過多種圖表進行資料視覺化 [source: FineReport]" >}}

Data Visualization 也就是「資料視覺化」。透過各種類型的圖表把資料「視覺化」，資料就不再是生硬的數字，而是一張張有意義的圖表。

視覺化之後，我們可以更容易找到離群值 (Outlier) 或是趨勢 (Trend)。這也是它跟前一步 Summary Statistics 互補的地方：統計指標把整份資料壓縮成幾個數字，圖表則把分佈的形狀攤開來，有些問題用看的比用算的還快。

## 結論

這篇文章介紹了「機器學習解決問題五步驟」中的第二步「建立資料集」，也拆解了它底下的四個階段：Data Collection、Data Inspection、Summary Statistics 與 Data Visualization。

要記住的重點只有一個：資料集的準備是整個流程中最重要、也最花時間的一步，資料品質的好壞將大大影響訓練出來的模型。下一篇文章會接著介紹第三步「[模型訓練](../model-training/)」。

