WACC คืออะไร
WACC Weighted Average Cost of Capital ต้นทุนเงินทุนถัวเฉลี่ยถ่วงน้ำหนัก Discount Rate DCF Valuation Capital Budgeting
| ส่วนประกอบ | สัญลักษณ์ | ที่มา | ตัวอย่าง |
|---|---|---|---|
| Market Cap (Equity) | E | หุ้น × ราคา | 600 ล้านบาท |
| Total Debt | D | หนี้สินรวม | 400 ล้านบาท |
| Total Value | V = E+D | มูลค่ารวม | 1,000 ล้านบาท |
| Cost of Equity | Re | CAPM = Rf + β(Rm-Rf) | 12% |
| Cost of Debt | Rd | ดอกเบี้ยเฉลี่ย | 5% |
| Tax Rate | Tc | อัตราภาษี CIT | 20% |
| WACC | - | (E/V×Re)+(D/V×Rd×(1-Tc)) | 8.8% |
สูตรและการคำนวณ
# === WACC Calculation ===
from dataclasses import dataclass
@dataclass
class WACCInput:
equity_value: float # E: Market Cap (ล้านบาท)
debt_value: float # D: Total Debt (ล้านบาท)
cost_of_equity: float # Re: % (CAPM)
cost_of_debt: float # Rd: % (ดอกเบี้ยเฉลี่ย)
tax_rate: float # Tc: % (อัตราภาษี)
def calculate_wacc(w: WACCInput) -> dict:
total_value = w.equity_value + w.debt_value
equity_weight = w.equity_value / total_value
debt_weight = w.debt_value / total_value
equity_component = equity_weight * w.cost_of_equity
debt_component = debt_weight * w.cost_of_debt * (1 - w.tax_rate)
wacc = equity_component + debt_component
return {
"total_value": total_value,
"equity_weight": equity_weight,
"debt_weight": debt_weight,
"equity_component": equity_component,
"debt_component": debt_component,
"wacc": wacc,
}
# ตัวอย่าง: บริษัท ABC
abc = WACCInput(
equity_value=600, # Market Cap 600 ล้าน
debt_value=400, # หนี้สิน 400 ล้าน
cost_of_equity=0.12, # Re = 12% (จาก CAPM)
cost_of_debt=0.05, # Rd = 5% (ดอกเบี้ยเฉลี่ย)
tax_rate=0.20, # Tc = 20% (ภาษี CIT)
)
result = calculate_wacc(abc)
print("=== WACC Calculation: ABC ===")
print(f" Equity Weight: {result['equity_weight']:.1%}")
print(f" Debt Weight: {result['debt_weight']:.1%}")
print(f" Equity Component: {result['equity_component']:.2%}")
print(f" Debt Component: {result['debt_component']:.2%}")
print(f" WACC: {result['wacc']:.2%}")
# CAPM: Cost of Equity
# Re = Rf + β × (Rm - Rf)
# Rf = Risk-free Rate (พันธบัตรรัฐบาล 10 ปี เช่น 2.5%)
# β = Beta (ความผันผวนเทียบตลาด เช่น 1.2)
# Rm = Market Return (ผลตอบแทนตลาดเฉลี่ย เช่น 10%)
# Re = 2.5% + 1.2 × (10% - 2.5%) = 2.5% + 9% = 11.5%
rf = 0.025 # Risk-free Rate 2.5%
beta = 1.2 # Beta
rm = 0.10 # Market Return 10%
re_capm = rf + beta * (rm - rf)
print(f"\n=== CAPM ===")
print(f" Rf: {rf:.1%} | Beta: {beta} | Rm: {rm:.1%}")
print(f" Re = {rf:.1%} + {beta} × ({rm:.1%} - {rf:.1%}) = {re_capm:.1%}")
การใช้งาน
# === DCF Valuation using WACC ===
@dataclass
class DCFInput:
fcf_projections: list # Free Cash Flow 5 ปี (ล้านบาท)
terminal_growth: float # Terminal Growth Rate
wacc: float # WACC
def dcf_valuation(d: DCFInput) -> dict:
# PV of projected FCF
pv_fcf = []
for i, fcf in enumerate(d.fcf_projections, 1):
pv = fcf / (1 + d.wacc) ** i
pv_fcf.append(pv)
# Terminal Value (Gordon Growth Model)
last_fcf = d.fcf_projections[-1]
terminal_value = last_fcf * (1 + d.terminal_growth) / (d.wacc - d.terminal_growth)
pv_terminal = terminal_value / (1 + d.wacc) ** len(d.fcf_projections)
enterprise_value = sum(pv_fcf) + pv_terminal
return {
"pv_fcf": pv_fcf,
"total_pv_fcf": sum(pv_fcf),
"terminal_value": terminal_value,
"pv_terminal": pv_terminal,
"enterprise_value": enterprise_value,
}
dcf = DCFInput(
fcf_projections=[100, 110, 121, 133, 146], # FCF ปีที่ 1-5
terminal_growth=0.03, # Terminal Growth 3%
wacc=0.088, # WACC 8.8%
)
val = dcf_valuation(dcf)
print("=== DCF Valuation ===")
for i, pv in enumerate(val["pv_fcf"], 1):
print(f" Year {i} FCF PV: {pv:.1f} ล้านบาท")
print(f" Total PV of FCF: {val['total_pv_fcf']:.1f} ล้านบาท")
print(f" Terminal Value: {val['terminal_value']:.1f} ล้านบาท")
print(f" PV of Terminal: {val['pv_terminal']:.1f} ล้านบาท")
print(f" Enterprise Value: {val['enterprise_value']:.1f} ล้านบาท")
ปัจจัยที่ส่งผล
# === WACC Sensitivity Analysis ===
@dataclass
class Scenario:
name: str
equity_pct: float
cost_equity: float
cost_debt: float
tax_rate: float
wacc: float
note: str
scenarios = [
Scenario("Conservative (หนี้น้อย)",
0.80, 0.12, 0.05, 0.20,
0.80*0.12 + 0.20*0.05*0.80,
"ปลอดภัย WACC สูงกว่า"),
Scenario("Balanced (สมดุล)",
0.60, 0.12, 0.05, 0.20,
0.60*0.12 + 0.40*0.05*0.80,
"สมดุล WACC ต่ำลง"),
Scenario("Aggressive (หนี้มาก)",
0.40, 0.14, 0.06, 0.20,
0.40*0.14 + 0.60*0.06*0.80,
"Re สูงขึ้นเพราะ Risk, Rd สูงขึ้น"),
Scenario("High Interest Rate",
0.60, 0.15, 0.08, 0.20,
0.60*0.15 + 0.40*0.08*0.80,
"ดอกเบี้ยสูง WACC สูงมาก"),
Scenario("Low Tax Rate",
0.60, 0.12, 0.05, 0.10,
0.60*0.12 + 0.40*0.05*0.90,
"Tax Shield น้อย WACC สูงขึ้นเล็กน้อย"),
]
print("=== WACC Scenarios ===")
for s in scenarios:
print(f" [{s.name}] WACC: {s.wacc:.2%}")
print(f" E/V: {s.equity_pct:.0%} | Re: {s.cost_equity:.0%} | Rd: {s.cost_debt:.0%} | Tax: {s.tax_rate:.0%}")
print(f" Note: {s.note}")
เคล็ดลับ
- CAPM: ใช้ CAPM คำนวณ Cost of Equity ถูกต้องกว่าเดา
- Beta: ดู Beta จาก Bloomberg Reuters หรือคำนวณจาก Historical Return
- Tax Shield: อย่าลืมคูณ (1-Tc) สำหรับ Cost of Debt เพราะดอกเบี้ยลดภาษี
- Market Value: ใช้ Market Value ไม่ใช่ Book Value สำหรับ Weight
- Sensitivity: ทำ Sensitivity Analysis เปลี่ยน WACC ±1-2% ดูผลกระทบ
Best Practices สำหรับนักพัฒนา
การเขียนโค้ดที่ดีไม่ใช่แค่ทำให้โปรแกรมทำงานได้ แต่ต้องเขียนให้อ่านง่าย ดูแลรักษาง่าย และ Scale ได้ หลัก SOLID Principles เป็นพื้นฐานสำคัญที่นักพัฒนาทุกู้คืนควรเข้าใจ ได้แก่ Single Responsibility ที่แต่ละ Class ทำหน้าที่เดียว Open-Closed ที่เปิดให้ขยายแต่ปิดการแก้ไข Liskov Substitution ที่ Subclass ต้องใช้แทน Parent ได้ Interface Segregation ที่แยก Interface ให้เล็ก และ Dependency Inversion ที่พึ่งพา Abstraction ไม่ใช่ Implementation
เรื่อง Testing ก็ขาดไม่ได้ ควรเขียน Unit Test ครอบคลุมอย่างน้อย 80% ของ Code Base ใช้ Integration Test ทดสอบการทำงานร่วมกันของ Module ต่างๆ และ E2E Test สำหรับ Critical User Flow เครื่องมือยอดนิยมเช่น Jest, Pytest, JUnit ช่วยให้การเขียน Test เป็นเรื่องง่าย
เรื่อง Version Control ด้วย Git ใช้ Branch Strategy ที่เหมาะกับทีม เช่น Git Flow สำหรับโปรเจคใหญ่ หรือ Trunk-Based Development สำหรับทีมที่ Deploy บ่อย ทำ Code Review ทุก Pull Request และใช้ CI/CD Pipeline ทำ Automated Testing และ Deployment
เปรียบเทียบข้อดีและข้อเสีย
จากตารางเปรียบเทียบจะเห็นว่าข้อดีมีมากกว่าข้อเสียอย่างชัดเจน โดยเฉพาะในแง่ของประสิทธิภาพและความสามารถในการ Scale สำหรับข้อเสียส่วนใหญ่สามารถแก้ไขได้ด้วยการเรียนรู้อย่างเป็นระบบและวางแผนทรัพยากรให้เหมาะสม
WACC คืออะไร
Weighted Average Cost of Capital ต้นทุนเงินทุนถัวเฉลี่ย Debt Equity Weight Discount Rate DCF IRR ผลตอบแทนขั้นต่ำ
คำนวณอย่างไร
WACC = (E/V×Re) + (D/V×Rd×(1-Tc)) E Market Cap D Total Debt Re CAPM Rd ดอกเบี้ย Tc ภาษี ตัวอย่าง 60/40 Re12% Rd5% Tax20% = 8.8%
ใช้ทำอะไร
DCF Valuation Discount Rate Capital Budgeting IRR > WACC EVA M&A Performance Benchmark Optimal Capital Structure
ปัจจัยที่ส่งผลมีอะไร
Risk-free Rate Beta Capital Structure Tax Rate Credit Rating Market Risk Premium ดอกเบี้ยตลาด สัดส่วนหนี้ ภาษี ความเสี่ยง
สรุป
WACC Weighted Average Cost of Capital ต้นทุนเงินทุน CAPM DCF Valuation Capital Budgeting Debt Equity Tax Shield Sensitivity Analysis
