---
title: "SVD Axis Stability and Overtone Shift are Independent Phenomena"
date: 2026-04-05
module: analysis
problem_type: insight
component: motion-analysis
severity: medium
tags: [svd, overtone-shift, semantic-drift, axis-stability, parliamentary-analysis]
applies_when:
  - 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`:

```bash
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

## Related

- `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
