财报数据中的虚胖与财务量化因子研究
从板块、量价上看到一个标的还挺不多。然后就对着财报结合AI好好的多维度分析了下。结果发现“虚胖”。这个事也让自己再深刻的理解了下纯量价层的高频和低频交易层面的差异。纯量价层短周期的高频,虽然大家说要让每个因子都要有金融逻辑,但一旦上了ML\DL模型后,对每个因子再进行复盘归因,基本上都是痴人说梦。这里的原因是在非线性关系中,可能单个因子表现不是最好,但模型最终构建的N个因子的组合效果是好的。另外高频因子本身来说,虽然出发点就是构建一个orderbook的ib因子,但可能结合了各种统计函数,结合了各种不同的周期参数,最终更多的还是数学组合,你要问一个金融逻辑上能解释的因子,为什么要衍生出来几十个,几百个因子时,即使说的人能说清楚,问的人未必能听的明白。所以“黑盒”其实有两个层面带来:一个是纯技术带来的封装,一个是知情者和不知情者沟通上鸿沟。综上,端周期量价的高频交易时,其实是不太思考金融逻辑的,即使不管从管理层面还是对客层面需要解释,但仅仅是为了解释而已,仅仅是为了给黑盒找一个外行能听得懂的描述。但做低频,特别是纯选股层面,或者通过量化辅助主观投资来说,基本面,而且对基本面数据的深究和勾稽关系,一定是要明白的。不能看到盈利高就以为标的好,盈利可能来自理财而非主营,不能看到现金流充足,就觉的稳,可能是融的钱还没处花。这个时候,如果无视数据本身的逻辑,完全通过代码一顿操作猛如虎,那肯定是瞎糊弄。1.财务数据中的虚胖
1)净利润
这个标的一季报中最引人注意就是归属净利润同比增长674.64%,达到0.98亿。但拆开看,这个增长含金量不足:拆看了看,主要问题是营收同比仍在下降,说明主业增长乏力。
数据中,本期近1.2亿的营业利润中,有8654万来自金融资产公允价值变动,是不可持续的“纸面财富”。
如果扣除这部分,真实经营利润(扣非净利润)仅1936万,对应扣非净利率才1.59%,盈利能力很薄。2)负债表
公司总资产从94.15亿增至106.9亿,最值得关注的是股东权益和负债的变化:完成大额融资:股本从8.71亿增至9.678亿,资本公积从10.12亿暴涨至21.70亿。结合现金流量表“吸收投资收到现金12.83亿”,公司在一季度完成了一次大规模股权融资(定增)。杠杆率骤降:融资直接改善了资产负债表。资产负债率从73.96%的警戒高位,降至69.18%。归母权益从19.61亿跳升至32.38亿。有息负债仍高:虽然有改善,但有息负债率仍达35.17%,短期借款(14.64亿)与一年内到期非流动负债(12.42亿)合计27亿,而货币资金仅18亿,短期偿债压力依然存在。3)现金流量
公司现金从8.76亿暴增至18.01亿,几乎全靠这次融资支撑。如果剔除这次融资,公司经营性现金流和投资现金流均为负,内生“造血”和“供血”机制是失效的。
4)运营效率
这么长的营业周期对运营资金压力巨大。同时应付账款周转159天,说明公司在大量占用供应商资金来维持运转。
所以,我确实被这个标的出现在最近量价信号关注的,也被净利大增长吸引的,同时被抓取的舆情数据中的“全国第X 全球第X”强化的。但通过最近围绕基本面学习的敏感性,还是决定认真看完报告中的数据再说。当然,也行财报本身就失真,但这个我们就当“黑天鹅”吧。毕竟这是公开给大家的东西。也是大众能看得到的东西。2.财务时序因子
上面是围绕财务数据一个指甲盖大小的点。从量化视角也看到一个很有意思的点:基本面时序。基本面因子,特别是财务数据相关的因子,因为其数量非常有限(只能通过季报,年报,修正)获取,所以通常情况下,都是作为截面数据使用。
但换个思路,如果将 “营业支出→营收增长→股价增长” 的传导链路,转化为可量化、可回测的指标组合,而非单一因子。则可以用时序来看这个问题。
1)思路
这里面的逻辑是:营业支出(含销售、管理、研发费用)的精细化管控,通过优化成本结构与资源投放效率,为企业营收的持续增长筑牢基础;而具备现金流支撑的高质量营收增长,又将通过强化企业盈利确定性与市场预期,最终驱动股价的长期上行。
2)数据
数据来源:通过官方或者开源数据如Wind/Tushare/Baostock,获取季度 / 年度利润表数据(营业支出、营收)、股价数据。去极值:对所有指标做 1%/99% 分位数缩尾,剔除极端异常值(如一次性大额支出)。滞后对齐:财报发布有滞后,T 日调仓仅使用 T-1 日已披露的最新财报(避免未来函数)。标准化:对指标做截面 Z-score(同行业同季度标准化),消除行业 / 时间维度差异。时序平滑:对单指标取近 3 期移动平均,减少噪声(如平滑值 = 0.5×本期 + 0.3×上期 + 0.2×上上期)。3)因子计算与合成
4)回测验证
分组回测:每月按因子值将股票分为 5 组,持有至下月,计算各组收益。核心指标:多空收益(第 1 组 - 第 5 组)、IC 均值(>0.02 有效)、ICIR(>0.5 稳定)。组合构建:每月买入综合分前 10% 的股票,等权 / 市值加权。评估维度:年化收益、夏普比率(>1.5)、最大回撤、相对基准超额收益。关键:需做行业中性化(控制组合行业暴露),避免因子偏向某一行业。5)示例代码
import pandas as pdimport numpy as np# 计算同比增速df['rev_yoy'] = df.groupby('stock_code')['revenue'].pct_change(4)df['exp_yoy'] = df.groupby('stock_code')['operating_expense'].pct_change(4)# 计算支出-收入弹性系数df['elasticity'] = df['rev_yoy'] / (df['exp_yoy'] + 1e-6)# 截面去极值df = df.groupby('trade_date', group_keys=False).apply( lambda x: x.clip(lower=x['elasticity'].quantile(0.01), upper=x['elasticity'].quantile(0.99)))# 截面标准化df['elasticity_z'] = df.groupby('trade_date')['elasticity'].transform(lambda x: (x - x.mean()) / x.std())df['rev_yoy_z'] = df.groupby('trade_date')['rev_yoy'].transform(lambda x: (x - x.mean()) / x.std())# 合成最终因子df['combined_factor'] = 0.6 * df['elasticity_z'] + 0.4 * df['rev_yoy_z']
operating_expense:营业支出(销管研费用合计)combined_factor:最终合成基本面因子