# Vote Predict

> Predict how a target population would vote, respond to a policy, or react to a political message. Use when the user wants a distribution (not a winner-take-all answer) across demographic segments, with calibration disclaimers. Triggers on 投票预测, 民意模拟, policy response, 政策反应, 选举模拟, 民意分布, 某群体怎么看.

- **Type:** Skill
- **Install:** `agentstack add skill-yrzhe-claude-skills-vote-predict`
- **Verified:** Yes — security-reviewed for prompt injection and unsafe behavior
- **Seller:** [Yrzhe](https://agentstack.voostack.com/s/yrzhe)
- **Installs:** 0
- **Category:** [Agent Skills](https://agentstack.voostack.com/c/agent-skills)
- **Latest version:** 0.1.0
- **License:** MIT
- **Upstream author:** [Yrzhe](https://github.com/Yrzhe)
- **Source:** https://github.com/Yrzhe/claude-skills/tree/main/plugins/persona-sim/skills/vote-predict

## Install

```sh
agentstack add skill-yrzhe-claude-skills-vote-predict
```

Requires the [AgentStack CLI](https://agentstack.voostack.com/docs/cli). Works with Claude Code, Cursor, and any MCP-compatible agent.

## About

# Vote Predict

Thin scenario wrapper for opinion/vote simulation. Unlike product-feedback which scores 1-10, vote-predict uses **categorical choices** and **post-stratification** so the distribution maps to population-level prediction.

## Recipe

```python
import sys, json
sys.path.insert(0, str(__import__('pathlib').Path.home() / '.claude/skills/persona-sim'))
from lib import sampler, ipf, aggregator
from lib.sim_engine import SYSTEM_PROMPT, _persona_card
from lib.llm_router import generate

# 1. Sample a large panel (census-matched after IPF)
panel = sampler.sample_personas(n=100, source="nemotron_usa", mode="stream")

# 2. Compute IPF weights to match target population marginals
weights = ipf.ipf_weights(
    panel,
    targets={
        "age": {""}}')
    resp = generate(system=SYSTEM_PROMPT, persona_card=_persona_card(persona),
                    task=task, tier="default", max_tokens=100)
    # parse JSON (see eval/run_eval._parse_json_answer)
    ...

# 4. Aggregate with weights
# Option-wise: weighted_share[option] = sum(weights[i] for i where vote[i]==option) / sum(weights)
```

## Core rules

1. **NEVER output a single "winner" percentage as the answer.** Output the full distribution + margin of uncertainty.
2. **Always apply IPF weights** when the base panel doesn't match the target population (almost always for Nemotron).
3. **Report segment breakdowns** (age × vote, education × vote) — even if the topline says 52/48, the story is in the segments.
4. **Attach bias audit warning** from `lib/bias_audit.py` — humans show acquiescence and framing biases that LLM personas do not. Flag the prediction as "LLM-synthetic, not a replacement for real polling".
5. **Flag multi-modal results** — if `aggregator._dip_test_proxy` says multi-modal, the population is split and averaging misleads.

## Calibration priors

Known US baselines from `eval/gss_20q.json` can sanity-check predictions. If your simulated distribution is >0.2 JS-divergence from the reference for a similar question, **the simulation is not trustworthy for this topic**. Run eval first.

## Do NOT use this skill for

- Real election forecasting (use prediction markets + polling aggregators)
- High-stakes policy decisions on single outcome (use this for hypothesis generation only)
- Issues where real-world events have shifted distributions after the Nemotron training cutoff (2024 or earlier)

## See also

- `persona-sim/lib/ipf.py` — post-stratification implementation
- `persona-sim/lib/bias_audit.py` — run before publishing any prediction
- `persona-sim/eval/gss_20q.json` — baseline attitude distributions

## Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

- **Author:** [Yrzhe](https://github.com/Yrzhe)
- **Source:** [Yrzhe/claude-skills](https://github.com/Yrzhe/claude-skills)
- **License:** MIT

Install and usage instructions live in the source repository linked above.

## Pricing

- **Free** — Free

## Security capabilities

Automated source analysis of v0.1.0 — what this tool can access:

- **Network access:** no
- **Filesystem access:** yes
- **Shell / process execution:** no
- **Environment & secrets:** no
- **Dynamic code execution:** no

*"Yes" means the capability is present in the source — more access means more to trust, not that it is unsafe.*


## Versions

- **0.1.0** — security scan: passed — Imported from the upstream source.

## Links

- Listing page: https://agentstack.voostack.com/l/skill-yrzhe-claude-skills-vote-predict
- Seller: https://agentstack.voostack.com/s/yrzhe
- Browse the marketplace: https://agentstack.voostack.com/browse

---
Listed on AgentStack — the marketplace for AI agent skills and MCP servers. Every listing is security-reviewed. Creators keep 70%.
