-
Notifications
You must be signed in to change notification settings - Fork 1
Description
📋 Issue Type
Feature - Predictive Analytics Visualization
🎯 Objective
IMPORTANT: CIA platform performs election forecasting using 50+ years of historical data and advanced modeling. This issue focuses on visualizing CIA's election 2026 predictions on riksdagsmonitor.
Display CIA platform's comprehensive Swedish Election 2026 forecasting with seat predictions, coalition scenarios, swing analysis, and confidence intervals - visualizing CIA's pre-computed predictions using 50+ years of historical data and advanced statistical models.
📊 Current State
- ✅ Static election information
- ✅ CIA platform performs election forecasting
- ✅ CIA provides election prediction exports
- ❌ No forecast visualization on riksdagsmonitor
- ❌ No seat prediction display
- ❌ No coalition scenario rendering
- ❌ No probability visualization
Measured Metrics:
- Forecasting displays: 0
- CIA predictions rendered: 0
- Historical data visualized: 0 years
- Accuracy tracking: N/A
🚀 Desired State
- ✅ CIA election forecasting visualized
- ✅ CIA seat predictions displayed for all 8 parties
- ✅ CIA coalition scenario rendering (5+ scenarios)
- ✅ CIA swing district visualization (29 districts)
- ✅ CIA confidence intervals displayed
- ✅ Real-time CIA forecast updates
- ✅ Interactive prediction dashboard
- ✅ Multi-language forecasts (14 languages)
📊 CIA Data Integration Context
CIA Platform Role:
🏭 CIA Performs: Complete election forecasting with 50+ years of data
📊 CIA Models: Time series analysis, polling aggregation, Bayesian forecasting
🔍 CIA Provides: Seat predictions, coalition scenarios, confidence intervals
📈 CIA Analyzes: Historical patterns (1971-2022), swing districts, probabilities
Riksdagsmonitor Role:
📊 Visualizes: CIA's election forecast exports
🎨 Renders: CIA's predictions in interactive format
🌐 Displays: CIA's forecasting across 14 languages
📈 Presents: CIA's probability distributions
CIA Forecasting Products:
- Election Cycle Analysis - Historical patterns and CIA forecasting (1971-2022)
- Party Longitudinal Analysis - 50+ years of CIA party evolution data
- Seat Predictions - CIA seat forecasting models
- Coalition Scenarios - CIA coalition probability analysis
- Swing District Analysis - CIA swing voter identification
Data Source:
- CIA Forecast Exports:
data/cia-exports/current/election-2026-forecast.json - CIA Historical Data: 50+ years (1971-2022) in CIA digital twin
- CIA Models: Time series, polling, structural, ensemble (CIA computed)
CIA Election Forecast Export:
{
"election": "2026-09-13",
"lastUpdated": "2026-02-04",
"model": "CIA Ensemble Forecasting Model",
"confidence": "95%",
"seatPredictions": [
{
"party": "Social Democrats (S)",
"predictedSeats": 85,
"confidenceInterval": [75, 95],
"change": -15,
"probability": 0.87
}
// CIA provides all 8 parties
],
"coalitionScenarios": [
{
"name": "Centre-right Coalition",
"probability": 0.40,
"parties": ["M", "SD", "KD", "L"],
"totalSeats": 177
}
// CIA provides 5+ scenarios
],
"swingDistricts": [
// CIA identifies 29 swing districts
]
}CIA Methodology:
- CIA time series analysis (1971-2022)
- CIA polling aggregation
- CIA Bayesian forecasting
- CIA Monte Carlo simulation
- CIA confidence interval calculation
- CIA ensemble modeling
Implementation Notes:
- CIA performs all forecasting
- Riksdagsmonitor visualizes CIA's predictions
- No duplication of CIA's modeling work
- Review CIA forecast: https://github.com/Hack23/cia/blob/master/json-export-specs/schemas/election-analysis.json
- CIA historical data: https://www.hack23.com/cia (50+ years)
🌐 Translation & Content Alignment
Translation Guide(s): All guides for election terminology
Related Homepage Page(s):
- swedish-election-2026.html (14 language versions)
- cia-features.html (forecasting showcase)
Multi-Language Scope: Election forecasts in all 14 languages
🔧 Implementation Approach
Phase 1: CIA Forecast Data Loader
Load CIA Election Forecast:
// forecasting/cia-forecast-loader.js
class CIAForecastLoader {
// Load CIA election forecast export
async loadElectionForecast() {
const forecast = await fetch('/data/cia-exports/current/election-2026-forecast.json')
.then(r => r.json());
// Validate CIA forecast structure
if (!forecast.seatPredictions || !forecast.coalitionScenarios) {
throw new Error('Invalid CIA forecast structure');
}
return forecast;
}
// Load CIA historical election data
async loadHistoricalData() {
return await fetch('/data/cia-exports/current/election-history.json')
.then(r => r.json());
}
}Phase 2: CIA Forecast Visualization
Render CIA Seat Predictions:
// forecasting/cia-seat-predictions.js
class CIASeatPredictionRenderer {
constructor(ciaForecast) {
this.forecast = ciaForecast; // Pre-computed by CIA
}
// Visualize CIA's seat predictions
renderSeatPredictions() {
const predictions = this.forecast.seatPredictions;
predictions.forEach(party => {
this.createPredictionCard({
party: party.party,
seats: party.predictedSeats,
range: party.confidenceInterval, // From CIA
change: party.change,
probability: party.probability // From CIA model
});
});
}
// Render CIA confidence intervals
renderConfidenceIntervals() {
const ctx = document.getElementById('confidenceChart');
new Chart(ctx, {
type: 'bar',
data: {
labels: this.forecast.seatPredictions.map(p => p.party),
datasets: [{
label: 'Predicted Seats (CIA Model)',
data: this.forecast.seatPredictions.map(p => p.predictedSeats),
error: this.forecast.seatPredictions.map(p => p.confidenceInterval)
}]
}
});
}
}Render CIA Coalition Scenarios:
// forecasting/cia-coalition-scenarios.js
class CIACoalitionRenderer {
constructor(ciaForecast) {
this.scenarios = ciaForecast.coalitionScenarios; // From CIA
}
// Visualize CIA's coalition scenarios
renderCoalitionScenarios() {
this.scenarios.forEach((scenario, index) => {
this.createScenarioCard({
rank: index + 1,
name: scenario.name,
probability: scenario.probability, // From CIA model
parties: scenario.parties,
totalSeats: scenario.totalSeats,
isViable: scenario.totalSeats >= 175
});
});
}
// Render probability distribution
renderProbabilityChart() {
// Use CIA's computed probabilities
const data = this.scenarios.map(s => ({
name: s.name,
probability: s.probability * 100 // From CIA
}));
this.createPieChart(data);
}
}Render CIA Swing Districts:
// forecasting/cia-swing-analysis.js
class CIASwingDistrictRenderer {
constructor(ciaForecast) {
this.swingDistricts = ciaForecast.swingDistricts; // From CIA
}
// Visualize CIA's swing district analysis
renderSwingMap() {
const map = this.swingDistricts.map(district => ({
name: district.name,
leadingParty: district.leadingParty,
margin: district.margin, // From CIA analysis
swingPotential: district.swing // From CIA model
}));
this.createInteractiveMap(map);
}
}Phase 3: Interactive Forecast Dashboard
Forecast Dashboard:
<!-- forecasting/election-2026-forecast.html -->
<div class="cia-forecast-dashboard">
<h1>Swedish Election 2026 Forecast</h1>
<p class="attribution">Forecasting by CIA Platform (50+ years historical data)</p>
<!-- CIA Seat Predictions -->
<section class="seat-predictions">
<h2>Seat Predictions (CIA Ensemble Model)</h2>
<div id="seatChart" data-cia-source="election-2026-forecast"></div>
<p class="model-info">Model: CIA Time Series + Polling + Structural + Bayesian</p>
</section>
<!-- CIA Coalition Scenarios -->
<section class="coalition-scenarios">
<h2>Coalition Scenarios (CIA Probability Analysis)</h2>
<div id="coalitionScenarios" data-cia-source="election-2026-forecast"></div>
</section>
<!-- CIA Swing Districts -->
<section class="swing-districts">
<h2>Swing Districts (CIA Identification)</h2>
<div id="swingMap" data-cia-source="election-2026-forecast"></div>
</section>
<!-- CIA Historical Context -->
<section class="historical-context">
<h2>Historical Trends (CIA 1971-2022 Data)</h2>
<div id="historicalChart" data-cia-source="election-history"></div>
</section>
</div>Phase 4: Weekly Forecast Updates
Update Display from CIA:
# .github/workflows/update-cia-forecast.yml
name: Update CIA Election Forecast Display
on:
schedule:
- cron: '0 6 * * 1' # Monday 06:00 CET
workflow_dispatch:
jobs:
update-forecast:
runs-on: ubuntu-latest
steps:
- name: Load CIA forecast export
run: node scripts/load-cia-forecast.js
- name: Update forecast visualizations
run: node scripts/update-forecast-display.js
- name: Generate forecast report
run: node scripts/generate-forecast-report.js
- name: Deploy updates
run: gh workflow run deploy.ymlFiles to Create/Modify
forecasting/
election-2026-forecast.html # Main forecast page
cia-forecast-loader.js # Load CIA forecast
cia-seat-predictions.js # Render CIA seats
cia-coalition-scenarios.js # Render CIA coalitions
cia-swing-analysis.js # Render CIA swing districts
.github/workflows/
update-cia-forecast.yml # Forecast update workflow
data/
cia-exports/current/
election-2026-forecast.json # CIA forecast export
election-history.json # CIA historical data
docs/
CIA_FORECASTING.md # Documentation
🤖 Recommended Agent
frontend-specialist - Best suited for:
- CIA forecast visualization
- Interactive chart rendering
- Responsive design
- Performance optimization
Secondary: performance-engineer for chart optimization
✅ Acceptance Criteria
- CIA election forecast visualized
- CIA seat predictions displayed (all 8 parties)
- CIA coalition scenarios rendered (5+ scenarios)
- CIA swing districts visualized (29 districts)
- CIA confidence intervals displayed
- Interactive forecast dashboard deployed
- Weekly CIA forecast updates automated
- CIA historical data visualized (1971-2022)
- Multi-language forecasts (14 languages)
- CIA methodology documented
- CIA attribution visible
- Visualizations responsive
- WCAG 2.1 AA compliant
- Cross-browser tested
📚 References
- CIA Election Analysis: https://github.com/Hack23/cia/blob/master/json-export-specs/schemas/election-analysis.json
- CIA Platform: https://www.hack23.com/cia
- Swedish Election Authority: https://www.val.se/
- Historical Results: https://www.val.se/valresultat.html (CIA ingests this)
- Chart.js: https://www.chartjs.org/
- D3.js: https://d3js.org/
- Security Architecture: SECURITY_ARCHITECTURE.md
🏷️ Labels
enhancement, documentation
🔒 Methodology Transparency
- CIA open-source forecasting
- CIA documented methodology
- CIA historical accuracy tracking
- CIA uncertainty communication
- CIA ethical forecasting practices
- No partisan bias (CIA ensures)
- CIA reproducible results
📊 CIA Model Components
- CIA Time Series: 50+ years (1971-2022)
- CIA Polling Aggregation: Multiple sources
- CIA Structural Model: Economic + incumbent factors
- CIA Bayesian Ensemble: Combined model
- CIA Confidence: 95% prediction intervals
💡 Key Principle
CIA = Forecasting Engine | Riksdagsmonitor = Forecast Display
CIA performs all election forecasting, statistical modeling, and probability analysis using 50+ years of data. Riksdagsmonitor visualizes CIA's pre-computed predictions.
Priority: Medium
Estimated Effort: 7-10 days
Dependencies: Issue #13 (CIA schemas), Issue #18 (CIA consumption)
Related Issues: Issue #15 (dashboard), Issue #16 (visualizations)