Quant Memo
Advanced

Sigma-Algebras and Filtrations

A sigma-algebra is the list of questions your information can answer; a filtration is that list growing as time passes. Together they are how probability theory writes down "what a trader knows at 10:30 this morning" — the machinery behind martingales, conditional expectation and every no-look-ahead rule in backtesting.

Prerequisites: Probability Spaces, Conditional Expectation

Every backtest bug you have ever chased comes down to one question: what did I actually know at that moment? If your signal at 10:00 quietly used the 10:30 print, the strategy looks brilliant and is worthless. Probability theory has an exact, checkable way to write that down — and once you have it, "no look-ahead" stops being a code-review habit and becomes a condition you can verify.

The idea before any symbols

Imagine a sealed envelope containing the full record of how tomorrow plays out — every tick, in order. You cannot open it. What you can do is ask questions, and at each moment of the day you are allowed a specific set of questions.

At 9:00, before the open, you can ask almost nothing: "will the day happen at all?" (yes) and "will it not happen?" (no). By 10:00, an hour of tape has printed, so you can now ask "did the stock trade above 101 in the first hour?" and get a definite yes or no. By the close, you can ask anything.

A sigma-algebra is that list of answerable questions at one moment. A filtration is the whole sequence of lists, one per moment, each containing everything the previous ones did. Information accumulates; you never un-learn a print. That is the entire idea. The formalism below is just bookkeeping to make it precise.

The bookkeeping

Start with the sample space Ω\Omega (capital omega): the set of every complete way the world could turn out. One element ωΩ\omega \in \Omega is one full scenario, one path through the day.

An event is a subset of Ω\Omega — a bundle of scenarios. "The stock closed up" is the set of all ω\omega in which it closed up. Asking a yes/no question is naming a subset.

A sigma-algebra F\mathcal{F} (script F) on Ω\Omega is a collection of subsets satisfying three rules:

  1. ΩF\Omega \in \mathcal{F} — you can always ask "did something happen?"
  2. If AFA \in \mathcal{F} then AcFA^c \in \mathcal{F}, where AcA^c means "everything not in AA" — if you can answer a question, you can answer its negation.
  3. If A1,A2,A3,FA_1, A_2, A_3, \dots \in \mathcal{F} then nAnF\bigcup_{n} A_n \in \mathcal{F} — if you can answer each of a list of questions, you can answer "did any of them happen?"

In words: a sigma-algebra is a set of questions that is closed under "not" and "or", so anything you can build out of answerable questions is itself answerable. Rule 3 allows infinitely many at once, which is what "sigma" refers to, and it is exactly what lets you handle questions like "did the price ever touch 105?"

Worked example 1: two coin flips, listed out

Let the stock start at S0=100S_0 = 100 and, each step, either multiply by 1.21.2 (up) or by 0.80.8 (down). Two steps gives four scenarios:

Ω={uu,  ud,  du,  dd},S2=144,  96,  96,  64.\Omega = \{\, uu,\; ud,\; du,\; dd \,\}, \qquad S_2 = 144,\; 96,\; 96,\; 64 .

At time 0 you know nothing. The only answerable questions are the trivial ones:

F0={,  Ω},2 sets.\mathcal{F}_0 = \{\, \emptyset,\; \Omega \,\}, \qquad \text{2 sets}.

At time 1 you have seen the first move. The scenarios split into two groups you can tell apart: {uu,ud}\{uu, ud\} ("first move was up") and {du,dd}\{du, dd\} ("first move was down"). Every answerable question is built from those two blocks:

F1={,  {uu,ud},  {du,dd},  Ω},4 sets.\mathcal{F}_1 = \{\, \emptyset,\; \{uu,ud\},\; \{du,dd\},\; \Omega \,\}, \qquad \text{4 sets}.

Check the three rules by hand. Rule 1: Ω\Omega is in the list. Rule 2: the complement of {uu,ud}\{uu,ud\} is {du,dd}\{du,dd\}, which is in the list; the complement of \emptyset is Ω\Omega, also in the list. Rule 3: {uu,ud}{du,dd}=Ω\{uu,ud\} \cup \{du,dd\} = \Omega, in the list. All three hold, so F1\mathcal{F}_1 is a genuine sigma-algebra.

At time 2 everything is resolved and every one of the 24=162^4 = 16 subsets is answerable, so F2\mathcal{F}_2 is the full power set.

Now the payoff. Consider the event "the stock finishes at 96", which is the set {ud,du}\{ud, du\}. Is it in F1\mathcal{F}_1? Look at the four-item list: no. So at time 1 you cannot answer "will it finish at 96?" — and you should not be able to, because after one up move it is still open whether the second move goes up or down. The formalism caught it automatically. Notice also that the chain holds: F0F1F2\mathcal{F}_0 \subset \mathcal{F}_1 \subset \mathcal{F}_2, with 2, 4 and 16 sets. That growing chain is the filtration {Ft}\{\mathcal{F}_t\}.

what you can tell apart, step by step 100 120 80 144 96 96 64 F0: 1 cell F1: 2 cells F2: 4 cells
Each shaded box is one cell of the time-1 partition: scenarios inside a box are still indistinguishable to you. At time 2 every box splits into single scenarios. A finer partition means more answerable questions, which means a larger sigma-algebra.

Worked example 2: which quantities are "known" yet

A random variable is F\mathcal{F}-measurable when every question about its value is answerable using F\mathcal{F}. Formally, for each number cc the set {ω:X(ω)c}\{\omega : X(\omega) \le c\} must belong to F\mathcal{F}; in words, you can always say whether XX came in at or below any level you name.

Test S1S_1, the price after one step, against F1\mathcal{F}_1:

  • {S1=120}={uu,ud}\{S_1 = 120\} = \{uu, ud\}, which is in F1\mathcal{F}_1. ✓
  • {S1=80}={du,dd}\{S_1 = 80\} = \{du, dd\}, which is in F1\mathcal{F}_1. ✓

So S1S_1 is F1\mathcal{F}_1-measurable — sensible, you have seen it. Now test S2S_2:

  • {S2=144}={uu}\{S_2 = 144\} = \{uu\}, which is not in the four-set list F1\mathcal{F}_1. ✗

So S2S_2 is not F1\mathcal{F}_1-measurable. Tomorrow's price is not knowable today, and the sets prove it.

What you can do at time 1 is form a best guess, and that is exactly conditional expectation. Let each move be up or down with probability 0.50.5. On the cell {uu,ud}\{uu, ud\}:

E[S2F1]=0.5×144+0.5×96=72+48=120.E[S_2 \mid \mathcal{F}_1] = 0.5 \times 144 + 0.5 \times 96 = 72 + 48 = 120 .

On the cell {du,dd}\{du, dd\}: 0.5×96+0.5×64=48+32=800.5 \times 96 + 0.5 \times 64 = 48 + 32 = 80. Both answers equal S1S_1 on that cell, so E[S2F1]=S1E[S_2 \mid \mathcal{F}_1] = S_1 — the price is a martingale under these probabilities. Note what conditional expectation is: a random variable that is constant on each cell of the partition. It has to be, because it is only allowed to use information you have.

Filtrations for continuous time

The same construction runs with paths instead of four scenarios. Each ω\omega is now an entire continuous trajectory, and Ft\mathcal{F}_t is "everything decided by watching the path up to time tt". Run the explorer below and watch several sampled paths. Freeze your eye at the halfway mark: the paths that overlap to the left of that mark are, at that instant, still in the same cell — indistinguishable to you. Everything to the right is still sealed in the envelope.

Path explorer
0-1time →
end (bold path) 0.02spread of ends 0.736 independent paths, same settings

A process XtX_t is adapted to {Ft}\{\mathcal{F}_t\} when XtX_t is Ft\mathcal{F}_t-measurable for every tt: its value today uses only today's information. That single word is the formal statement of "no look-ahead", and it is the hypothesis on essentially every theorem in stochastic calculus.

Ft\mathcal{F}_t is not a set of outcomes — it is a set of questions you can answer at time tt. A filtration is a nested chain, FsFt\mathcal{F}_s \subseteq \mathcal{F}_t for sts \le t, so information only ever grows. "Adapted" means your process uses no information from the future.

What this means in practice

  • Backtesting. Look-ahead bias is using a quantity that is not Ft\mathcal{F}_t-measurable. Point-in-time databases, lagged fundamentals and embargoed cross-validation exist to keep features adapted. See look-ahead bias and purged and embargoed CV.
  • Exit rules. "Sell when the price first touches 105" is decidable from the path so far, so it is a legitimate stopping time. "Sell at the day's high" is not — you learn the high only at the close, and optional stopping theorems fail loudly on that kind.
  • Pricing. Risk-neutral prices are conditional expectations given Ft\mathcal{F}_t, and hedging arguments require the hedge ratio to be adapted; otherwise you are trading on information you do not have.
  • Why sigma-algebras rather than all subsets. On an uncountable Ω\Omega you cannot consistently assign probabilities to every subset. Restricting to a sigma-algebra is what makes a coherent probability measure possible at all — see Lebesgue measure.

"XX is Ft\mathcal{F}_t-measurable" does not mean XX is a constant, and it does not mean you know what will happen next. It means: if you were told which scenario the world is in, only to the resolution Ft\mathcal{F}_t allows, you could still name XX's value exactly. The other frequent slip is confusing adapted (value known at time tt) with predictable (value known just before tt). Trading rules must usually be predictable, not merely adapted — an "adapted" rule that uses the very tick it trades on is still cheating in practice.

For finite Ω\Omega, forget the axioms and picture a partition: a sigma-algebra is a way of chopping Ω\Omega into cells, and its events are exactly the unions of whole cells. Time passing splits cells into smaller cells. Finer partition, more information.

Related concepts

Practice in interviews

Further reading

  • Williams, Probability with Martingales (ch. 1-3)
  • Shreve, Stochastic Calculus for Finance II (ch. 2)
ShareTwitterLinkedIn