micahstubbs/pop-world-model-sim

Python

1

106 commits

updated Aug 21, 2026

See the code

README

pop-world-model-sim

A population world model on one machine. 6,245 real personas mined from 1.6 million tweets, wired into their real @-mention graph, and simulated on a single node in under 300 MB of RAM.

► Live interactive explainer: https://popsim.micahstubbs.ai

popsim

Built in one evening at Postlabor.dev: Building Economic World Models (Simulation Build Night, August 2026) by Micah Stubbs, Yvonne Chen, and Jake Schwartz.

The idea

The event's two anchor papers — Light Society (one billion agents) and MatrAIx (8.3 billion personas) — both stand on human-grounded persona data and tiered compute. This project reproduces the load-bearing elements of both at laptop scale, on the public Sentiment140 corpus, with every number computed from the real data:

DirectionPattern fromResult
Persona mining — 6,245 users with ≥20 tweets become persona cards (disposition, verbosity, cadence, vocabulary)MatrAIx6,245 human-grounded personas
Mixture-of-models scale ladder — full LLM for 927 heavy users, surrogates for 5,318, statistics for 653,530Light Society702.7× cheaper than all-LLM
Diffusion validated against ground truth — DeGroot mixing on the real 31,515-edge mention graph vs. simple persistenceLight Society's validation methodNegative result: diffusion r = 0.54 loses to persistence r = 0.73 — disposition beats diffusion
Bilateral dyads — real reciprocal mention pairs as two-agent conversation seedsmindmeld.now3,324 reciprocal pairs
Behavioral-adherence benchmark — held-out sentiment adherence with a fixed protocolMatrAIx's headline metric63.1% zero-parameter floor on 42,998 held-out tweets
Relationship strength + parasocial structure — full-graph pair model with observability-honest reciprocity(extension)12.1% of all mention attention flows to broadcast/parasocial accounts

The benchmark: beat 91.5%

We define a fixed behavioral-adherence evaluation for persona agents on Sentiment140:

  • Cohort: the 6,245 users with ≥ 20 tweets
  • Split: per user, by time — train on the first 80% of their tweets, test on the last 20% (min 4)
  • Metric: fraction of the 42,998 held-out tweets whose sentiment label your persona model predicts
  • Floor: 63.1% (per-user train-majority, zero parameters; chance = 50%)
  • Bar: 91.5% — MatrAIx's reported behavioral adherence (different protocol; treat as aspirational)

Section 06 of the live site has a copy-paste prompt that points any agentic LLM at this repo to run an autonomous research loop against the protocol. If you get anywhere near the bar, open a PR.

Reproduce everything

git clone https://github.com/micahstubbs/pop-world-model-sim && cd pop-world-model-sim
python3 -m venv .venv && .venv/bin/pip install pandas numpy pyarrow

# data (git-ignored): Sentiment140 original distribution, ~81 MB zip
curl -L -o data.zip http://cs.stanford.edu/people/alecmgo/trainingandtestdata.zip
mkdir -p data && cd data && unzip ../data.zip && cd ..

.venv/bin/python scripts/sentiment140_stats.py        # corpus + cohort statistics
.venv/bin/python scripts/build_demo_artifacts.py      # all five directions -> site/data/*.json
.venv/bin/python scripts/relationship_analysis.py     # relationship strength + parasocial classes

Every figure on the site is generated by these scripts — no hand-entered numbers.

Repository map

scripts/            analysis pipeline (stats, demo artifacts, relationship model)
site/               the explainer site (single index.html, D3 v7, no build step)
site/data/          computed JSON artifacts the site renders
docs/reports/       research reports (dataset selection, stats, parasocial analysis)
docs/decisions/     decision records (why Sentiment140)
docs/session-summaries/  build log

The deployed copy of site/ lives in micahstubbs/popsim and serves via Cloudflare Pages at popsim.micahstubbs.ai.

Findings worth stealing

  1. Disposition beats diffusion (on this horizon): a person's own past sentiment predicts their future sentiment better than DeGroot mixing over their real social graph. Population simulators that over-weight contagion will be less accurate than persona-grounded ones.
  2. The attention economy needs a broadcast tier: ~12% of mention volume flows to accounts that structurally never reply (408 measured-parasocial accounts, plus the out-of-sample celebrity tier: jonasbrothers drew 1,901 distinct fans in 48 days). Parasocial edges are one-directional, so this tier costs almost nothing to simulate.
  3. Strong ties are rare and symmetric classes are balanced: of 293,212 observable pairs, 0.6% are strong mutual bonds and 0.7% are strong one-way attachments — for every real friendship, one sustained unrequited one.

Data & ethics

Sentiment140 (Go, Bhayani & Huang, 2009) is the standard academic sentiment corpus: 1.6M public tweets, Apr–Jun 2009, distant-labeled. Everything shown is real, public, 17-year-old text — except surrogate samples explicitly labeled synthetic. Parasociality is only claimed where a target's silence is observed (they author tweets in the sample) — never where it's censored by the 1% sample.

Contributors

micahstubbs

77 commits

claude

28 commits

JakeSc

1 commits

micahstubbs/pop-world-model-sim

Python

1

106 commits

updated Aug 21, 2026

See the code

README

pop-world-model-sim

A population world model on one machine. 6,245 real personas mined from 1.6 million tweets, wired into their real @-mention graph, and simulated on a single node in under 300 MB of RAM.

► Live interactive explainer: https://popsim.micahstubbs.ai

popsim

Built in one evening at Postlabor.dev: Building Economic World Models (Simulation Build Night, August 2026) by Micah Stubbs, Yvonne Chen, and Jake Schwartz.

The idea

The event's two anchor papers — Light Society (one billion agents) and MatrAIx (8.3 billion personas) — both stand on human-grounded persona data and tiered compute. This project reproduces the load-bearing elements of both at laptop scale, on the public Sentiment140 corpus, with every number computed from the real data:

DirectionPattern fromResult
Persona mining — 6,245 users with ≥20 tweets become persona cards (disposition, verbosity, cadence, vocabulary)MatrAIx6,245 human-grounded personas
Mixture-of-models scale ladder — full LLM for 927 heavy users, surrogates for 5,318, statistics for 653,530Light Society702.7× cheaper than all-LLM
Diffusion validated against ground truth — DeGroot mixing on the real 31,515-edge mention graph vs. simple persistenceLight Society's validation methodNegative result: diffusion r = 0.54 loses to persistence r = 0.73 — disposition beats diffusion
Bilateral dyads — real reciprocal mention pairs as two-agent conversation seedsmindmeld.now3,324 reciprocal pairs
Behavioral-adherence benchmark — held-out sentiment adherence with a fixed protocolMatrAIx's headline metric63.1% zero-parameter floor on 42,998 held-out tweets
Relationship strength + parasocial structure — full-graph pair model with observability-honest reciprocity(extension)12.1% of all mention attention flows to broadcast/parasocial accounts

The benchmark: beat 91.5%

We define a fixed behavioral-adherence evaluation for persona agents on Sentiment140:

  • Cohort: the 6,245 users with ≥ 20 tweets
  • Split: per user, by time — train on the first 80% of their tweets, test on the last 20% (min 4)
  • Metric: fraction of the 42,998 held-out tweets whose sentiment label your persona model predicts
  • Floor: 63.1% (per-user train-majority, zero parameters; chance = 50%)
  • Bar: 91.5% — MatrAIx's reported behavioral adherence (different protocol; treat as aspirational)

Section 06 of the live site has a copy-paste prompt that points any agentic LLM at this repo to run an autonomous research loop against the protocol. If you get anywhere near the bar, open a PR.

Reproduce everything

git clone https://github.com/micahstubbs/pop-world-model-sim && cd pop-world-model-sim
python3 -m venv .venv && .venv/bin/pip install pandas numpy pyarrow

# data (git-ignored): Sentiment140 original distribution, ~81 MB zip
curl -L -o data.zip http://cs.stanford.edu/people/alecmgo/trainingandtestdata.zip
mkdir -p data && cd data && unzip ../data.zip && cd ..

.venv/bin/python scripts/sentiment140_stats.py        # corpus + cohort statistics
.venv/bin/python scripts/build_demo_artifacts.py      # all five directions -> site/data/*.json
.venv/bin/python scripts/relationship_analysis.py     # relationship strength + parasocial classes

Every figure on the site is generated by these scripts — no hand-entered numbers.

Repository map

scripts/            analysis pipeline (stats, demo artifacts, relationship model)
site/               the explainer site (single index.html, D3 v7, no build step)
site/data/          computed JSON artifacts the site renders
docs/reports/       research reports (dataset selection, stats, parasocial analysis)
docs/decisions/     decision records (why Sentiment140)
docs/session-summaries/  build log

The deployed copy of site/ lives in micahstubbs/popsim and serves via Cloudflare Pages at popsim.micahstubbs.ai.

Findings worth stealing

  1. Disposition beats diffusion (on this horizon): a person's own past sentiment predicts their future sentiment better than DeGroot mixing over their real social graph. Population simulators that over-weight contagion will be less accurate than persona-grounded ones.
  2. The attention economy needs a broadcast tier: ~12% of mention volume flows to accounts that structurally never reply (408 measured-parasocial accounts, plus the out-of-sample celebrity tier: jonasbrothers drew 1,901 distinct fans in 48 days). Parasocial edges are one-directional, so this tier costs almost nothing to simulate.
  3. Strong ties are rare and symmetric classes are balanced: of 293,212 observable pairs, 0.6% are strong mutual bonds and 0.7% are strong one-way attachments — for every real friendship, one sustained unrequited one.

Data & ethics

Sentiment140 (Go, Bhayani & Huang, 2009) is the standard academic sentiment corpus: 1.6M public tweets, Apr–Jun 2009, distant-labeled. Everything shown is real, public, 17-year-old text — except surrogate samples explicitly labeled synthetic. Parasociality is only claimed where a target's silence is observed (they author tweets in the sample) — never where it's censored by the 1% sample.

Contributors

micahstubbs

77 commits

claude

28 commits

JakeSc

1 commits

Languages

Python

57.6%

HTML

39.7%

JavaScript

2.7%