3. 数据源与采集:交易所公告、社交媒体、公司财报、关联方数据获取

做内幕交易图谱,说白了就是跟数据打交道。我干了这么多年反欺诈,最深的体会就是:数据源的质量,直接决定了你图谱的生死。你想想看,如果源头数据都是脏的、不全的,后面再牛的算法也白搭。

这一章,我就把我在项目中踩过的坑、积累的经验,掰开了跟你聊聊。咱们重点看四类数据源:交易所公告、社交媒体、公司财报、关联方数据。嗯,一个一个来。

3.1 交易所公告:最硬的“硬数据”

交易所公告,是所有数据里最靠谱的。因为它有法律效力,造假成本极高。我个人习惯,把它作为图谱构建的“锚点”。

核心采集内容:

  • 重大资产重组公告:停牌、复牌、交易方案、标的公司估值。这是内幕交易的高发区。
  • 股权变动公告:大股东增减持、股权质押、协议转让。注意看时间点和交易对手方。
  • 业绩预告/快报:净利润大幅变动、扭亏为盈。这些信息一旦提前泄露,就是内幕。
  • 关联交易公告:与子公司、兄弟公司、关键个人的交易。金额大、频率高的要特别关注。
避坑指南: 我曾经在采集上交所公告时,发现同一个公告编号,PDF内容和网页摘要居然不一致。后来排查发现,是交易所系统在公告发布后半小时内允许“补正”。所以,建议采集时间窗口设在公告发布后1小时,避免拿到半成品。

采集技术要点:

  • 使用交易所官方API(如深交所的“信息披露直通车”接口)。
  • 备选方案:爬取巨潮资讯网、东方财富网等聚合平台。
  • 解析PDF时,注意表格和图片中的关键数据。我习惯用pdfplumber + camelot组合。
# 伪代码示例:采集并解析交易所公告
import requests
from pdfplumber import open as pdf_open

def fetch_announcement(stock_code, date):
    url = f"http://api.szse.cn/api/announcement?code={stock_code}&date={date}"
    resp = requests.get(url)
    pdf_url = resp.json()['data'][0]['attachUrl']
    
    # 下载并解析PDF
    with pdf_open(pdf_url) as pdf:
        text = ""
        for page in pdf.pages:
            text += page.extract_text()
    return text

3.2 社交媒体:捕捉“噪音”中的信号

社交媒体数据,又爱又恨。爱的是它时效性极强,恨的是噪音太大。我见过太多团队,花大价钱买了舆情数据,结果图谱里全是垃圾边。

重点采集平台:

  • 雪球、东方财富股吧:散户聚集地,但也是内幕消息的“试水池”。注意看那些“吹票”的帖子。
  • 微博、微信公众号:财经大V、分析师、甚至上市公司高管的自媒体。他们不经意的一句话,可能就是信号。
  • Telegram、微信群:这是内幕交易的重灾区。虽然采集难度大,但价值极高。我建议通过“爬虫+人工标注”的方式,先建立种子库。
我的经验: 别试图分析所有帖子。先聚焦“高影响力用户”和“异常活跃时段”。比如,某只股票在停牌前,股吧突然涌入一批新注册账号,发帖内容高度一致——这大概率是“水军”在预热。

采集技术要点:

  • 使用社交媒体开放API(如微博开放平台)。
  • 对于封闭群组,可以考虑“模拟登录+消息监听”方案。但注意合规风险。
  • 文本清洗时,保留表情符号、@提及、话题标签。这些往往是情绪和关系的载体。

3.3 公司财报:结构化与非结构化的博弈

财报数据,看起来规整,其实坑最多。为什么?因为关键信息往往藏在“附注”里,而不是表格里。

核心采集内容:

  • 资产负债表:关注“其他应收款”、“长期股权投资”等科目。这些科目容易藏关联方资金往来。
  • 利润表:非经常性损益、投资收益。这些是调节利润的常用手段。
  • 现金流量表:经营活动现金流与净利润的匹配度。背离越大,猫腻越多。
  • 附注:关联方交易明细、担保情况、股权结构图。这是图谱构建的“金矿”。
注意: 我曾经在分析一家公司的财报时,发现其“其他应收款”科目突然暴增。顺着附注里的明细,发现资金流向了几个自然人账户。再一查,这些自然人是公司高管的亲属。这就是典型的“资金占用型内幕交易”。

采集技术要点:

  • 结构化数据:通过Wind、Choice等金融终端API获取。
  • 非结构化数据:解析PDF/HTML财报,重点提取附注中的表格。
  • 我推荐使用BeautifulSoup + pandas处理HTML格式财报,用tabula-py处理PDF表格。
# 伪代码示例:提取财报附注中的关联交易
import pandas as pd
from tabula import read_pdf

def extract_related_party_transactions(pdf_path):
    # 读取PDF中所有表格
    tables = read_pdf(pdf_path, pages='all', multiple_tables=True)
    
    # 筛选包含“关联方”或“关联交易”的表格
    related_tables = []
    for table in tables:
        if '关联方' in table.columns or '关联交易' in table.columns:
            related_tables.append(table)
    
    # 合并并清洗
    df = pd.concat(related_tables, ignore_index=True)
    df = df.dropna(how='all')
    return df

3.4 关联方数据:图谱的“骨架”

关联方数据,是内幕交易图谱的核心。没有它,你看到的只是孤立的点,而不是一张网。

核心采集内容:

  • 工商注册信息:股东、董事、监事、高管。注意交叉持股和代持关系。
  • 亲属关系:配偶、父母、子女、兄弟姐妹。这是内幕交易最常用的“马甲”。
  • 社会关系:同学、校友、前同事、同乡。这些关系在公开数据中很难获取,但价值极高。
  • 资金往来:银行流水、证券账户交易记录。这是最直接的证据,但采集难度最大。
关键思路: 关联方数据,不要只盯着“直接关系”。要构建“二度关系”甚至“三度关系”。比如,A是B的姐夫,B是C的大学同学,C是D的生意伙伴。A和D看似无关,但通过B和C,他们可能共享内幕信息。

采集技术要点:

  • 工商数据:通过企查查、天眼查等平台的API获取。
  • 亲属关系:结合户籍数据、婚姻登记数据(需合规授权)。
  • 社会关系:利用LinkedIn、校友录等社交平台,通过“关系图谱”算法推断。

3.5 数据采集架构:一张图说清楚

下面这张图,是我在项目中常用的数据采集架构。它把上面说的四类数据源,统一到一个管道里。

内幕交易图谱数据采集架构 数据源层 交易所公告 社交媒体 公司财报 关联方数据 采集层 API接口 / 爬虫 / 模拟登录 / PDF解析 / OCR 定时调度 | 增量采集 | 去重 | 异常重试 存储层 原始数据湖 (HDFS/S3) 结构化数据 (MySQL/ClickHouse) 图数据库 (Neo4j/JanusGraph)

这张图的核心逻辑是:先采集,再清洗,最后入图。我个人习惯,在采集层和存储层之间,加一个“质量校验”环节。比如,检查公告的PDF是否完整、财报的表格是否对齐、社交媒体的时间戳是否合理。这一步,能省掉后面80%的麻烦。

一个小技巧: 对于社交媒体数据,我建议做“情感分析”和“话题聚类”。把正面、负面、中性的帖子分开存储。这样,在构建图谱时,可以快速定位“异常情绪”节点。

好了,数据源和采集这块,就聊这么多。记住一句话:数据是图谱的血液,采集是图谱的血管。血管不通,血液再好也没用。

专注资料整理