跳到正文

研究指南

公司研究与估值

券商盈利预测准不准:按相同提前期回看已到期预测

判断券商盈利预测准不准,先要说明预测离实绩公布还有多久。提前180天与提前30天的预测拥有不同信息,不能直接混在一起比较。可复查的结果应是一张历史冻结预测与实绩的逐行面板,包含截止日、选用版本、未覆盖记录和误差。先固定样本和选择规则,再计算统计量,才能知道一个较小数字究竟意味着什么。

本文使用同一家虚构公司的两个财年、两家虚构券商和两个提前期。历史冻结预测必须由外部归档提供。程序按合成日期生成测试记录,只是为了复现选择逻辑,并不能把今天的报告变成过去的真实预测,也不代表Vibe或CoTrading能够自动取得历史一致预期、券商覆盖历史或授权研报全文。

取得真正能回答问题的历史版本

每条预测至少记录证券、券商、目标财年、EPS口径、币种、预测值、原始来源标识和该版本的冻结日期。允许保存时保留对应报告。一个今天下载、目标年度写着2024的表格,不能单凭年度标签证明券商在2024年就给出了这个数。归档时间应描述预测版本本身,而不是后来整理表格或导出文件的时间。

实绩侧记录目标期间、正式发布日期、实际EPS和版本来源。预先决定以首次公布还是指定重述版实绩评分,全样本保持一致。IAS 33官方概览区分基本和稀释EPS;本例两侧都采用同年度、人民币每股、稀释口径。券商调整后预测与法定实绩不能未经桥接就当成同一个指标。

合成实际为2024财年EPS1.00,2025年3月1日公布;2025财年EPS1.20,2026年3月1日公布。这是测试日期,不是真实公司的日历。实绩数据不参与挑选最有利预测:选中哪个历史版本,只能由冻结时间和事先约定的口径决定,不能事后挑最接近答案的报告。

在查看误差前固定相同提前期

分别建立180天和30天面板。对每个公司、财年和提前期,用实绩正式发布日期减去相应天数,得到截止日期。选择不晚于截止日、最多陈旧三个日历日的最近归档。三天容忍度是本例显式设定,真实研究可以另定,但同一比较组不能对某家券商更宽松,也不能因数据不足临时缩短提前期。

Python datetime文档支持这里的日期加减。样例只做日级选择,不声称日历日等于交易日,也不处理盘中先后顺序。使用时间戳时,需要补充时区、盘后报告何时可用等定义。归档缺失应保留缺失,不能只因为目标财年一样,就拿截止日后发布的预测填进旧位置。

若同券商、同财年、选中同一天出现两个不同EPS,且没有更细发布顺序证据,就拒绝该观察值。不能让输入表第一行或最后一行决定排名。相同数值可以去重并保留来源;不同数值必须显式冲突。完整样例对冲突记录正序、反序都验证同样拒绝,防止数据排列改变统计结论。

约定误差方向,再计算绝对误差和偏差

本文误差定义为预测减实际,正值代表高估,负值代表低估。平均绝对误差MAE对每条差值先取绝对值再平均,单位仍是人民币每股;偏差对带符号差值平均。两者旁边必须给出实际评分条数与理论可评分条数。否则主动遗漏难预测财年的样本,可能看起来比完整覆盖的样本更准。

《Forecasting: Principles and Practice》原始教材解释了MAE及零附近百分比误差的不稳定。样例只在实际EPS大于0.05时计算相对误差。这是本例预设的谨慎阈值,不是会计准则或普遍标准。非正和接近零的实际仍保留绝对差,相对指标留空;NaN和正负无穷则属于无效财务数,不能当成特别大的预测错误。

f, a = finite(forecast), finite(actual)
difference = f - a
relative = difference / a if a > D("0.05") else None

下载例使用Decimal保存中间误差,再在展示时格式化。不要先把每个误差取整后再平均。对于本来只有几分钱差异的小样本,过早取整可能改变比较关系,也会让逐行和汇总之间无法核对。

逐项读懂两个提前期的结果

180天组中,A券商对2024和2025财年的预测为1.20和1.00,对实际1.00与1.20的差为+0.20和−0.20。MAE为0.20,偏差为0,覆盖2/2。偏差为零并不表示没有错误,它只是两次相反方向的错误刚好抵消,所以必须同时展示绝对误差和逐年记录。

B券商180天归档只有2024财年的0.90,差为−0.10,MAE为0.10,覆盖1/2。2025财年的1.18只存在于30天组,程序不会借来补180天缺口。如果只看0.10小于0.20就宣称B更准确,便忽略了未覆盖财年和极小样本。缺口本身也是最终交付的一部分,应列出具体年份。

30天组中,A为1.05和1.15,MAE0.05,覆盖2/2;B为0.98和1.18,MAE0.02,覆盖2/2,偏差−0.02。它们属于独立的短提前期结果。不要把长短期误差直接平均成一个总分,否则会把信息更充分的临近报告优势混进所谓预测能力,无法回答原来的同提前期问题。

下载完整示例。使用Python 3.12+、标准库及合成数据,运行python R547.py。输出包含两个提前期面板、评分条数、缺失财年和近零反例;断言覆盖历史版本选择、误差、同日冲突及预测和实际两侧的非有限数阻断。

区分归档缺口与分母不稳定

另一种机制是实际EPS0.01、预测0.03,绝对差0.02。它不属于没有历史报告,而属于相对分母太小,按规则相对误差留空。不能把分母改成1,也不能删除整条观察,再宣称样本更稳定。保留实际、预测、绝对差和相对指标不可用原因,让读者知道究竟缺什么或为什么不计算。

更大研究可增加所有券商共同覆盖财年的对照样本,同时保留各券商完整的可评分面板。共同样本与全样本回答不同问题,不能悄悄替换。跨公司汇总前还应检查行业构成、股数单位和预测期间,EPS绝对误差适合同公司直读,跨股价和股数差异巨大的公司需要额外论证归一化方法,不能直接拿每股几毛钱决定谁更好。

保存可逐年追加的评估面板

对每个预期券商、财年和提前期都留一行,包括缺失和冲突行。记录截止日、选中冻结日期、预测来源、实际版本、绝对差、相对资格及排除原因。汇总只来自已接受记录,但覆盖诊断必须保留未接受项;总数要能和预期面板格子数量对上。原始来源与选择结果分开保存,后续才方便查证。

新财年实绩成熟后,只追加当时已冻结的预测和兼容实际。遇到实绩重述、归档修正或口径桥接变化时,建立新的评估版本并列出受影响行。当前报告可以支持今后的判断,不能补造过去没有保存的版本。最终结论应限定在实际测量的样本、提前期与覆盖范围,不把这份演示的几次误差变成券商推荐。

先验收版本选择,再验收统计量

把版本选择表和误差评分表分开保存。第一张只列预期格子、历史截止、候选冻结版本、是否落在三天容忍区间、最终来源和缺失原因;第二张再接实际EPS计算差值。复查者可以先不看答案检查时间资格,避免知道哪份预测更接近实际后,倾向选择那份报告。目标财年相同不等于时间资格相同。

覆盖分母也要在看误差前固定。本例每个券商每个提前期应有两个财年,B在180天只有一个合格值,缺失2025仍保留在预期面板。若真实研究中券商退出覆盖、公司退市或数据授权范围改变,应记录结构性缺口,不能直接删除所有难以找到的公司年,再把剩余样本称为原研究范围。

当来源只保存日级日期而同一天有多次不同发布,不能用文件名排序推测先后;取得可信时间戳后再按预设规则处理,取得之前保持冲突。新增证据导致选择变化时,用新评估版本重算受影响格子,并说明旧版为什么不可比。最终数字精确到小数点后几位,并不能弥补归档时间没有证据的问题。

计算完还要核对舍入显示。面板可以展示两位小数,但源预测、原实绩和未舍入差值应继续保存,汇总由未舍入值产生。若导出格式把0.02显示成0,不应进一步解释为没有误差;展示精度与经济意义需要分别说明。

常见问题

每个旧财年直接取最新预测可以吗?

那是在研究另一种时点问题。相同提前期评估必须使用历史截止日前真实冻结的版本。

偏差为零说明预测能力好吗?

不能,相反方向误差可能抵消。需要同时看MAE、覆盖数量及逐条差值。

相关阅读