Maintain an online covariance over named series whose set changes over time (e.g. assets entering and leaving). Use when observations arrive as dicts keyed by name rather than fixed-length vectors. Wraps precise's keyed / FixedUniverse / DynamicUniverse adapters.
Scanned 9/1/2026
Install to Claude Code
npx -y skills add microprediction/precise --skill keyed-dynamic-universe --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Keyed Dynamic Universe?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/microprediction-keyed-dynamic-universe)More formats (shields.io, HTML) on the badges page.
---
name: keyed-dynamic-universe
description: Maintain an online covariance over named series whose set changes over time (e.g. assets entering and leaving). Use when observations arrive as dicts keyed by name rather than fixed-length vectors. Wraps precise's keyed / FixedUniverse / DynamicUniverse adapters.
---
# Keyed covariance over a changing universe
In streaming/finance settings observations are dicts keyed by name, and the set of names changes. `keyed`
decorates *any* positional estimator to consume keyed dicts and emit keyed output.
```bash
pip install precise # add [pandas] for to_frame()
```
```python
from precise import keyed, EwaCovariance
est = keyed(EwaCovariance(r=0.05), dynamic=True) # universe may change over time
est.partial_fit({"BTC": 0.01, "ETH": -0.02}) # river-style: also .update / .learn_one
est.partial_fit({"ETH": 0.00, "SOL": 0.03}) # BTC drops out, SOL enters
est.covariance_["ETH"]["SOL"] # dict-of-dicts over the live universe
est.to_frame() # pandas DataFrame (needs [pandas])
```
## Fixed vs dynamic
- `keyed(est)` / `dynamic=False` → **FixedUniverse**: one wrapped estimator; missing keys are imputed.
Use when the set of names is stable and you just want dict ergonomics.
- `keyed(est, dynamic=True)` → **DynamicUniverse**: tracks multiple live key-sets with staleness /
longevity eviction and assembles a pairwise matrix. Use when names genuinely enter and leave.
## Notes
- The adapter adds **no covariance math of its own** — it wraps the positional estimator, so any estimator
from the **estimate-online-covariance** skill works inside it (`LedoitWolfCovariance`, `HuberCovariance`,
…).
- The assembled matrix is projected to the nearest PSD; expect small adjustments when the live universe
changes.
- To score/compare keyed estimators, extract the dense `covariance_` (e.g. via `to_frame().values`) and use
the **score-covariance-estimate** skill.
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!