什麼是資料科學? [BLOCK_TYPE SECTION/STEP]
資料科學不只是機器學習。它不只是統計學。它不只是程式設計。 [BLOCK_TYPE SECTION/STEP]
資料科學是從資料中提取有用知識的學科。這項工作的大部分並不光鮮亮麗:它包括清理混亂的試算表、提出正確的問題,以及向不在乎你程式碼的人傳達結果。 [BLOCK_TYPE SECTION/STEP]
[BLOCK_TYPE SECTION/STEP]
典型的資料科學流程如下:
1. Collect: 從資料庫、API、CSV 或網頁爬蟲收集原始資料
2. Clean: 處理缺失值、修正資料型態、移除重複值
3. Explore: 視覺化分佈、發現模式、提出問題
4. Engineer: 建立有助於模型學習的新特徵
5. Model: 訓練演算法、評估效能、迭代改進
6. Communicate: 向做出決策的利益相關者呈現研究結果
如果你曾經使用過 Excel 樞紐分析表、條件格式或 VLOOKUP,你已經完成過第 1-3 步驟。這堂課將把這些經驗連結到業界使用的 Python 工作流程。
暖身
你的資料經驗
每個人都在某種形式上使用過資料:預算試算表、成績追蹤器、健身應用程式,甚至是帶有播放次數的播放清單。
垃圾進,垃圾出
為什麼資料清理很重要
資料科學家會花費 60-80% 的時間在清理資料上。這不是誇張的說法:這是產業調查中一致的發現。
原因很簡單:garbage in, garbage out。如果你的資料有錯誤、遺漏值,或是不一致的格式,那麼建立在它之上的任何分析都會出錯。一個在「垃圾」資料上訓練出來的完美模型,只會產生自信卻錯誤的答案。
常見的資料問題
- 遺漏值:儲存格是空白的。資料是沒有被收集到,還是數值本身就是零?這兩種情況不同,需要不同的處理方式。
- 錯誤的資料型態:一欄數字被儲存為文字,日期格式不一致(01/02/2024:這是指 1 月 2 日還是 2 月 1 日?)
- 異常值:薪資欄位中有一筆 $1,000,000,000。這是真實的資料還是打字錯誤?無論如何,它都會扭曲你的平均值。
- 重複資料:同一筆記錄出現兩次,因為兩個系統合併時出現不完美的情況
- 類別編碼:某欄位包含 'Yes'、'yes'、'Y'、'TRUE' 和 '1'。這些都代表相同的意思,但電腦無法辨識
在 pandas(標準的 Python 資料庫)中,你可以使用 dropna()、fillna()、astype() 和 drop_duplicates() 等方法來處理這些問題。但困難之處不在於程式碼,而是要決定如何處理每個問題。
Cleaning Decisions
Deciding What To Do
這裡是一個真實的場景。你有一個包含 10,000 筆客戶記錄的資料集。「age」欄位有 500 個缺失值。
您的選項:
- 刪除列:移除全部 500 筆記錄。做法簡單,但會失去 5% 的資料。如果這 500 位顧客有共同特徵(例如因為注重隱私而跳過年齡欄位),刪除這些記錄可能會引入偏差。
- 以平均值填補:用平均年齡取代空白值。做法快速,但會人為降低年齡欄位的變異數。
- 以中位數填補:如果年齡分布呈現偏態(少數非常年長或非常年輕的顧客拉高平均值),中位數比平均值更好。
- 使用標記:建立一個新欄位「age_missing」(值為 1 或 0),並將原始欄位填入中位數。此時模型可以學習「資料缺失本身」是否具有資訊性。
沒有絕對正確的答案。選擇取決於資料缺失的原因,以及您打算如何使用這些資料。
提出正確的問題
探索性資料分析 (EDA)
在建立任何模型之前,你需要先了解你的資料。EDA 是對資料集進行摘要、視覺化與提問的過程,以找出模式、異常值與關係。
關鍵工具
- 直方圖:顯示單一變數的分布。它是鐘形曲線嗎?偏斜?雙峰(兩個高峰)?收入的直方圖通常是右偏的,因為少數人賺得遠多於多數人。
- 散點圖:顯示兩個變數之間的關係。高的人是否會更重?學習時間較長是否與較高的成績相關?圖形(或無圖形)可以告訴你是否存在關係。
- 相關係數:介於 -1 到 +1 之間的數字,用於測量線性關聯。+1 表示完美正相關,-1 表示完美負相關,0 表示無線性關係。但相關不等於因果:冰淇淋銷售與溺水死亡人數相關,因為這兩者都會在夏季增加。
- 摘要統計:均值、中位數、標準差、最小值、最大值。在 pandas 中:df.describe() 可以在一行程式碼中顯示所有這些值。
真正的技能
工具很容易學習。困難的部分在於提出正確的問題。壞問題:「資料告訴我們什麼?」好問題:「在第一週內聯絡客服的客戶,是否擁有較高的留存率?」
相關性陷阱
相關性 vs. 因果關係
這是資料素養中最重要的一個概念。兩個變數可能高度相關,但其中一個並不一定導致另一個。
經典範例:
- 消防員較多的城市,火災也較多。(較大的城市兩者皆多。)
- 吃早餐的學生成績較好。(可能較富裕的家庭更有可能提供早餐和學業支持。)
- 吃更多巧克力的國家獲得更多諾貝爾獎。(兩者都與國家財富相關。)
隱藏的因素稱為 混淆變數:一個同時驅動你所觀察的兩個變數的第三變數。
建立有用的變數
什麼是特徵工程?
特徵 是模型用來進行預測的輸入變數。特徵工程是從原始資料中建立新特徵的藝術,幫助模型學習原本無法發現的模式。
原始資料很少以模型所需的形式呈現。考慮一個包含「出生日期」欄位的資料集。模型無法對原始日期做太多處理。但如果你從中建立「年齡」特徵,模型就能突然學習到基於年齡的模式。
常見技術
- 正規化:將數值縮放到共同範圍(0 到 1,或平均值=0 且標準差=1)。若未進行正規化,以千為單位測量的特徵(如薪資)將主導以個位數測量的特徵(如工作年資)。
- 獨熱編碼:將類別變數轉換為二元欄位。例如「顏色」欄位包含 [red, blue, green],會變成三個欄位:「color_red」、「color_blue」、「color_green」,每個欄位值為 0 或 1。
- 分箱:將連續變數轉換為類別。年齡 0-17 變成「minor」,18-64 變成「adult」,65+ 變成「senior」。當關係非線性時,此方法有幫助。
- 交互特徵:將兩個特徵相乘。「坪數乘以浴室數量」可能比單獨使用任一特徵更能預測房價。
- 領域知識:最強大的技術。醫生為醫療模型建立特徵時,了解哪些檢驗數值重要;行銷人員知道「上次購買至今的天數」比「購買日期」更有用。沒有任何演算法能取代這一點。
特徵練習
應用特徵工程
想像你正在建立一個模型,用來預測哪些客戶下個月會取消他們的串流訂閱。你的原始資料包含:
- 帳戶建立日期
- 上次登入日期
- 上個月觀看的節目數量
- 每月支付金額
- 提交的客戶支援工單
- 國家
訓練/測試分割
為什麼要分割你的資料
建模最重要的規則:永遠不要在訓練模型的同一份資料上評估模型。
如果這麼做,模型可能只是記住答案。它在訓練資料上會得到完美分數,但在新的、未見過的資料上卻會失敗。這稱為過擬合:模型學到了特定資料集中的雜訊,而不是真正的模式。
標準做法是將資料分割:
- 訓練集(通常 70-80%):模型從這部分學習
- 測試集(通常 20-30%):保留下來,僅用於評估最終模型
在 scikit-learn 中:X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
常見演算法
- 線性迴歸:繪製穿過資料的最佳擬合直線。簡單且易於解釋,適用於關係大致呈線性的情況。可預測數值(價格、溫度、得分)。
- 決策樹:由是/否問題組成的流程圖。易於理解與解釋。若未進行剪枝或限制深度,容易過擬合。
- 隨機森林:由多棵決策樹投票決策。比單一樹更準確,且不易過擬合,但較難解釋。
過擬合與欠擬合
- 過擬合:模型過於複雜。它會記住訓練資料,包括雜訊。在訓練資料上有極高準確度,但在測試資料上卻有低準確度。
- 欠擬合:模型過於簡單。無法捕捉真正的模式。在訓練資料與測試資料上都有低準確度。
目標是找到兩者之間的甜蜜點。
評估指標
如何判斷模型是否良好?
單獨使用準確率可能會產生誤導。如果 95% 的電子郵件都不是垃圾郵件,那麼一個總是預測「非垃圾郵件」的模型準確率可達 95%,但實際上毫無用處。
關鍵指標:
- Accuracy:正確預測的百分比。適用於類別平衡的場景。
- Precision:在模型標記為正例的所有項目中,實際為正例的比例。高精確度代表誤報較少。
- Recall:在所有實際正例中,模型成功捕捉到的比例。高召回率代表遺漏案例較少。
- F1 score:精確率與召回率的調和平均數。當你需要同時平衡兩者時很有用。
- RMSE (Root Mean Squared Error):用於回歸(預測數值)。預測值平均偏離多少?
哪個指標最重要取決於問題本身。在癌症檢測中,召回率更重要:你不希望漏掉任何病例。在垃圾郵件過濾中,精確率更重要:你不希望刪除真正的郵件。
資料分析師 vs. 資料科學家 vs. 機器學習工程師
三種不同的角色
資料領域有三條主要的職業軌道,它們需要不同的技能。
資料分析師
- Focus: 使用現有資料回答商業問題
- Tools: SQL, Excel, Tableau, 基本 Python 或 R
- Day-to-day: 儀表板、報告、A/B 測試分析、與利益相關者報告
- Entry path: 通常是最容易入門的。許多分析師在沒有 CS 學位的情況下開始
資料科學家
- Focus: 建立預測模型並在複雜資料中尋找模式
- Tools: Python (pandas, scikit-learn, matplotlib), 統計學, SQL, Jupyter notebooks
- Day-to-day: EDA, feature engineering, model building, experimentation
- Entry path: typically requires statistics or quantitative background. Bootcamps & self-study are viable.
Machine Learning Engineer
- Focus: deploying & scaling models in production systems
- Tools: Python, TensorFlow/PyTorch, Docker, cloud platforms (AWS/GCP), APIs
- Day-to-day: model optimization, pipeline infrastructure, monitoring production models
- Entry path: usually requires strong software engineering skills plus ML knowledge.
<translated content> [BLOCK_TYPE careers/paths]
建立作品集
[BLOCK_TYPE careers/paths]招聘經理關心的是你能做什麼,而不僅僅是你學過什麼。在 GitHub 上有 3-5 個扎實的專案作品集,比證書更重要。好的專案應使用真實(而非玩具)資料集,包含清晰的文件,並展示完整流程:從混亂的資料到可行的洞察。 [BLOCK_TYPE careers/paths]
[BLOCK_TYPE careers/next_steps]
你的下一步 [BLOCK_TYPE careers/next_steps]
從這裡往哪走
[BLOCK_TYPE careers/next_steps]這些工具免費且容易取得: [BLOCK_TYPE careers/next_steps]
- pandas:Python 資料操作的標準函式庫
- matplotlib / seaborn: 視覺化函式庫
- scikit-learn: 傳統機器學習的主要工具
- Jupyter notebooks: 可互動的程式設計環境,能夠混合程式碼、輸出結果和筆記
- Kaggle: 提供免費資料集、競賽,以及實務工作者社群
從一個你感興趣的真實資料集開始。下載它、清理它、探索它,並嘗試回答一個問題。這個單一專案會比任何課程都讓你學到更多。