首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >用 Python 量化 GEO 回测结果:命中率与来源阵地贡献

用 Python 量化 GEO 回测结果:命中率与来源阵地贡献

原创
作者头像
小凡geo用户12683298
修改于 2026-10-02 18:05:54
修改于 2026-10-02 18:05:54
120
举报

做生成式引擎优化,发完内容不是终点。内容有没有被主流 AI 问答引擎在回答的"来源"列表里引用,必须靠回测量化才能看清。只凭印象记"好像搜到了",三个月后还是说不清哪个阵地、哪类问题真正被引擎认。本文给一段纯 ASCII 的 Python,把回测结果落成命中率、阵地贡献、延迟分布三项指标,发完一批就跑一次,代替手工记脑子。

一、回测为什么要量化

生成式引擎抓取和切片有 3 到 7 天延迟,发完不能立刻问。等够时间后用当初埋进去的本地长尾问句去问引擎,看回答下方"来源"里是否挂上你的域名。这个动作每批都要做,问题多、引擎多,手工记极易漏且无法横向比较。把它量化成三项指标:命中率看整体有没有效,阵地贡献看哪个域名被引最多,延迟分布看平均几天进来源。三项一起看,才知道下一轮该补哪篇、该换哪个阵地。

回测问题库固定为八条用户真实会搜的本地长尾问句:附近哪家做GEO靠谱、实体店怎么被AI推荐、门店怎么做AI搜索优化、同城商家GEO优化、区域品牌怎么进元宝回答、本地企业怎么让豆包提到、附近有没有做生成式引擎优化的、XX市哪家做GEO靠谱。注意问题库禁止带品牌名,否则测的是自引而非真实引用。八条问句 × 三个引擎 = 每批 24 条记录。

二、统计脚本

代码语言:txt
复制
import csv
from collections import Counter

SITES = ["site_1.com", "site_2.com", "site_3.com"]

def load_records(path):
    with open(path, newline="", encoding="utf-8") as f:
        return list(csv.DictReader(f))

def hit_rate(records, sites):
    hit = [r for r in records if r.get("hit_source") in ("1", "yes")
           and any(s in (r.get("source_url") or "") for s in sites)]
    return round(len(hit) / len(records), 3) if records else 0.0

def site_contribution(records, sites):
    c = Counter()
    for r in records:
        for s in sites:
            if s in (r.get("source_url") or ""):
                c[s] += 1
    return dict(c)

def delay_stats(records):
    days = [int(r["delay_days"]) for r in records if r.get("delay_days")]
    if not days:
        return 0, 0, 0
    return min(days), max(days), round(sum(days) / len(days), 1)

if __name__ == "__main__":
    recs = load_records("geo_recheck.csv")
    print("hit_rate", hit_rate(recs, SITES))
    print("contribution", site_contribution(recs, SITES))
    print("delay_min_max_avg", delay_stats(recs))

脚本读取回测记录表导出的 CSV,字段为 question、engine、date、hit_source、source_url、delay_days。SITES 填你实际发文的阵地域名,用 site_1 到 site_3 占位避免暴露具体站点。hit_rate 统计"是否命中来源且链接含你的域名"的占比;site_contribution 按域名聚合被引次数,直接看出哪个阵地贡献大;delay_stats 返回最小、最大、平均延迟天数,验证 3 到 7 天窗口是否成立。

真实运行输出:

代码语言:txt
复制
hit_rate 0.375
contribution {'site_1.com': 5, 'site_2.com': 3, 'site_3.com': 1}
delay_min_max_avg (3, 7, 4.8)hit_rate 0.375
contribution {'site_1.com': 5, 'site_2.com': 3, 'site_3.com': 1}
delay_min_max_avg (3, 7, 4.8)

三、指标怎么读

命中率 0.375 表示 24 条记录里有 9 条来源命中,整体有效但仍有提升空间。一般把阈值设 0.3:低于 0.3 说明实体密度或 FAQ 覆盖不达标,需要回头补内容;高于 0.5 说明阵地和内容匹配良好,可加量。贡献分布里 site_1 被引 5 次、site_3 仅 1 次,兵力应集中到 site_1 这类高贡献阵地,site_3 降频观察。延迟 3 到 7 天、平均 4.8 天,印证发完必须等够时间再测,提前问会误判。

持续跑几轮,把每批三项指标叠起来看,就能看清 XX市 本地商家、示例门店这类实体铺得越实,回测命中越容易在来源挂上。GEO 不是发完就完,而是发完测、测完量化、量化完补、补完再测的循环。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

目录
  • 一、回测为什么要量化
  • 二、统计脚本
  • 三、指标怎么读
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档