You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
motief/docs/solutions/insights/svd-stability-vs-overtone-s...

3.4 KiB

title date module problem_type component severity tags applies_when
SVD Axis Stability and Overtone Shift are Independent Phenomena 2026-04-05 analysis insight motion-analysis medium [svd overtone-shift semantic-drift axis-stability parliamentary-analysis] [Interpreting SVD axes over multiple time windows Comparing motion content across different parliamentary periods Understanding why stable axis labels don't guarantee stable motion content]

SVD Axis Stability and Overtone Shift are Independent Phenomena

Key Insight

When analyzing SVD axes across time windows, axis stability and overtone shift measure fundamentally different phenomena:

Phenomenon What it Measures How to Compute
Axis Stability Whether the same motions/embeddings load on an axis Lasso regression: SVD_score ~ fused_embedding, compare weight vectors via cosine similarity + Jaccard
Overtone Shift How motion content evolves over time Semantic gravity (weighted mean embedding) tracking via cosine distance

The implication: An axis can be "stable" (parties vote similarly across years) while its semantic content drifts dramatically (different motions define the axis).

Evidence

Analysis of 9 annual windows (2016-2026) revealed:

  • 9 of 10 axes are stable (similarity > 0.7)
  • All stable axes show high overtone shift (1.3-1.97 cosine distance)
  • No inflection points detected — drift is gradual, not sudden

Example: Axis 1 (Coalition vs Opposition)

Metric Value Interpretation
Axis Stability 0.83 Coalition/opposition voting pattern is structurally consistent
Overtone Shift 1.47 avg, 1.97 max Motion content defining "coalition" vs "opposition" has changed substantially

This means: PVV, VVD, NSC, BBB consistently vote together against SP, GL-PvdA, PvdD across all windows — but the specific motions that exemplify "coalition policy" in 2026 are semantically different from 2016.

Why This Matters

  1. Axis labels are temporally bounded — "Rechts kabinetsbeleid versus links oppositiebeleid" accurately describes 2016-2026, but the underlying motions have evolved.

  2. Cross-temporal comparison is valid structurally but not semantically — Party positions are comparable; motion content is not.

  3. Axis 6 (Migration/Culture) is an exception — Low stability (0.35) suggests fundamental change in how this dimension is structured.

How to Analyze This

Use scripts/motion_drift.py:

uv run python scripts/motion_drift.py --db data/motions.db --output reports/drift

The script computes:

  • Axis stability: Lasso regression weights compared across windows
  • Overtone shift: Semantic gravity tracking
  • Inflection points: Sudden drift detection
  • Party trajectories: How parties move along stable axes

Prevention

When updating SVD themes:

  1. Run scripts/motion_drift.py to check current overtone shift levels
  2. Verify that theme descriptions match current motion content, not historical content
  3. Monitor Axis 6 specifically for stability issues
  4. Consider temporal weighting in visualizations — recent windows better represent current semantics
  • scripts/motion_drift.py — Analysis script
  • docs/research/2026-04-05-svd-overtone-shift-deep-dive.md — Deep analysis
  • reports/drift/report.md — Generated report