Skip to content

Hellblazer704/POLARIS

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

31 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

POLARIS

Political Opinion Learning and Adaptive Response Intelligence System

Public opinion isn't a score. It's a system with momentum. We model it that way.


What is POLARIS?

POLARIS is a full-stack political intelligence platform that models constituency-level public opinion as a dynamic state space — tracking not just where sentiment stands, but how fast it's moving, where it's heading, and what happens to it before you act.

Every existing political monitoring tool treats opinion as a static snapshot. POLARIS treats it as a living system with position, velocity, acceleration, volatility, and regime behaviour — updated every 30 minutes, across every monitored constituency, in 12 Indian languages simultaneously.

Most tools ask:   "What do people feel right now?"
POLARIS asks:     "Where is opinion going — and what happens if we act?"

The Three Things That Make This Different

1 — From labels to trajectories We don't classify sentiment. We track its state vector X(t) ∈ ℝ¹⁸ — capturing momentum, acceleration, and regime stability. A crisis caught at s̈(t) < threshold is caught 72 hours before it shows up in any aggregate.

2 — From national averages to neighbourhood truth A state-level average of "neutral" hides a constituency at −0.44. We surface it. LaBSE embeds 12 Indian languages natively — no translation, no nuance loss — capturing 80% of voter sentiment that competitors miss entirely.

3 — From dashboards to a decision engine Before any message goes out, POLARIS simulates the constituency-level reception across a 3-hour forward window. Test N strategies in parallel. Deploy the one that wins.


Repository Structure

POLARIS/
│
├── political_ai_platform.py      # Core 10-module pipeline (Python, 722 lines)
│
└── frontend/                     # React 18 + TypeScript dashboard
    ├── src/
    │   ├── components/
    │   │   ├── onboarding/       # 6-step party configuration wizard
    │   │   ├── dashboard/        # Main intelligence dashboard layout
    │   │   ├── map/              # 3D Globe + Constituency choropleth
    │   │   ├── alerts/           # Live alert feed + counters
    │   │   ├── simulation/       # Strategy simulation engine UI
    │   │   └── charts/           # History, topic salience, correlation panels
    │   ├── store/
    │   │   └── platformStore.ts  # Zustand global state management
    │   ├── hooks/
    │   │   ├── useWebSocket.ts   # Live WebSocket with exponential backoff
    │   │   └── useApiData.ts     # React Query data layer
    │   └── design-system.ts      # Global design tokens
    └── package.json

Algorithm — 10-Module Pipeline

File: political_ai_platform.py

Pipeline Flow

┌──────────────────────────────────────────────────────────────────┐
│  6 PLATFORMS · Twitter · Reddit · Facebook · YouTube · Telegram · News  │
└─────────────────────────────┬────────────────────────────────────┘
                              │
            ┌─────────────────▼─────────────────┐
            │  [1] Synthetic Data Generation     │
            │  1,310 posts · 5 constituencies    │
            │  6 platforms · 24 time steps       │
            └─────────────────┬─────────────────┘
                              │
            ┌─────────────────▼─────────────────┐
            │  [2] LaBSE Embedding               │
            │  ωₖ = cosine(v_post, âₖ) ∀k ∈ K  │
            │  12 languages · zero translation   │
            └─────────────────┬─────────────────┘
                              │
            ┌─────────────────▼─────────────────┐
            │  [3] Sentiment Ensemble            │
            │  0.30×VADER + 0.50×RoBERTa         │
            │  + 0.20×domain lexicon             │
            └─────────────────┬─────────────────┘
                              │
            ┌─────────────────▼─────────────────┐
            │  [4] Feature Extraction            │
            │  xt = [r, φ, ρ, Σ, Ω, w] ∈ ℝ¹²   │
            └─────────────────┬─────────────────┘
                              │
            ┌─────────────────▼─────────────────┐
            │  [5] State Vector X(t) ∈ ℝ¹⁸      │
            │  [s, ṡ, s̈, Σ, Ω(6), φ, ρ, r, w] │
            └─────────────────┬─────────────────┘
                              │
            ┌─────────────────▼─────────────────┐
            │  [6] Attention-GRU Transition      │  ← CORE MODEL
            │  X(t+1) = F(X(t)) + G(X(t),U(t)) │
            │         + W(t),  W ~ N(0,Q)        │
            └──────┬───────────────────┬─────────┘
                   │                   │
     ┌─────────────▼────┐  ┌──────────▼──────────────┐
     │  [7] Spatial     │  │  [8] Perturbation U(t)  │
     │  Smoothing       │  │  U ∈ ℝ⁴⁶                │
     │  wᵢ=exp(−d²/2σ²)│  │  Decay: U × 0.7ᵏ        │
     └─────────────┬────┘  └──────────┬──────────────┘
                   │                   │
            ┌──────▼───────────────────▼─────────┐
            │  [9] Strategy Simulation Engine     │
            │  6-step lookahead · N strategies    │
            │  score = reception×conf / (1+|ΔΣ|) │
            └─────────────────┬─────────────────┘
                              │
            ┌─────────────────▼─────────────────┐
            │  [10] Alert Engine                 │
            │  CRISIS · DRIFT · INSTABILITY      │
            │  VIRALITY · ACCELERATION           │
            └────────────────────────────────────┘

State Vector X(t) ∈ ℝ¹⁸

Dim Symbol Description
0 s(t) Reception position (−1 hostile → +1 favourable)
1 ṡ(t) Velocity — rate of sentiment shift per 30-min window
2 s̈(t) Acceleration — early warning signal for crisis formation
3 Σ(t) Volatility — community polarisation variance
4–9 Ω(t) Topic salience — K=6 (Economy, Security, Healthcare, Infrastructure, Governance, Identity)
10 φ(t) Propagation rate — content spread velocity
11 ρ(t) Feedback depth — reply ratio × thread depth
12 r(t) Reception signal — cross-post cosine similarity
13 cred Credibility weight — log(reach) × verified × account age
14–17 Reserved

Core Equations

State Transition

X(t+1) = F(X(t))  +  G(X(t), U(t))  +  W(t)

  F  =  natural evolution network     (state only — learns structural drift)
  G  =  perturbation response network (state + U — learns message impact)
  W  ~  N(0, Q)                        process noise

Training Loss

L = Σ [ (X̂ − X)² / 2σ²  +  log σ ]  +  λ‖F‖‖G‖
    uncertainty-weighted NLL            disentanglement penalty

Stability Index

SI = 1 − ρ(∂F/∂X)       ρ = spectral radius of Jacobian

SI > 0.6  →  STABLE
SI > 0.3  →  DRIFTING
SI ≤ 0.3  →  CRITICAL

Strategy Score

score = (reception × confidence) / (1 + |ΔΣ|)

Alert Thresholds

Alert Trigger Meaning
🚨 CRISIS ṡ(t) < −0.08 AND s(t) < −0.3 Rapid collapse in hostile territory
⚠️ DRIFT ṡ(t) < −0.04 Sustained negative momentum
🔴 INSTABILITY SI < 0.30 Regime structurally unstable
📡 VIRALITY V(t) > 0.65 Content spreading at epidemic rate
📉 ACCELERATION s̈(t) < −0.04 Crisis forming — 72hr early warning

Run

pip install numpy scipy scikit-learn
python3 political_ai_platform.py

Sample output:

======================================================================
  POLARIS — SYNTHETIC DEMONSTRATION
======================================================================
[1/10]  Generated 1,310 posts · 5 constituencies · 6 platforms · 24 steps
[2/10]  Vocabulary: 36 terms · 6 topic anchors built
[3/10]  Sentiment ensemble · mean=−0.015 · std=0.307
[4/10]  Features: 5 × 24 windows · dim=12
[5/10]  State tensors: 5 × 24 × 18
[6/10]  Attention-GRU forward pass · mean σ²=0.0058
[7/10]  Spatial smoothing · σ = 25 km
[8/10]  3 strategy vectors encoded · U dim=46
[9/10]  Strategy simulation · 6-step lookahead

  Constituency        s(t)     ṡ(t)    s̈(t)    Σ(t)    SI    Status
  Mumbai_South      +0.045  +0.087  +0.106  0.081  0.084  ✗ CRITICAL
  Thane             +0.231  +0.074  +0.065  0.047  0.091  ✗ CRITICAL
  Nashik            −0.455  −0.005  +0.046  0.013  0.097  ✗ CRITICAL
  Pune              +0.115  +0.097  +0.168  0.071  0.086  ✗ CRITICAL
  Wardha            −0.465  −0.065  −0.119  0.011  0.094  ✗ CRITICAL

  ★  RECOMMENDED: Direct Relief Announcement
     Score=−0.489 · Predicted 3-hr reception: −0.496

[10/10]  Alerts: 7 active · Crisis constituencies: [Nashik, Wardha]
======================================================================

Frontend — Intelligence Dashboard

Directory: frontend/ Stack: 80% TypeScript · React 18 · Three.js · Mapbox GL JS

Install & Run

cd frontend
npm install
npm run dev

Or install everything from scratch:

npm create vite@latest polaris-dashboard -- --template react-ts && cd polaris-dashboard && npm install tailwindcss postcss autoprefixer framer-motion three @react-three/fiber @react-three/drei d3 recharts mapbox-gl react-map-gl zustand @tanstack/react-query socket.io-client lucide-react gsap @gsap/react @types/three @types/d3 @types/mapbox-gl react-beautiful-dnd @types/react-beautiful-dnd clsx tailwind-merge && npx tailwindcss init -p

Tech Stack

Layer Technology Purpose
Framework React 18 + TypeScript + Vite Core UI
Styling Tailwind CSS + shadcn/ui Design system
3D Three.js + @react-three/fiber Globe, state visualiser, particles
Charts Recharts + D3.js History, salience, correlation matrix
Maps Mapbox GL JS + react-map-gl Constituency choropleth
Animation Framer Motion + GSAP Transitions, micro-interactions
State Zustand Global store
Data @tanstack/react-query Caching, polling, mutations
Real-time Socket.io-client Live WebSocket feed

Design Tokens

// frontend/src/design-system.ts
export const tokens = {
  background:    "#0B1829",  // deep navy
  surface:       "#0F2040",  // card fill
  surface2:      "#1A2E4A",  // elevated surface
  accentBlue:    "#1565C0",
  accentTeal:    "#00897B",
  accentAmber:   "#FFB300",  // primary CTA colour
  accentRed:     "#EF5350",
  textPrimary:   "#F0F4FA",
  textSecondary: "#90A4AE",
  border:        "#1E3A5F",
}

Dashboard Layout

┌──────────────────────────────────────────────────────────────────────┐
│  HEADER  ·  party logo  ·  LIVE INTELLIGENCE DASHBOARD  ·  WS ● 12s │
├──────────────────────┬───────────────────┬───────────────────────────┤
│                      │  LIVE STATE       │                           │
│   3D GLOBE  /        │  VECTOR X(t)      │   ALERT FEED              │
│   CONSTITUENCY       │  per constituency │   🚨 CRISIS  ×2           │
│   CHOROPLETH MAP     │  s · ṡ · s̈ · Σ · SI  ├───────────────────────┤
│   (2 rows tall)      ├───────────────────┤   live stream...          │
│                      │  TOPIC SALIENCE   │                           │
│                      │  Ω(t) live bars   │   system status           │
├──────────────────────┴───────────────────┴───────────────────────────┤
│   HISTORY  ·  24-step trajectory  ·  5 constituency lines  ·  σ² bands  │
└──────────────────────────────────────────────────────────────────────┘

Onboarding Wizard — /onboarding

Step Configures Visual
1 Party identity · logo · ideology Three.js particle sphere
2 Languages + states 12 language chips · SVG India map
3 Actor + opponent watchlist Drag-to-reorder · platform handles
4 Constituency scope + tiers Mapbox click-select · kernel σ slider
5 Topic anchor builder 6 topic cards · seed phrase tags · weight sliders
6 Review + launch 3-second animated launch sequence

API Contract

REST Endpoints

Endpoint Method Description Update
/api/state GET / WS State vector per constituency 30 min
/api/alerts WS Live alert stream Continuous
/api/simulate POST 6-step strategy simulation On demand
/api/map GET Smoothed sentiment surface 60 min
/api/history/:constituency GET T=48 step history On demand
/api/onboarding POST Submit party configuration Once

WebSocket Messages

// Incoming: state update
{ type: 'STATE_UPDATE', payload: {
    constituency: string
    s: number             // reception position
    velocity: number      // ṡ(t)
    acceleration: number  // s̈(t)
    volatility: number    // Σ(t)
    stability_index: number
    topic_salience: Record<Topic, number>
    timestamp: string
}}

// Incoming: alert
{ type: 'ALERT', payload: {
    alert_type: 'CRISIS' | 'DRIFT' | 'INSTABILITY' | 'VIRALITY' | 'ACCELERATION'
    constituency: string
    detail: string
    timestamp: string
}}

TypeScript Types

type Topic = 'Economy' | 'Security' | 'Healthcare' |
             'Infrastructure' | 'Governance' | 'Identity'

interface ConstituencyState {
  name: string;  lat: number;  lon: number;  tier: 1 | 2 | 3
  s: number;            // reception position
  velocity: number;     // ṡ(t)
  acceleration: number; // s̈(t)
  volatility: number;   // Σ(t)
  stability_index: number
  topic_salience: Record<Topic, number>
  uncertainty: number   // σ²(t)
  last_updated: string
}

interface SimulationResult {
  target: string
  ranked_strategies: {
    rank: number;  name: string;  score: number
    predicted_reception: number;  confidence: number
    delta_volatility: number;  trajectory: number[]
  }[]
}

References

Data Sources CSDS-Lokniti NES 2024 · Reuters Institute Digital News Report India 2024 · IAMAI India Internet Report 2024 · ECI Campaign Finance Disclosures 2024 · CVoter Exit Poll Methodology 2024

ML / NLP Models LaBSE — Feng et al., 2022 · RoBERTa — Liu et al., 2019 · Attention Is All You Need — Vaswani et al., 2017 · VADER — Hutto & Gilbert, AAAI 2014 · GRU — Cho et al., 2014

Theory & Methods Kriging — Matheron, G., Economic Geology 1963 · Hawkes Self-Exciting Processes — Hawkes, A.G., Biometrika 1971 · SEIR Epidemic Modelling — Keeling & Eames, J. R. Soc. 2005 · Kalman Filtering — Grewal & Andrews, Wiley 2015

Tools sentence-transformers · spaCy · pykrige · GeoPandas · Three.js · Mapbox GL JS · D3.js · Recharts


License

Private repository. All rights reserved.


Political Opinion Learning and Adaptive Response Intelligence System

About

Resources

License

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors