3. 数据准备与清洗实战

周度行业强弱复盘的第一道门槛不是模型,而是数据。很多人在复盘时发现“上周明明最强的是电子,这周怎么变成有色了”,追根溯源往往不是市场判断错了,而是数据口径不一致:行业指数用的是申万一级,成分股却来自中证行业分类;指数周线按自然周收盘,宏观事件却按发布日记录;某只成分股停牌导致权重缺失,被简单填零后拉低了整条行业曲线。本节要解决的就是把三类数据——行业指数周度行情、成分股数据、宏观事件日历——整理成一张可以逐周对齐、口径统一、异常可追溯的分析底表。

一、三类数据的获取与字段约定

行业指数周度行情是复盘的主线。以申万一级行业为例,需要获取每个行业每周的开盘、最高、最低、收盘、成交额与成交量。这里的关键是周度K线的定义:是按自然周(周一至周五)聚合,还是按交易日历的最后交易日聚合。若某周遇到节假日,周五休市,则周收盘应取该周最后一个交易日收盘价,而不是简单取周五数据导致空值。建议统一采用“交易日历驱动的周聚合”:先确定每周的起止交易日,再取区间内首日开盘、末日收盘、区间最高最低、区间成交额求和。

成分股数据用于解释行业涨跌的来源。需要至少包含:股票代码、名称、所属行业、纳入日期、剔除日期、周度涨跌幅、周度成交额、流通市值。成分股是动态调整的,若直接用当前成分股回溯历史,会产生“幸存者偏差”——已经退市或调出的股票被排除,导致历史收益被高估。正确做法是保留时点成分股:每一周使用该周实际生效的成分股名单,通过纳入日期与剔除日期做区间匹配。

宏观事件日历记录可能影响行业强弱的外部冲击,字段包括:事件日期、事件类型(如利率决议、CPI发布、PMI公布、行业政策)、影响方向(利好/利空/中性)、影响行业范围(全市场或特定行业)、事件描述。事件日历的价值在于给周度异动提供归因线索,因此日期必须精确到发布日,且要区分“数据所属期”与“发布日”——例如1月CPI数据在2月发布,应记在发布日所在周。

二、数据对齐:以交易日历为骨架

三类数据的时间粒度不同:指数是周度,成分股是日度或周度,事件是离散日期。对齐的核心是建立一张周度主表,以“行业×周”为唯一键,把成分股聚合结果和当周事件挂接上去。具体做法是:先由交易日历生成周序列(周编号、起始交易日、结束交易日),再与行业指数按周编号左连接,确保每个行业每周都有一行;成分股按周聚合成“行业×周”的涨跌家数、加权涨跌幅、成交额占比;事件日历按“事件发布日落在该周区间内”匹配到周,若一周内多事件则合并为事件列表字段。

对齐时最容易出错的是连接键的选择。若用自然周序号连接,跨年时周序号会重置;若用日期直接连接,周度与日度无法匹配。稳妥的做法是给每周分配一个连续的“周序号”整数(如从研究起点开始累加),三类数据都换算到该序号后再连接。下图展示了这一对齐结构:左侧三类原始数据经过各自的聚合规则,汇入中间的周度主表,右侧输出可供复盘使用的宽表字段。

三类数据向周度主表对齐的结构 行业指数周度行情 开/高/低/收、成交额 按交易日历周聚合 键:行业代码 + 周序号 成分股数据 时点成分股名单 周涨跌幅、成交额 按行业聚合为周指标 宏观事件日历 发布日、事件类型 影响方向、影响行业 按发布日落入周区间 周度主表 唯一键:行业 × 周序号 周起止交易日 行业周涨跌幅 成分股加权涨跌 上涨/下跌家数 当周事件列表 数据质量标记 复盘分析宽表 行业周收益排名 收益变化(本周-上周) 成分股贡献度 事件归因标签 缺失/异常标记 可回溯的数据版本 供强弱变化与归因使用 不直接进入排名计算

三、缺失值处理:先判断缺失类型,再决定填充方式

缺失值在周度数据中主要有三种来源,处理方式完全不同。第一种是停牌或未上市:某成分股当周停牌,其周涨跌幅为空。这类缺失不应填零,因为停牌不等于不涨不跌,正确做法是在计算行业加权涨跌幅时将其权重剔除,并记录“有效成分股数”。第二种是指数数据缺失:某行业指数因数据源问题缺一周收盘价。若前后周均有数据,可用前后周收盘价做线性插值,但必须在质量标记中注明“插值”;若连续缺失超过两周,应标记为不可用,避免在排名中产生虚假的强弱跳变。第三种是事件日历缺失:某周没有记录任何事件,这通常是正常的“无重大事件”,应填“无”而非空值,以便与“数据未获取”区分。

一个常见的错误是用行业均值填充个股缺失。假设某行业有50只成分股,其中3只停牌,若用行业均值填充这3只,会人为地把停牌股拉回行业平均,削弱了真实成分股结构对行业收益的影响。更合理的做法是权重归一化:仅用有效成分股的流通市值重新计算权重,使权重之和为1,再计算加权涨跌幅。这样既保留了有效成分股的真实贡献,又不会因缺失引入偏差。

四、异常值修正:区分“真异常”与“数据错误”

异常值修正的前提是判断异常的性质。周度行业涨跌幅出现±15%以上,可能是真实行情(如行业重大政策出台),也可能是数据错误(如复权因子未更新、代码错配)。实操中可用两条规则交叉验证:一是横向对比,若某行业单周涨幅远超同期全市场行业涨幅分布的上四分位数加3倍四分位距,则标记待查;二是纵向对比,若某行业周涨跌幅与其成分股加权涨跌幅差异超过5个百分点,说明指数与成分股口径不一致,需检查成分股名单是否为时点名单。

对于确认的数据错误,修正方式应保留痕迹而非直接覆盖。建议在宽表中增加“原始值”与“修正值”两列,并记录修正原因。例如某行业因复权因子错误导致周涨幅显示为+38%,经核对成分股实际加权涨幅为+2.1%,则将修正值设为+2.1%,原始值保留,质量标记为“复权修正”。这样在后续复盘时,任何一周的排名变化都能追溯到数据层面的处理动作,而不是变成无法解释的黑箱。

对齐与清洗完成后,建议做一次“周度完整性检查”:每个行业每周是否都有且仅有一行、有效成分股数是否大于行业成分股总数的60%、当周事件字段是否非空。三项全部通过,才进入强弱排名计算。

完成上述步骤后,得到的就是一张以“行业×周”为粒度、字段齐全、缺失与异常均有标记的复盘底表。它不直接告诉你哪个行业强,但它保证了后面每一周的排名变化、每一次归因分析都建立在同一把尺子上——这正是周度行业强弱复盘能够持续做下去的基础。