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