Research
Experiments run inside ComputerWorld, where every simulated person acts through a screen the engine draws, and measurements of the engine itself. Each study links its data and the commands that replay it.
Market simulation research
What these studies are, and are not
Every person is a language
model playing a persona and every company is fictional: these are measurements of a simulator, not forecasts.
ComputerWorld can hold simulated buyers, readers and executives, give them information, fork the world before an intervention and compare what each branch does. These studies use that to ask how corporate identity, articles, pitches and comparative claims move simulated markets. Every person in them is a language model playing a persona and every company is fictional: the results are measurements of a simulator, labelled as such, with the human studies that would test them listed on each page.
Each study ends with the observations that would calibrate it. Across them the order is the same: run the same stimuli past real respondents (a randomised conjoint or vignette panel), compare the simulator's direction and ranking with theirs, then fit the factor model's intercepts to field outcomes (click-through, quote and order rates from a CRM) before trusting any number as a forecast.
The engine
Engine frame
Engine frame
Engine frameThe factor registry
68 predictive factors shared by every study (6 benchmarked, 18 null, 44 unvalidated). One square each, by how it is measured:
How the registry works
Each factor is a typed JSON file; a factor counts
only when it improves held-out prediction. Neither ablation shows the factors predict real buyers.
Each factor is a JSON file naming its definition, the entities it applies to, its inputs, a typed output, its dependencies, how it is measured, where it came from and how far it has been validated. The measurement kind is never blurred: an observed factor is something a simulated agent did or was assigned; derived is a deterministic function of other values; llm-elicited is a model's report when asked; calibrated would be fitted to real outcomes and none is; a hypothesis is defined and not yet measured.
Machine-written candidates go through the same gate as hand-written ones: schema checks, deduplication against the registry by name and definition, and a status reset to unvalidated. A factor becomes benchmarked only when adding it to a study's baseline improves prediction on held-out scenarios, and null when it does not. The two ablations, baseline factor set against an expanded one, held-out log loss:
- Brand priors, leave-one-identity-out: 0.489 → 0.410 (log-loss reduction +0.079, 95% interval +0.036 to +0.117). The expanded set helps.
- Comparative positioning, leave-one-scenario-out: 0.292 → 0.316 (log-loss reduction −0.023, 95% interval −0.046 to −0.004). It does not: with six scenarios, scenario-level factors are not identified.
Neither shows that the factors predict real buyers; both models are fitted to one language model's answers. A larger registry is not more evidence: a factor counts when it carries held-out information, and most here do not yet.
python scripts/society/factors.py validate # load and check every factor
python scripts/society/factors.py propose candidates.json # gate candidates (add --write to keep them)
python scripts/society/factors.py generate --context "..." --journal J # ask a model, through the same gate
All 68 factors
| Id | Name | Kind | Status | Applies to | Output |
|---|---|---|---|---|---|
attention_displacement | Attention displacement | derived | unvalidated | buyer, artifact | number -50–50 |
claim_verifiability | Claim verifiability | derived | unvalidated | message | bool |
commercial_intent_reader | Commercial-intent reader | derived | unvalidated | buyer, company | bool |
counterfactual_intent_lift | Counterfactual intent lift | derived | unvalidated | artifact | number -1–1 |
endgame_engaged | Engagement end-game | derived | unvalidated | organization, decision | bool |
evaluation_reply | Evaluation reply | derived | unvalidated | buyer, artifact | bool |
expectation_gap | Expectation gap | derived | unvalidated | product, buyer | number -6–6 |
exposure_channel | Exposure channel | derived | unvalidated | buyer, artifact | category |
linear_attribution_share | Linear attribution share | derived | unvalidated | artifact, buyer | number 0–1 |
name_descriptiveness | Name descriptiveness | derived | unvalidated | company | bool |
name_pronounceability | Name pronounceability | derived | unvalidated | company | number 0–1 |
name_syllables | Name syllable count | derived | unvalidated | company | count 1–∞ |
price_ratio | Price ratio to reference | derived | unvalidated | product | number 0–10 |
protocol_compatibility | Protocol compatibility | derived | unvalidated | product, buyer | number 0–1 |
stakeholder_disagreement | Stakeholder disagreement | derived | unvalidated | organization, decision | number 0–3 |
switching | Switching | derived | unvalidated | buyer | category |
brain_ltv | Brain-LTV | hypothesis | unvalidated | artifact | number -100000000–100000000 |
category_prototype_fit | Category prototype fit | hypothesis | unvalidated | company | scale 1–7 |
name_memorability | Name memorability | hypothesis | unvalidated | company | probability 0–1 |
value_per_intent_reader | Value per commercial-intent reader | hypothesis | unvalidated | company | number -100000–100000 |
anticipated_maintenance_burden | Anticipated maintenance burden | llm_elicited | benchmarked | product | scale 1–7 |
confidence_in_leadership | Confidence in leadership | llm_elicited | null | company | scale 1–7 |
expected_failure_rate | Expected three-year failure rate | llm_elicited | null | product | number 0–100 |
expected_product_maturity | Expected product maturity | llm_elicited | null | product | scale 1–7 |
expected_quality | Expected quality | llm_elicited | null | product | scale 1–7 |
expected_vendor_viability | Expected long-term vendor viability | llm_elicited | null | company | probability 0–1 |
feature_salience | Feature salience | llm_elicited | null | buyer | number 0–100 |
institutional_credibility | Institutional credibility | llm_elicited | null | company | scale 1–7 |
name_institutional_association | Institutional association of the name | llm_elicited | null | company | scale 1–7 |
name_premium_association | Premium association of the name | llm_elicited | null | company | scale 1–7 |
overall_impression | Overall impression | llm_elicited | unvalidated | company, product | scale 1–7 |
perceived_competence | Perceived competence | llm_elicited | null | company | scale 1–7 |
perceived_technical_depth | Perceived technical depth | llm_elicited | null | company | scale 1–7 |
perceived_vendor_risk | Perceived vendor risk | llm_elicited | benchmarked | company | scale 1–7 |
post_purchase_satisfaction | Post-purchase satisfaction | llm_elicited | unvalidated | product, buyer | scale 1–7 |
procurement_friction | Procurement friction | llm_elicited | benchmarked | company, buyer | scale 1–7 |
relative_preference | Relative preference | llm_elicited | unvalidated | product, buyer | scale -3–3 |
source_independence | Perceived source independence | llm_elicited | benchmarked | message | scale 1–7 |
stakeholder_cost_justification | Stakeholder-rated cost justification | llm_elicited | unvalidated | executive | scale 1–7 |
stakeholder_strategic_value | Stakeholder-rated strategic value | llm_elicited | unvalidated | executive | scale 1–7 |
stakeholder_support | Stakeholder support for engaging | llm_elicited | null | executive | scale 1–7 |
willingness_to_pay | Willingness to pay | llm_elicited | benchmarked | product, buyer | number 0–10000 |
artifact_engagement | Artifact engagement | observed | unvalidated | buyer, artifact | count 0–∞ |
artifact_exposure | Artifact exposure | observed | unvalidated | buyer, artifact | bool |
artifact_impressions | Artifact impressions | observed | unvalidated | buyer, artifact | count 0–∞ |
binding_veto_incidence | Binding veto incidence | observed | unvalidated | organization, decision | count 0–10 |
budget_headroom | Budget headroom | observed | null | buyer | number 0–10000 |
buyer_risk_tolerance | Buyer risk tolerance | observed | null | buyer | category |
buyer_segment | Buyer segment | observed | unvalidated | buyer | category |
company_follow | Company follow | observed | unvalidated | buyer, company | bool |
competing_build_proposal | Competing internal-build proposal | observed | unvalidated | organization, decision | bool |
competing_team_exposure | Competing-team exposure | observed | null | organization, pitch | bool |
decision_latency_weeks | Decision latency | observed | unvalidated | decision | number 1–10 |
diligence_breadth | Diligence breadth before proposal | observed | benchmarked | organization, decision | count 0–4 |
diligence_initiation | Diligence initiation | observed | unvalidated | buyer, product | bool |
engagement_request | Engagement request | observed | unvalidated | company, buyer | bool |
exec_forwarding_breadth | Executive forwarding breadth | observed | null | organization, pitch | count 1–5 |
focal_choice | Focal product chosen | observed | unvalidated | product, buyer | bool |
identity_arm | Identity arm | observed | unvalidated | company | category |
institutional_endgame | Institutional end-game | observed | unvalidated | organization, decision | category |
listing_discovery | Listing discovery | observed | unvalidated | company, buyer | bool |
need_fit_latency | Workload latency sensitivity | observed | null | buyer | bool |
pitch_positioning | Pitch positioning | observed | unvalidated | pitch | category |
price_treatment | Price treatment | observed | unvalidated | product | number 0–10000 |
proposal_contestation | Proposal contestation | observed | unvalidated | decision | count 0–10 |
repost_propagation | Repost propagation | observed | unvalidated | artifact | count 0–∞ |
repurchase_choice | Repurchase choice | observed | unvalidated | product, buyer | bool |
true_feature_advantage | True feature advantage | observed | null | market | category |