If you have read anything about risk-neutral pricing, you have met the symbol

    \[\frac{d\mathbb{Q}}{d\mathbb{P}}\]

and probably been told it is a “change of measure”. That is true and completely unhelpful. It looks like a derivative, it is not a derivative, and the notation actively obstructs the intuition.

Here is what it actually is: a set of weights. One number attached to every possible future scenario, telling you how much more or less likely that scenario is under one probability measure than under another. Nothing more exotic than that.

Two measures over the same scenarios

Start with the thing that confuses people. When we say the stock drifts at 12% in the real world and at the risk-free 4% under the pricing measure, we are not describing two different stocks or two different sets of possible futures.

The scenarios are identical. What changes is how much weight each one carries.

Under \mathbb{P} — the real-world, or physical, measure — the paths where the stock does well are relatively likely, because the stock genuinely earns a risk premium. Under \mathbb{Q}, those same paths are downweighted and the poor ones are upweighted, until the average return comes out at the risk-free rate.

The Radon-Nikodym derivative is exactly that reweighting function. Formally, if \mathbb{Q} and \mathbb{P} agree on which events are impossible, there exists a strictly positive random variable Z such that

    \[\mathbb{Q}(A) = \mathbb{E}^{\mathbb{P}}\left[Z \cdot \mathbf{1}_A\right] \quad \text{for every event } A, \qquad Z = \frac{d\mathbb{Q}}{d\mathbb{P}}\]

Read that second-to-last piece slowly: to get the \mathbb{Q}-probability of anything, take the \mathbb{P}-probability and weight it by Z. That is the whole definition.

The two conditions that make it work

Two requirements, and both are doing real work.

Equivalence. The two measures must agree on impossibility: \mathbb{P}(A) = 0 if and only if \mathbb{Q}(A) = 0. Reweighting can make a scenario very unlikely, but it cannot make an impossible scenario possible or vice versa. In finance this is what stops a change of measure from conjuring or destroying arbitrage — if a payoff is impossible in the real world, no pricing measure can pretend otherwise.

Positivity and normalisation. Z > 0 everywhere, and \mathbb{E}^{\mathbb{P}}[Z] = 1. The second one is just the statement that \mathbb{Q} is still a probability measure — total weight has to come to one.

Those two conditions are also your implementation checklist, and I will come back to that.

What it looks like for a stock

Take geometric Brownian motion with real-world drift \mu and volatility \sigma, and a risk-free rate r. Define the market price of risk

    \[\theta = \frac{\mu - r}{\sigma}\]

which is the excess return per unit of volatility — how much you are being paid, in return terms, for each unit of risk you carry. Girsanov’s theorem then tells you the density is

    \[\frac{d\mathbb{Q}}{d\mathbb{P}} = \exp\left(-\theta W_T - \frac{1}{2}\theta^2 T\right)\]

Look at the sign. Paths where the Brownian motion ended high — where the stock did well — get a negative exponent, so they are downweighted. Paths where it ended low get upweighted. Exactly the reweighting described above, written down.

With \mu = 12\%, r = 4\% and \sigma = 20\%, we get \theta = 0.40.

Watching it work on a single set of paths

This is the part worth doing yourself, because it makes the abstraction concrete. Simulate two million stock paths under \mathbb{P} only, with the 12% drift. Never simulate under \mathbb{Q} at all. Then just reweight.

First, the density has to be a valid one:

Check Value Requirement
\mathbb{E}^{\mathbb{P}}[d\mathbb{Q}/d\mathbb{P}] 1.00011 must be 1
minimum 0.10092 must be > 0
maximum 6.27 finite
median 0.92311 —

Now take the same paths and compute the expected stock price two ways:

Simulated Theory
\mathbb{E}^{\mathbb{P}}[S_T] 112.7388 S_0e^{\mu T} = 112.7497
\mathbb{E}^{\mathbb{P}}[S_T \cdot d\mathbb{Q}/d\mathbb{P}] 104.0882 S_0e^{rT} = 104.0811

Identical paths. One multiplication by the weights, and a 12% drift becomes a 4% drift. That is the entire mechanism of risk-neutral pricing, and nothing was simulated twice.

Why it matters: 58% wrong without it

The obvious question is what happens if you skip the reweighting and just discount the real-world expectation. Price a one-year at-the-money call from the same paths:

Method Price
e^{-rT}\,\mathbb{E}^{\mathbb{P}}[\text{payoff}] 15.6715
e^{-rT}\,\mathbb{E}^{\mathbb{P}}[\text{payoff} \cdot d\mathbb{Q}/d\mathbb{P}] 9.9209
Black-Scholes 9.9251

Discounting the real-world expectation overprices the option by 58%. Not a subtle correction — you would be quoting nearly two-thirds too much and every counterparty would happily trade against you.

The reweighted version matches Black-Scholes to four basis points, which is Monte Carlo noise on two million paths. Same paths, same code, one extra multiplication.

Where the intuition earns its keep

Once you see the density as weights, several things that look like separate topics collapse into one.

Girsanov is just the formula for the weights. The theorem says that if you reweight by \exp(-\theta W_T - \frac{1}{2}\theta^2 T), then W_t^{\mathbb{Q}} = W_t + \theta t is a Brownian motion under the new measure. That is the drift-shifting machinery, but the object doing the work is the density.

Change of numéraire is the same idea with a different denominator. Switching from the money-market account to a T-bond gives you the forward measure, and the density is the ratio of the two numéraires. Same reweighting, different target.

Importance sampling is this used deliberately. In variance reduction you choose a measure that oversamples the region you care about, then divide the payoff by the density to correct the bias. That likelihood ratio is a Radon-Nikodym derivative. Pricing and variance reduction are the same operation aimed at different goals.

And it explains why \mu disappears from option prices. The real-world drift is entirely absorbed into \theta, which is entirely absorbed into the weights. By the time you have reweighted, \mu has cancelled. That is the formal reason an option price does not depend on whether you think the stock is going up.

The practical warning nobody mentions

The density is well behaved over one year. Over long horizons it is not, and this bites in real systems.

The exponent contains \theta^2 T, so the spread of the weights grows with the horizon. Measuring how concentrated the weight becomes:

Horizon Weight held by top 1% of paths Largest single weight
1 year 2.7% 7×
5 years 7.6% 63×
20 years 29.5% 1,528×

At twenty years, one percent of your simulated paths carry thirty percent of the total weight, and a single path can be worth fifteen hundred times another. Your effective sample size has collapsed — you may have simulated a million paths but you are effectively averaging over a few thousand.

This is the standard reason long-dated exposure and XVA engines simulate directly under the measure they need rather than simulating under one and reweighting. Reweighting is elegant, exact in theory, and numerically unusable past a certain horizon. If you ever see a long-dated Monte Carlo with wild variance and no obvious bug, an over-stretched change of measure is a good first suspect.

Code

import numpy as np

S0, mu, r, sig, T, M = 100., 0.12, 0.04, 0.20, 1.0, 2_000_000
rng = np.random.default_rng(7)
Z = rng.standard_normal(M)

# simulate under P only
ST  = S0*np.exp((mu - 0.5*sig**2)*T + sig*np.sqrt(T)*Z)
W_T = np.sqrt(T)*Z

theta = (mu - r)/sig                              # market price of risk
dQdP  = np.exp(-theta*W_T - 0.5*theta**2*T)       # the density

assert abs(dQdP.mean() - 1) < 1e-3, "density must integrate to 1"
assert dQdP.min() > 0,              "density must be strictly positive"

print(f"E^P[S_T]           = {ST.mean():.4f}")
print(f"E^P[S_T * dQ/dP]   = {(ST*dQdP).mean():.4f}")

K = 100.
print(f"naive      = {np.exp(-r*T)*np.maximum(ST-K,0).mean():.4f}")
print(f"reweighted = {np.exp(-r*T)*(np.maximum(ST-K,0)*dQdP).mean():.4f}")

Those two assertions are the whole implementation test. If the mean of your density is not one, the normalising -\frac{1}{2}\theta^2T term is wrong or missing. If any weight is negative or zero, you have not built a valid measure change at all — and both mistakes will quietly produce plausible-looking prices that are simply wrong.

The takeaway

The Radon-Nikodym derivative is a weight per scenario, not a rate of change. It exists whenever two measures agree on what is impossible, it must be positive and average to one, and in finance it is the object that converts a real-world drift into a risk-neutral one without touching a single simulated path.

Understand it as weights and Girsanov, change of numéraire, importance sampling and the disappearance of \mu from option prices all become the same idea seen from four angles.


This sits directly between two other pieces worth reading alongside it: what a martingale actually is, since the density process is itself a martingale, and what the risk-neutral measure is, which is the measure this derivative constructs.


The measure change, the martingale machinery underneath it and the numerical checks that tell you when an implementation is right are worked through from the ground up in the course modules.


Get the Quant Reference Card — four pages covering stochastic calculus, measure change, the models you’ll meet, discretisation, rates, credit and XVA. Free.