欢迎来到关系型数据库的世界!

在迈向精算师的道路上,你可能花了很多时间处理单一且整洁的电子表格。但在预测分析的真实世界中,数据可没那么井井有条!信息通常分散在不同的数据表中,这就是我们所谓的关系型数据库(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 会保留左侧数据表的所有纪录,并加上右侧数据表的相符数据。如果右侧没有对应纪录,你就会看到 NANull

使用场景: 如果你有一份所有保单持有人的清单,并且想查看哪些人申请了理赔,你就会使用 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 练习项目中不断操作,这些连接方式将变成你的本能。你正在为成为优秀的科学计算分析师打下坚实的基础!