Skip to content

Implied Volatility Term Structure Features

Overview

The Term Structure feature block extracts time-dimension structure from ATM implied volatility across maturities. It operates on daily, canonical underlying data and uses only ATM implied volatility levels at different tenors. No option-level data, pricing models, or forward curves are required.

These features describe:

  • Whether volatility is upward or downward sloping
  • The relative steepness of the curve
  • Simple curvature proxies
  • Forward variance implied by adjacent maturities

Required Input Columns

The following columns must be present in the canonical underlying daily table:

Column Description
iv_30_m100 30-day ATM implied volatility (100% moneyness)
iv_60_m100 60-day ATM implied volatility (100% moneyness)

If either column is missing, the feature block raises an error.


Tenor Conventions

Tenors are interpreted as calendar days, converted to year fractions:

Tenor Year Fraction
30D 30 / 365
60D 60 / 365

All computations assume implied volatilities are expressed in decimal form.


Produced Feature Columns

Term Structure Shape

Feature Description
iv_term_slope_30_60 Difference between 60D and 30D ATM IV
iv_term_ratio_30_60 Ratio of 60D to 30D ATM IV

These features indicate whether the volatility curve is: - Upward sloping (longer-dated IV > shorter-dated IV) - Inverted (short-term IV elevated relative to longer-term)


Curvature Proxy

Feature Description
iv_term_curvature_30_60 Simple curvature proxy between 30D and 60D ATM IV

This acts as a minimal curvature indicator when only two tenors are available.


Forward Variance

Feature Description
iv_fwd_var_30_60 Implied forward variance between 30D and 60D

Forward variance is computed by comparing the total variance implied by a longer-dated option with that implied by a shorter-dated option, after scaling each by its respective time to maturity. The implied volatilities at the money for the short and long maturities are combined with their year-fraction tenors to extract the portion of variance that lies strictly between the two maturities. In doing so, this measure isolates the incremental variance implied beyond the shorter horizon, providing a clean view of the market’s expectation of variance over the forward period rather than over the entire life of the longer-dated option.


Masking Rules

All term structure features are masked (null) when either source IV is missing:

  • iv_30_m100
  • iv_60_m100

This prevents partial or invalid term structure signals.


How to Call This Feature Block

from ocf.features.api import term_structure_features

features = term_structure_features(
    underlying_daily,
)

This validates the canonical schema and enforces a stable output contract.


Direct Builder Access (Advanced)

from ocf.features.term_structure import build_term_structure_features

features = build_term_structure_features(
    underlying_daily,
)

This assumes canonical inputs and skips schema validation.


As Part of the Composite Feature Set

from ocf.features.api import underlying_features

features = underlying_features(
    underlying_daily,
    include=["term_structure"],
)

Or combined with other volatility features:

features = underlying_features(
    underlying_daily,
    include=["iv", "skew_smile", "term_structure"],
)

Notes

  • Features are daily and fully causal
  • No forward curve construction is assumed
  • Only adjacent tenor information is used