2. 知识库数据源分析

做知识库自动化更新,第一步不是写代码,而是搞清楚数据从哪来。

我见过不少团队,上来就搭Elasticsearch、搞向量数据库,结果数据源质量一塌糊涂。说白了,垃圾进垃圾出。你想想看,连数据源都没理清楚,后面的自动化全是白费功夫。

今天我们就来拆解一下,金融知识库的数据源到底有哪些门道。

2.1 内部数据源

内部数据源,就是公司自己产生的数据。这些数据最可靠,但也最容易被忽视。

交易系统数据

交易系统是金融公司的核心。每一笔订单、每一次成交、每一个撤单,都是宝贵的数据资产。

我个人习惯把交易数据分成三类:

  • 订单数据:委托时间、价格、数量、方向、订单类型
  • 成交数据:成交时间、成交价、成交量、对手方
  • 持仓数据:持仓量、成本价、浮动盈亏、保证金占用

这些数据通常存在Oracle或MySQL里。我建议直接连数据库的只读副本,别去碰主库。我在项目中遇到过有人直接查主库,结果把交易系统搞挂了,那场面...嗯,不提了。

小技巧:交易系统的数据量通常很大,建议按日期分区抽取。比如每天凌晨跑一次增量抽取,只拿前一天的数据。

风控系统数据

风控系统是金融公司的守门员。它记录了所有风险事件和预警信息。

风控数据主要包括:

  • 风险指标:VaR、希腊字母、敞口、集中度
  • 预警记录:触发时间、预警级别、预警类型、处理状态
  • 风控规则:规则ID、规则描述、参数配置、生效时间

这里有个坑——风控系统的数据格式往往很乱。有的用JSON存规则,有的用XML,还有的直接存成文本。我曾经花了两周时间,就为了解析一个风控系统的规则配置。所以,抽取之前一定要先做数据探查。

注意:风控数据涉及合规审计,抽取时务必保留完整的时间戳和操作日志。删数据?想都别想。

2.2 外部数据源

外部数据源才是知识库的「增量」来源。内部数据再全,也看不到市场全貌。

新闻数据

新闻是金融市场的晴雨表。一条突发新闻,可能让股价瞬间波动几个点。

新闻数据源我一般关注这几个:

  • 财经门户:东方财富、新浪财经、雪球
  • 官方媒体:新华社、人民日报、央视财经
  • 行业媒体:华尔街见闻、财联社、金十数据

抽取新闻数据,最头疼的是去重。同一件事,不同媒体会发几十篇报道。我建议用标题相似度+发布时间窗口来做去重。比如5分钟内,标题相似度超过80%的,只保留一篇。

研究报告

研报是深度分析的精华。券商研究所、第三方机构每天都会发布大量研报。

研报数据的特点:

  • 格式多样:PDF、Word、HTML,甚至还有扫描件
  • 结构复杂:有摘要、正文、图表、免责声明
  • 更新频率低:一般按周或按月发布

抽取研报,我建议优先处理PDF。用PyMuPDF或pdfplumber提取文本,再用正则表达式切分章节。注意,很多研报的免责声明占了半页纸,一定要过滤掉。

核心原则:外部数据源的质量参差不齐,一定要做清洗和标准化。别指望拿过来就能直接用。

监管公告

监管公告是金融知识库的「硬通货」。交易所、证监会、银保监会发布的公告,具有法律效力。

监管公告的主要来源:

  • 交易所:上交所、深交所、北交所的公告平台
  • 监管机构:证监会、银保监会、人民银行的官网
  • 行业协会:证券业协会、基金业协会

抽取监管公告,难点在于反爬。很多监管网站有反爬机制,比如验证码、IP限制、请求频率限制。我建议用Selenium模拟浏览器操作,配合代理IP池。不过要注意,别把人家网站搞挂了,毕竟监管机构不是技术公司。

2.3 数据源质量评估

数据源质量评估,是知识库自动化的前提。没有评估,就没有优化方向。

我一般从四个维度评估:

维度 指标 说明 评估方法
完整性 缺失率 字段缺失的比例 统计空值数量 / 总记录数
准确性 错误率 数据与真实值的偏差 抽样人工核对
时效性 延迟时间 数据产生到入库的时间差 对比时间戳
一致性 冲突率 不同数据源间的矛盾比例 交叉比对

举个例子。我之前评估过一个新闻数据源,发现它的时效性很差——新闻发布后平均延迟2小时。对于高频交易来说,2小时黄花菜都凉了。后来我们换了一个实时新闻API,延迟降到30秒以内。

评估频率建议:
  • 内部数据源:每周评估一次
  • 外部数据源:每天评估一次
  • 监管公告:每次抽取后立即评估

评估结果要记录下来,形成数据质量报告。我习惯用Python写一个自动化评估脚本,每天跑一次,生成HTML报告。这样出了问题能第一时间发现。

下面是我常用的评估代码片段:

def assess_data_quality(df, source_name):
    """评估数据源质量"""
    report = {
        'source': source_name,
        'total_records': len(df),
        'missing_rate': df.isnull().sum().sum() / (len(df) * len(df.columns)),
        'duplicate_rate': df.duplicated().sum() / len(df),
        'time_lag': (datetime.now() - df['timestamp'].max()).seconds / 3600
    }
    return report

这个函数会返回一个字典,包含数据源的基本质量指标。你可以把它集成到你的ETL流程里,每次抽取完自动评估。

好了,数据源分析就讲到这里。记住一句话:数据源质量决定了知识库的天花板。别在数据源上偷懒,否则后面全是坑。

一句话总结:内部数据源要稳,外部数据源要全,质量评估要勤。三者缺一不可。

公众号:蓝海资料掘金营,微信deep3321