Relational pooling model (group charts)¶
Normative reference for speaker-pooled vs edge-pooled relational modules and for interactions_pooled / contagion_pooled. Module contracts (group_charts_interactions_pooled_contract.md, group_charts_contagion_pooled_contract.md) must stay aligned with this document.
A. Pooling classes¶
Class |
Meaning |
Example |
|---|---|---|
Speaker-pooled relational analogue |
Pool per canonical speaker where the source metric is speaker-role-based (e.g. initiated/received counts per speaker). |
interactions |
Edge-pooled relational analogue |
Pool per canonical directed pair where the source metric is dyadic (from→to). |
contagion |
Do not apply the wrong template to a new module.
B. Metric types¶
Additive counts: Pool by sum when the group analogue is the total count of observed events in the corpus (identity contract satisfied).
Rates, ratios, scores: Require an explicit denominator / exposure model in the contract, or exclude from
pooled_single_viewuntil specified.Session-topology artifacts (turn indices, per-session matrices): Not pooled for group single view unless separately modeled.
C. Identity contract¶
Speaker-pooled: Canonical speaker id is authoritative; mapping uses
_build_display_to_canonicaland_fallback_canonical_idinaggregation/rows.pyper the row-mapping contract.Directed edges: Identity is
(from_canonical_id, to_canonical_id); direction is preserved.From->Tostring keys (contagion): Parse to two non-empty display endpoints (single->split). Invalid formats: drop the edge and emit a structured consistency warning (RELATIONAL_POOL_PARSE); no heuristic repair.Self-edges (v1, fixed): After canonicalization, if
from_canonical_id == to_canonical_id, the edge is invalid, dropped, with a consistency warning (RELATIONAL_POOL_SELF_EDGE).
D. Warning / drop policy (global)¶
Use documented mapping only (including fallback canonical id only where the row contract allows).
If identity cannot be satisfied: drop the row or edge + consistency warning.
Never merge on raw display labels in pooled payloads; merge keys are always canonical ids.
Display surfaces (edge-pooled)¶
For each endpoint, from_display / to_display in contagion_pooled:
Use
canonical_speaker_map.canonical_to_displaywhen present for that canonical id.Otherwise use the lexicographically smallest display string observed for that canonical id during the aggregation merge, in
per_transcript_resultsiteration order (same inputs and stable ordering ⇒ same labels on rerun).Display strings are never merge keys.
Empty pooled payloads¶
A structurally valid pooled object with no chartable content (e.g. edges: [] after merge, or all speaker counts zero) yields no pooled chart and a clear skip path—not a placeholder chart that could be read as a claim about relations.
Dominance (interactions)¶
v1: interactions_pooled includes additive role counts only (interruptions_*, responses_*). dominance_score is not included in interactions_pooled until a denominator-backed group definition is specified and implemented.
Directional pooling of those additive counts (and dominance-derived speaker_rows) requires every included run to use current interactions semantics_version (see group_charts_interactions_equity_contract.md). Mixed or legacy versions skip directional pool with one structured warning; session rows remain.
speaker_rows vs interactions_pooled¶
speaker_rowsremain for CSV / row writers and existing consumers.interactions_pooledis the authoritative chart contract for pooled interaction charts: versioned schema, independent evolution; charts must not readspeaker_rowsfor pooled views.
Contagion roster semantics¶
Event-count pooling: Summing observed directed events across sessions is valid as an aggregate of observed events under changing rosters; it is not evidence of equal opportunity for interaction across pairs. Pooled contagion v1 is a pooled counts view of observed directed transfer events, not a normalized social-network comparison.