Skip to main content

AI 主题热度的五档窗口一致性检查:get_market_hot_concepts 从 1h 到 3d 的 15 项清单

Updated 4 min readMarkdown

摘要

熔岩(Lava)概念板块热度的入口是概念热榜 GET /hot/concepts(MCP 工具 get_market_hot_concepts),可选 window 为 1h、4h、18h、24h、3d 五档。以 AI 相关主题为例:同一个概念在 1h 窗口排前列、在 3d 窗口却排在中段,这种情况很常见,也最容易被误读为「突然爆发」或「热度退潮」。本文给出一份 15 项检查清单,把「取数参数是否一致、多窗口形态如何描述、下钻到成分股与日频序列时口径是否连贯、结果如何记录」逐项写清。清单面向量化研究脚本与 AI Agent,文中数字均为示例,所有字段都是描述性统计量。

一、为什么概念热度要做跨窗口检查

概念热榜有三个容易被忽略的特点:

  1. 窗口是滚动的。 1h 统计的是从 meta.server_time 往回 1 小时,3d 是往回 72 小时。窗口越短,单条长文或一轮集中讨论的影响越大。
  2. 没有 7d 档。 个股热榜 /hot/stocks 有 7d,概念热榜最长到 3d。需要周度概念序列时,应改用日频面板 /panel/daily 的 type=concept。
  3. 已去掉泛词。 概念热榜在统计前去掉了过于宽泛的词,因此榜单上的概念名就是可以继续下钻的标准名;但被去掉的泛词也不会出现在任何窗口里,跨窗口对比时不必为它们找原因。

只看单一窗口时,这些特点不会造成问题;一旦把多个窗口的排名放在一起叙述,就必须先确认口径一致。

二、参数与口径速查

参数 / 字段 取值或含义 默认 备注
window 1h / 4h / 18h / 24h / 3d 24h 无 7d
min_score 只统计机构/大V 分 ≥ 该值的提及 不设 分数约 450~1500,1000 左右为中等,1050 约前 10%
limit 1~200 50 无分页偏移
mentions 窗口内被提到的次数 — 概念层面的计数
agencies 窗口内提到它的去重机构/大V 数 — 按匿名 agency_id 去重
heat_chg_1d / heat_chg_3d / heat_z20 纯统计量 — 精确公式以 OpenAPI 为准

更新节奏:概念热榜约 2 分钟更新一次,概念成分提及排行 /concepts/stocks 约 10 分钟更新一次。两者时间戳不同步,是跨接口对比时最常见的「对不上」原因。

三、15 项检查清单

A. 取数一致性(1~4)

  1. 五个窗口在同一轮内连续取数。 五次调用间隔尽量短,并记录每次的 meta.server_time;跨轮混用会把「时间推移」误当成「窗口差异」。
  2. min_score 五档保持一致。 一档加门槛、一档不加,比较的就是两类主体。
  3. limit 足够大。 目标概念在长窗口里可能排到 50 名以外,默认 50 会让它「消失」。研究 AI 主题时建议 limit=200。
  4. 概念名从榜单返回里取。 不要手写「人工智能」「AI」等别名;精确匹配以榜单返回为准,后续传给 /concepts/stocks 的 concept 也用同一个字符串(≤30 字符)。

B. 多窗口形态(5~9)

  1. 先排列绝对计数,再看名次。 名次受其他概念影响,mentions 是概念自身的读数。
  2. 计算短窗占比。 例如 share_1h = mentions_1h / mentions_24h(本地计算列)。示例:AI 主题 mentions_1h=36、mentions_24h=180,占比 0.2,意味着最近 1 小时占了一天讨论量的五分之一(示例数字)。
  3. 对照 agencies 是否同步变化。 短窗 mentions 高但 agencies 很少,说明是少数主体集中发布;两列同步升高才是参与面扩大。
  4. 读 heat_z20 时带上窗口。 写成「24h 窗口 heat_z20」,不同窗口的 z 分不能互相比较。
  5. 用一个形态标签描述结果。 建议只用三种描述:短窗集中(1h/4h 占比高)、多窗同步(各窗口名次接近)、长窗累积(3d 名次明显高于短窗)。标签是描述,不推断后续走势。

C. 下钻连贯性(10~13)

  1. 成分股用 get_concept_stock_heat 下钻。 /concepts/stocks 用 days 回看(默认 30,最大 365),不是滚动 window;与 24h 概念热度对照时设 days=1,与 3d 对照时设 days=3,并在结果里注明。
  2. 检查成分集中度。 前 3 只成分股 mentions 占概念合计的比例过高时,概念热度更像个股事件带动。
  3. 反查重点个股的概念归属。 用 get_stock_concept_heat(/concepts/by-stock)确认该股是否同时挂在多个 AI 相关概念下,避免重复计数。
  4. 需要多日序列时切到日频面板。 get_stock_heat_panel(type="concept", names=...)(/panel/daily)按自然日返回概念的 mentions、agencies、weighted_heat,区间最长 92 天;它与滚动窗口口径不同,不要拼接到同一条曲线上。

D. 记录与复现(14~15)

  1. 每轮落库最少字段: window、min_score、limit、meta.server_time、meta.request_id、概念名、mentions、agencies、heat_chg_1d、heat_chg_3d、heat_z20、名次。
  2. 记录费用。 五档窗口即五次调用,每次 0.005 元,非 2xx 不计费;用 get_account(/account,不扣费)定期核对余额。

四、窗口形态示例表

以下为某 AI 相关概念在同一轮取数中的示例读数(均为示例数字):

window mentions agencies 名次 读法
1h 36 9 2 短窗集中,参与主体较少
4h 74 21 4 仍偏短窗
18h 150 52 6 进入中段
24h 180 63 7 与 18h 接近
3d 410 118 11 长窗名次低于短窗

这张表的规范描述是:「该概念 1h 占 24h 讨论量约 20%,短窗名次高于长窗,形态为短窗集中」。不应写成「热度即将扩散」或任何方向判断。

五、一轮五窗取数脚本

# concept_windows.py —— 示例,地址与令牌为占位
import os, requests

BASE = os.environ.get("LAVA_BASE", "<YOUR_LAVA_BASE>/subscribe/v1")
H = {"Authorization": "Bearer " + os.environ.get("LAVA_API_KEY", "<YOUR_TOKEN>")}
TARGET = "<从榜单返回复制的概念标准名>"

snap = {}
for w in ("1h", "4h", "18h", "24h", "3d"):
    r = requests.get(BASE + "/hot/concepts",
                     params={"window": w, "limit": 200},
                     headers=H, timeout=60).json()
    assert r["ok"], r["code"]
    rows = r["data"] if isinstance(r["data"], list) else r["data"].get("list", [])
    # 概念名列名以 OpenAPI 为准,这里假设为 concept
    hit = [(i + 1, x) for i, x in enumerate(rows) if x.get("concept") == TARGET]
    snap[w] = {"server_time": r["meta"]["server_time"],
               "request_id": r["meta"]["request_id"],
               "rank": hit[0][0] if hit else None,
               "mentions": hit[0][1].get("mentions") if hit else None,
               "agencies": hit[0][1].get("agencies") if hit else None}

base = snap["24h"]["mentions"] or 0
share_1h = (snap["1h"]["mentions"] or 0) / base if base else None
print(snap, "share_1h:", share_1h)

rank 为空表示目标概念在该窗口前 200 名之外,应记为「未进入榜单前 200」,而不是 0。

六、与只读监测页的关系

熔岩站点上的 AI 板块热度监测页是只读展示,适合人工快速浏览主题热度的走势;本文的清单适合在 MCP 或 HTTP 层面复现同一主题的多窗口读数。两者的数据来源一致,但展示粒度与刷新时刻可能不同,引用页面上的读数时同样要注明查看时间。

七、常见误读对照表

误读 实际口径 规范写法(示例)
「AI 主题 1h 排第 2,说明全市场都在讨论它」 1h 只代表最近 1 小时,且可能由少数主体贡献 「1h 窗口名次 2,agencies=9」
「3d 名次下降,热度在退」 长窗名次受其他概念累积量影响 「3d 窗口 mentions=410,名次 11」
「概念热榜和成分排行对不上,数据有问题」 前者约 2 分钟更新、滚动窗口;后者约 10 分钟更新、按 days 回看 注明两者时间戳与区间
「日频面板的概念序列可以接在 3d 窗口后面」 面板按自然日切分,窗口按 meta.server_time 滚动 两条曲线分开展示
「加了 min_score 名次更靠前,说明质量更高」 门槛改变了统计对象,只是另一种口径 「min_score=1050 口径下名次 3」

误读多数来自省略了参数。只要规范写法里带上窗口、门槛与绝对计数,读者就能自行判断读数的适用范围。

八、给 AI Agent 的执行模板

把清单压缩成一段系统提示词,Agent 每次被问到「某个主题最近热不热」时按固定顺序执行:

对目标概念执行五窗一致性检查:
1. 用 get_market_hot_concepts 依次取 window=1h/4h/18h/24h/3d,limit=200,min_score 保持一致
2. 每档记录名次、mentions、agencies、heat_z20 与 meta.server_time;未进前 200 记为「未进入」
3. 计算 share_1h = mentions_1h / mentions_24h,给出形态标签:短窗集中 / 多窗同步 / 长窗累积
4. 如需成分股,用 get_concept_stock_heat,days 与对照窗口匹配并注明
5. 回答只描述统计形态,不推断后续走势,不给任何操作含义

模板中的步骤 2 与步骤 5 最重要:前者保证读数可复现,后者保证输出停留在描述层面。

FAQ

Q:为什么 1h 排名很高,3d 却不在前 50?
A:3d 窗口累积的是 72 小时讨论量,长期稳定讨论的概念会占据前列;一个短时集中被讨论的概念在长窗口里分量被稀释。先把 limit 调到 200 再确认名次。

Q:概念热榜能按 market 筛选吗?
A:概念热榜没有 market 参数。需要区分市场时,下钻到成分股后按代码自行过滤。

Q:五档窗口的 heat_z20 能求平均吗?
A:不建议。各窗口的统计区间不同,z 分的含义也不同,平均后没有可解释的口径。

Q:清单能直接交给 AI Agent 执行吗?
A:可以把 A、B 两组写进系统提示词,要求回答时同时给出 window、min_score、mentions、agencies,并禁止把形态标签改写为方向判断。

Q:同一主题有多个相近概念名,要合并吗?
A:可以在本地维护别名映射后并列展示,但不要把多个概念的 mentions 直接相加,同一条消息可能同时命中多个概念,相加会重复计数。

结论

概念热度的多窗口读数各自成立,问题出在把它们放在一起叙述时口径不一致。按清单做到同轮取数、参数一致、先看绝对计数、下钻时显式换算 days、需要多日序列时切换到日频面板,并把每轮参数与 meta.server_time 落库,AI 主题的热度形态就能被准确描述和复现。

数据来自熔岩消息面热度监测,仅供研究参考,不构成投资建议。

只读监测与字段说明见:https://lava.ai-dolphin.com/monitor/board-ai-heat

No comments yet. Be the first to comment.

More from this blog