Variance Reduction Techniques in Simulation › Antithetic Variates

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

Book contents

Section 3 of 12 · 13 min read

Variance Reduction Techniques in Simulation › Antithetic VariatesOne section · Sections in this chapter3 / 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

Antithetic variates exploit a symmetry in the random sampling process to reduce variance with minimal computational overhead. This section develops the mathematical foundation and provides practical implementation guidance.

The Core Intuition

Antithetic variates exploit a simple but powerful idea: instead of generating independent random samples, we generate pairs of negatively correlated samples. The negative correlation causes high estimates from one sample to partially cancel with low estimates from its partner. This reduces overall variance. To understand why this works, consider what happens when we average two random numbers compared to averaging two numbers that move in opposite directions.

Consider estimating the expected payoff of a call option. Some simulations will produce paths where the asset price ends up high (large payoff), while others will produce paths where it ends up low (zero payoff). If we could pair each "high" outcome with a corresponding "low" outcome, the average of each pair would be closer to the true expected value than either outcome alone. This pairing creates a cancellation effect where extreme values offset each other, producing more stable estimates.

The antithetic technique implements this pairing by using the symmetry of the standard normal distribution. If ZZ is a standard normal random variable then −Z-Z is also standard normal with the same distribution. More importantly, ZZ and −Z-Z are perfectly negatively correlated. When we use ZZ to generate one path and −Z-Z to generate an "antithetic" path, the two paths move in opposite directions, creating the cancellation effect we seek. This symmetry is the structural feature that makes the technique useful.

Mathematical Foundation

To understand precisely how antithetic variates reduce variance, we need to formalize the relationship between the original and antithetic samples and analyze the resulting estimator. Let X=f(Z)X = f(Z) where ZZ is a standard normal random variable and ff is the function mapping random inputs to payoffs. Define the antithetic variable X′=f(−Z)X' = f(-Z). Since −Z-Z has the same distribution as ZZ, we have E[X′]=E[X]\mathbb{E}[X'] = \mathbb{E}[X]. This ensures the antithetic sample does not bias our estimate.

The antithetic estimator uses the average of each pair:

μ^AV=X+X′2=f(Z)+f(−Z)2\hat{\mu}_{\text{AV}} = \frac{X + X'}{2} = \frac{f(Z) + f(-Z)}{2}

where:

  • μ^AV\hat{\mu}_{\text{AV}}: the antithetic estimator
  • XX: payoff from the original sample ZZ
  • X′X': payoff from the antithetic sample −Z-Z
  • f(⋅)f(\cdot): payoff function
  • ZZ: standard normal random variable

This average forms the building block of the antithetic variates method. Rather than treating each simulation independently, we pair simulations and work with the average of each pair. The key question is whether this pairing reduces variance compared to using the same total number of independent samples.

The expected value of μ^AV\hat{\mu}_{\text{AV}} equals the expected value we want to estimate:

E[μ^AV]=E[X+X′2]=E[X]+E[X′]2=E[X](since E[X′]=E[X])\begin{aligned} \mathbb{E}[\hat{\mu}_{\text{AV}}] &= \mathbb{E}\left[\frac{X + X'}{2}\right] \\ &= \frac{\mathbb{E}[X] + \mathbb{E}[X']}{2} \\ &= \mathbb{E}[X] && \text{(since } \mathbb{E}[X'] = \mathbb{E}[X] \text{)} \end{aligned}

where:

  • μ^AV\hat{\mu}_{\text{AV}}: the antithetic estimator
  • XX: payoff from the original sample
  • X′X': payoff from the antithetic sample
  • E[X]\mathbb{E}[X]: expected value of target variable

This calculation confirms that the antithetic estimator is unbiased. The expected value of our estimate equals the true quantity we want to estimate, regardless of how XX and X′X' are correlated. Unbiasedness is essential because it guarantees that our estimate converges to the correct value as we increase the number of simulations.

Now we analyze the variance of μ^AV\hat{\mu}_{\text{AV}}:

Var(μ^AV)=Var(X+X′2)=14[Var(X)+Var(X′)+2Cov(X,X′)](variance of a sum)=14[σX2+σX2+2ρσX2](substitute Var=σX2,Cov=ρσX2)=σX22(1+ρ)(simplify)\begin{aligned} \text{Var}(\hat{\mu}_{\text{AV}}) &= \text{Var}\left(\frac{X + X'}{2}\right) \\ &= \frac{1}{4}\left[\text{Var}(X) + \text{Var}(X') + 2\text{Cov}(X, X')\right] && \text{(variance of a sum)} \\ &= \frac{1}{4}\left[\sigma_X^2 + \sigma_X^2 + 2\rho\sigma_X^2\right] && \text{(substitute } \text{Var}=\sigma_X^2, \text{Cov}=\rho\sigma_X^2 \text{)} \\ &= \frac{\sigma_X^2}{2}\left(1 + \rho\right) && \text{(simplify)} \end{aligned}

where:

  • Var(μ^AV)\text{Var}(\hat{\mu}_{\text{AV}}): variance of the antithetic estimator
  • σX2\sigma_X^2: variance of the single sample XX
  • ρ\rho: correlation between XX and X′X', Corr(X,X′)\text{Corr}(X, X')

This variance formula reveals the mathematical heart of the antithetic variates method. The key term is (1+ρ)(1 + \rho), which depends on the correlation between the original and antithetic samples. When independent samples are used, ρ=0\rho = 0, and the variance of the average of two samples would be σX2/2\sigma_X^2/2. But when the samples are negatively correlated, meaning ρ<0\rho < 0, the term (1+ρ)(1 + \rho) becomes smaller than 1, reducing the variance below what independent sampling would achieve.

For variance reduction to occur, we need Var(μ^AV)<Var(X)/2\text{Var}(\hat{\mu}_{\text{AV}}) < \text{Var}(X)/2 (since we use two samples to compute μ^AV\hat{\mu}_{\text{AV}}). This requires:

σX22(1+ρ)<σX22\frac{\sigma_X^2}{2}(1 + \rho) < \frac{\sigma_X^2}{2}

where:

  • σX2\sigma_X^2: variance of the single sample
  • ρ\rho: correlation between the antithetic pair

which simplifies to ρ<0\rho < 0. The more negative the correlation, the greater the variance reduction. In the extreme case where ρ=−1\rho = -1, the variance of the pair average drops to zero, meaning the average of XX and X′X' equals the true expected value exactly. While perfect negative correlation is rarely achievable in practice, even moderate negative correlation provides substantial variance reduction.

Out[3]:
Visualization
Line chart of variance reduction factor versus correlation rho, showing VRF rising steeply as correlation approaches negative one.
Variance reduction factor (VRF) for antithetic variates as a function of correlation $\rho$ between original and antithetic samples. The shaded region ($\rho < 0$) shows where variance reduction is achieved. VRF increases dramatically as correlation becomes more negative, approaching infinity as $\rho \to -1$, indicating that perfect negative correlation would eliminate variance entirely.

When Antithetic Variates Work

The correlation ρ\rho depends on the function ff. For monotonic functions antithetic variates are highly effective. Consider a call option payoff, which increases with the underlying asset price. High values of ZZ lead to high terminal prices and high payoffs; low values of ZZ (or equivalently, high values of −Z-Z) lead to low terminal prices and low payoffs. The payoffs from ZZ and −Z-Z move in opposite directions, creating strong negative correlation.

To understand this more concretely, imagine a call option with a strike price at the current asset level. When we draw a positive value of ZZ, the asset drifts upward, ending above the strike and producing a positive payoff. The antithetic sample uses −Z-Z, which pushes the asset downward, likely ending below the strike with zero payoff. The average of a positive payoff and zero is closer to the true expected value than either extreme would be alone. This systematic pairing of high and low outcomes is what drives the variance reduction.

Monotonicity Condition

Antithetic variates reduce variance when the payoff function is monotonic in the underlying random variables. For option pricing, this typically holds because option values increase (for calls) or decrease (for puts) with the underlying asset price.

For non-monotonic payoffs, such as straddles or butterfly spreads, the effectiveness diminishes because the payoff might increase and then decrease as the underlying moves, breaking the negative correlation. A straddle, for instance, pays off when the underlying moves far from the strike in either direction. Both ZZ and −Z-Z could produce large movements, just in opposite directions, so both could yield high payoffs. The pairing no longer creates the cancellation effect that drives variance reduction.

Implementation for European Options

Let's implement antithetic variates for pricing a European call option and compare it to standard Monte Carlo simulation.

In[4]:
Code
import numpy as np


def monte_carlo_european_call(
    S0, K, T, r, sigma, n_simulations, antithetic=False
):
    """
    Price a European call option using Monte Carlo simulation.

    Parameters:
    - S0: Initial stock price
    - K: Strike price
    - T: Time to maturity (years)
    - r: Risk-free rate
    - sigma: Volatility
    - n_simulations: Number of simulations
    - antithetic: Whether to use antithetic variates
    """
    np.random.seed(42)  # For reproducibility

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

        # Original paths
        ST_original = S0 * np.exp(
            (r - 0.5 * sigma**2) * T + sigma * np.sqrt(T) * Z
        )
        payoff_original = np.maximum(ST_original - K, 0)

        # Antithetic paths (using -Z)
        ST_antithetic = S0 * np.exp(
            (r - 0.5 * sigma**2) * T + sigma * np.sqrt(T) * (-Z)
        )
        payoff_antithetic = np.maximum(ST_antithetic - K, 0)

        # Average of pairs
        payoff_pairs = (payoff_original + payoff_antithetic) / 2

        price = np.exp(-r * T) * np.mean(payoff_pairs)
        std_error = np.exp(-r * T) * np.std(payoff_pairs) / np.sqrt(n_pairs)
    else:
        # Standard Monte Carlo
        Z = np.random.standard_normal(n_simulations)
        ST = S0 * np.exp((r - 0.5 * sigma**2) * T + sigma * np.sqrt(T) * Z)
        payoffs = np.maximum(ST - K, 0)

        price = np.exp(-r * T) * np.mean(payoffs)
        std_error = np.exp(-r * T) * np.std(payoffs) / np.sqrt(n_simulations)

    return price, std_error

Now let's compare the two methods. We'll use parameters for a typical at-the-money option and compute the Black-Scholes price as our benchmark.

In[5]:
Code
from scipy.stats import norm


def black_scholes_call(S0, K, T, r, sigma):
    """Calculate Black-Scholes price for a European call option."""
    d1 = (np.log(S0 / K) + (r + 0.5 * sigma**2) * T) / (sigma * np.sqrt(T))
    d2 = d1 - sigma * np.sqrt(T)
    return S0 * norm.cdf(d1) - K * np.exp(-r * T) * norm.cdf(d2)


# Option parameters
S0 = 100  # Initial stock price
K = 100  # Strike price (at-the-money)
T = 1.0  # 1 year to maturity
r = 0.05  # 5% risk-free rate
sigma = 0.2  # 20% volatility

# Analytical price
bs_price = black_scholes_call(S0, K, T, r, sigma)

# Monte Carlo estimates
n_sims = 100000
mc_price, mc_se = monte_carlo_european_call(
    S0, K, T, r, sigma, n_sims, antithetic=False
)
av_price, av_se = monte_carlo_european_call(
    S0, K, T, r, sigma, n_sims, antithetic=True
)
Out[6]:
Console
European Call Option Pricing Comparison
==================================================
Black-Scholes Price:      \$10.4506

Standard Monte Carlo:
  Price:                  \$10.4739
  Standard Error:         \$0.0466
  Error from BS:          \$0.0233

Antithetic Variates:
  Price:                  \$10.4529
  Standard Error:         \$0.0329
  Error from BS:          \$0.0023

Variance Reduction Factor: 2.01x

The antithetic variates method achieves a substantially lower standard error while using the same total number of random samples. The variance reduction factor indicates how many times more efficient the antithetic method is compared to standard Monte Carlo.

Key Parameters

The key parameters for the Black-Scholes option pricing model used in these simulations are:

  • S0: Initial stock price. The starting value of the underlying asset.
  • K: Strike price. The price at which the option can be exercised.
  • T: Time to maturity in years.
  • r: Risk-free interest rate, continuously compounded.
  • σ: Volatility of the underlying asset's returns.

Visualizing the Correlation Effect

To understand why antithetic variates work, let's visualize the relationship between original and antithetic payoffs.

In[7]:
Code
# Generate payoff pairs for visualization
np.random.seed(123)
n_viz = 1000
Z_viz = np.random.standard_normal(n_viz)

ST_original = S0 * np.exp((r - 0.5 * sigma**2) * T + sigma * np.sqrt(T) * Z_viz)
ST_antithetic = S0 * np.exp(
    (r - 0.5 * sigma**2) * T + sigma * np.sqrt(T) * (-Z_viz)
)

payoff_original = np.maximum(ST_original - K, 0)
payoff_antithetic = np.maximum(ST_antithetic - K, 0)
Out[8]:
Visualization
Scatter plot of antithetic versus original call payoffs forming an L-shaped inverse relationship, with most pairs having one payoff near zero and an annotated correlation of -0.498.
Scatter plot showing the relationship between original payoffs $f(Z)$ and antithetic payoffs $f(-Z)$ for a European call option. The L-shaped point pattern and correlation of approximately -0.50 show that when one path finishes in the money, its paired path usually has little or no payoff. Pairing these opposing outcomes makes their averages more stable.

The strong negative correlation visible in the scatter plot is what drives the variance reduction. When the original path produces a large payoff, the antithetic path tends to produce a small payoff, and their average is closer to the true expected value than either would be alone.

Out[9]:
Visualization
Histogram of individual call option payoffs showing wide spread with a mode at zero and a long right tail.
Distribution of 1,000 individual call option payoffs, showing a wide spread with a large mode at zero and a long right tail. Dashed and solid reference lines mark the sample mean and true expected value.
Histogram of antithetic pair averages showing much tighter distribution clustered near the true expected payoff.
Distribution of 1,000 antithetic pair averages. Averaging each original payoff with its antithetic counterpart reduces the right-tail spread and moves the sample mean closer to the true expected value.