供应链知识图谱标签传播算法 — LPA/层级继承/关系链传播的Tag扩散引擎
Skill-Tag-Propagation-Supply-Chain · 24-标签工程
causalexperimentknowledge_graphfraud_detection供应链与补货知识图谱与RAG风控与合规WF-A 智能补货WF-D 选品扫描WF-K 全域风险防御WF-M 新品上市全链路
收录于标签工程与本体驱动手册
实现难度⭐⭐⭐☆☆
业务视角
适用角色数据架构师 / 供应链数字化负责人 · CTO · 数据工程师 · 供应链团队
什么情况下用多平台数据孤岛导致断货识别延迟8小时;标签覆盖率不足使AI决策触发率<30%;想实现分析→行动自动闭环但不知从何下手
成功是什么样的统一 Tag Schema + 传播引擎将标签覆盖率从 30% 提升至 97%;Palantir 风格 Object-Action-Writeback 将补货响应从 2 天缩短至 4 小时自动触发
业务痛点
1. 解决的问题
供应链团队面临"认证标签手工维护60%覆盖率"——LPA+层级继承传播算法将合规标签覆盖率从60%提升至95%,供应商FDA认证自动扩散到旗下所有SKU
2. 核心算法逻辑
标签传播(Tag Propagation) 解决的核心问题:人工打标覆盖率不足,但实体间存在关系——可以沿关系边"传导"已知标签到未标注节点。
3. 业务应用场景
场景A:供应商认证标签传播到 SKU - 业务问题:供应商「宁波精工」获得了 CE 认证,但旗下 15 个吸奶器 SKU 需要手工逐一更新合规标签,容易遗漏 - 数据要求:供应商→产品关系图谱 + 供应商认证数据 - 传播逻辑: - 业务价值:合规标签更新从 2 小时人工 → 5 秒自动,且零遗漏
**场景B:仓库容量风险标签传播到 SKU** - **业务问题**:US-FBA 仓容量预警(使用率 92%),但系统不知道哪些 SKU 的补货计划应该调整 - **传播逻辑**: - **业务价值**:仓容预警自动影响 SKU 补货策略,避免入仓被拒收
4. 输入数据要求
请查看原始代码模板获取输入规格。
5. 输出结果
请查看原始代码模板获取输出规格。
6. 业务价值 / ROI
- ROI预估:认证标签传播使合规覆盖率从60%→95%,合规审查效率提升10倍;风险标签扩散使断货预警从15%覆盖→85%覆盖,减少断货事件约50%,年化约8万元
- 实施难度:⭐⭐⭐☆☆(需要先建立实体关系图谱,然后配置传播规则)
- 优先级评分:⭐⭐⭐⭐⭐(是标签工程从"手工打标"到"自动扩散"的关键技术,直接解决覆盖率问题)
- 评估依据:供应链实体间关系密度高(每个SKU平均涉及1个供应商+2个仓库+3个物流商),传播效益显著
7. 代码模板
代码块数量:5 · 路径:paper2skills-code/data_collection/tag_propagation_supply_chain
"""
供应链知识图谱标签传播引擎
功能:层级继承传播 / LPA迭代传播 / 关系链传播 / 置信度衰减管理
输入:实体关系图谱 + 种子标签集合
输出:传播后完整标签集 + 传播路径追踪 + 覆盖率提升报告
"""
import numpy as np
import pandas as pd
from collections import defaultdict, deque
from typing import Optional
import warnings
warnings.filterwarnings('ignore')
class SupplyChainTagGraph:
"""供应链实体关系图谱(用于标签传播)"""
def __init__(self):
self.entities = {} # entity_id → {type, name, tags: {tag_id: {value, confidence, source}}}
self.edges = [] # (src, dst, relation_type, weight)
self.adj = defaultdict(list) # src → [(dst, relation, weight)]
self.radj = defaultdict(list) # dst → [(src, relation, weight)] 反向
def add_entity(self, entity_id: str, entity_type: str, name: str, tags: dict = None):
self.entities[entity_id] = {
"type": entity_type, "name": name,
"tags": {k: {"value": v, "confidence": 1.0, "source": "manual"}
for k, v in (tags or {}).items()}
}
def add_relation(self, src: str, dst: str, relation: str, weight: float = 1.0):
self.edges.append((src, dst, relation, weight))
self.adj[src].append((dst, relation, weight))
self.radj[dst].append((src, relation, weight))
def get_tag(self, entity_id: str, tag_id: str) -> Optional[dict]:
e = self.entities.get(entity_id)
if e and tag_id in e["tags"]:
return e["tags"][tag_id]
return None
def set_tag(self, entity_id: str, tag_id: str, value, confidence: float, source: str):
if entity_id in self.entities:
self.entities[entity_id]["tags"][tag_id] = {
"value": value, "confidence": confidence, "source": source
}
class TagPropagationEngine:
"""三种传播模式引擎"""
def __init__(self, graph: SupplyChainTagGraph, decay_alpha: float = 0.85, conf_threshold: float = 0.5):
self.graph = graph
self.decay_alpha = decay_alpha
self.conf_threshold = conf_threshold
self.propagation_log = []
def hierarchical_propagation(self, tag_id: str, allowed_relations: list,
max_hops: int = 3) -> int:
"""8. 论文来源
- 2104.07682
- 2210.01813
- 2303.09294