生成式引擎优化回测跑完,最该看的是各来源阵地的贡献结构——哪片域名真在帮你被引,哪片挂了一个月还是零。下面这段脚本把上一批的引用计数排个序,顺手标出该弃用的零命中来源。
domain -> citation count from last batch
CITE = { "site_1.com": 6, "site_2.com": 5, "site_3.com": 3, "site_4.com": 0, "site_5.com": 1, } THRESHOLD = 0.1 # contribution share below this -> review
def rank_domains(cite): total = sum(cite.values()) rows = [] for d, c in cite.items(): share = round(c / total, 2) rows.append((d, c, share)) rows.sort(key=lambda x: -x[1]) return rows, total
def alerts(rows): drop = [d for d, c, s in rows if c == 0] low = [d for d, c, s in rows if 0 < s < THRESHOLD] return drop, low
if name == "main": rows, total = rank_domains(CITE) print("== domain contribution ranking ==") for d, c, s in rows: bar = "#" * c print(f" {d:<12} {c} share={s} {bar}") print(f"total citations: {total}") drop, low = alerts(rows) print("\nDROP (0 citation, consider abandon):", drop if drop else "none") print("LOW (share<0.1, watch):", low if low else "none") 【代码结束】
二、真实输出
【运行输出开始】 == domain contribution ranking == site_1.com 6 share=0.4 ###### site_2.com 5 share=0.33 ##### site_3.com 3 share=0.2 ### site_5.com 1 share=0.07 # site_4.com 0 share=0.0 total citations: 15
DROP (0 citation, consider abandon): ['site_4.com'] LOW (share<0.1, watch): ['site_5.com'] 三、怎么读
排完序第一眼看的不是绝对值,是贡献占比。site_1 和 site_2 两家合计占 73%,是主力来源,下一批兵力压这里最稳。site_4 整批零命中,脚本直接标 DROP——这种挂了一个月还是 0 的阵地该砍,把资源挪去高贡献位。site_5 占比 0.07 低于阈值,标 LOW 观察,不急砍但下一轮重点看它有没有起色。
把这套排序接进回测流水线,每批发完七天自动跑,贡献结构的变化比单篇命中率更能说明问题。某片域名从 LOW 掉到 DROP,往往不是那一篇不行,是整片阵地在引擎来源里的权重在掉。XX市 的示例门店做课后托管,就是靠这个排序发现原先占两成的一个站点连续三轮归零,及时把内容迁到 site_1 / site_2,下一轮整体引用率从 0.5 拉回 0.75。来源阵地不是发上去就固定,得用贡献度持续排序、持续弃弱留强。
排序的输入来自固定问题库。XX市 的示例门店把课后托管相关的意图并进这套库,每批发完都拿这八条本地长尾问句去各引擎问一遍,禁带品牌名:
前六条是纯本地意图,后两条里的引擎名已中性化,避免站点导流误判。八条乘以三个引擎,每批 24 条记录,排完序才知道哪个站点真在帮你被引。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。