歡迎來到關聯式資料庫的世界!
在邁向精算師的道路上,你可能花了很多時間處理單一且整潔的試算表。但在預測分析的真實世界中,數據可沒那麼井井有條!資訊通常分散在不同的資料表中,這就是我們所謂的關聯式資料庫(Relational Databases)。你可以把這章當作是在學如何解拼圖:你手頭上有許多碎片(資料表),而你的工作就是將它們正確地連接起來,以拼湊出全貌。
讀完這份筆記後,你將會理解資料庫是如何架構的,更重要的是,你將學會如何將來自不同來源的數據整合在一起,同時避免犯下常見錯誤。如果起初覺得這聽起來有點「科技感」也不用擔心,我們會用簡單的類比把它拆解開來!
1. 什麼是關聯式資料庫?
關聯式資料庫是一組具有預定義關係的數據項目集合。這些項目被組織成一系列包含欄(Column)與列(Row)的資料表。
試算表類比: 想像一個 Excel 工作簿。工作簿中的每個「分頁」就像資料庫中的一張資料表。一個分頁可能列出了客戶姓名,而另一個分頁則列出了他們的保險理賠紀錄。它們雖然是獨立的,但因為兩者都與同一批客戶有關,所以它們之間存在著「關聯」。
資料表的關鍵組成
1. 列 (Rows / Records): 每一列代表一個單一且獨特的實例(例如某位特定的保單持有人)。
2. 欄 (Columns / Fields / Attributes): 每一欄代表一項具體的資訊(例如出生日期或保費金額)。
小複習: 在資料庫中,我們稱這些資料表的結構為綱要 (Schema)。它是告訴我們數據如何組織的藍圖。
2. 維繫資料表的「黏著劑」:鍵值 (Keys)
我們如何知道哪筆理賠紀錄屬於哪位客戶呢?我們使用鍵值 (Keys)。這是合併數據時最重要的一個概念,務必熟練掌握。
主鍵 (Primary Keys)
主鍵是資料表中每筆紀錄的唯一識別碼。它不能為空(null),且表中不會有兩列擁有相同的主鍵。
例子: 你的身分證字號或唯一的保單編號。
外鍵 (Foreign Keys)
外鍵是資料表中的一個欄位,它指向另一個資料表中的主鍵。這就是建立兩表之間連結的方式。
現實生活中的例子:
- 資料表 A(客戶表)擁有 客戶ID (CustomerID) 作為其 主鍵。
- 資料表 B(保單表)也有一個 客戶ID 欄位。在資料表 B 中,這就是一個 外鍵,因為它參考回了資料表 A。
你知道嗎? 使用鍵值有助於維持參照完整性 (Referential Integrity)。這是一個比較高級的說法,意思是「確保資料表之間的連結始終有效」。
3. 合併數據:Join 的藝術
當我們想要合併兩個資料表來進行預測模型分析時,我們需要執行 Join(連接)。對於 ATPA 考試,你需要掌握以下四種主要的連接方式:
Inner Join(內連接)
Inner Join 只會保留在兩個資料表中都有相符紀錄的列。如果某位客戶沒有保單,或者某張保單沒有對應的客戶列表,這些紀錄都會被刪除。
Left Join(左連接,精算師的最佳拍檔)
Left Join 會保留左側資料表的所有紀錄,並加上右側資料表的相符數據。如果右側沒有對應紀錄,你就會看到 NA 或 Null。
使用場景: 如果你有一份所有保單持有人的清單,並且想查看哪些人申請了理賠,你就會使用 Left Join。因為你希望在研究中保留每一位保單持有人,即使他們並沒有申請理賠!
Right Join(右連接)
這與 Left Join 正好相反。它會保留右側資料表的所有紀錄並與左側比對。(注意:大多數從業人員通常會直接調整資料表順序,改用 Left Join 來處理)。
Full Outer Join(全外部連接)
Full Outer Join 會保留兩個資料表的所有內容。如果沒有相符紀錄,它會將對應位置留空。這是一種「安全至上」的方法,能確保不會遺失任何數據,但可能會產生非常雜亂的資料集。
記憶小撇步:「Left is for List」 (左連接是為了清單)
當你手邊有一份主清單 (List)(例如保單列表),即便另一份資料表缺少了其中一些資訊,你也不希望失去這些紀錄時,就使用 Left Join。
4. 避免常見的合併陷阱
數據合併往往是許多預測模型出錯的源頭。要小心這些「地雷」:
1. 重複值與「一對多」的膨脹
如果你將一張「客戶表」與一張「每月付款表」進行 Join,一位客戶會對應到多筆付款紀錄。你的資料集會因此「爆炸式」增長,為同一位客戶創建多個列。如果你沒有預期到這種情況,這可能會導致模型產生偏差!
2. 顆粒度 (Grain) 不匹配
顆粒度是指每一列代表什麼含義。如果資料表 A 是「保單層級」(一列代表一張保單),而資料表 B 是「地區層級」(一列代表一個州),你就必須非常小心。你現在是在將個人層面的數據與彙總層面的數據進行合併。
3. 笛卡兒積 (Cartesian Products)(恐怖的 Join)
如果你嘗試合併兩個資料表卻忘了指定使用哪個鍵值 (Keys),電腦會嘗試將資料表 A 中的每一列與資料表 B 中的每一列進行匹配。如果兩張表各有一千列,你最終會得到一百萬列毫無用處的數據!
重點總結: 在合併前後務必檢查你的列數。如果列數大幅激增,你很可能遇到了「一對多」的關係或鍵值重複的問題。
5. 合併過程中的數據清理
數據很少在合併後就能直接使用。你通常需要執行以下步驟:
1. 處理缺失值: 使用 Left Join 後,通常會出現缺失值(NAs)。你必須決定:要用 0 填補、用平均值填補,還是直接刪除它們?
2. 重新命名欄位: 如果兩張表都有一個名為「Date」的欄位,軟體可能會將它們重命名為「Date.x」和「Date.y」。請務必立即重命名它們,以免之後混淆!
3. 資料型別匹配: 你無法將儲存為文字 (String) 的「保單 ID」與儲存為數字 (Integer) 的「保單 ID」進行連接。請先確保它們的型別一致。
考試檢查清單
在繼續之前,請確保你能回答以下問題:
- 主鍵 (Primary Key) 和外鍵 (Foreign Key) 有什麼區別?
- 我該何時使用 Inner Join 或 Left Join?
- 如果合併過程中出現重複的鍵值,我的數據會發生什麼變化?
- 「顆粒度」如何影響我合併不同來源數據的方式?
如果覺得這些資訊量很大,請不要擔心。隨著你在 ATPA 練習專案中不斷操作,這些連接方式將會變成你的本能。你正在為成為優秀的數據科學家打下堅實的基礎!