The Periodogram and Spectral Density
A way to re-view a time series not as a sequence over time but as a mixture of hidden cycles of different lengths — so a repeating pattern in the data shows up as a spike you can point to, instead of something you have to spot by eye.
Prerequisites: Autocorrelation and Serial Correlation, Stationarity
Some patterns in a time series are easy to see by eye — a trend, an obvious weekly cycle. Others are buried: a faint 22-day rhythm in a volatility series, mixed in with noise so much larger than the signal that no amount of staring at the raw plot will reveal it. The periodogram is a change of lens: instead of plotting the series against time, it plots how much of the series' total variance is attributable to cycles of each possible length. A hidden 22-day rhythm that's invisible in the time plot becomes an unmistakable spike at the corresponding frequency in the periodogram. It's the same information, decomposed differently — and the decomposition is where the invisible becomes visible.
An analogy: unmixing a chord into its notes
If you hear a chord — several musical notes played together — your ear registers one complex sound, not three separate pitches you could name on demand. A spectrum analyzer, though, takes that same sound wave and shows you exactly which frequencies are present and how loud each one is: three clean spikes at the three notes' frequencies, out of what looked like one messy waveform. A time series is the audio waveform; the periodogram is the spectrum analyzer. A series that "looks like noise" over time can still be, underneath, a mixture of a few dominant cycles plus genuine randomness — and the periodogram is what separates the notes from the noise.
The tool, one symbol at a time
Let , , be the series, and let ("omega") be a candidate frequency, measured in cycles per observation (so means "one full cycle every 22 observations"). The periodogram at frequency is
In words: for each candidate frequency, correlate the series against a pure sine/cosine wave oscillating at exactly that frequency (that's what the complex exponential does — it's a rotating unit vector, and multiplying by it and summing measures how well the series lines up with a wave of that frequency); square the result to get a power, and divide by to normalize. You never have to touch complex numbers to use this: what matters is that is large exactly when the series contains a strong component oscillating at frequency , and near zero when it doesn't.
The periodogram is a noisy, sample estimate of a theoretical target called the spectral density, , which is the frequency-domain twin of the autocorrelation function:
In words: the spectral density is built directly from the autocorrelations at every lag — it's the same information as the ACF, just repackaged by frequency instead of by lag. A series with strong, slowly-decaying autocorrelation (an AR(1) with near 1) has a spectral density concentrated at low frequencies — long, slow cycles dominate. A series with autocorrelation that flips sign every lag has its spectral density concentrated at high frequencies — fast, choppy oscillation dominates.
The periodogram takes the same variance a time plot shows you and sorts it by cycle length instead of by date. A hidden periodic pattern — seasonal, calendar-driven, mechanical — shows up as an unmistakable spike, even when it's completely invisible by eye in the raw series.
Worked example 1: finding a hidden weekly cycle by hand (mini version)
Take a toy series of 8 observations with a faint alternating pattern buried in noise: — an exact period-4 cycle (values repeat every 4 steps), no noise added, to make the arithmetic checkable by hand. The mean is ; demeaned: . Test frequency (one cycle per 4 steps). At integer multiples of a quarter-turn, cycles through for . The real part of the sum : at (): ; (): ; (): ; (): ; and the pattern repeats for – giving another from the demeaned values... rather than trace every term, the key fact anyone can verify by eye is simpler: the series is exactly the 4-step pattern repeated twice, so it aligns perfectly with a period-4 wave and no other. Computing across candidate frequencies and finding the largest value lands exactly at — the periodogram recovers the period-4 cycle exactly, because that's the only frequency the data actually contains.
Worked example 2: reading spectral concentration from an AR(1)'s ACF
An AR(1) with (strong persistence) has autocorrelations : , , , decaying slowly. Plugging into the spectral density formula, the low-frequency value works out (using the closed form ) to at — a huge concentration of power at the lowest frequency, meaning the series is dominated by slow, trend-like movement. At the highest frequency : — almost no power in fast oscillation. Contrast an AR(1) with (alternating): the same formula flips the concentration to , giving and — power concentrated in the fastest possible oscillation, matching a series that flips sign almost every step.
Under the null of pure white noise, periodogram ordinates at different frequencies are (asymptotically) independent draws proportional to a chi-squared distribution — no frequency should stand out from the others, which is the baseline you're comparing a suspected spike against.
What this means in practice
- Detecting seasonality and calendar effects. A spike at in daily trading data (a 5-day cycle) points at day-of-week effects; a spike at points at annual seasonality — frequencies you can then encode directly as dummy variables or seasonal ARIMA terms.
- Volatility clustering shows up as low-frequency power. Realized volatility series typically have spectral density concentrated at low frequencies — slow-moving vol regimes — which is the frequency-domain signature of long-memory-like behavior.
- Smoothing the periodogram matters. The raw periodogram is a very noisy estimator of the true spectral density (its variance doesn't shrink as grows) — practitioners smooth it by averaging neighboring frequencies before trusting any single spike.
- Market microstructure noise pollutes high frequencies. In tick-level data, bid-ask bounce inflates power at the very highest frequencies, unrelated to any real signal — this is exactly the problem realized volatility estimators have to correct for.
The classic confusion: treating a large periodogram value at one frequency as automatically meaningful. The raw periodogram is an extremely noisy estimate — even pure white noise produces jagged periodograms with some frequencies looking much larger than others purely by chance, and that noise does not shrink as you add more data (only averaging or smoothing reduces it). A single tall spike in a short, unsmoothed periodogram is exactly what pure randomness looks like some of the time; it takes either a formal significance test (comparing the spike to its expected size under white noise) or a plausible mechanical reason for that specific frequency (a known 5-day trading week, a known settlement cycle) before you should trust it as a real cycle.
Practice in interviews
Further reading
- Hamilton, Time Series Analysis, ch. 6
- Shumway & Stoffer, Time Series Analysis and Its Applications, ch. 4