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