兩種 Altman Z-Score 濾網都沒有通過驗證。從成交額最大的 500 檔美股非金融股中排除困境區(Z 小於 1.81),2017-04-03 到 2026-11-10 年化 13.4%、日夏普 0.73;只買安全區(Z 大於 2.99)年化 13.5%、日夏普 0.71。兩者都贏同一個股票池等權持有(每檔買一樣多錢;12.5%、0.69),但 18 組參數全輸 QQQ 含息(追蹤那斯達克 100 指數的 ETF,以美國大型科技股為主;19.3%、0.88)。
Z 分數確實分得出體質較差的公司。困境區的股票年化只有 10.0%、日夏普 0.56,10 個年度有 8 個輸股票池,2020 年崩跌時跌了 43.5%。把它們排除有一點幫助,但不足以讓一籃子分散的美股贏過 QQQ。
本文提供研究結果,沒有推薦這些買賣規則。想自行重跑,可先 設定 FinLab 環境,再 下載研究程式(.py);其他檔案見 研究下載區。
Altman Z-Score 是什麼
Altman Z-Score(Altman Z 分數)是 Edward Altman 在 1968 年發表的破產預測分數。Altman(1968) 比較已經破產的製造業公司和規模相近、沒有破產的公司,找出最能區分兩組的五個財務比率與權重。分數越低,公司越像那些倒閉的公司。
| 項目 | 比率 | 權重 | 衡量 |
|---|---|---|---|
| 流動性 | 營運 |
1.2 | 流動資產 |
| 累積 |
保留盈餘/ |
1.4 | 公司成立以來留下的獲利;年輕或虧損的公司分數低 |
| 本業 |
近四季 |
3.3 | 資產 |
| 市值緩衝 | 市值/ |
0.6 | 股價 |
| 資產 |
近四季 |
1.0 | 每一塊錢 |
Z = 1.2 × 流動性 + 1.4 × 累積獲利 + 3.3 × 本業獲利 + 0.6 × 市值緩衝 + 1.0 × 資產周轉。
Altman 原始的分界到現在仍最常被引用:低於 1.81 是 困境區,高於 2.99 是 安全區,中間是無法區分兩組公司的灰色區。權重是用製造業估出來的,所以本文排除銀行、保險等金融業:它們的資產負債表大多是金融資產與負債,流動性和資產周轉這兩個比率沒有意義。
為什麼 Z 分數可能和報酬有關?直覺上風險高的公司應該給投資人更高的報酬,但研究結果相反。Dichev(1998) 用 Z 分數等模型衡量破產風險,發現破產風險高的公司報酬反而比較低;Campbell、Hilscher 與 Szilagyi(2008) 用更細的破產模型也得到同樣的「財務困境異常」。如果這個現象還在,把困境股排除應該能改善投資組合。
開跑前寫定的兩種濾網
在起始日與每季最後一個交易日,從成交額最大、Z 分數算得出來的美股非金融股中,挑出通過濾網的每一檔等權持有(每一檔買一樣多錢)。
| 設計 | 規則 | 測試的參數 |
|---|---|---|
| ① |
持有 |
T 1.5/1.81/2.1 × 股票池 200/500/1,000 檔(9 組) |
| ② |
只持有 |
T 2.5/2.99/3.5 × 股票池 200/500/1,000 檔(9 組) |
原參數用 Altman 的分界,鄰近參數各上下移動約 0.3 到 0.5。參數網格與過關條件在算任何報酬以前就寫定。另外列兩個不算在過關條件裡的對照組:整個股票池等權持有,以及只買困境區。
回測結果
| 項目 | ① |
② |
對照: |
對照: |
QQQ |
|---|---|---|---|---|---|
| 結論 | ✗ 沒通過 | ✗ 沒通過 | 對照 | 對照 | 基準 |
| 年化報酬 | 13.4% | 13.5% | 12.5% | 10.0% | 19.3% |
| 日夏普 |
0.726 | 0.709 | 0.691 | 0.558 | 0.880 |
| 最大 |
-35.2% | -34.5% | -37.2% | -43.5% | -35.1% |
| 贏 |
9 組中 0 組 | 9 組中 0 組 | — | — | — |
| 平均 |
378 檔 | 272 檔 | 500 檔 | 122 檔 | — |
①持有股票池扣掉困境區(Z ≥ 1.81)的股票,②只持有安全區(Z > 2.99)。股票池是成交額前 500 檔、算得出分數的非金融股,等權持有。
年化報酬是平均每年的成長率。日夏普衡量每承擔一分日常波動換到多少報酬:每日報酬平均除以標準差再乘以 252 的平方根,不扣無風險利率,定義參考 Sharpe(1994)。前半段到 2022-01-18,後半段從 2022-01-19 開始。
下面嵌入的 FinLab 互動報告是濾網①的原參數。報告裡的對照線是不含息的標普 500,比本文用的 QQQ 含息容易贏,報告內的評等也是對這條對照線,不代表通過本文驗證;報告的夏普也用自己的算法,和表格略有不同。
平均每次換股時,500 檔股票池中有 24.3% 落在困境區、21.3% 在灰色區、54.4% 在安全區。成交最熱絡的美股有四分之一被歸為「困境」,表示 1968 年的分界是為另一個時代的經濟訂的:軟體這類資產很輕的公司,或大量買回庫藏股的公司,保留盈餘或營運資金可能偏低,但離倒閉還很遠。
鄰近參數
18 格全部輸 QQQ,差距 0.10 到 0.25。門檻影響很小:同一個股票池大小,三個門檻的日夏普差距都在 0.06 以內。股票池大小影響比較大:成交額前 200 檔最好(日夏普 0.70 到 0.78),前 1,000 檔最差(0.63 到 0.65)。股票池變大,加進來的是成交較少、規模通常較小的公司,加進來以後結果變差。
驗證項目
BIL 是 1–3 個月美國國庫券 ETF,扣掉它的報酬,看的是比放現金多賺多少。
| 檢查 | ① |
② |
QQQ |
|---|---|---|---|
| 七成 |
9 組中 0 組 ✗ | 9 組中 0 組 ✗ | — |
| 前後半 |
0.862/0.583 ✗ | 0.869/0.547 ✗ | 1.087/0.677 |
| 每邊 |
0.719 ✗ | 0.702 ✗ | 0.880 |
| 扣掉 |
0.606 ✗ | 0.594 ✗ | 0.776 |
| 拿掉 |
0.977 ✗ | 0.985 ✗ | 1.223 |
兩種濾網每一項都沒過。成本幾乎沒有影響,因為每季只換掉約 11% 到 14% 的權重;真正的差距在 QQQ 本身。
困境股確實比較差
只買困境區的組合,10 個年度有 8 個輸股票池(2017、2026 年不滿一年),這正是 Dichev 與 Campbell 等人 描述的現象,在 Dichev 的樣本二十多年後仍看得到。例外是 2022 和 2024 年。2022 年 QQQ 跌 32.6%,困境區跌 14.0%,股票池跌 19.7%。
回撤圖看得到兩面。從 2020 年 2 月的高點到 3 月的低點,困境區跌 43.5%、股票池 37.2%、濾網① 35.2%、QQQ 28.6%。2022 年的下跌順序反過來:當年最深的跌幅,困境區 24.1%、股票池 26.5%、濾網① 27.5%、QQQ 34.8%。
為什麼排除體質差的公司還是輸 QQQ
排除困境區讓股票池的年化從 12.5% 提高到 13.4%、日夏普從 0.69 提高到 0.73。這是文獻預期的改善,幅度也合理:拿掉四分之一、每年落後其他股票約 3 個百分點(10.0% 對 13.4%)的股票,大約就是這個差距。
QQQ 是另一種投資組合。它依市值加權那斯達克 100 指數,報酬主要來自少數幾家超大型科技公司。約 270 到 380 檔跨所有非金融產業的等權組合,沒有這種集中,這很可能是這類濾網一直落後的主因。這十年 QQQ 和排除困境區的組合每年差約 6 個百分點,遠大於財務濾網能補回來的幅度。Z 分數回答的是「哪些公司可能倒」,這對避開虧損有用,但不是決定這段期間報酬的問題。
回測方法
- 股票池: 美股普通股,包含已下市公司,每家公司只留一檔,不含 ETF、基金、ADR,也不含金融業(依目前公司資料的產業)。換股日收盤價高於 5 美元、近 60 日平均成交額超過 500 萬美元、近一年沒有單日漲跌 50% 以上,而且算得出 Z 分數,再取成交額前 200、500 或 1,000 檔。
- 前視偏差: 資產負債表與損益表的數字從季報申報日起才使用。EBIT 與營收用近四季加總,四季都要有。市值用 FinLab 的
etl:us_market_value,最近一次季報的股數乘以收盤價並扣除之後的拆股,所以市值那一項每天更新,財報那幾項在季報公布時更新。換股日的下一個交易日收盤成交。 - 生存者偏誤: 已下市公司保留到最後一個價格。排除金融業用的是今天的公司資料快照。
- 權重與周轉: 通過濾網的每一檔等權,每季換股,每次周轉約 11%(①)與 14%(②)。
- 成本與滑價: 預設零手續費,另跑每邊 0.1%。沒有估算資金容量與市場衝擊。
- 資料: 從 2017-04-03 算到 2026-11-10,2026-11-12 用 finlab 2.3.8 跑完。公司資料每天更新,之後重跑,數字可能略有不同。
- 限制: 全段樣本內,沒有樣本外期間。Bailey 等人(2017) 說明單次回測為什麼容易高估,本文沒有估算過度擬合機率。
用 AI 代理重跑
照 FinLab 安裝流程 幫 Claude Code、Codex 或 Gemini CLI 裝好 FinLab 技能,AI 代理使用說明 介紹代理能做的事。直接安裝的指令是:
顯示程式碼
npx skills add koreal6803/finlab-ai --skill finlab -g -yFinLab Studio 在瀏覽器也能做同樣的研究。第一句可以這樣問:「下載 Altman Z 研究程式,跑濾網①的原參數,列出最近一次換股時落在困境區的公司。」
把 研究程式 存成 research.py;它同時包含逢低買進與庫藏股的測試。下面這段計算 Z 分數並重建濾網①,登入由 FinLab 自動引導。
顯示程式碼
import finlab
import numpy as np
from finlab import data
from research import use, z_pool, on_rebalance, rebalance_days, backtest
finlab.login()
use("us")
def balance(field):
return data.get("us_balance_sheet:" + field)
def last_four_quarters(field):
return data.get("us_income_statement:" + field).rolling(4, min_periods=4).sum()
assets = balance("total_assets")
accounting = (1.2 * (balance("total_current_assets") - balance("total_current_liabilities"))
+ 1.4 * balance("retained_earnings")
+ 3.3 * last_four_quarters("ebit")
+ 1.0 * last_four_quarters("revenue")) / assets
z = on_rebalance(accounting + 0.6 * data.get("etl:us_market_value") / balance("total_liabilities"))
z = z.where(np.isfinite(z))
# 成交額前 500 檔、算得出分數的非金融股,排除困境區
position = z_pool(500) & (z >= 1.81)
report = backtest(position, rebalance_days())Altman Z-Score 常見問題
Z 分數多少算好? 高於 2.99 是 Altman 的安全區,低於 1.81 是困境區。這次測試中,平均每次換股,成交最熱絡的美股非金融股有 54% 在安全區、24% 在困境區。
Z 分數能預測現在的公司會不會倒嗎? 它是用 1946 到 1965 年間破產的製造業公司估出來的。它仍能把財務體質差的公司排在後面,困境區的報酬就是證據;但它的分界會把很多健康的輕資產公司標成困境,比較適合當排名,不適合當判決。
銀行能用 Z 分數嗎? 不適合。金融業的資產負債結構讓這幾個比率失去意義,所以本文排除;Altman 後來也發表了給其他類型公司用的版本。
股票掉進困境區就該賣嗎? 本文測的是數百檔股票的組合,不是單一公司。困境區平均比較差,但個別公司兩個方向的例外都很多。
Z 分數和 F-Score 有什麼不同? F-Score 用九個訊號判斷獲利與財務是否改善,F-Score 美股回測 在 S&P 500 成分股上測過,同樣輸 QQQ。
台股能用 Z 分數選股嗎? 本文只測美股。台股用財報挑股的研究可以看 EPS 與 ROE 選股比較。
想看已驗證與未通過的美股規則,可以讀 美股量化交易策略比較。美股因子投資入門 介紹因子組合怎麼建、怎麼比較,美股學術因子回測 測了十個經典因子,同一批研究的 美股庫藏股回測 則用買回金額排名。回測方法 說明財報申報日與生存者偏誤。
研究下載
| 檔案 | 內容 |
|---|---|
| 開啟 |
瀏覽器直接開啟,不需安裝:濾網①的每日淨值、每筆交易與逐年報酬 |
| 開啟 |
濾網② |
| 下載 |
兩種濾網、股票池、困境區、QQQ 與 BIL 的每日淨值 |
| 下載 |
每組參數、每項檢查與各區比例,供 AI 或程式讀取 |
| 下載 |
給 AI 代理或會寫程式的人;這批三項研究共用一支程式 |
投資有風險,過去績效不代表未來表現。本內容僅供教學與研究,不構成投資建議,請依個人風險承受度審慎評估。本文沒有推薦買賣任何個股,Z 分數也不能預測個別公司是否倒閉。
最後更新:2026-11|回測區間:2017-04-03 至 2026-11-10|作者:FinLab 量化研究團隊。團隊以 FinLab 資料維護台股、美股的可重跑研究。
FinLab AI
想建立自己的策略?
用自然語言描述你的選股想法,AI 自動驗證、回測、給你答案
免費開始






