3. 图数据表示与构建

在金融图社区发现任务中,图数据表示与构建是决定后续分析上限的关键环节。无论使用 Neo4j、NetworkX 还是 PyTorch Geometric,图数据最终都要落到三种基础表示:邻接矩阵、边列表和属性图。理解它们的差异,才能把金融业务语义无损地映射为可计算结构。

核心原理:三种图表示的语义与代价

邻接矩阵用 N×N 矩阵描述节点间连接,A[i][j]=1 表示存在边,权重可表示持股比例、交易金额或关联强度。它适合稠密图与矩阵运算,但金融图通常稀疏,直接存储会带来大量零值浪费。边列表以 (源节点, 目标节点, 属性) 三元组记录关系,天然适配稀疏图与流式抽取,是数据清洗阶段最常用的中间格式。属性图在节点和边上附加键值对,例如节点带“行业、市值、注册地”,边带“关系类型、置信度、时间戳”,是金融知识图谱的标准形态。

选择建议:抽取与清洗阶段用边列表,算法计算阶段转邻接矩阵或稀疏张量,存储与查询阶段用属性图。

方法流程:金融实体与关系抽取到图构建

金融图构建通常遵循“抽取—清洗—对齐—建图—校验”五步流程。以下是一个可复用的处理链路:

  1. 实体抽取:从公告、财报、新闻中识别公司、股东、高管、基金、行业等实体,可用规则模板结合 NER 模型。
  2. 关系抽取:识别“持股、任职、担保、交易、供应链”等关系,并记录方向与强度。
  3. 数据清洗:统一实体名称、去除重复边、处理缺失值与异常权重。
  4. 实体对齐:将“某银行”“XX银行股份有限公司”归并为同一节点。
  5. 图构建:输出边列表并转换为属性图或邻接矩阵。

下面是一个边列表清洗与建图的简化示例:

import pandas as pd
import networkx as nx

edges = pd.read_csv("financial_edges.csv")
# 字段:src, dst, rel_type, weight, date

# 1. 去除自环与重复边
edges = edges[edges["src"] != edges["dst"]]
edges = edges.drop_duplicates(subset=["src", "dst", "rel_type"])

# 2. 权重归一化到 0-1
edges["weight"] = edges["weight"].clip(0, 1)

# 3. 构建属性图
G = nx.from_pandas_edgelist(
    edges, source="src", target="dst",
    edge_attr=["rel_type", "weight", "date"],
    create_using=nx.DiGraph()
)

# 4. 导出邻接矩阵
adj = nx.to_numpy_array(G, weight="weight")
print("节点数:", G.number_of_nodes(), "边数:", G.number_of_edges())

案例场景:股权关联网络构建

假设我们要构建一个上市公司股权关联图。节点为公司,边为“持股”关系,权重为持股比例。原始数据来自工商信息与公告,存在名称不一致、重复披露、比例缺失等问题。清洗后,将持股比例低于 5% 的弱关系过滤,保留强关联边,再转换为属性图。这样得到的图既保留了业务语义,又控制了规模,便于后续社区发现。

表示形式适用阶段优点局限
邻接矩阵算法计算矩阵运算高效稀疏图存储浪费
边列表抽取与清洗灵活、易增量更新查询效率低
属性图存储与查询语义丰富、可扩展需图数据库支持
金融图构建:从原始数据到三种表示 原始金融数据 公告 / 财报 / 工商 实体与关系抽取 公司 / 股东 / 持股 数据清洗与对齐 去重 / 归一 / 消歧 图构建 输出结构 边列表 (src, dst, rel, weight) 适合抽取与清洗 稀疏、易增量 属性图 节点/边带键值对 适合存储与查询 语义丰富 邻接矩阵 N×N 权重矩阵 适合算法计算 稠密运算高效

误区与复盘

常见误区一:直接对原始边列表做社区发现。未清洗的重复边和自环会放大局部密度,导致社区划分失真。务必先去重、去自环、过滤弱关系。

常见误区二:忽略方向与权重语义。持股关系是有向的,A 持股 B 不等于 B 持股 A;若直接转为无向图,会丢失控制链方向。权重也应区分金额、比例与置信度。

常见误区三:实体对齐不彻底。同一公司在不同数据源中名称不同,若未归并,图中会出现多个孤立节点,社区结构被割裂。

复盘建议:建图后先做三项检查——节点数是否与业务实体数匹配、边方向是否符合业务语义、权重分布是否合理。可用 G.number_of_nodes()、G.number_of_edges() 和权重直方图快速验证。只有图结构可信,后续社区发现才有意义。

掌握三种表示形式的转换与清洗流程,是金融图分析的基本功。实际项目中,建议以边列表为中间层,以属性图为存储层,以邻接矩阵为计算层,形成清晰的数据流水线。