Agentic Research

This article is not yet available in English. You are reading the Traditional Chinese original. The English edition will appear here once it is translated.

Browse articles that do have an English edition

DCF 假設與敏感度分析:讓估值可被挑戰

2026/09/3022 min readBryan Chan閱讀中文原文
Topics估值DCF敏感度分析AI Agent投資研究

多數 DCF 模型的死法不是算錯,而是「沒人知道數字從哪來」。折現公式本身是小學算術,真正決定輸出的是那幾十個假設:收入增速、利潤率、再投資強度、折現率、永續成長率。當這些假設散落在 Excel 儲存格裡、只存在於建模者腦中時,估值就變成一個無法被挑戰的黑盒——你只能選擇信或不信。

這篇文章要做的事:把 DCF 從「算出一個數字」改造成「產出一個可被挑戰的論證」。你會得到四件可以直接落地的東西:一張假設登記表模板、一套三階段現金流的結構化方法、單因子與雙因子敏感度矩陣的設計原則(含可執行的 Python 程式碼),以及一份機械化驗證清單。文中所有數字都是教學用假設值,來自一個虛構的「甲公司」,與任何真實公司或市場數據無關。如果你想先看工具層面怎麼把 DCF 跑起來,可以先讀 Open Design DCF Valuation 技能指南,這篇處理的是它上面那一層:假設治理。

一、假設登記表:讓每個假設都有來源與信心等級

專業估值與業餘估值的分水嶺,不在模型多複雜,而在每個輸入是否可追溯。做法是把所有假設抽出來,登記在一張表上,每個假設強制標註四件事:數值、來源、信心等級、敏感度影響。

來源類型建議收斂成五類,證據強度依次遞減:

來源類型例子證據強度
公司披露年報、中期報告、公告、投資者簡報強
監管與交易所檔案權益披露、招股章程、通函強
第三方數據行業統計、宏觀數據、數據供應商中(需確認口徑與授權)
管理層指引業績會上的展望、資本開支計劃中(有立場偏差)
分析師判斷你自己對收斂路徑、終值的推斷弱(必須進敏感度分析)

信心等級的判給規則要寫死,不留模糊空間:

高:有強來源直接支持,且近期內未見矛盾資訊
中:有來源但口徑需要調整,或來源較舊、或管理層指引與歷史執行有落差
低:純分析師判斷,或多個來源互相矛盾
規則:信心「低」的假設,必須納入敏感度分析;否則模型不得出閘

以下是甲公司的假設登記表示例(全部為教學用假設值):

假設項教學值來源類型信心敏感度影響備註
基期收入1,000(百萬)公司披露高—取自損益表,需與審計數勾稽
收入增速 Y1–Y512%→8% 逐年遞減管理層指引+分析師判斷中高遞減路徑為判斷,需做 ±2pp 敏感度
EBIT 利潤率15%(各年)歷史三年區間中值中高假設競爭格局不變;需檢查毛利率趨勢
有效稅率20%公司披露(稅務附註)中中法定稅率與有效稅率口徑要分開登記
折舊攤提/收入5%歷史比例外推中低需與資產帳齡、CapEx 計劃自洽
資本支出/收入6%管理層指引中高擴張期假設;穩態期需收斂
ΔNWC/收入增量8%歷史三年平均中低應收帳款與存貨週轉需另行檢查
WACC9.0%分析師判斷(組成見第三節)低高必須做敏感度,禁止當「事實」使用
永續成長率 g2.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 計算(教學假設值,單位:百萬):

年度Y1Y2Y3Y4Y5
收入1,120.01,243.21,367.51,490.61,609.8
EBIT(15%)168.0186.5205.1223.6241.5
NOPAT(稅率 20%)134.4149.2164.1178.9193.2
+折舊攤提(5%)56.062.268.474.580.5
−資本支出(6%)67.274.682.189.496.6
−ΔNWC(增量×8%)9.69.99.99.89.5
無槓桿 FCF113.6126.9140.5154.1167.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 佔比應該作為標準輸出項,每次估值都報告。

五、敏感度分析:單因子與雙因子矩陣的設計

敏感度分析不是模型的裝飾附錄,而是估值的核心輸出。設計上有三個原則:

  1. 變動範圍要有依據,不是隨手 ±10%。可用的錨:該假設的歷史波動區間、分析師分歧範圍、宏觀情境的上下界。範圍選取本身也寫進登記表。
  2. 優先測「影響大 × 信心低」的假設。影響大但信心高(如披露的淨負債)不值得測;信心高影響小的直接跳過。
  3. 單因子回答「誰最重要」,雙因子回答「組合起來會怎樣」。兩個都要做,順序是先單後雙。

單因子:龍捲風圖的表格版

對甲公司(基準每股價值 18.5,教學假設值)逐項施加擾動,按影響幅度排序:

假設(擾動範圍)悲觀值樂觀值對每股價值的影響幅度
WACC ±0.75pp16.121.65.4
EBIT 利潤率 ±1.5pp15.921.25.2
CapEx/收入 ±1pp16.420.74.4
收入增速 ±2pp(各年)17.020.23.1
永續成長率 g ±0.5pp17.220.12.8
ΔNWC/收入增量 ±2pp18.218.90.7

讀法有兩個要點。第一,排序本身就是結論:這家(虛構)公司的估值論證,本質上是「WACC 與利潤率的論證」,挑戰者應該主攻這兩項。第二,注意不對稱性:WACC 下調 0.75pp 帶來的上升(+3.0)大於上調 0.75pp 的下降(−2.4),因為折現率與價值是凸性關係。龍捲風圖若左右完全對稱,反而要懷疑計算有誤。

雙因子:WACC × g 矩陣

雙因子選軸的標準:兩個「影響最大且信心最低」的假設。DCF 的經典組合就是 WACC × g,因為兩者都是判斷、且交互作用非線性。甲公司每股價值矩陣(教學假設值,年末折現慣例):

WACC \ g1.5%2.0%2.5%3.0%3.5%
8.0%19.320.922.825.027.8
8.5%17.618.920.522.324.5
9.0%16.117.218.520.121.9
9.5%14.815.816.918.219.7
10.0%13.714.515.416.517.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:約束條件要寫成程式斷言,而不是寫在文件裡祈禱有人遵守。這是本站反覆強調的原則——能用代碼強制執行的規則,就不要只用文字約定。

六、結果呈現:區間、條件與「我什麼時候會錯」

估值報告的標準輸出不是一個數,而是四件東西:

  1. 情景區間表。悲觀/基準/樂觀三檔,每檔列明與基準不同的假設、對應每股價值。情境必須是「內部自洽的假設組合」——悲觀情境不能只砍增速卻不動利潤率與再投資,那是偷懶而不是悲觀。
  2. 關鍵驅動因子排序。來自單因子分析,告訴讀者論證的支點在哪。
  3. 失效條件清單。明確寫出「滿足哪些條件時,本估值結論不成立」。例如:增速連續兩年低於悲觀情境下界;利潤率結構性下移超過擾動範圍;資本結構發生目標框架外的變化。這一欄逼迫建模者誠實面對自己的假設邊界。
  4. 市場隱含假設的反推(可選但強烈建議)。用當前市價反推市場隱含的 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 流程每次運行都強制通過這九項,估值才真正從「一個數字」變成「一份可以被挑戰、也經得起挑戰的論證」。

下一步