Brownian Motion and Random Walk Models › Geometric Brownian Motion

Michael BrenndoerferNovember 22, 202512 min read
Quantitative FinanceAll chapters
Part 5 of 15Stochastic Calculus and Pricing Theory
Chapter 26Brownian Motion and Random Walk Models › Geometric Brownian Motion
Reading section 5 of 10 · Geometric Brownian Motion · 12 minSection 5 of 10 · 12 min

Book contents

Section 5 of 10 · 12 min read

Brownian Motion and Random Walk Models › Geometric Brownian MotionOne section · Sections in this chapter5 / 10 ↓
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

Standard Brownian motion can go negative, which makes it unsuitable for modeling asset prices directly. A stock price of negative $50 is meaningless. We need a modification that ensures prices stay positive and captures the multiplicative nature of returns, where a 10% gain followed by a 10% loss doesn't return you to the starting point. If you start with $100, gain 10% to reach $110, then lose 10%, you end at $99, not $100.

Geometric Brownian Motion (GBM) solves both problems by modeling the logarithm of the price as Brownian motion with drift. By taking the exponential of a process that can range from negative infinity to positive infinity, we obtain a process that ranges from zero to positive infinity, which is exactly the domain of asset prices. The multiplicative structure of percentage returns emerges naturally from this construction.

Geometric Brownian Motion

A stochastic process {St}t≥0\{S_t\}_{t \geq 0} follows Geometric Brownian Motion if it satisfies the stochastic differential equation:

dSt=μSt dt+σSt dWtdS_t = \mu S_t \, dt + \sigma S_t \, dW_t

where:

  • StS_t: asset price at time tt
  • μ\mu: drift rate (expected return)
  • σ\sigma: volatility (standard deviation of returns)
  • WtW_t: standard Brownian motion

Equivalently, log⁡St\log S_t follows Brownian motion with drift.

The stochastic differential equation above deserves careful interpretation. The term μSt dt\mu S_t \, dt represents the deterministic drift: if there were no randomness, the price would grow exponentially at rate μ\mu. The term σSt dWt\sigma S_t \, dW_t represents the random fluctuations: the price is continuously perturbed by Brownian shocks, with the magnitude of these shocks proportional to the current price level. This proportionality means that a $100 stock and a $1000 stock experiencing the same percentage volatility will have different dollar volatilities.

The solution to this SDE is:

St=S0exp⁡[(μ−σ22)t+σWt]S_t = S_0 \exp\left[\left(\mu - \frac{\sigma^2}{2}\right)t + \sigma W_t\right]

where:

  • StS_t: asset price at time tt
  • S0S_0: initial asset price
  • μ\mu: drift parameter
  • σ\sigma: volatility parameter
  • WtW_t: value of Brownian motion at time tt

We'll derive this solution rigorously using Itô's lemma in the next chapter. For now, let's understand why this form makes sense and explore its properties.

Why the Drift Adjustment?

You might expect the exponent to simply be μt+σWt\mu t + \sigma W_t, but there's an additional −σ2/2-\sigma^2/2 term. This correction arises from the convexity of the exponential function and the non-zero quadratic variation of Brownian motion. It is perhaps the most important example of how stochastic calculus differs from ordinary calculus.

Consider the logarithm of the price process:

Xt=log⁡St=log⁡S0+(μ−σ22)t+σWt\begin{aligned} X_t &= \log S_t \\ &= \log S_0 + \left(\mu - \frac{\sigma^2}{2}\right)t + \sigma W_t \end{aligned}

where:

  • XtX_t: log-price at time tt
  • StS_t: price at time tt
  • μ−σ2/2\mu - \sigma^2/2: drift of the log-price process
  • WtW_t: standard Brownian motion source of noise

This is an arithmetic Brownian motion with drift μ−σ2/2\mu - \sigma^2/2 and volatility σ\sigma. The −σ2/2-\sigma^2/2 term is sometimes called the "Itô correction" or "convexity adjustment."

The drift μ\mu represents the expected instantaneous return E[dSt/St]/dt\mathbb{E}[dS_t/S_t]/dt, but because of Jensen's inequality, the expected log return is lower:

E[log⁡(St/S0)]/t=μ−σ2/2\mathbb{E}[\log(S_t/S_0)]/t = \mu - \sigma^2/2

where:

  • E[⋅]\mathbb{E}[\cdot]: expected value operator
  • St/S0S_t/S_0: return ratio over time tt
  • μ\mu: arithmetic drift rate
  • σ2/2\sigma^2/2: convexity adjustment

To understand this intuitively, consider what happens to the average of $100 invested in two equally likely scenarios: either the price doubles to $200 or it halves to $50. The arithmetic average outcome is (200 + 50)/2 = $125, representing a 25% gain. But the geometric average (or equivalently, the average of log returns) is 200×50\sqrt{200 \times 50} = $100, representing a 0% gain. The arithmetic mean exceeds the geometric mean whenever there is volatility, and the gap is approximately σ2/2\sigma^2/2.

For typical equity parameters (μ=0.10\mu = 0.10, σ=0.20\sigma = 0.20), the difference is 0.020.02 or 2% per year, which is economically significant. An expected arithmetic return of 10% per year corresponds to an expected log return of only 8% per year. Over long horizons, this difference compounds substantially.

Out[19]:
Visualization
Two-line chart comparing GBM mean and median prices over 10 years, with a shaded region highlighting the growing convexity gap.
Comparison of the expected price and median price trajectories for Geometric Brownian Motion with drift 10% and volatility 20%. The solid mean trajectory exceeds the dashed median because of the positive skewness of the lognormal distribution, with the widening shaded gap quantifying the convexity adjustment.

Simulating GBM

We can simulate GBM in two equivalent ways: directly using the exact solution, or by discretizing the SDE.

Exact simulation: Since we have a closed-form solution, we can generate StS_t directly:

St=S0exp⁡[(μ−σ22)t+σWt]S_t = S_0 \exp\left[\left(\mu - \frac{\sigma^2}{2}\right)t + \sigma W_t\right]

where:

  • StS_t: simulated price at time tt
  • S0S_0: starting price
  • μ,σ\mu, \sigma: drift and volatility parameters
  • WtW_t: Brownian motion realization

This approach is highly efficient because we only need to simulate the Brownian motion once, then apply the exponential transformation. There is no discretization error because we are using the exact solution at each time point.

Euler discretization: Approximate the SDE over small time steps:

St+Δt≈St+μStΔt+σStΔt ZS_{t+\Delta t} \approx S_t + \mu S_t \Delta t + \sigma S_t \sqrt{\Delta t} \, Z

where:

  • St+ΔtS_{t+\Delta t}: price at the next time step
  • StS_t: current price
  • μ\mu: drift rate
  • σ\sigma: volatility
  • Δt\Delta t: time increment
  • ZZ: standard normal random variable

The Euler method approximates the continuous SDE by treating the drift and diffusion terms as constant over each small time step. This introduces discretization error that shrinks as Δt→0\Delta t \to 0, but for any finite time step, the approximation is not exact.

The exact method is preferable when possible since it avoids discretization error.

In[20]:
Code
import numpy as np


def gbm_exact(S0, mu, sigma, T, n_steps, n_paths=1):
    """Simulate GBM using the exact solution."""
    dt = T / n_steps
    times = np.linspace(0, T, n_steps + 1)

    # Generate Brownian motion increments
    dW = np.sqrt(dt) * np.random.randn(n_paths, n_steps)
    W = np.cumsum(dW, axis=1)
    W = np.hstack([np.zeros((n_paths, 1)), W])

    # Apply GBM formula
    drift = (mu - 0.5 * sigma**2) * times
    diffusion = sigma * W
    S = S0 * np.exp(drift + diffusion)

    return times, S


# Typical equity parameters
S0 = 100  # Initial price
mu = 0.10  # 10% annual drift
sigma = 0.20  # 20% annual volatility
T = 1.0  # One year

np.random.seed(42)
times, S = gbm_exact(S0, mu, sigma, T, n_steps=252, n_paths=10)
Out[21]:
Visualization
Line chart showing ten GBM stock price paths over one year.
Ten simulated realizations of Geometric Brownian Motion with parameters S_0=100, mu=0.10, and sigma=0.20 over a one-year horizon. Unlike arithmetic Brownian motion, these price paths remain strictly positive and show the compounding effect of returns, with trajectories spreading out as time progresses.

Lognormal Distribution of Prices

Since log⁡St\log S_t is normally distributed, StS_t itself follows a lognormal distribution. This is a direct consequence of the GBM solution: the exponential of a normal random variable is lognormal. Specifically:

log⁡St∼N(log⁡S0+(μ−σ22)t,σ2t)\log S_t \sim N\left(\log S_0 + \left(\mu - \frac{\sigma^2}{2}\right)t, \sigma^2 t\right)

where:

  • log⁡St\log S_t: natural logarithm of price at time tt
  • N(⋅,⋅)N(\cdot, \cdot): normal distribution notation
  • S0S_0: initial price
  • μ\mu: drift rate
  • σ\sigma: volatility
  • tt: time elapsed
  • log⁡S0+(μ−σ2/2)t\log S_0 + (\mu - \sigma^2/2)t: mean of the log-price
  • σ2t\sigma^2 t: variance of the log-price

From this, we can derive several important quantities:

  • Expected price: E[St]=S0eμt\mathbb{E}[S_t] = S_0 e^{\mu t}
  • Variance of price: Var(St)=S02e2μt(eσ2t−1)\text{Var}(S_t) = S_0^2 e^{2\mu t}(e^{\sigma^2 t} - 1)
  • Median price: Median(St)=S0e(μ−σ2/2)t\text{Median}(S_t) = S_0 e^{(\mu - \sigma^2/2)t}

The mean exceeds the median because the lognormal distribution is right-skewed. There's a small probability of very large price increases, which pulls the mean above the median. This skewness increases with volatility and time, which reflects the asymmetry between percentage gains and losses: a stock can gain 100% or 200%, but it can only lose at most 100%.

Let's verify the distribution:

In[22]:
Code
import numpy as np

# Simulate many paths to check distribution at T=1
np.random.seed(42)
n_paths = 50000
times, S = gbm_exact(S0, mu, sigma, T=1.0, n_steps=252, n_paths=n_paths)
final_prices = S[:, -1]

# Theoretical values
expected_price = S0 * np.exp(mu * T)
median_price = S0 * np.exp((mu - sigma**2 / 2) * T)
log_mean = np.log(S0) + (mu - sigma**2 / 2) * T
log_std = sigma * np.sqrt(T)

# Empirical values
empirical_mean = final_prices.mean()
empirical_median = np.median(final_prices)
empirical_log_mean = np.log(final_prices).mean()
empirical_log_std = np.log(final_prices).std()
Out[23]:
Console
GBM Distribution at T=1:
==================================================
                        Theoretical      Empirical
--------------------------------------------------
Mean price           $       110.52 $       110.43
Median price         $       108.33 $       108.33
Log mean                     4.6852         4.6845
  Log std:         0.2000         0.1991

The simulation results confirm that while the log-prices are normally distributed, the prices themselves are lognormally distributed. The mean price exceeds the median, which reflects the positive skewness of the lognormal distribution.

Out[24]:
Visualization
Histogram of simulated stock prices with lognormal density overlay.
Empirical distribution of terminal asset prices after one year with its theoretical lognormal density overlay. The histogram shows positive skew and a long right tail representing the small probability of very large gains.
Histogram of log-prices with normal density overlay.
Empirical distribution of log-prices at the same horizon. The histogram aligns with the overlaid normal density, confirming that while prices are lognormal, their logarithms are normally distributed.

Returns Under GBM

Under GBM, the log-return over period [t,t+Δt][t, t+\Delta t] is:

rt,t+Δt=log⁡St+ΔtSt(definition of log-return)=(μ−σ22)Δt+σ(Wt+Δt−Wt)(substitute GBM solution)\begin{aligned} r_{t, t+\Delta t} &= \log\frac{S_{t+\Delta t}}{S_t} && \text{(definition of log-return)} \\ &= \left(\mu - \frac{\sigma^2}{2}\right)\Delta t + \sigma(W_{t+\Delta t} - W_t) && \text{(substitute GBM solution)} \end{aligned}

where:

  • rt,t+Δtr_{t, t+\Delta t}: log-return over the interval
  • St+Δt/StS_{t+\Delta t}/S_t: price ratio
  • Δt\Delta t: length of the time interval
  • Wt+Δt−WtW_{t+\Delta t} - W_t: Brownian increment over the interval

Since the Brownian increment Wt+Δt−WtW_{t+\Delta t} - W_t is normally distributed with mean zero and variance Δt\Delta t, the log-return is normally distributed with mean (μ−σ2/2)Δt(\mu - \sigma^2/2)\Delta t and variance σ2Δt\sigma^2 \Delta t. This matches one of the stylized facts we discussed in the previous chapter: returns are approximately symmetric and close to normal for moderate return magnitudes.

For small Δt\Delta t, the simple return approximates the log-return:

St+Δt−StSt≈rt,t+Δt\frac{S_{t+\Delta t} - S_t}{S_t} \approx r_{t, t+\Delta t}

where:

  • (St+Δt−St)/St(S_{t+\Delta t} - S_t)/S_t: simple percentage return
  • rt,t+Δtr_{t, t+\Delta t}: logarithmic return

This approximation follows from the Taylor expansion log⁡(1+x)≈x\log(1 + x) \approx x for small xx. When the percentage return is small (say, under 10%), the difference between simple and log returns is negligible for most practical purposes.

In[25]:
Code
import numpy as np

# Extract daily returns from simulated paths
daily_returns = np.diff(np.log(S), axis=1).flatten()

# Theoretical values for daily returns (dt = 1/252)
dt = 1 / 252
theoretical_mean = (mu - sigma**2 / 2) * dt
theoretical_std = sigma * np.sqrt(dt)

# Empirical values
from scipy import stats

empirical_mean = daily_returns.mean()
empirical_std = daily_returns.std()
empirical_skew = stats.skew(daily_returns)
empirical_kurt = stats.kurtosis(daily_returns)

theoretical_skew = 0.0
theoretical_kurt = 0.0
Out[26]:
Console
Daily Log-Returns Under GBM:
==================================================
                        Theoretical      Empirical
--------------------------------------------------
Mean                       0.000317       0.000315
Std                        0.012599       0.012599
Skewness                   0.000000      -0.000389
  Excess Kurtosis:       0.000000      -0.000632

The moments of the simulated log-returns match the theoretical values for a normal distribution: mean close to zero, standard deviation consistent with volatility, and negligible skewness and excess kurtosis.

Out[27]:
Visualization
Histogram of simulated GBM daily log-returns closely following an overlaid theoretical normal density curve.
Distribution of simulated daily log-returns generated by the GBM model. The histogram closely follows the theoretical normal density, illustrating the model's Gaussian-return assumption, which typically fails to capture the fat tails and skewness observed in real markets.