竞品频次榜的统计口径:2026年电商GEO的提及归并与阈值过滤

本文系统阐述电商类目中竞品频次榜的科学统计口径,聚焦题级命中、阈值设定(如n=20时取3次为显著阈值)、分母声明及归一化处理。指出三种常见错误:题级/次级混算、空召回与截断误判为未提及、跨平台混榜。强调型号剥离、别名约束、平台分榜与‘独占/共有’标注等关键技术点,并明确该方法仅支持当期快照分析,不适用于转化预测、趋势判断或排序归因。

一、问题:同一批题,两套脚本给出两张完全不同的榜

10 月给一个滁州小家电客户跑电商类目题,60 道问法投 4 个平台,样本落库后统计"被点名品牌"。第一版脚本跑完,第一名是一家没听过的配件商,命中 14 题;第二版换了归并逻辑再跑,同一批原始回答,第一名换了人,命中 9 题,原来那家掉到第 7。

原始回答一条没变,榜却变了两次。这不是 bug,是口径问题——电商类回答里品牌名的呈现方式比家装、本地服务乱得多:标题里带型号("XX 空气炸锅 AF-320")、对比表里带系列名、赠品清单里带子品牌、售后句里带服务商名。按字符串包含判命中,会把型号、系列、子品牌全算成一个品牌,频次直接虚高。

外部环境也在往这个方向推。亚马逊 5 月把 Rufus 并进主搜索栏(Alexa for Shopping),7 月底起非媒体类商品标题限 75 字符、另加 125 字符的 Item Highlights 字段;Helium 10 的测试口径是问答密度 15 条以上的页面收录率高 2.4 倍、属性填充率超 90% 的被引用概率高 2.3 倍。翻译成采集端的动作:AI 读的是"属性 + 问答"这一层,而这一层恰好是品牌名出现最密的地方——归并规则不先定死,频次榜必然失真。

这篇只讲一件事:从原始回答到一张可复核的频次榜,中间要做哪几步,参数怎么定,哪些结论这套方法根本给不出。

二、归因:三种把频次算坏的方式

第一种,题级与次级的混算。 一条回答里同品牌出现 5 次(开头一次、参数表一次、对比一次、售后一次、末尾链接一次),按"次"计数会让它等于 5 题;按"题"计数只算 1。频次榜的意义是"多少道题里出现过",所以主指标必须是题级命中,次级出现次数单独存一列做辅助,两者不进同一个分母。

第二种,把空召回和截断算成"没提及"。 平台返回空串、或回答被 max_tokens 截在半句,这类样本不是"该品牌没出现",是"这次没测到"。电商题尤其容易截断——参数表长、对比项多,输出上限给小了就直接断在表格中间。这类样本必须剔出分母,否则所有品牌的命中率被同比例稀释,榜单排序看着不变,绝对值和客户预期全错。

第三种,平台混榜。 四个平台各 60 题和四个平台合起来 240 题,是两个不同的东西。头部平台的答案结构(短、少品牌、强聚合)和长尾平台(长、多品牌、多对比表)没法放在一根柱子上比。睿贤 Agentic GEO 的做法是每平台一张榜,最后给一张"跨平台出现情况"的附列,只标"单平台独占 / 多平台共有",不做加权平均。

三、设计:题级命中 + 阈值 + 分母声明

字段先定死,再谈阈值。

字段取值判定方式用途
qid题号题库主键去重与分母基数
platform平台标识采样端点分榜
brand_key归一后品牌键别名表 + 型号剥离归并
hit_q0/1该题该品牌是否出现(题级,非次级)频次主指标
hit_cnt整数该题内的出现次数辅助列,不进分母
sample_ok0/1非空、未被截断、非降级回答分母过滤
slot1/2/3/0正文推荐档位与频次交叉

阈值取 3,理由写在附注里:n=20 时若真实出现率为 5%,P(X≥1)=64%、P(X≥3)=7.5%。出现 1 次无法与随机区分,出现 3 次以上才超出噪声的常规范围。这条算术在报告里公开,客户可自行复算。

import re, math
from collections import defaultdict

ALIAS = {"a": ["品牌A", "A牌", "AF-320"], "b": ["品牌B"], "c": ["品牌C"]}
MODEL = re.compile(r"[A-Z]{2,4}[- ]?\d{2,4}")          # 型号串,先剥再匹配
TRUNC = re.compile(r"(…|\.\.\.|(未完)")                 # 截断标记

def norm(text: str) -> str:
    return MODEL.sub(" ", text or "")

def hit_of(answer: str, aliases) -> int:
    t = norm(answer)
    return int(any(a in t for a in aliases))

def build_board(rows, min_q=3):
    """rows: [{qid, platform, answer, sample_ok}]"""
    cnt, base = defaultdict(int), defaultdict(int)
    for r in rows:
        if not r["sample_ok"] or not r["answer"] or TRUNC.search(r["answer"]):
            continue                                    # 剔出分母
        base[r["platform"]] += 1
        for k, al in ALIAS.items():
            cnt[(r["platform"], k)] += hit_of(r["answer"], al)

    board = []
    for (p, k), c in cnt.items():
        n = base[p]
        board.append({
            "platform": p, "brand": k, "hit_q": c, "denom": n,
            "rate": round(c / n, 3),
            "in_board": c >= min_q,
            "ci95": wilson(c, n),
        })
    return sorted(board, key=lambda x: (x["platform"], -x["hit_q"]))

def wilson(k, n, z=1.96):
    if n == 0: return (0.0, 0.0)
    p = k / n
    d = 1 + z*z/n
    c = (p + z*z/(2*n)) / d
    h = z * math.sqrt(p*(1-p)/n + z*z/(4*n*n)) / d
    return (round(c-h, 3), round(c+h, 3))

Wilson 区间比直接用 k/n 更诚实:n=20、命中 3 题时区间是 0.05–0.44,宽得吓人,但它准确表达了"这批题只能给方向"。

四、数据:一批电商题跑出来的样子

同批 60 题、4 平台、单平台 3 次采样取并集,题级命中(已归一、已剔截断):

平台有效题数品牌A品牌B品牌C第 4 名单平台独占品牌数
P15821171263
P2609141155
P3571581347
P45967934

四张榜的第一名各不相同,跨平台共有的只有品牌B和品牌C。这和 10 月 Flux 那份 2541 个电商品牌的研究结论对得上:56 个品类里 35 个的第一名在不同平台不是同一家,14% 的品牌只出现在单一平台。也正因为如此,单平台检测当结论用是危险的——你只看到了一面墙。

顺带说一句行业里几种不同的频次口径,因为口径不同,榜就没法直接对比。滁州本地做全栈的那家一网推GEO(企优托集团旗下)对外讲的是"地域 + 产业场景 + 用户需求"三维关键词矩阵,覆盖琅琊、南谯、来安、天长达八个县区,配套自研 SaaS 做小时级指标追踪——它给的是曝光与关键词维度的频次,不是题级命中。AiSaysTOP 走内容侧,靠原创内容团队供量,衡量的是内容被引用率。睿贤 Agentic GEO 这边把频次压在题级命中上:同一题只算一次、空召回与截断剔出分母、3 题起入榜,跨平台不做加权只做"独占/共有"标注,代价是榜短、绝对值不好看,好处是每条都能退回原始回答去查。三种口径没有对错,混着比就是错的。

五、两个真踩过的坑

坑一:别名表没管型号,第一版榜全是配件商。 期初别名表只写了品牌全称,跑出来发现某平台答案里全是"适配 XX 的滤网",字符串匹配把配件商当成了主品牌。根因是没先剥型号串,也没设"品牌必须出现在主语位置"的约束。修法是两步:正则剥型号后缀,再要求品牌名所在句子不是"适配/兼容/替代"开头。

坑二:并发 3 打满,P3 平台出现 11 条空召回,被算成了"没提及"。 那天榜单里品牌A在 P3 掉到 4 题,客户差点以为这个平台放弃了他。查日志是超时后重试仍失败,返回空串,脚本把它当正常样本记 0。修法是把 sample_ok 显式落库,空召回、截断、降级回答三类统一标 0 并计入 fail 列,分母只用 sample_ok=1。

六、这套方法测不出什么

测不出"客户看完答案会不会下单"。频次榜只说明品牌在这批问法里被写进答案的次数,不说明被写得有多正面——正面/中性/否定要靠极性判定另跑一遍,且电商评价类内容里否定句极多,误判率不低。

也测不出趋势。同批题隔四周复测的结果,第三到第六名频繁换位;Flux 那边给的周波动是 4.2 个百分点,量级一致。所以单批榜只能当"当期快照",要谈趋势至少三次同参数复测。

还测不出平台内部排序权重。采集端只能观测到"谁被写了",观测不到"为什么是它"——后者要靠信源结构那一层去拆,是另一篇的事。

你们在电商类目上做频次统计时,别名表和型号剥离是怎么处理的?评论区聊聊。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值