新财报出来后怎么更新盈利预测模型:只改受影响的驱动项
财报后更新盈利模型,应该留下旧预测到新预测的可核查变化桥。先用兼容实绩替换已经结束的季度,再根据新证据决定是否修改未来驱动项,两步分别重算。这样才能分清EPS变动究竟来自已经发生的结果,还是来自研究者对未来收入、利润率或费用的看法发生变化,而不是只得到一个新的总数。
本文用个人简化季度模型演示,驱动项为收入、营业利润率、财务费用和税率,在固定股数假设下计算利润代理与全年EPS。它是独立可运行方法,不是通用财报读取器、完整三表模型,也不代表CoTrading能够自动维护研究模型。新的一致预期可以作为外部对照,但不能代替解释个人模型内部为什么变化。
冻结旧模型,识别新信息的性质
编辑前保存旧模型、版本、财年、单位、股数假设及原来源。逐季标记实际或预测,建立驱动字典说明营业利润率包含哪些费用、计算利润代表什么。如果覆盖同一批单元格且不保留历史,就无法证明之前真正预测了多少,也无法把后来的实际替换与主动调高假设区分开来。
取得正式财报,核对期间、币种、合并范围和相关附注。IAS 34概览说明中期报告与年度报告的关系。粘贴数据前要确认单季还是累计,半年收入不能直接替换第二季度收入。若合并范围变化,还需要可比口径说明,不能仅因字段名称一样就认为新旧能直接相接。
将已报告事实和支持未来判断的材料分开。已结束季度的收入、费用可以替换旧估计;订单、成本合同或明确指引可能支持未来修订,但要标出适用季度和独立来源。报告提供证据,如何把证据转成未来参数是个人研究判断,这两层不能因为“AI已读财报”而合并成自动确认的事实。
先确保简化模型可以正向重算
每季利润公式是(收入 × 营业利润率 − 财务费用) × (1 − 税率)。四季合计除以外供100百万股,得到全年EPS,金额单位为百万元。旧模型每季收入100、利润率20%、财务费用0、税率25%,每季利润15,全年60,对应每股0.60元。先把这个基准算通,再开始替换和修订。
该公式没有覆盖非经营损益、少数股东、递延所得税等真实报表细节,这些项目重要时应扩大模型,不能把代理结果直接称为已经对账的法定归母利润。IAS 33涉及EPS分子与分母,本例固定股数只是明确的简化输入,不是完整稀释EPS调整,后续若股本变化需要单独处理。
输入先要求有限数字、非负收入、支持范围内的利润率和税率、正股数。Python Decimal用于中间计算,同时必须拒绝NaN和正负无穷。必需实际缺失时保留未知。通过验证只说明这套已声明模型能够计算,不说明软件已经验证每一项经营假设,也不说明模型没有遗漏重要会计项目。
第一步只替换实际,不改变未来
虚构Q1财报输入收入120、利润率18%、财务费用0、税率25%,来源标识filing:AAA:Q1。Q1利润变为16.2。第二、第三和第四季度暂时保持旧值,各为15,全年利润61.2,EPS0.612。相对旧0.60,实际替换效应为每股+0.012,不应把它解释为对尚未发生季度的主动看好。
这个中间模型也要保存。它回答“如果只换入刚公布实绩,未来观点完全不变,会发生什么”。没有这一步,未来调高利润率可能掩盖当季低于预测,或者较强的实绩会被错误归因于未来展望改善。中间层能把叙述变成可核对算术,并让复查者只检查受影响季度就找到差异。
程序深复制旧模型,避免直接覆盖原始输入。实际替换保留来源与actual标记,所需驱动作为一组收集,返回前先计算该季。来源字段是研究者提供的可追踪引用,不意味着脚本独立鉴定了文件真伪或完成任意PDF提取。真实流程仍需核对报告行、单位和期间,不能把一个来源字符串当成审计证明。
第二步只改有证据支持的未来驱动
合成研究记录对Q2提供两项已复核修订:收入改110,来源orders:AAA:review-1;利润率改19%,来源costs:AAA:review-1。财务费用和税率保持旧值。Q2利润变15.675,比旧15多0.675,全年利润61.875,EPS0.61875。相对实际替换模型,未来假设影响为每股+0.00675。
变化桥为0.60 + 0.012 + 0.00675 = 0.61875,顺序明确是先实际、后有证据的未来参数。多个非线性参数存在交互时,改变顺序可能改变各分项分配,所以必须保留顺序,不能说每个贡献是唯一的因果分解。最终EPS仍需和最终驱动表重算一致,桥的两段合计应等于新旧差额。
before = eps(old_model)
actual_only = eps(after_actual)
after = eps(revised_model)
actual_effect = actual_only - before
assumption_effect = after - actual_only
下载完整示例。使用Python 3.12+、标准库与合成数据,运行python R549.py。完整文件包括旧模型不变检查、驱动来源日志、允许字段验证、无依据修订拒绝、缺失输出和计算断言;上面只展示三层模型都可算时的桥接公式。
两类反例分开处理
有人建议Q3利润率由20%提高到30%,但没有提供证据。脚本记录missing_revision_evidence,Q3继续保持20%,Q4也不动。它们仍是assumed,不会因为刚更新过其他季度就变成新确认事实。把待研究问题单独列出,不能先看更高EPS很吸引人,再倒过来接受缺来源的参数。
另一机制是Q1必需实际税率缺失。此时实际替换模型全年EPS未知,相应桥接影响也未知,不能从旧模型拿25%预测税率补上并标为实际。如果确实要做临时估计,应另建“部分实际加假设”的模型,明确状态、采用理由和后续补查条件,而不是在正式财报更新中隐藏这项选择。
两种问题的下一步不同:缺依据的Q3修订需要补证据或保留旧假设;缺Q1实际则需要回查财报、取得可比利润行,或明确批准建模假设。把它们都写成“稍后重试”无法说明哪一层还没完成,也会让下游误以为已经得到完整新预测。未知本身是有效结果,需要伴随具体字段和来源缺口。
分发前复查驱动日志与模型边界
输出表列季度、字段、旧值、新值、实际或假设状态、来源标识和原因。把旧EPS、仅实际替换EPS、最终EPS并列,同时保留拒绝修订和缺失字段。对变更季度独立手算利润,检查没有修改的季度和旧模型均保持原值,再核对变化桥恰好等于最终新旧差,不只核对最终答案好不好看。
真实研究还要复核股权稀释、会计范围改变、现金流影响与资产负债表联动,简化例没有覆盖这些内容。若其中任何项重要,就先扩大模型和检查,再分发EPS结论。Python运行成功证明展示的计算和边界,不证明一家公司估值已经完整,也不证明预测将实现。报告语言应跟模型支持的范围相称。
以后新季度或经审核的未来假设到达时,以最后接受版本为起点创建新版本,保留每个驱动的证据历史。纠正提取错误与主动改变未来假设需要不同修订类型,复查者才能解释为何EPS移动。最终写作应从驱动日志生成可核查说明,而不是用流畅叙述重复最终数字,省略中间未知和未采纳的建议。
把修订证据落实到字段而非整份模型
修订来源应跟随季度与驱动字段保存。一个成本复核可以支持Q2利润率,不自动授权改变Q3收入、税率或全年股数。来源标题相同也可能对应不同页码和假设,真实记录还需补相关段落、发布日期以及研究者采用的解释。仅写“来自最新财报”无法说明为什么某个未来季度被调整,也不能帮助后来撤销不再成立的判断。
收到互相矛盾的未来指引时,先保留各自证据并决定有标签的情景或选择政策,不能依赖输入列表最后一项覆盖前项。本例只提供每个字段一条已核修订,没有解决任意冲突的自动判断。若扩展到多个修订来源,需要另加冲突检查,先阻断不确定项,再决定最终模型,而不是用新EPS是否好看来选择。
最后核对单位与股数是否同源兼容。利润在百万元、股数在百万股时相除为元每股,不能再乘一百万。未来发行或稀释变化应形成单独分母修订桥,不能隐藏到营业利润率里。现有例固定100股数,是为了隔离实际与经营假设效应;这个简化条件应跟随输出,避免下游把0.61875当成完整稀释调整后的实际预测。
常见问题
财报后未来所有季度都要调整吗?
不需要。只改证据支持的驱动,其他假设继续可见且保持原值。
旧预测能填补实际缺失字段吗?
只能放进明确标注的临时混合模型,不能冒充已经报告的实际。