Alternative Data in Trading: Edge Beyond Price
Alternative data is any non-traditional dataset — satellite imagery, card-panel spend, web scrapes, geolocation, on-chain flows, text sentiment — used to estimate an economic quantity before it shows up in prices or official statistics. The thesis is clean: measure a company's revenue or a network's adoption ahead of the consensus and you own an informational window where alpha lives. The reality is messier — most of the work, and most of the risk, is in point-in-time hygiene, representativeness, and proving the signal survives realistic costs. This guide gives a framework for evaluating whether a dataset is worth the money.
A taxonomy that matters for modeling
Group datasets by what they measure, because the economic lag and the modeling differ sharply across groups:
| Category | Example | Proxies | Typical lead time |
|---|---|---|---|
| Activity | Satellite parking counts, foot traffic | Demand | Days-weeks before earnings |
| Transactions | Card panels, on-chain transfers | Revenue, flows | Weeks (cards), hours (chain) |
| Web | App downloads, job posts, scrapes | Growth, hiring | Variable |
| Expectation | Sentiment, search trends | Crowd positioning | Minutes-days |
Activity and transaction data are nowcasting inputs (estimate a number before its release); expectation data measures what people think rather than do. Never treat "alt data" as one monolithic thing.
The two ways alt data creates value
The first is nowcasting: estimating a market-relevant number (quarterly revenue, monthly sales) before its official print. The second is regime/flow detection: spotting a structural change — a hiring surge, collapsing store visits, stablecoins moving onto exchanges — that consensus has not priced. The fundamental test for any dataset is the same: does it say something different from consensus, and is that difference trustworthy? Data that merely confirms the consensus has no value, however exotic.
A worked nowcasting example
A retailer's street consensus is 5.00B. Your card panel covers ~3% of US customers and records 142M of spend this quarter. The naive scale-up:
estimated_revenue = panel_spend / coverage
= 142,000,000 / 0.03
= 4,733,000,000 (about 4.73B, ~5% below consensus)
If your historical panel-to-actual tracking error is ~1.5%, a 5% miss is a meaningful short signal. In production you never use the raw scale-up; you fit a calibration model mapping panel spend to reported revenue across many quarters, correcting for panel drift, seasonality, and category mix. But beware the trap below: predicting the revenue is not the same as predicting the return.
On-chain data in crypto
Crypto's transparency makes on-chain data uniquely rich and, unusually, complete and public — every transfer is observable. The double edge is that the rawness is the work: turning billions of transfers into clean signals requires address clustering and labeling (which addresses are exchanges, bridges, miners, contracts?), and that labeling is exactly where look-ahead bias creeps in.
import pandas as pd
def exchange_netflow_z(transfers: pd.DataFrame, exchange_labels: set,
window=720) -> pd.Series:
"""Positive netflow = coins moving ONTO exchanges (potential sell pressure).
exchange_labels MUST be the labels known at each point in time."""
inflow = (transfers[transfers["to_addr"].isin(exchange_labels)]
.set_index("ts")["amount"].resample("1h").sum())
outflow = (transfers[transfers["from_addr"].isin(exchange_labels)]
.set_index("ts")["amount"].resample("1h").sum())
netflow = inflow.sub(outflow, fill_value=0)
z = (netflow - netflow.rolling(window).mean()) / netflow.rolling(window).std()
return z.shift(1) # decide at t using data through t-1
Two subtleties make or break it. First, exchange_labels must be the set known at the time, not today's labels — a label discovered six months later injects look-ahead. Second, the z-score window controls adaptation: too short chases noise, too long ignores regime change. These features then flow into crypto ML models alongside price and funding inputs.
Point-in-time integrity, in detail
The most common way alt-data research goes wrong is revision and timestamp confusion. Many datasets are revised after the fact — an initial estimate "corrected" days later. If a backtest uses the corrected value at the original date, it trades on information that did not exist. The discipline: store two timestamps per observation — event time (when the activity happened) and knowledge time (when you could have used it) — and query strictly by knowledge time.
import pandas as pd
def as_of(df: pd.DataFrame, entity: str, knowledge_cutoff) -> pd.DataFrame:
"""Return the latest value per event_time that was KNOWN by the cutoff."""
mask = (df["entity"] == entity) & (df["knowledge_time"] <= knowledge_cutoff)
snap = df.loc[mask].sort_values("knowledge_time")
return snap.groupby("event_time").tail(1)
Representativeness and panel drift
Card panels and web scrapes are not static populations. Users join and drop out; scraped sites change layout or block crawlers. If a panel silently loses its high-spending users, spend falls for reasons unrelated to the company. Track panel composition over time and normalize for it, the same way you would worry about survivorship bias in an equity universe and in your market data.
Evaluating a dataset before you buy
Run this checklist before looking at returns, to avoid hypothesis-fishing:
- Economic mechanism. Write down why this should predict the target and over what
horizon. No mechanism, no trust.
- Coverage and representativeness. What fraction of real activity is captured, and
is that fraction stable and unbiased?
- Map to a tradable target. Test against forward returns net of costs, not the
fundamental alone — the market may already price the beat.
- Decay analysis. Plot predictive power by year; many alt edges flattened as the
data spread.
- Capacity. Estimate how much capital the signal absorbs before
slippage eats it.
The information-coefficient gate
import pandas as pd
def ic_by_year(signal: pd.Series, fwd_returns: pd.Series) -> pd.Series:
df = pd.concat([signal, fwd_returns], axis=1).dropna()
df.columns = ["sig", "ret"]
return df.groupby(df.index.year).apply(
lambda g: g["sig"].corr(g["ret"], method="spearman"))
# Stable IC of 0.03-0.05 across years is often enough at scale.
# IC of 0.20 on two years of data usually signals overfitting or leakage.
Orthogonality to existing signals
A dataset can have genuine predictive power and still be worthless to you if its signal is already captured by data you own more cheaply. Card-panel spend that merely tracks price momentum, or satellite counts that correlate with consensus revisions you already trade, adds cost without adding alpha. The right test is incremental IC: regress forward returns on your existing signals, then measure whether the new feature predicts the residual. Only the orthogonal component is worth paying for.
import numpy as np, pandas as pd
def incremental_ic(new_signal, existing_signals: pd.DataFrame, fwd_ret):
df = pd.concat([existing_signals, new_signal.rename("new"), fwd_ret.rename("y")],
axis=1).dropna()
X = df[existing_signals.columns].values
beta, *_ = np.linalg.lstsq(np.c_[np.ones(len(X)), X], df["y"].values, rcond=None)
resid = df["y"].values - np.c_[np.ones(len(X)), X] @ beta # return unexplained
return pd.Series(df["new"].values).corr(pd.Series(resid), method="spearman")
This single check kills a large fraction of vendor pitches, because much "unique" alt data is highly correlated with price-based features that already sit in your model for free.
Capacity and the cost of being right slowly
Alt-data edges are frequently slow: a nowcast that is correct about next quarter's revenue may take weeks to be priced, during which you carry exposure and pay financing. Worse, the very datasets that nowcast fundamentals tend to point many funds at the same names at the same time, so the trade is crowded precisely when it is most confident. Before committing capital, estimate the strategy's capacity and how the edge behaves as assets under management grow — a signal that is real at small size and impossible at scale is a research curiosity, not a business. Pair the dataset's IC with a realistic turnover and impact model, and judge the result the way you would any backtested strategy: net, after costs, out of sample.
The dominant mistakes
- Mistaking a fundamental signal for a price signal. Predicting the earnings number
is useless if the beat is already expected; test against forward returns.
- Using restated/revised data at the original date — the classic look-ahead trap.
- Overfitting short history. Many alt datasets span five years or fewer; keep models
simple and lean on walk-forward optimization.
- Buying before defining the hypothesis — letting a vendor demo drive research.
- Forgetting capacity. A signal that works at 5M may be untradeable at 500M.
- Underestimating cleaning cost. Teams routinely spend most of their effort on
ingestion, labeling, and point-in-time plumbing, not modeling.
The build-vs-buy and infrastructure reality
The total cost of an alt-data signal is dominated not by the subscription but by the engineering to make it usable: ingestion, entity mapping, point-in-time storage, deduplication, and continuous quality monitoring. Teams routinely spend the majority of their effort here, and a dataset that looks cheap on the invoice can be expensive once you account for the pipeline it demands. This argues for prototyping against free or low-cost proxies first, proving the economic hypothesis and a stable incremental IC on a small sample, and only then negotiating a point-in-time historical trial with a vendor. Build the point-in-time plumbing once, as shared infrastructure, so each new dataset plugs into the same knowledge-time discipline rather than reinventing it — retrofitting point-in-time integrity onto a signal already in production is painful and error-prone.
Realistic expectations
A single alt-data feature rarely carries a strategy; its IC is low and decays. The edge comes from blending several weak, lowly-correlated features in a disciplined ML pipeline with proper purged validation, and from being early — the same dataset that paid 0.05 IC five years ago may pay nothing now. Prototype cheaply (public on-chain data, search trends, app rankings) before committing to a six-figure subscription, insist on point-in-time historical samples for trials, and respect the legal perimeter on scraping and personal data.
Conclusion
Alternative data offers genuine edge beyond price, but it is expensive, messy, and bias-prone. On-chain data makes crypto especially fertile because the raw ledger is public, though the labeling work is substantial. The winners are rarely those with the most exotic dataset; they are the ones with the most disciplined point-in-time hygiene, the clearest economic hypotheses, and the humility to retire crowded signals. Treat alt data as inputs to a disciplined ML pipeline with strict point-in-time integrity, validate with walk-forward methods, and always confirm the edge survives realistic costs. Done well, it complements rather than replaces the fundamentals of quantitative trading.
