11 The Factor Layer as Multiplex Layer 1
Author: Todd B. Adams Reinforces: Proposal §3 (Layer 1) & §6.1 · Reading order: doc 04 of the research-platform package
The claim of this doc. The proposal’s first network layer — the bipartite stock ↔︎ factor graph with weighted edges (factor loadings) — is not something the research must build. It exists in production as
gold.fact_factor_value, point-in-time and governed by a full lifecycle. The proposal simulates this layer with structural SDEs (§6.1); here it is empirical.
11.1 The bipartite layer is already a table
The proposal’s Layer 1 (§3, Supra-Adjacency Tensor Builder) is a bipartite graph: stock nodes on one side, factor nodes on the other, edge weight = the factor loading. The platform’s factor store is that edge list:
- One row per (date, instrument, factor_id) in
gold.fact_factor_value— literally a timestamped weighted edge between a stock node and a factor node. - Factor loadings proper — market beta (
beta_f) and the broader factor cross-section — are computed point-in-time, so the edge weights are the real, knowable-on-the-date values, not a synthetic draw. - The active node set is governed by
sbcontracts.settings.ACTIVE_FACTOR_IDS; factors carry economic style tags, so the factor-side nodes are typed (value / momentum / quality / positioning / …).
Details of the factor mathematics and the r = α + β·market + ε decomposition are in the codebase-grounded primer factor-models-and-benchmarks.md; the factor engineering pipeline is in factors.md.
11.2 The edges are trustworthy, not just present — BUILT
A network is only as good as its edge weights. The platform subjects every factor edge to the validation funnel before it is trusted (the “mathematics of trust”, doc 08): information-coefficient hurdle, permutation significance, survivorship haircut, net-of-cost check, overfitting/lockbox, and orthogonality. A factor that fails stays experimental; only a validated factor’s edges back a real strategy. So the Layer-1 graph the research would consume is pre-cleaned — its edges have already survived a literature-grade gauntlet.
11.3 What the proposal adds on top of Layer 1
| Proposal element | Relationship to the built factor layer | Status |
|---|---|---|
| Bipartite stock–factor layer (§3, Layer 1) | Is gold.fact_factor_value today |
BUILT |
| Dynamic (time-varying) edge weights | Factor values are already recomputed every run, point-in-time | BUILT |
| Node features (rolling price, volatility, factor arrays) | Already columns in gold.fact_eod / gold.fact_factor_value |
BUILT |
| Embedding Layer 1 into a Supra-Adjacency tensor with inter-layer coupling | The tensor assembly across Layers 1–3 | PROPOSED |
| Heterogeneous message-passing (HGT / ST-GNN) over the tensor | The geometric deep-learning engine | PROPOSED |
11.4 Why this matters for the research
The proposal’s §6 simulator exists precisely because a synthetic Layer 1 is needed to proof the physics before touching real data. On this platform the empirical Layer 1 is already available, point-in-time and validated — so the research can move from synthetic proofing to real-data evaluation without first building a factor-loading pipeline. The stock–factor layer is the bridgehead; Layers 2 and 3 (doc 03) and the tensor/engine (doc 06) build outward from it.
Cross-links: factor-models primer · factors pipeline · factor lifecycle · proposal §3/§6