SiamCafe.net Blog
Technology

Wacc

wacc
Wacc | SiamCafe Blog
2025-10-09· อ. บอม — SiamCafe.net· 8,619 คำ

WACC คืออะไร

WACC Weighted Average Cost of Capital ต้นทุนเงินทุนถัวเฉลี่ยถ่วงน้ำหนัก Discount Rate DCF Valuation Capital Budgeting

ส่วนประกอบสัญลักษณ์ที่มาตัวอย่าง
Market Cap (Equity)Eหุ้น × ราคา600 ล้านบาท
Total DebtDหนี้สินรวม400 ล้านบาท
Total ValueV = E+Dมูลค่ารวม1,000 ล้านบาท
Cost of EquityReCAPM = Rf + β(Rm-Rf)12%
Cost of DebtRdดอกเบี้ยเฉลี่ย5%
Tax RateTcอัตราภาษี CIT20%
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}")

เคล็ดลับ

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

เปรียบเทียบข้อดีและข้อเสีย

ข้อดีข้อเสีย
ประสิทธิภาพสูง ทำงานได้เร็วและแม่นยำ ลดเวลาทำงานซ้ำซ้อนต้องใช้เวลาเรียนรู้เบื้องต้นพอสมควร มี Learning Curve สูง
มี Community ขนาดใหญ่ มีคนช่วยเหลือและแหล่งเรียนรู้มากมายบางฟีเจอร์อาจยังไม่เสถียร หรือมีการเปลี่ยนแปลงบ่อยในเวอร์ชันใหม่
รองรับ Integration กับเครื่องมือและบริการอื่นได้หลากหลายต้นทุนอาจสูงสำหรับ Enterprise License หรือ Cloud Service
เป็น Open Source หรือมีเวอร์ชันฟรีให้เริ่มต้นใช้งานต้องการ Hardware หรือ Infrastructure ที่เพียงพอ

จากตารางเปรียบเทียบจะเห็นว่าข้อดีมีมากกว่าข้อเสียอย่างชัดเจน โดยเฉพาะในแง่ของประสิทธิภาพและความสามารถในการ 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

📖 บทความที่เกี่ยวข้อง

Wacc formulaอ่านบทความ → Wacc meaningอ่านบทความ → Wacc คืออ่านบทความ → Wacc สูตรอ่านบทความ → สูตร Waccอ่านบทความ →

📚 ดูบทความทั้งหมด →