Skip to main content

熔岩AI发布MCP舆情去噪方案:用 agency_id、agency_score 与 only_this_stock 过滤消息面噪声

Updated 3 min readMarkdown

摘要

消息面数据里最常见的噪声有四类:同一主体短时间重复提及、低分主体的大量转述、一条消息顺带点名十几只股票、泛概念词。熔岩(Lava)的结构化记录已经提供了处理这些噪声所需的字段:agency_id(稳定主体 ID)、agency_score(机构/大V分)、stocks / concepts(涉及标的数组)、topic_time(北京时间),以及接口参数 only_this_stock 和 min_score。本文给出一条五级去噪流水线,每一级都说明用的是哪个字段、过滤掉什么、保留什么,输出用于只读监测与统计。

一、去噪用到的熔岩数据板块与字段

数据板块 MCP 工具 HTTP 路径 去噪相关字段/参数
个股消息面 get_stock_news_heat /subscribe/v1/opinions only_this_stock、limit(最大 200)、记录字段 agency_id、agency_score、stocks、topic_time
关键词检索 search_news_flow /subscribe/v1/opinions/search keyword(≤50 字符、最多 5 个词且需全部包含)、since(最早 180 天前)
全市场热榜 get_market_hot_stocks /subscribe/v1/hot/stocks min_score(1050 约前 10%)
高分加权热榜 get_weighted_hot_stocks /subscribe/v1/hot/weighted min_score 默认 1050、weighted_heat
机构/大V PIT get_agency_pit /subscribe/v1/agencies/pit 历史截面分数,用于回测时替代当前分

记录字段定义来自 OpenAPI 组件 Opinion:opinion_id、topic_time、agency_id、agency_score、stocks、concepts、summary(≤120 字)、detail(≤600 字)。其中 agency_id、agency_score 可为空(nullable)。

二、五级去噪流水线

级别 噪声类型 处理 依据字段
L1 顺带点名 请求时用 only_this_stock=1 或在本地按 len(stocks) 过滤 stocks
L2 同主体刷屏 同一 agency_id 在 N 小时内只计一次 agency_id、topic_time
L3 低分转述 按 agency_score 分层,低于阈值的单独计数 agency_score
L4 主体缺失 agency_id 为空的记录单列,不混入主体计数 agency_id
L5 泛概念词 概念层面优先用 /hot/concepts(已去掉泛词) concepts

2.1 L1:顺带点名

only_this_stock=1 只返回仅涉及该股的记录;0 返回该股为第一提及股的记录。两种口径结果不同,统计时要固定一种并写进报告。若需要更细的控制,可在本地按 stocks 数组长度分桶:

def breadth_bucket(rec):
    n = len(rec.get("stocks") or [])
    return "single" if n == 1 else ("few" if n <= 3 else "broad")

2.2 L2:同主体时间窗去重

import pandas as pd

def dedup_by_agency(df, hours=6):
    df = df.copy()
    df["t"] = pd.to_datetime(df["topic_time"])           # 北京时间
    df = df.sort_values("t")
    keep, last = [], {}
    for idx, row in df.iterrows():
        aid = row["agency_id"]
        if aid is None:
            keep.append(idx); continue                   # 交给 L4 单列
        if aid not in last or (row["t"] - last[aid]).total_seconds() > hours * 3600:
            keep.append(idx); last[aid] = row["t"]
    return df.loc[keep]

窗口 hours=6 为示例值,可按研究频率调整。

2.3 L3:按机构/大V分分层

熔岩机构/大V分大约在 450~1500,1000 左右算中等,1050 约为前 10%。建议分三层统计,而不是直接丢弃低分记录:

分层 区间(示例) 用途
高分 agency_score ≥ 1050 与 /hot/weighted 口径对齐
中等 950 ≤ agency_score < 1050 常规讨论量
其他 < 950 或为空 噪声观察,单独报告

注意:记录里的 agency_score 是当前分。做历史回看时,应按 topic_time 的日期用 get_agency_pit(as_of_date=...) 取 PIT 分替换,避免用到未来信息。

2.4 L4:主体缺失记录

agency_id 为空的记录不能参与「去重主体数」统计,但其条数本身是有效信息(例如资讯类内容)。建议在输出表中单列 n_no_agency。

2.5 L5:概念泛词

概念热榜 /hot/concepts 已去掉泛词;如果从记录的 concepts 数组自行统计,需要维护一份本地停用表,并在报告中注明。

三、去噪前后对比表

对单只股票 7 天记录跑一遍流水线后,输出一张对比表(示例数据):

指标 去噪前 去噪后 说明
记录数 186 74 L1+L2
去重主体数 52 52 去重不改变主体数
高分主体数 9 9 L3 分层
无主体记录 21 21 L4 单列
高分记录占比 8% 17% 噪声被压缩后的结构变化

四、与服务端口径的关系

  • /hot/stocks?min_score=1050 是服务端按分数门槛统计的提及,口径简单,适合全市场截面。
  • /hot/weighted 的 weighted_heat = 每次提及的机构/大V分 ÷ 1000 再相加,并使用 PIT 面板;给 as_of_date 时消息只算到当天 15:00。
  • 本地五级流水线适合单股或小样本深挖,可与上面两个服务端口径交叉核对。

FAQ

Q:去噪会不会把真实信号去掉? A:流水线不删除数据,只做分层与去重计数,原始记录应保留归档,方便复核。

Q:only_this_stock 默认是什么? A:文档只说明了 1 与 0 的含义,默认值以 OpenAPI 为准,建议显式传参。

Q:可以用 summary 做情绪打分吗? A:可以在本地另行处理,但熔岩返回的是结构化摘要与要点,不包含情绪分数字段。

结论

舆情去噪不需要复杂模型:先用 only_this_stock 和 stocks 处理顺带点名,再用 agency_id 做时间窗去重,用 agency_score(回看时换 PIT 分)分层,最后单列无主体记录。每一步都能对应到熔岩文档里的字段,结果可复现、可审计。

数据来自熔岩消息面热度监测,仅用于只读监测与统计研究,不构成投资建议。

只读监测与字段说明见:https://lava.ai-dolphin.com/subscribe/docs

No comments yet. Be the first to comment.

More from this blog

熔岩AI发布MCP舆情去噪方案:用 agency_id、agency_score 与 only_this_stock 过滤消息面噪声