← Blog

The OD matrix, explained

An origin–destination matrix turns a wall of flight legs into a picture of where a network flows. Here's how to read one built from a schedule — and, just as importantly, what it can and can't tell you.

A grid of origin rows against destination columns with cells shaded by density into a route heatmap, in Active Flights brand blue on near-black.

Open a raw SSIM file and what you see is a wall of flight legs — one 200-byte line after another, each a city pair, a set of days, a pair of times. It’s complete, and it’s unreadable. You cannot look at a million legs and see where a network flows. The origin–destination matrix is the oldest trick for fixing that: fold the legs into a grid, and the shape of the network appears.

What an OD matrix is

An OD matrix is a table with origins down the rows and destinations across the columns. Each cell holds a number that measures the traffic the schedule plans between that origin and that destination — most simply, how many flights operate on that directed market.

          →SYD   →MEL   →BNE   →PER   →OOL
  SYD·      —     168    140     56     42
  MEL·     168     —      98     35     28
  BNE·     140     98     —      21     14
  PER·      56     35     21     —       0
  OOL·      42     28     14     0      —

(Illustrative. Rows are the board point, columns the off point; the diagonal is empty because a station doesn’t fly to itself.) Read a row and you see everywhere an airport sends flights. Read a column and you see everywhere it receives them.

What weights a cell

“How many flights” is the starting point, not the finish. The same grid answers different questions depending on what you count in each cell:

  • Legs / frequency. A raw count of departures on the market over the period — the quickest read of how thick a market is.
  • Weekly frequency. Normalize the count to a typical week so a season-long schedule and a one-month one are comparable. This ties directly to days-of-operation expansion: a leg operating 1234567 is seven weekly departures, not one.
  • Seat capacity. Weight each departure by the aircraft’s seat count and you get planned seats between the pair — a far better proxy for the size of a market than frequency alone. A daily widebody and a daily regional turboprop are one flight each and nothing alike.

Which weight you pick decides what the picture means. Frequency shows how often; seats show how much.

Reading the heatmap

Shade each cell by its value and the matrix becomes a heatmap — the form most people actually work with.

OD matrix — flights per directed market rows = origin · columns = destination · brighter = busier SYDMELBNEPEROOL SYDMELBNEPEROOL 1681405642 168983528 140982114 5635210 4228140
  • The bright cluster is the core of the network: the handful of markets carrying most of the flying. On almost every carrier this concentration is stark.
  • A bright row or column is a busy station — an origin that feeds many destinations, or a destination many origins feed. That’s the visual signature of a hub, which we go into in hub or point-to-point.
  • The empty cells matter too. A sparse matrix with a few dense lanes is a focused network; an evenly-filled one is a dense mesh.

Symmetry and directional imbalance

A useful habit: compare the cell for A→B against the cell for B→A. In a planned schedule they’re usually close — most flights come back — but not always identical.

A gap between the two directions points at something real: a positioning leg, a tag flight, a triangular routing that doesn’t retrace itself, or simply an asymmetric bank structure. When the matrix is badly lopsided, that’s often the first sign of a data problem worth a look in the record inspector — a schedule where aircraft only ever fly one way isn’t a schedule.

The matrix doesn’t just show you the network. Its asymmetries show you where to look harder.

The honest limit: served flows, not demand

Here is the line to keep straight, because it’s the one most often crossed. An OD matrix built from a schedule shows served flows and planned capacity — where the airline has chosen to fly and how much lift it has put there. It does not show true passenger origin–destination demand.

Two reasons. First, SSIM describes the planned schedule: it says a flight is intended to operate SYD–MEL, not how many people bought a seat, nor where their journey truly began or ended. Second, a passenger’s real O&D often spans a connection — someone flying SYD–MEL–LST has a true destination the SYD–MEL leg never records. Reconstructing genuine demand needs booking and traffic data (MIDT, DDS, revenue feeds) that lives entirely outside the schedule file.

The schedule OD matrix shows It does not show
Directed markets the carrier serves True passenger O&D demand
Planned frequency and seat capacity Bookings, load, or revenue
The shape of the operated network Where a connecting journey really begins/ends

Treat a schedule OD matrix as a map of supply, not demand, and it’s one of the most useful views you have. Treat it as demand and you’ll draw the wrong conclusion confidently.

Where it fits

The OD matrix is the natural first analytical view once a schedule is parsed and typed — the fold that turns legs into structure. From there the questions branch: which markets are thickening (capacity and frequency), where the hubs are, how the flying moves across the year (seasonality).

In SSIM Toolkit, the OD matrix is one of the built-in analysis surfaces. Point it at a parsed schedule and it folds the legs into the grid on your own machine — weighted by legs, frequency, or seats, scoped to a carrier or the whole feed — so the shape of the network is a glance away rather than a query you have to write. It reads the planned schedule faithfully and, deliberately, claims nothing about demand it can’t see.

Next, we read the same data a different way: hub or point-to-point — what a carrier’s network philosophy looks like in the schedule itself. More about the app on the SSIM Toolkit product page.


Early Access Preview

Want early access?

We're opening SSIM Toolkit to teams in waves through 2026 — free during the preview. Drop your email and we'll reach out when it's your turn.