表格连接:发现多对多造成的行膨胀
表格连接可能不修改任何原始数值,却把研究结果放大几倍。当连接键在左右两表都重复出现时,每一组匹配组合都可能生成新行。先定义预期关系并核对汇总值,再让 AI 解释结果;程序成功返回数据,并不代表这些行能够相加。
先明确一行表示什么
观测单位比连接条件更早确定。一张表可能是一家公司一个季度的收入,另一张表是该公司当季的多条产品披露。按公司与季度连接,在技术上能够匹配,却可能让同一收入对每个产品重复出现。它没有披露多份收入,只是一个事实被放进了多行。
pandas 的连接指南解释了多对多连接与关系验证。文档能够说明行数膨胀的机制,但不会替研究者决定财务上合理的主键。连接成功只能证明键如何匹配,不能证明经济计算正确。
两张表的假设案例
假设一家虚构公司某季度有两条地区收入:北区 60、南区 40。另一表在相同公司与季度下有三条产品介绍。若只按主体和季度匹配,会产生六行:每个地区对应三个产品,汇总收入从原本 100 变成 300。
| 检查点 | 收入行数 | 产品行数 | 结果行数 | 收入汇总 |
|---|---|---|---|---|
| 连接之前 | 2 | 3 | 尚未连接 | 100 |
| 只按公司与季度匹配 | 2 | 3 | 6 | 300,不能使用 |
| 先汇总产品说明 | 2 | 1 | 2 | 100 |
最后一种做法把产品介绍列表作为属性附到地区记录上,保住了收入总量,但仍然不能回答每个产品的收入是多少。原始披露没有提供地区与产品交叉分配。假设每个产品分到三分之一,是新增模型假设,不是找回缺失披露。
写下允许的连接关系
每次连接应记录左表观测单位、右表观测单位、连接键、预期关系,以及允许哪些记录没有匹配。公司季度事实表连接同一粒度的唯一分类表,通常应为多对一。主体标识映射还要满足相关日期只有一个有效匹配。缺失匹配与多个匹配是不同故障,应分别统计。
连接前先统计每个键的出现次数。预期一家一季一条,结果发现三条,需要检查它们是不是修订版、不同币种、不同分部,或者确实重复。尚未理解差异时不要删行。直接取第一条会掩盖问题,还可能让下一次运行的结果受文件排序影响。
行数之外也要对账
检查连接前后的唯一观测键数量、分币种分期间的金额总量、未匹配键数量与重复频次。总行数看起来合理,仍可能同时发生一家遗漏、另一家重复,两种错误恰好抵消。除整体核对外,还应选取几条记录沿转换全程追踪,确认结果能够解释。
分别保存只在左侧与只在右侧出现的记录。内连接会把范围缩小到两种披露都齐全的公司,这可能使样本偏向大型或披露较充分的主体。保留排除清单,将“没有匹配披露”和“真实数值为零”区分开来。没有分部记录,并不等于没有相应经济活动。
如果不同币种未统一,即使连接没有膨胀,总金额也可能失真。对账应在相同单位下进行;不要靠一个跨币种大合计来证明结果可靠。原始表的期间与合并范围也需要继续随记录保留,不能连接之后只剩公司名称和数值。
修复方式由研究问题决定
可以补足缺失分部键,将辅助表先汇总到所需粒度,继续保留两张独立表,或者明确记录一套分配假设。没有一种修复适用于所有问题。如果要研究产品收入,而来源只披露地区收入,合理结论可能是当前信息无法完成这个层级的分析。
将关系检查和对账结果放在最终数据旁。如果连接代码由 AI 生成,分别检查它选择的键和结果的经济解释。六行整洁数据做出来的漂亮图表,也可能把收入重复计算三遍。
常见问题
多对多连接一定错误吗?
不一定。它可以表达真实的关系集合。问题在于把重复出现的同一指标,当成六个独立观测后继续相加。
连接后删除重复行能修好吗?
只有先确定哪些行真正多余才行。不同产品组合可能每行都唯一,却依旧重复同一条收入事实。