Variance Reduction Techniques in Simulation › Combining Variance Reduction Techniques

Michael BrenndoerferDecember 3, 20253 min read
Quantitative FinanceAll chapters
Part 6 of 15Numerical Methods for Derivative Pricing
Chapter 35Variance Reduction Techniques in Simulation › Combining Variance Reduction Techniques
Reading section 6 of 12 · Combining Variance Reduction Techniques · 3 minSection 6 of 12 · 3 min

Book contents

Section 6 of 12 · 3 min read

Variance Reduction Techniques in Simulation › Combining Variance Reduction TechniquesOne section · Sections in this chapter6 / 12 ↓
Reading tools Definitions & inline links

Choose your expertise level to adjust how many terms are explained. Beginners see more tooltips, experts see fewer to maintain reading flow. Hover over underlined terms for instant definitions.

Article links

Make inline references clickable

The techniques we've covered are not mutually exclusive. In practice, combining multiple methods can yield variance reduction factors far exceeding what any single technique achieves alone.

Antithetic Variates + Control Variates

In[26]:
Code
def monte_carlo_call_combined(S0, K, T, r, sigma, n_simulations):
    """
    Price a European call using both antithetic variates and control variates.
    """
    np.random.seed(42)

    # Generate half as many random numbers for antithetic pairs
    n_pairs = n_simulations // 2
    Z = np.random.standard_normal(n_pairs)

    # Original and antithetic terminal prices
    ST_orig = S0 * np.exp((r - 0.5 * sigma**2) * T + sigma * np.sqrt(T) * Z)
    ST_anti = S0 * np.exp((r - 0.5 * sigma**2) * T + sigma * np.sqrt(T) * (-Z))

    # Discounted payoffs
    payoff_orig = np.exp(-r * T) * np.maximum(ST_orig - K, 0)
    payoff_anti = np.exp(-r * T) * np.maximum(ST_anti - K, 0)

    # Average of antithetic pairs
    payoff_av = (payoff_orig + payoff_anti) / 2

    # Control variate: average of discounted terminal prices
    cv_orig = np.exp(-r * T) * ST_orig
    cv_anti = np.exp(-r * T) * ST_anti
    cv = (cv_orig + cv_anti) / 2
    E_cv = S0  # Known expected value

    # Optimal coefficient
    c_opt = np.cov(payoff_av, cv)[0, 1] / np.var(cv)

    # Combined estimate
    payoff_combined = payoff_av - c_opt * (cv - E_cv)

    price = np.mean(payoff_combined)
    std_error = np.std(payoff_combined) / np.sqrt(n_pairs)

    return price, std_error
In[27]:
Code
combined_price, combined_se = monte_carlo_call_combined(
    S0, K, T, r, sigma, 100000
)
Out[28]:
Console
Combined Variance Reduction Results
==================================================
Black-Scholes Price:      \$10.4506

Method                    Price       Std Error   VRF
--------------------------------------------------
Standard MC              \$10.4739      0.0466      1.00x
Antithetic               \$10.4529      0.0329      2.01x
Control Variate          \$10.4586      0.0177      6.90x
Combined (AV + CV)       \$10.4513      0.0087      28.42x

The combined method achieves variance reduction factors that exceed the sum of individual improvements, showing how these techniques complement each other.

Out[29]:
Visualization
Bar chart comparing variance reduction factors for standard Monte Carlo, antithetic variates, control variates, stratified sampling, and a combined method.
Variance reduction factors (VRF) for an at-the-money European call option ($S = K = 100$, $r = 5\%$, $\sigma = 20\%$, $T = 1$ year) using 100,000 simulations. Standard Monte Carlo is the 1.0x baseline. Antithetic variates achieve 2.0x, the terminal-price control variate achieves 6.9x, and the chapter's reported stratified standard-error estimate is approximately 1.0x. Combining antithetic and control variates achieves 28.4x, showing the strongest improvement in this comparison.