# 申万行业热度不能替代熔岩概念热度：用 /hot/concepts 与 /concepts/stocks 做交叉观察

## 摘要

申万行业是一套常用的行业分类；熔岩（Lava）的概念板块则是消息面热度里的概念主题，来自 `GET /hot/concepts`、`/concepts/stocks`、`/concepts/by-stock`（MCP 工具分别为 `get_market_hot_concepts`、`get_concept_stock_heat`、`get_stock_concept_heat`）。两者都可以按「一组股票」去观察讨论，但分类依据不同，不能互相替代。本文说明如何在本地保留申万行业标签的同时，用熔岩概念接口做交叉观察，以及概念名必须精确匹配的约束。只读监测与研究用途，不给出标的名单。

## 两套分类不是同一件事

申万行业回答的是「这只股票在行业分类树里属于哪一枝」。熔岩概念回答的是「消息面里，这个概念主题最近被提到多少、概念下哪些股票被提到、一只股票又关联到哪些概念」。前者是行业归属，后者是个股与概念消息面的热度结构。把「某申万一级行业今天很热」直接写成「对应熔岩概念也很热」，或反过来用概念热榜去填行业热度，都会把两种口径叠在一起。

熔岩侧也没有提供申万行业分类或行业热度接口，交叉观察只能在你自己的研究表里完成：一边是你维护的行业标签，一边是熔岩返回的概念名与股票代码。全市场热度里的个股榜 `/hot/stocks` 可以提供代码级的讨论背景，但它同样不是行业分类。

## 熔岩概念侧的三条只读路径

| MCP 工具 | HTTP 路径 | 作用 | 关键参数 | 更新节奏 |
| --- | --- | --- | --- | --- |
| `get_market_hot_concepts` | `/hot/concepts` | 全市场概念热榜，已去掉泛词，按提及从高到低排 | `window`：`1h` / `4h` / `18h` / `24h` / `3d`，默认 `24h`（没有 `7d`）；可选 `min_score`；`limit` 默认 50、最大 200 | 约 2 分钟 |
| `get_concept_stock_heat` | `/concepts/stocks` | 某个概念下，哪些股票被提到最多 | 必填 `concept`，精确匹配且 ≤30 字符；`days` 默认 30、范围 1～365；`limit` 默认 50、最大 100 | 约 10 分钟 |
| `get_stock_concept_heat` | `/concepts/by-stock` | 某只股票关联的概念哪些更热 | `ts_code` 或 `stock_name` 二选一；`days` 默认 90、范围 1～365；`limit` 默认 30、最大 200 | 以接口返回为准 |

概念热榜还可以带 `heat_chg_1d` / `heat_chg_3d` / `heat_z20` 这类纯统计量，它们描述的是热度数字的变化，不是行业归属发生变化。需要更长历史时，可用日频面板 `/panel/daily` 且 `type=concept`，按概念名回溯，不要去给 `/hot/concepts` 传入文档未列出的 `7d`。

## 交叉观察：在本地对齐，而不是互相替代

一个可重复的做法是把两套标签都落到股票代码上，然后只比较「重叠与差异」，不把其中一套改写成另一套。

1. **行业侧（本地）**：使用你已有的申万行业映射表，按代码得到行业标签。这一步不调用熔岩。
2. **概念规范名（熔岩）**：先调 `get_market_hot_concepts`，在返回的概念名集合里取规范写法。不要用行业名称去猜概念名。
3. **概念成分（熔岩）**：用规范名调用 `get_concept_stock_heat`，得到该概念在指定 `days` 内被提及较多的股票代码。
4. **个股回查（熔岩）**：对研究样本里的代码调用 `get_stock_concept_heat`，看熔岩认为它关联哪些概念。这能发现「行业相同、关联概念不同」或「概念相同、行业不同」的样本。
5. **本地交叉表**：以代码为键，列出行业标签、命中的熔岩概念、概念窗口或回看天数。重叠率、对称差都是你本地算的研究量，熔岩并不提供「某概念对应某申万行业」的官方映射。

示例（虚构分组，仅示意结构）：把本地「示例行业甲」的成分代码，与熔岩规范概念「示例概念甲」在 `/concepts/stocks` 返回的代码求交集。即便交集很大，也只能写成「在这批样本里两者代码重叠较多」，不能写成「示例概念甲就是示例行业甲」。反之，交集很小也不能说明哪一边分错了——它们本来就不是同一分类。

```python
# cross_sw_and_lava_concept.py —— 示例
import os, requests

BASE = os.environ["LAVA_BASE"]  # 指向 /subscribe/v1
H = {"Authorization": "Bearer " + os.environ["LAVA_API_KEY"]}

def hot_concept_names(window="24h"):
    r = requests.get(
        BASE + "/hot/concepts",
        params={"window": window, "limit": 200},
        headers=H, timeout=60,
    ).json()
    assert r["ok"], r["code"]
    rows = r["data"] if isinstance(r["data"], list) else r["data"].get("items", [])
    # 概念名列名以 OpenAPI 为准
    return rows, r["meta"]["server_time"]

def concept_stocks(name, days=30):
    r = requests.get(
        BASE + "/concepts/stocks",
        params={"concept": name, "days": days, "limit": 100},
        headers=H, timeout=60,
    ).json()
    assert r["ok"], r["code"]
    return r["data"]

# 规范名必须来自热榜或个股关联概念，不能用申万行业名直接代入
canon = "示例概念甲"
rows, asof = hot_concept_names()
print("asof", asof, "hit", any(canon == (x.get("concept") or x.get("name")) for x in rows))
```

匿名机构/大V 的 `min_score` 可以加在概念热榜上，用来观察高分主体参与的概念，但这仍然是概念热度，不是行业评分。

## 概念名必须精确匹配

`/concepts/stocks` 的 `concept` 是精确匹配，长度不超过 30 字符。「示例概念甲」能查到，不等于「示例概念甲概念」「示例 概念甲」也能查到。全半角、空白、随意改大小写，都是空结果或参数错误的常见来源。正确顺序是：先从 `/hot/concepts` 或 `/concepts/by-stock` 取出已经出现过的规范名，再传入 `/concepts/stocks`。用申万行业全称、行业缩写或口头别名去撞概念参数，不属于交叉观察，只是把分类体系混用了。

若规范名不在当日概念热榜前部，也不要改用行业名顶替；可以加大 `limit`、换一档允许的 `window`，或从个股关联概念反查。概念热榜已去掉泛词，过于宽泛的词本身可能没有对应概念。

## FAQ

**Q：可以把申万行业名当作 `concept` 参数吗？**  
A：只有当该字符串恰好等于熔岩概念的规范名时才会命中。行业分类名与概念名没有保证一致，默认应按未匹配处理，先查规范名。

**Q：为什么概念热榜没有 `7d`？**  
A：OpenAPI 里 `/hot/concepts` 的 `window` 枚举到 `3d` 为止。周度观察应改用 `/concepts/stocks` 的 `days`，或 `/panel/daily` 且 `type=concept`，不要传入未列出的窗口值。

**Q：交叉观察能得出该看哪个行业或哪个概念吗？**  
A：不能。交叉表只说明两套分类在代码层面如何重叠，熔岩提供的是只读热度数字和短摘要，不给出配置建议。

**Q：概念成分大约多久更新？**  
A：`/concepts/stocks` 约 10 分钟更新，概念热榜约 2 分钟。对账或做日报时要把取数时间和 `days` / `window` 一并记录。

## 结论

申万行业与熔岩概念板块是两套不同的分类：一个讲行业归属，一个讲消息面概念热度。交叉观察的合法做法是以股票代码为键，在本地并列两套标签，并用 `/hot/concepts`、`/concepts/stocks`、`/concepts/by-stock` 取规范名与关联关系。不要用一套热度去替代另一套分类，也不要用行业名冒充概念名。精确匹配是概念接口的前提，不是可选步骤。

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

只读监测与字段说明见：https://lava.ai-dolphin.com/tools/stock-concepts

