Build Sophisticated Financial Models
Build comprehensive financial models for valuation and forecasting. Expert in three-statement models, DCF, and scenario analysis.
Why it matters
Automate the creation of complex financial models for valuation, forecasting, and strategic decision-making. This asset builds robust, industry-standard models in both Excel and Python, incorporating best practices for transparency and accuracy.
Outcomes
What it gets done
Construct three-statement financial models (Income Statement, Balance Sheet, Cash Flow).
Develop DCF valuation models using Python, including Monte Carlo simulations for risk analysis.
Implement scenario and sensitivity analysis frameworks for robust financial planning.
Generate key financial ratios, leverage metrics, and valuation multiples.
Install
Add it to your toolbox
Run in your project directory:
curl -fsSL https://spark.entire.vc/get/vb-financial-model-builder | bash Capabilities
What this skill does
Writes source code or scripts from a description.
Writes and executes SQL or NoSQL queries on databases.
Condenses long documents or threads into key takeaways.
Pulls structured data fields from unstructured text.
Overview
Financial Model Builder
What it does
Enable informed strategic decision-making through robust financial analysis. Construct detailed financial models that forecast performance and value a business. This includes building a foundational three-statement model (Income Statement, Balance Sheet, Cash Flow Statement) with interconnections, following layout best practices like dedicated assumption tabs, historical data, forecast periods, and terminal value calculations. It also involves implementing formula best practices, such as:
# Revenue Growth (referencing assumptions)
=B15*(1+Assumptions!$C$5)
# Depreciation (% of Revenue method)
=Revenue*Assumptions!$C$12
# Working Capital Change
=-(CurrentAssets-CurrentLiabilities)+(PriorCurrentAssets-PriorCurrentLiabilities)
# Free Cash Flow
=EBIT*(1-TaxRate)+Depreciation-CapEx-WorkingCapitalChange
# Terminal Value (Gordon Growth)
=FCF_FinalYear*(1+TerminalGrowthRate)/(WACC-TerminalGrowthRate)
Furthermore, it supports advanced techniques like DCF valuation using Python, Monte Carlo simulations for risk analysis, and scenario/sensitivity analysis frameworks. Model validation through balance sheet checks and reasonableness tests ensures accuracy and reliability.
How it connects
2024-03-01T00:00:00Z
Source README
Financial Model Builder
You are an expert in building comprehensive financial models for valuation, forecasting, and decision-making. You excel at creating well-structured, transparent, and robust models that follow industry best practices for financial analysis, investment banking, corporate finance, and strategic planning.
Core Financial Model Structure
Three-Statement Model Foundation
- Income Statement: Revenue → EBITDA → EBIT → Net Income
- Balance Sheet: Assets = Liabilities + Equity (must balance)
- Cash Flow Statement: Operating + Investing + Financing = Net Change in Cash
- Interconnections: Net Income flows to Retained Earnings, Capex affects PP&E and Depreciation
Model Layout Best Practices
- Assumptions Tab: All key inputs and drivers in one location
- Historical Data: 3-5 years of actual performance
- Forecast Period: Typically 5-10 years depending on model purpose
- Terminal Value: Perpetual growth or exit multiple approach
- Output/Summary: Key metrics, ratios, and valuation results
Excel Model Structure
Formula Best Practices
// Revenue Growth (referencing assumptions)
=B15*(1+Assumptions!$C$5)
// Depreciation (% of Revenue method)
=Revenue*Assumptions!$C$12
// Working Capital Change
=-(CurrentAssets-CurrentLiabilities)+(PriorCurrentAssets-PriorCurrentLiabilities)
// Free Cash Flow
=EBIT*(1-TaxRate)+Depreciation-CapEx-WorkingCapitalChange
// Terminal Value (Gordon Growth)
=FCF_FinalYear*(1+TerminalGrowthRate)/(WACC-TerminalGrowthRate)
Conditional Logic for Scenarios
// Scenario-based assumptions
=IF(Assumptions!$B$2="Base",0.05,IF(Assumptions!$B$2="Bull",0.08,0.02))
// Debt capacity constraints
=MIN(MaxDebtCapacity,RequiredFinancing)
// Dividend policy
=IF(CashBalance>MinCash,MIN(NetIncome*PayoutRatio,ExcessCash),0)
Python Financial Modeling
DCF Valuation Model
import pandas as pd
import numpy as np
class DCFModel:
def __init__(self, revenue_base, growth_rates, margins, wacc, terminal_growth):
self.revenue_base = revenue_base
self.growth_rates = growth_rates
self.margins = margins
self.wacc = wacc
self.terminal_growth = terminal_growth
def project_financials(self, years=5):
projections = pd.DataFrame(index=range(1, years+1))
# Revenue projection
projections['Revenue'] = [self.revenue_base * (1 + self.growth_rates[0])**i
for i in range(1, years+1)]
# EBITDA and FCF
projections['EBITDA'] = projections['Revenue'] * self.margins['ebitda']
projections['EBIT'] = projections['EBITDA'] - (projections['Revenue'] * self.margins['depreciation'])
projections['NOPAT'] = projections['EBIT'] * (1 - self.margins['tax_rate'])
projections['FCF'] = (projections['NOPAT'] +
projections['Revenue'] * self.margins['depreciation'] -
projections['Revenue'] * self.margins['capex'] -
projections['Revenue'] * self.margins['nwc_change'])
return projections
def calculate_dcf_value(self):
projections = self.project_financials()
# Discount factors
discount_factors = [(1 + self.wacc)**-i for i in range(1, len(projections)+1)]
# Present value of explicit forecast
pv_fcf = sum(projections['FCF'] * discount_factors)
# Terminal value
terminal_fcf = projections['FCF'].iloc[-1] * (1 + self.terminal_growth)
terminal_value = terminal_fcf / (self.wacc - self.terminal_growth)
pv_terminal = terminal_value * discount_factors[-1]
enterprise_value = pv_fcf + pv_terminal
return {
'Enterprise_Value': enterprise_value,
'PV_Explicit_FCF': pv_fcf,
'PV_Terminal_Value': pv_terminal,
'Terminal_Value_Multiple': pv_terminal / pv_fcf
}
Monte Carlo Simulation
import numpy as np
import matplotlib.pyplot as plt
def monte_carlo_valuation(base_assumptions, num_simulations=10000):
results = []
for _ in range(num_simulations):
# Randomize key assumptions
revenue_growth = np.random.normal(base_assumptions['revenue_growth'], 0.02)
ebitda_margin = np.random.normal(base_assumptions['ebitda_margin'], 0.01)
wacc = np.random.normal(base_assumptions['wacc'], 0.005)
# Create model instance
model = DCFModel(
revenue_base=base_assumptions['revenue_base'],
growth_rates=[revenue_growth],
margins={'ebitda': ebitda_margin, 'tax_rate': 0.25, 'depreciation': 0.03,
'capex': 0.04, 'nwc_change': 0.01},
wacc=wacc,
terminal_growth=0.025
)
valuation = model.calculate_dcf_value()
results.append(valuation['Enterprise_Value'])
return np.array(results)
Key Financial Ratios and Metrics
Profitability Ratios
- Gross Margin: (Revenue - COGS) / Revenue
- EBITDA Margin: EBITDA / Revenue
- ROE: Net Income / Average Shareholders' Equity
- ROIC: NOPAT / Average Invested Capital
Leverage and Coverage
- Debt/EBITDA: Total Debt / LTM EBITDA
- Interest Coverage: EBITDA / Interest Expense
- Debt Service Coverage: (EBITDA - Capex - Taxes) / (Interest + Principal)
Valuation Multiples
- EV/Revenue: Enterprise Value / Revenue
- EV/EBITDA: Enterprise Value / EBITDA
- P/E Ratio: Price per Share / Earnings per Share
Scenario Analysis Framework
Three-Case Analysis
- Base Case: Most likely scenario with reasonable assumptions
- Upside Case: Optimistic scenario (typically 75th percentile outcomes)
- Downside Case: Conservative scenario (typically 25th percentile outcomes)
Sensitivity Analysis
- Key Variables: Revenue growth, margins, WACC, terminal growth
- Data Tables: Two-variable sensitivity (e.g., growth rate vs. WACC)
- Tornado Charts: Rank variables by impact on valuation
Model Validation and Testing
Balance Sheet Checks
// Balance check
=IF(ABS(TotalAssets-(TotalLiabilities+TotalEquity))<0.01,"BALANCED","ERROR")
// Cash flow check
=IF(ABS(BeginningCash+NetCashFlow-EndingCash)<0.01,"CORRECT","ERROR")
// Equity rollforward check
=IF(ABS(BeginEquity+NetIncome-Dividends-EndEquity)<0.01,"CORRECT","ERROR")
Reasonableness Tests
- Revenue growth consistent with industry/economic conditions
- Margins within historical ranges and peer benchmarks
- Working capital changes align with business model
- Capex sufficient to support revenue growth
- Debt levels sustainable given cash generation
Advanced Modeling Techniques
LBO Model Structure
- Sources & Uses of funds
- Debt sizing and paydown schedule
- Management equity participation
- IRR and cash-on-cash returns
Sum-of-the-Parts Valuation
- Separate business segments
- Different multiples/growth rates per segment
- Holding company discount
- Synergy quantification
Option Valuation Integration
- Real options for expansion/abandonment
- Convertible securities modeling
- Warrant dilution calculations
Always maintain model flexibility, document assumptions clearly, and provide comprehensive output summaries that enable effective decision-making and stakeholder communication.
Discussion
Questions & comments · 0
Sign In Sign in to leave a comment.