多數 DCF 模型的死法不是算錯,而是「沒人知道數字從哪來」。折現公式本身是小學算術,真正決定輸出的是那幾十個假設:收入增速、利潤率、再投資強度、折現率、永續成長率。當這些假設散落在 Excel 儲存格裡、只存在於建模者腦中時,估值就變成一個無法被挑戰的黑盒——你只能選擇信或不信。
這篇文章要做的事:把 DCF 從「算出一個數字」改造成「產出一個可被挑戰的論證」。你會得到四件可以直接落地的東西:一張假設登記表模板、一套三階段現金流的結構化方法、單因子與雙因子敏感度矩陣的設計原則(含可執行的 Python 程式碼),以及一份機械化驗證清單。文中所有數字都是教學用假設值,來自一個虛構的「甲公司」,與任何真實公司或市場數據無關。如果你想先看工具層面怎麼把 DCF 跑起來,可以先讀 Open Design DCF Valuation 技能指南,這篇處理的是它上面那一層:假設治理。
一、假設登記表:讓每個假設都有來源與信心等級
專業估值與業餘估值的分水嶺,不在模型多複雜,而在每個輸入是否可追溯。做法是把所有假設抽出來,登記在一張表上,每個假設強制標註四件事:數值、來源、信心等級、敏感度影響。
來源類型建議收斂成五類,證據強度依次遞減:
| 來源類型 | 例子 | 證據強度 |
|---|---|---|
| 公司披露 | 年報、中期報告、公告、投資者簡報 | 強 |
| 監管與交易所檔案 | 權益披露、招股章程、通函 | 強 |
| 第三方數據 | 行業統計、宏觀數據、數據供應商 | 中(需確認口徑與授權) |
| 管理層指引 | 業績會上的展望、資本開支計劃 | 中(有立場偏差) |
| 分析師判斷 | 你自己對收斂路徑、終值的推斷 | 弱(必須進敏感度分析) |
信心等級的判給規則要寫死,不留模糊空間:
高:有強來源直接支持,且近期內未見矛盾資訊
中:有來源但口徑需要調整,或來源較舊、或管理層指引與歷史執行有落差
低:純分析師判斷,或多個來源互相矛盾
規則:信心「低」的假設,必須納入敏感度分析;否則模型不得出閘
以下是甲公司的假設登記表示例(全部為教學用假設值):
| 假設項 | 教學值 | 來源類型 | 信心 | 敏感度影響 | 備註 |
|---|---|---|---|---|---|
| 基期收入 | 1,000(百萬) | 公司披露 | 高 | — | 取自損益表,需與審計數勾稽 |
| 收入增速 Y1–Y5 | 12%→8% 逐年遞減 | 管理層指引+分析師判斷 | 中 | 高 | 遞減路徑為判斷,需做 ±2pp 敏感度 |
| EBIT 利潤率 | 15%(各年) | 歷史三年區間中值 | 中 | 高 | 假設競爭格局不變;需檢查毛利率趨勢 |
| 有效稅率 | 20% | 公司披露(稅務附註) | 中 | 中 | 法定稅率與有效稅率口徑要分開登記 |
| 折舊攤提/收入 | 5% | 歷史比例外推 | 中 | 低 | 需與資產帳齡、CapEx 計劃自洽 |
| 資本支出/收入 | 6% | 管理層指引 | 中 | 高 | 擴張期假設;穩態期需收斂 |
| ΔNWC/收入增量 | 8% | 歷史三年平均 | 中 | 低 | 應收帳款與存貨週轉需另行檢查 |
| WACC | 9.0% | 分析師判斷(組成見第三節) | 低 | 高 | 必須做敏感度,禁止當「事實」使用 |
| 永續成長率 g | 2.5% | 分析師判斷 | 低 | 高 | 必須小於 WACC,且不得高於長期名目經濟增速的合理推斷 |
| 淨負債 | 400(百萬) | 公司披露 | 高 | — | 口徑(是否含租賃負債)要寫明 |
| 流通股數 | 100(百萬股) | 公司披露 | 高 | — | 註明基本/攤薄口徑與截止日期 |
這張表本身就是估值的「審計軌跡」:挑戰者不需要重跑模型,只要攻擊表上任何一行,就能精確知道結論會怎麼變。後面第六節的區間呈現、第七節的驗證門控,都建立在這張表上。
二、三階段現金流:預測什麼、在哪裡收斂
無槓桿自由現金流(Unlevered FCF)的標準骨架:
NOPAT = EBIT × (1 − 稅率)
無槓桿 FCF = NOPAT + 折舊攤提 − 資本支出 − 營運資本增量(ΔNWC)
現值 = Σ FCF_t ÷ (1 + WACC)^t (年末慣例)
年中慣例 = Σ FCF_t ÷ (1 + WACC)^(t − 0.5) (假設現金全年均勻流入)
兩個慣例選一個、寫進登記表、全程不改。年中慣例通常會讓現值略高,混用是最常見的隱性錯誤之一。
預測期建議切成三個階段,各階段有不同的「預測對象」與「收斂義務」:
| 階段 | 期間(常見) | 預測什麼 | 收斂義務 | 常見錯誤 |
|---|---|---|---|---|
| 明確預測期 | 第 1–3 或 1–5 年 | 逐年收入、利潤率、再投資 | 無,但每年要有驅動因子依據 | 拍腦袋增速、與訂單/產能矛盾 |
| 過渡期 | 第 4–7 或 6–10 年 | 增速與回報率逐步衰減(fade) | 超額回報必須向常態收斂 | 讓高增速一路延伸到終值年 |
| 穩態期(終值) | 第 n 年之後 | 固定 g、維持性再投資 | 見下方穩態自洽檢查 | g 與再投資率、ROIC 互相矛盾 |
穩態期有三條自洽規則,違反任何一條,終值就是假的:
規則 1:g < WACC(數學收斂條件,硬性)
規則 2:g ≈ 再投資率 × 投入資本回報率(ROIC)
—— 成長不會從天上掉下來,穩態成長需要對應的再投資
規則 3:穩態資本支出 ≥ 折舊攤提(扣除處置後)
—— 若 CapEx 長期低於折舊,資產基數在萎縮,卻假設正成長,自相矛盾
甲公司明確預測期的 FCF 計算(教學假設值,單位:百萬):
| 年度 | Y1 | Y2 | Y3 | Y4 | Y5 |
|---|---|---|---|---|---|
| 收入 | 1,120.0 | 1,243.2 | 1,367.5 | 1,490.6 | 1,609.8 |
| EBIT(15%) | 168.0 | 186.5 | 205.1 | 223.6 | 241.5 |
| NOPAT(稅率 20%) | 134.4 | 149.2 | 164.1 | 178.9 | 193.2 |
| +折舊攤提(5%) | 56.0 | 62.2 | 68.4 | 74.5 | 80.5 |
| −資本支出(6%) | 67.2 | 74.6 | 82.1 | 89.4 | 96.6 |
| −ΔNWC(增量×8%) | 9.6 | 9.9 | 9.9 | 9.8 | 9.5 |
| 無槓桿 FCF | 113.6 | 126.9 | 140.5 | 154.1 | 167.5 |
教學模型刻意做得很「乾淨」(利潤率恆定、比率外推),真實建模遠比這髒——但這正是重點:先把骨架標準化,髒的部分(一次性項目、口徑調整)才看得見。財報數字本身的品質檢查,見 三表聯動與現金流品質檢查。
三、WACC:只講組成與取捨,不給「標準答案」
WACC 的公式本身沒有爭議:
WACC = E/(D+E) × Ke + D/(D+E) × Kd × (1 − t)
Ke(權益成本)= 無風險利率 Rf + β × 股權風險溢價 ERP (+規模溢價+國別風險溢價,視情境)
Kd(債務成本)= 邊際新增借款成本(不是歷史平均票面利率)
t = 邊際稅率(利息抵稅用邊際口徑,不是有效稅率)
有爭議的是每個構面怎麼選。以下是必須在登記表裡寫明取捨理由的五個決策點:
| 構面 | 取捨 | 選 A 的代價 | 選 B 的代價 |
|---|---|---|---|
| 無風險利率 Rf | 長天期公債 vs 短天期 | 長天期含期限溢價,與長期現金流匹配,但波動大 | 短天期與現金流存續期錯配 |
| β 的估計 | 自身回歸 β vs 同業去槓桿再加槓桿 | 自身 β 受噪音與事件影響大 | 同業選樣本身是判斷,選錯整個 Ke 錯 |
| 資本結構 D/E | 當前結構 vs 目標結構 | 當前結構可能只是暫時狀態 | 目標結構是管理層說法,需要證據 |
| 幣別口徑 | 現金流幣別與 Rf 幣別必須一致 | 不一致會產生系統性偏差 | 需要通膨差調整時,調整方式又是判斷 |
| 附加溢價 | 是否加規模溢價、國別風險溢價 | 加了容易被質疑雙重計費(β 已含部分風險) | 不加可能低估小型股與新興市場風險 |
還有一個工程問題:循環性。資本結構權重應該用市場價值,但市場價值(股權價值)正是 DCF 要求解的輸出。處理方式是要麼固定目標結構,要麼做迭代求解直到收斂——選哪種,寫進登記表。
本站立場是:WACC 不存在「正確值」,只存在「被清楚陳述、可被挑戰的取值」。任何工具或模型若直接給你一個「行業標準 WACC」而不展示組成與來源,都應該被視為紅旗。這也是為什麼第五節的敏感度分析必須把 WACC 當成第一軸。
四、終值:兩種方法、兩種風險
終值(Terminal Value)只有兩條主流路線,各自的失敗模式完全不同:
方法一:永續成長(Gordon Growth)
TV_n = FCF_n × (1 + g) ÷ (WACC − g)
PV(TV) = TV_n ÷ (1 + WACC)^n
風險:g 與 WACC 差距越小,TV 越爆炸;模型對兩個「低信心假設」極度敏感
方法二:退出倍數(Exit Multiple)
TV_n = EBITDA_n × 退出倍數
風險:倍數來源必須可辯護;且倍數隱含了一個你可能不同意的永續成長率
| 比較維度 | 永續成長 | 退出倍數 |
|---|---|---|
| 本質假設 | 公司永久以 g 成長 | 終值年有人願意按倍數接手 |
| 對什麼最敏感 | g、WACC 之差 | 退出倍數的選取 |
| 內部自洽性 | 需檢查 g ≈ 再投資率 × ROIC | 需檢查隱含 g 是否合理 |
| 常見濫用 | g 取得過高、逼近 WACC | 用當前市場熱點的倍數外推 |
| 適合情境 | 現金流穩定、可推斷長期均衡的業務 | 有活躍交易可比、或明確退出預期的情境 |
兩條路線應該互相交叉檢查,而不是二選一之後就不再回頭。交叉檢查的做法是從退出倍數反推隱含永續成長率:
設 c = FCF_n ÷ EBITDA_n(現金流轉換率),m = 退出倍數
令兩種 TV 相等,可解出:
g_implied = (m × WACC − c) ÷ (m + c)
反過來,給定 g,可解出隱含退出倍數:
m_implied = c × (1 + g) ÷ (WACC − g)
若 g_implied 高於任何可辯護的長期名目成長推斷 → 退出倍數假設過高
若 m_implied 遠高於同業當前可觀察倍數區間 → 永續成長假設過高
甲公司的例子(教學假設值):基準情境下 PV(TV) 佔企業價值約 76%。這個比例本身就是重要資訊——它告訴你這份估值有四分之三的價值建立在終值期的假設上,因此終值假設的敏感度必須比預測期假設做得更細。TV 佔比應該作為標準輸出項,每次估值都報告。
五、敏感度分析:單因子與雙因子矩陣的設計
敏感度分析不是模型的裝飾附錄,而是估值的核心輸出。設計上有三個原則:
- 變動範圍要有依據,不是隨手 ±10%。可用的錨:該假設的歷史波動區間、分析師分歧範圍、宏觀情境的上下界。範圍選取本身也寫進登記表。
- 優先測「影響大 × 信心低」的假設。影響大但信心高(如披露的淨負債)不值得測;信心高影響小的直接跳過。
- 單因子回答「誰最重要」,雙因子回答「組合起來會怎樣」。兩個都要做,順序是先單後雙。
單因子:龍捲風圖的表格版
對甲公司(基準每股價值 18.5,教學假設值)逐項施加擾動,按影響幅度排序:
| 假設(擾動範圍) | 悲觀值 | 樂觀值 | 對每股價值的影響幅度 |
|---|---|---|---|
| WACC ±0.75pp | 16.1 | 21.6 | 5.4 |
| EBIT 利潤率 ±1.5pp | 15.9 | 21.2 | 5.2 |
| CapEx/收入 ±1pp | 16.4 | 20.7 | 4.4 |
| 收入增速 ±2pp(各年) | 17.0 | 20.2 | 3.1 |
| 永續成長率 g ±0.5pp | 17.2 | 20.1 | 2.8 |
| ΔNWC/收入增量 ±2pp | 18.2 | 18.9 | 0.7 |
讀法有兩個要點。第一,排序本身就是結論:這家(虛構)公司的估值論證,本質上是「WACC 與利潤率的論證」,挑戰者應該主攻這兩項。第二,注意不對稱性:WACC 下調 0.75pp 帶來的上升(+3.0)大於上調 0.75pp 的下降(−2.4),因為折現率與價值是凸性關係。龍捲風圖若左右完全對稱,反而要懷疑計算有誤。
雙因子:WACC × g 矩陣
雙因子選軸的標準:兩個「影響最大且信心最低」的假設。DCF 的經典組合就是 WACC × g,因為兩者都是判斷、且交互作用非線性。甲公司每股價值矩陣(教學假設值,年末折現慣例):
| WACC \ g | 1.5% | 2.0% | 2.5% | 3.0% | 3.5% |
|---|---|---|---|---|---|
| 8.0% | 19.3 | 20.9 | 22.8 | 25.0 | 27.8 |
| 8.5% | 17.6 | 18.9 | 20.5 | 22.3 | 24.5 |
| 9.0% | 16.1 | 17.2 | 18.5 | 20.1 | 21.9 |
| 9.5% | 14.8 | 15.8 | 16.9 | 18.2 | 19.7 |
| 10.0% | 13.7 | 14.5 | 15.4 | 16.5 | 17.8 |
矩陣設計的實務規則:5×5 最易讀;步長取整(0.5pp)方便口頭辯論;基準儲存格加粗;沿對角線方向(WACC 與 g 同向變動)價值變化較小、垂直方向變化劇烈——這說明真正殺死估值的是「g 上調但 WACC 不上調」這種組合,而這種組合恰恰最難辯護。
生成矩陣的程式碼(與上文數字同源,可直接改造):
from dataclasses import dataclass
@dataclass
class DcfAssumptions:
revenue_base: float # 基期收入
growth: list[float] # 預測期各年增速
ebit_margin: float # EBIT 利潤率
tax_rate: float # 稅率
dep_pct: float # 折舊攤提 / 收入
capex_pct: float # 資本支出 / 收入
nwc_pct: float # ΔNWC / 收入增量
net_debt: float # 淨負債
shares: float # 流通股數(百萬股)
def unlevered_fcf(a: DcfAssumptions) -> list[float]:
fcfs, revenue_prev = [], a.revenue_base
for gr in a.growth:
revenue = revenue_prev * (1 + gr)
nopat = revenue * a.ebit_margin * (1 - a.tax_rate)
dep = revenue * a.dep_pct
capex = revenue * a.capex_pct
dnwc = (revenue - revenue_prev) * a.nwc_pct
fcfs.append(nopat + dep - capex - dnwc)
revenue_prev = revenue
return fcfs
def equity_value_per_share(a: DcfAssumptions, wacc: float, g: float) -> float:
assert g < wacc, "永續成長率必須小於 WACC,否則 Gordon 公式不收斂"
fcfs = unlevered_fcf(a)
pv_fcfs = sum(f / (1 + wacc) ** (t + 1) for t, f in enumerate(fcfs))
tv = fcfs[-1] * (1 + g) / (wacc - g)
pv_tv = tv / (1 + wacc) ** len(fcfs)
return (pv_fcfs + pv_tv - a.net_debt) / a.shares
def sensitivity_matrix(a, waccs, gs) -> dict[tuple[float, float], float]:
"""雙因子矩陣:{ (wacc, g): 每股價值 },供報告層直接渲染"""
return {(w, g): equity_value_per_share(a, w, g) for w in waccs for g in gs}
注意 assert g < wacc:約束條件要寫成程式斷言,而不是寫在文件裡祈禱有人遵守。這是本站反覆強調的原則——能用代碼強制執行的規則,就不要只用文字約定。
六、結果呈現:區間、條件與「我什麼時候會錯」
估值報告的標準輸出不是一個數,而是四件東西:
- 情景區間表。悲觀/基準/樂觀三檔,每檔列明與基準不同的假設、對應每股價值。情境必須是「內部自洽的假設組合」——悲觀情境不能只砍增速卻不動利潤率與再投資,那是偷懶而不是悲觀。
- 關鍵驅動因子排序。來自單因子分析,告訴讀者論證的支點在哪。
- 失效條件清單。明確寫出「滿足哪些條件時,本估值結論不成立」。例如:增速連續兩年低於悲觀情境下界;利潤率結構性下移超過擾動範圍;資本結構發生目標框架外的變化。這一欄逼迫建模者誠實面對自己的假設邊界。
- 市場隱含假設的反推(可選但強烈建議)。用當前市價反推市場隱含的 g 或增速,再陳述你的假設與市場隱含假設的差異在哪。這樣估值結論就從「我認為值多少」升級成「我認為市場錯在哪個具體假設上」——後者才可以被挑戰、被驗證、被記錄對錯。
一份合格結論的句式長這樣(教學示例):
在登記表 v3 的假設下,甲公司基準每股價值 18.5(教學假設值)。
g 固定在基準值、WACC 於 8.0–10.0% 變動時,區間為 15.4–22.8;
WACC 與 g 同時偏離時,矩陣角落的極端值為 13.7 與 27.8。
區間寬度主要由 WACC 與 g 的判斷驅動(見矩陣)。
本結論在以下條件下失效:……(失效條件清單)
與當前市價的差異,主要對應「收入增速是否可維持」這一項假設分歧。
全程沒有「目標價」「評級」字眼。本站所有內容均為方法教學,不構成對任何真實證券的評價或投資建議;你自己的對外輸出是否可以使用這類字眼,取決於你所處司法管轄區的合規要求,見 投研 AI 的合規邊界。
七、AI 會在這裡出錯:假設治理的機械化驗證
把 DCF 交給 AI Agent 執行時,出錯模式高度可預測。以下每一條都對應一個可機械執行的檢查:
| AI 的典型錯誤 | 表現 | 機械化驗證 |
|---|---|---|
| 編造 WACC/g | 給出一個「行業常用」折現率,無組成、無來源 | 門控規則:WACC 必須附組成明細(Rf、β、ERP、D/E、Kd、t)與每項來源;缺一不收 |
| 終值期數錯位 | 用 FCF_n 而非 FCF_n×(1+g);或忘記把 TV 折現回現值 | 用獨立程式重算 TV 與 PV(TV),與 Agent 輸出比對 |
| 單位與幣別混用 | 百萬/億混淆;報告幣別與折現幣別不一致 | 輸出強制帶 unit 與 currency 欄位;跨欄位一致性斷言 |
| 稅率口徑錯 | 用有效稅率算利息抵稅、或用法定稅率硬套多轄區業務 | 登記表分開登記法定/有效稅率,NOPAT 用哪個要顯式標註 |
| 穩態不自洽 | CapEx < 折舊卻假設正成長;g 與再投資率矛盾 | 檢查規則 2、3:g ≈ 再投資率 × ROIC;穩態 CapEx ≥ D&A |
| 假裝精確 | 輸出單點值、小數點後兩位的「每股價值」 | 輸出 schema 強制為區間+基準+敏感度矩陣,拒絕單點 |
| 幻覺歷史數據 | 憑記憶生成基期財務數據再外推 | 基期數字必須來自抽取管道並附來源指針;抽樣人工複核 |
最後一條尤其致命:LLM 對「看起來合理的財務數字」有極強的編造能力,且編得符合行業直覺,人工肉眼很難當場識破。這類錯誤的系統性分析見 AI 在金融場景的幻覺風險。防範方式不是換更強的模型,而是把「數據必須來自可追溯的抽取管道」寫成架構約束——這正是 自建投研系統 中驗證層的核心設計。
一份 DCF 產出在交付前應通過的檢查清單:
□ 假設登記表完整:每個假設有數值、來源類型、信心等級、敏感度影響
□ 信心「低」的假設全部出現在單因子敏感度分析中
□ g < WACC 斷言通過;g 未超過可辯護的長期名目成長推斷
□ TV 佔比已計算並報告;佔比過高時終值敏感度已加密
□ 折現慣例(年末/年中)全程一致,且已登記
□ 兩種終值方法交叉檢查:隱含 g 與隱含倍數均在可辯護範圍
□ 輸出為區間+失效條件,而非單點
□ 獨立程式重算:FCF 序列、TV、矩陣至少各抽一格人工複算
□ 幣別、單位、股數口徑三處一致
這張清單的每一行都可以寫成自動化門控。當你的 DCF 流程每次運行都強制通過這九項,估值才真正從「一個數字」變成「一份可以被挑戰、也經得起挑戰的論證」。
下一步
- 可比公司分析自動化:DCF 的內在價值視角之外,用市場口徑交叉檢查,並處理同業比價最髒的口徑問題
- 三表聯動與現金流品質檢查:DCF 的輸入是財務數據,先確認數據本身不是賬面利潤陷阱
- Open Design DCF Valuation 技能指南:把本篇的假設治理套進現成的 DCF 技能執行
- 自建投研系統:把驗證清單升級為系統級的多層門控與評測集
- 決策模型的現實檢查:本站對決策類模型的實測,說明為什麼「信心門控」比「更聰明的模型」更劃算