Skip to content

Overview

Metrics for the Individual × Sparse cell — event signals where most (date, asset_id) cells carry factor == 0 and the few non-zero cells mark events. The schema is {0, R} — zero on non-event entries, any real value otherwise (R is unrestricted — positive, negative, or any magnitude). Common forms: {0, 1} for a pure event flag, or {0, R} for any real-valued magnitude; both flow through (see caar for the input-form table).

Sparse routing is zero-value based. Null factor cells are missing values and do not count as non-events. Fill missing upstream rows to 0 only when that is the research contract; otherwise leave them null and let pairwise sample counts reflect the missing factor. To use these sparse event metrics on a continuous exposure, categorical regime, or raw event taxonomy, first map the event-of-interest upstream into an explicit {0, R} event column.

Below 50% zeros is not a hard refusal when that zero state exists: automatic discovery stays dense, but an explicitly requested sparse metric runs with a frequent_event_signal warning.

The non-zero sign is interpreted as the expected return direction. For raw event taxonomies such as hike=+1 / cut=-1, map the event type into an asset-specific bullish/bearish signal before running sparse metrics. If a hike is expected to hurt duration assets but help a currency basket, the two asset groups should receive opposite factor signs on the same policy date.

At n_assets == 1, sparse factors still use the event-density path. Most sparse metrics whose MetricSpec leaves DataStructure wildcarded run directly on the single asset's event axis; metrics that need an asset cross-section, such as clustering_hhi, remain unavailable. Do not pool unrelated assets just to clear an asset-count guard: that changes the return-generating process being tested.

Always-in-market {-1, +1} signals are not sparse event signals because there is no non-event zero state. Treat them as dense directional signals: use predictive_beta for the single-asset magnitude slope and directional_hit_rate for sign prediction.

Event semantics

Signal / question Metric family Contract
{0, 1} event flag caar, bmp_z, event diagnostics Non-zero rows are event observations; sign is positive by construction.
{0, R} event magnitude (R may be signed) caar, bmp_z forward_return * factor; magnitude is preserved in the abnormal-return estimate.
Does event size rank realized event payoff? event_ic Spearman correlation between abs(factor) and signed_car, where signed_car = forward_return * sign(factor).
Was the event direction right? event_hit_rate, profit_factor, event_skewness Uses signed_car; mostly sign diagnostics, not magnitude-weighted CAAR.
Metric Page
Cumulative average abnormal return — \(t\)-test or BMP \(z\)-test caar
Skewness / hit-rate / win-loss diagnostics on per-event returns event_quality
MFE / MAE order-statistic excursion within an event window mfe_mae
Event-window horizon decay event_horizon
Herfindahl-Hirschman index (HHI) on event dates — flags clustering that violates BMP/CAAR independence clustering
Non-parametric Corrado rank test — robust to non-Gaussian returns corrado

caar carries the abnormal-return significance test; the rest are descriptive event-profile diagnostics.

The Common × Sparse cell shares this same {0, R} column contract and scope-agnostic event-time metrics — the dispatcher selects them for any SPARSE × PANEL factor, broadcast or per-asset. The cross-cell landing page is Common sparse.

When events cluster on the same date (earnings season, macro release), prefer caar.bmp_z(kolari_pynnonen_adjust=True) over the vanilla \(t\)-test — the clustering HHI tells you when this matters.