Altman Z-Score 实战指南4 个财务数字如何算出企业的隐含信用评级【免费下载链接】python-trainingPython training for business analysts and traders项目地址: https://gitcode.com/gh_mirrors/py/python-trainingAltman Z-Score 用资产负债表、利润表和市值上的 4 个数字就能把一家公司的信用风险折算成一个可比的评级刻度。这篇指南带你走完拉财报 → 算四个比率 → 加权得 Z 值 → 映射 AAA 到 D的完整链路跑完后你可以对任意一家上市公司复现同样的分析。30 秒上手这套分析到底产出什么先把结论摆出来一份约 12 行的 Python 脚本输入一个 ticker输出两样东西——一个 Z 值比如4.343数值越低离违约越近一个常规信用刻度上的隐含评级比如AA银行和交易台可以直接拿它对标风险敞口。仓库 python-training 里有一份完整可运行的示例 notebooks/8_altman_z_double_prime.ipynb用 pyEX 客户端从 IEX 接口拉取三张财务报表加关键行情逐行演示了全部计算过程。本地跑起来git clone https://gitcode.com/gh_mirrors/py/python-training打开该 notebook 后把示例里内置的 api_token 换成你自己的数据接口凭据仓库中的 token 仅作演示以官方数据源为准依赖环境见 binder/requirements.txt。先看清四个分量的含义再动笔算 ⚖️Z-Score 出自 Edward Altman 1968 年提出的多元判别分析在违约组和正常组两批企业里找出最能区分两者的财务变量组合再赋予权重。它不猜股价、不靠感觉只用报表上现成的数字。四个分量各盯一个风险维度x1 营运资本 / 总资产家底扣掉短期欠账后还剩多少衡量短期流动性权重 6.56x2 留存收益 / 总资产历史上是攒钱还是烧钱衡量抗风险的家底权重 3.26x3 EBIT / 总资产每块资产一年能生多少税前经营利润权重 6.72x4 权益市值 / 总负债市场给股东的定价相对总欠账的倍数隐含对偿债能力的信心权重 1.05。为什么 x1、x3 权重最高经营赚钱能力和短期流动性是破产最直接的两个前兆。x4 权重看似最低但分母是总负债杠杆越高波动越大实际影响不小。代入 7 个报表数字手算一遍验证流程用一组虚构数据过一遍计算路径单位元报表项目金额来自currentAssets 流动资产8 亿资产负债表totalCurrentLiabilities 流动负债3.2 亿资产负债表totalAssets 总资产20 亿资产负债表retainedEarnings 留存收益-1 亿资产负债表totalLiabilities 总负债6 亿资产负债表ebit 息税前利润0.6 亿利润表marketcap 总市值15.6 亿行情数据四个分量依次是x1 (8 - 3.2) / 20 0.24x2 -1 / 20 -0.05注意是负的这家公司历史上累计亏损x3 0.6 / 20 0.03x4 15.6 / 6 2.60加权求和Z 6.56×0.24 3.26×(-0.05) 6.72×0.03 1.05×2.60 1.5744 - 0.163 0.2016 2.73 4.343单项难看整体未必危险——x2 为负拉低了分数但 x4 贡献了大头把整体撑回健康区间反过来也成立。记住 4.343 这个数下一节把它翻译成品级。核心代码12 行算出 Z 值import pyEX as p c p.Client(api_token你的token, versionv1) # 替换为自己的凭据 def z_dp(ticker): bal c.balanceSheetDF(ticker) # 资产负债表按报告期排列 inc c.incomeStatementDF(ticker) # 利润表 mc c.keyStats(ticker)[marketcap] # 当前总市值实时行情 ta bal[totalAssets][0] # [0] 取最新一期 x1 (bal[currentAssets][0] - bal[totalCurrentLiabilities][0]) / ta x2 bal[retainedEarnings][0] / ta x3 inc[ebit][0] / ta # 分子在利润表、分母在资产负债表跨表组合 x4 mc / bal[totalLiabilities][0] return 6.56*x1 3.26*x2 6.72*x3 1.05*x4两个容易忽略的细节x3 是跨表组合别指望一张表里找齐分子分母x4 分子用市价而不是账面所有者权益这正是 ZDouble Prime专为上市公司信用风险校准与 1968 年原始版本的关键区别之一。从 Z 值到 AAA-D 的评级刻度加 3.25 再查表 原始 Z 模型只有三个粗分界大于 2.6 算健康、1.1~2.6 是灰色地带、小于 1.1 高危不同资料口径略有出入。现代用法更进一步直接映射到常规信用刻度分两步Z 值整体3.25平移——Z 的数值域偏小评级刻度偏大先对齐量程在阈值表里找严格小于调整后 Z 值的最大阈值取其对应评级。def implied_rating(z): adj z 3.25 # 量程平移 z_map [8.15, 7.6, 7.3, 7.0, 6.85, 6.65, 6.4, 6.25, 5.85, 5.65, 5.25, 4.95, 4.75, 4.5, 4.15, 3.75, 3.2, 2.5, 1.75] grades [AAA,AA,AA,AA-,A,A,A-,BBB,BBB,BBB-, BB,BB,BB-,B,B,B-,CCC,CCC,CCC-,D] # searchsorted 找最大阈值下标等价于查表低于最小阈值时兜底返回 D import numpy as np i min(np.searchsorted(z_map, adj, sideright), len(z_map) - 1) return grades[min(i, len(grades) - 1)]验证一下开头案例4.343 3.25 7.593落在 7.3 与 7.6 之间查表得AA。主要档位速查调整后 ZZ 3.25隐含评级≥ 8.15AAA7.6 ~ 8.15AA7.3 ~ 7.6AA5.85 ~ 6.4BBB 档4.5 ~ 5.25B 档1.75 ~ 2.5CCC 档 1.75D违约区上面用了searchsorted写法天然规避了取不到值就报错的边界问题notebooks/8_altman_z_double_prime.ipynb 里的版本则用np.array(z_map)[np.array(z_map) adj].max()实现同样的查表逻辑可以对照着看。五个最容易翻车的坑 ⚠️Z-Score 是一面有特定角度的镜子换个角度照就会歪坑表现应对样本偏向制造业模型用美国上市公司违约/正常两组数据训练科技、金融、公用事业结构差异大同一 Z 值含义不同同行业内比较别跨行业比绝对值财务数据滞后用的是最近一期财报市场变化要等季报才反映配合最新市值滚动重算 x4观察多期趋势极端值越界调整后 Z 低于 1.75 时max()类查表会取不到值报错totalLiabilities 为 0 时 x4 直接除零显式兜底返回 D分母为 0 的标的直接跳过会计口径差异EBIT 有的数据源叫ebit有的叫operatingIncome口径不同 x3 差一截固定一个数据源全程别混用单点判断一次 Z 值说明不了趋势拉近 5~8 个季度看方向斜率比点位重要另外务必分清版本本文全程用的是ZDouble Prime系数 6.56 / 3.26 / 6.72 / 1.05 是上市公司校准版1968 年原始 Z 模型的分母组合和系数与此不同引用文献时别混用。跑通之后批量扫描、看趋势、设预警 单公司流程跑顺后按这个顺序小步扩展批量扫描把z_dp套到一组同行业 ticker 上输出 (ticker, x1~x4, Z, 隐含评级) 表格先看横截面分布加时间维度取 4~8 个历史报告期重算 Z画趋势线并叠加评级阈值参考线交叉验证用历史违约事件回测分界点别直接照搬 2.99 / 1.81 这类流行阈值以自己样本上的表现为准扩到组合层面对持仓定期刷新 Z 值把隐含评级下滑一档设成预警条件。Z-Score 的价值不在那个分数本身而在于它强迫你系统地过一遍流动性、积累、盈利和杠杆四个维度。把这条最小链路跑顺之后换权重、加变量都只是在这个骨架上扩展的事。【免费下载链接】python-trainingPython training for business analysts and traders项目地址: https://gitcode.com/gh_mirrors/py/python-training创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
阅读完成 · 觉得有帮助?