docs: add overtone shift analysis and insights
- Add deep dive analysis on SVD axis overtone shift (docs/research/) - Update brainstorm with results documenting key finding: stability and overtone shift are independent phenomena - Add learning doc about axis stability vs semantic drift independence - Update drift report with detailed findings
This commit is contained in:
@@ -0,0 +1,79 @@
|
||||
---
|
||||
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
|
||||
Reference in New Issue
Block a user