Disclaimer / Epigraph
The prose below was hammered out by a Large Language Model, but every concept, side-eye, and bad-heuristic quip is straight from Advait Raykar's. Any wisdom is mine; any hallucination is the model’s.
A three-script pipeline for fabricating whole focus-groups out of thin air, grilling them with questions, and ogling the data in a browser—faster (and cheaper) than scheduling a single real Zoom.
- Why does this exist?
- Feature Fly-over
- Folder Anatomy
- Quick-Start
- Drive-Through Usage
- Sample Results & What They Whisper
- Meet the Personas (Manhattan Girlies 2)
- Contributing
- License
Because interviewing 10 000 real humans is expensive, messy, and occasionally illegal.
So we let an LLM spin up synthetic humans—Personas-as-a-Service. Point the gizmo at a demographic slice (“20–28, female, Manhattan, well-to-do”) and a research prompt (“Will you watch this Twitch-style tech show?”). Out pops structured opinion data you can chart before your latte cools.
Contrarian Paradox™
LLM personas are brilliant at spitting out averages; they’re allergic to genuine, fat-tail weirdness. Great for N = 100 sentiment charts, terrible if you’re scouting the next Tyler Cowen hot-take.
| Script | Elevator pitch |
|---|---|
01_generate_personas.py |
Mints personas with names, bios, Big-Five scores, mood sliders, value stacks—even a “candor” dial. |
02_run_survey.py |
Feeds each persona your question. Options: self-consistency rerolls, reflection (“think step-by-step, dear NPC”). |
03_visualize.py |
Legacy CLI heat-map for terminal nostalgics. |
app.py |
Flask UI—click an opinions file, browse results, feel like Nate Silver. |
population_scale/
├── 01_generate_personas.py # Persona foundry
├── 02_run_survey.py # Survey engine
├── 03_visualize.py # Old-school ASCII view (optional)
├── app.py # Flask front-end
├── templates/ # Jinja2 HTML
│ ├── index.html
│ └── view_opinions.html
├── requirements.txt
├── .env # Put OPENAI_API_KEY here
└── opinions_*.json # Autogenerated, git-ignored
git clone https://github.com/Hallicopter/PopulationScale.git
cd PopulationScale
python3 -m venv venv && source venv/bin/activate # Windows? venv\Scripts\activate
pip install -r requirements.txt
echo "OPENAI_API_KEY='sk-example123'" > .env| Task | Command-line incantation |
|---|---|
| Forge personas | python 01_generate_personas.py -d "20-28 female manhattan college educated" -n 13 -g "manhattan girlies 2" |
| Run a survey | python 02_run_survey.py personas_manhattan_girlies_2.json -q "Will you watch our tech-banter podcast?" -sc 3 --reflect |
| See the mosaic | python app.py → open http://127.0.0.1:5001 |
| Disposition | # | Share |
|---|---|---|
| Would watch TBPN | 2 | 15.4 % |
| Would not watch | 10 | 76.9 % |
| Undecided / “Maybe” | 1 | 7.7 % |
| They’re in because… | They’re out because… |
|---|---|
| “Fast-paced, irreverent sports-talk vibe.” | “Chaotic / hype-over-substance.” |
| “Unfiltered founder + VC war stories.” | “Tech chatter is oversaturated.” |
| “Courtside energy—no corporate fluff.” | “Prefer deeper, slower analysis.” |
Cheer squad archetype
- Startup operators who mainline Twitter Spaces.
- Viewers preferring banter-first, CNBC-meets-Twitch energy.
- Folks chasing founder lore unavailable in mainstream press.
Below is the synthetic cast that produced the numbers. Remember: each persona is a median-of-a-median—useful for trend-hunting, not memoir-writing.
| ID | Name | Age | Vibe & Mini-bio | Mood today |
|---|---|---|---|---|
| b6a1f7 | Jasmine Lee | 25 | Marketing strategist, foodie, yoga evangelist. | “Excited for weekend brunch.” |
| c7e3d8 | Elena Rodriguez | 27 | Tech entrepreneur, art lover, skateboarder. | “Energized by a new project.” |
| d8c4f2 | Sarah Wu | 23 | Data analyst, bookworm, Met-strolling traveler. | “Calm after a long week.” |
| e1f7c8 | Aaliyah Khan | 26 | Social-work activist, podcaster, rally speaker. | “Motivated to make change.” |
| f2g7h3 | Nina Patel | 24 | Graphic designer, coffee-hop blogger. | “Bursting with creative energy.” |
| g4h5j6 | Olivia Johnson | 22 | Biz-major, startup incubator newbie, food-truck hunter. | “Overwhelmed but determined.” |
| h1k9l2 | Crystal Zhao | 28 | Fashion consultant & vintage-shop queen. | “Thriving in the fashion scene.” |
| i9o2p7 | Taylor Scott | 26 | PR exec, nightlife evangelist, sports fan. | “Buzzed from last night’s event.” |
| j3q8r4 | Rachel Adams | 24 | Non-profit manager, environmentalist, animal-ally. | “Focused on making a difference.” |
| k5s1t7 | Sophia Chen | 22 | Financial analyst, board-game guru, film buff. | “Crunching numbers with a clear head.” |
| l7u3v9 | Isabella Torres | 27 | Fitness founder, wellness coach, runner. | “Inspired to help others.” |
| m8w5x1 | Chloe Lewis | 25 | Interior designer, aesthetics devotee, brunch fan. | “Delighted by a new project.” |
| n9y6z5 | Zoe Martinez | 23 | Journalism grad, sustainability writer. | “Inspired by new story ideas.” |
Click for the raw JSON (spoiler: emojis included)
{ "group_name": "manhattan girlies 2", "demographic": "20-28, female, living in manhattan, college educated, diverse, well to do", "personas": [ /* full blob omitted for brevity */ ] }PRs welcome—especially if you can teach the personas to break into song mid-survey.
MIT, because the world already has enough NDAs.
Happy persona-wrangling. May your synthetic humans be insightful, or at least amusing.