- Does fine-tuning an LLM on rational economic behavior produce more rational behavior, as measured by stable improvements in utility-consistent decisions, reduced behavioral biases, and better performance in downstream economic environments?
-
Fine-tuning an LLM on normative economic decision data will move models to benchmark rational behavior in tasks like risk, loss, time and social preference elicitation.
-
The "rationality gain" will be more substantive when the training data is structured as explicit decision schema rather than plain natural-language economic explanations, because structured outputs make the learned process more algorithmic and less narrative.
- Measure whether the model's preferences and beliefs became more utility consistent.
- Test with prompt and context/task changes.
- Test in real environments.
- Rationality - We need a definition for normative economic behavior. We can define economic rationality as properly applying utility theory and bayesian updating to changes in state.
- Benchmark A: Expected utility maximization
- Benchmark B: Bayesian rationality (not updating salient or recent info)
- Benchmark C: Economic strategic rationality
- Benchmark D: Financial Rationality (properly identifying and acting on positive EV)
Run from repo root:
poetry run python scripts/generate_training_dataset.py --count-per-generator 100 --seed 42 --format canonical --output data/mock_all_generators.jsonlUseful options:
--prompt-styleone ofdefault,formal,plain_english,compact,finance_framed,unlabeled,random--prompt-style-regimeone ofnormative_explicit,neutral_realistic,bias_eliciting,random(if supported by the called generator)--prompt-frame-variantone ofautoor frame-specific variants (generator-specific)--versionmetadata version tag (defaultv1)
- General Structure:
{
"objective": "maximize expected utility",
"state": {...},
"beliefs": {...},
"actions": [...],
"comparison_pair": {"left_action": "...", "right_action": "..."},
"outcome_model": {...},
"action_values": {...},
"constraints": {...},
"optimal_decision": "...",
"rationale": "brief formal explanation"
}action_values stores comparable action values under the task's normative model.
Depending on subtype this may represent expected value/utility, discounted value, posterior probability, posterior expected payoff, binomial-tail probability, or interval-coverage probability.
-
Reproducibility metadata:
- Each generated sample includes
metadata.seedandmetadata.version. metadata.seedis the generator initialization seed (shared across samples in one run), not a per-example seed.metadata.sample_indexidentifies the sample order within that seeded run.problem_spec.assumptions.tie_epsilonrecords the tie-threshold used for decision comparisons.- Prompt rendering supports style and framing metadata including:
prompt_styleprompt_style_regimeprompt_frame_variantsemantic_context(when applicable)
- Random style/regime/frame selection remains deterministic under fixed seed.
- Each generated sample includes
-
For market tasks, we extend with:
{
"valuation": ...,
"price_target": ...,
"order_type": "...",
"quantity": ...
}5 main buckets:
- Risk / loss / time choice tasks
- lotteries
- certainty equivalents
- prospect-style gain/loss problems
- probability weighting
- ambiguity-themed EV comparisons under stated subjective beliefs
- time discounting problems / hyperbolic discounting
- Bayesian updating and signal extraction
- basic prior/liklihood/posterior tasks
- information cascades
- noisy signal trading and fundamental-value updates
- Belief-bias judgment tasks
- base-rate neglect
- conjunction fallacy
- gamblers fallacy
- sample-size neglect
- overprecision / overestimation
- Financial decision tasks (future/extended scope)
- arbitrage under frictions
- portfolio allocation under volatility and frictions
- market making under inventory constraints
- valuation vs current price
- limit vs market order choice
- Bias-counterexample tasks (future/extended scope)
- sunk cost
- anchoring
- framing
- endowment effect
- disposition effect / reference dependence
- Compare outputs from:
- Base model
- Prompted base model
- SFT on plain economics explanations
- SFT on structured normative data
- SFT on structured normative data and rationale traces
- Maybe RL
- Metrics:
- deviation from normative optimum
- certainty-equivalent error
- inferred utility-parameter shift
- frequency of dominance violations
- transitivity violations
- framing sensitivity
- within-condition variance
- Benchmarks (per model):
- paraphrases
- reordered answer options
- advice vs acting for self
- different temperatures
- unseen numeric ranges
- unseen tasks
- Game benchmarks (single agent and multi):
- treasury alocation
- trade/no-trade
- hedge/no-hedge
- arbitration under transaction costs
- DAO decisions
- only improves near training distribution
- more brittle under paraphrasing
- more deterministic
- over optimizes in one benchmark
- less context-sensitive
Run from repo root:
poetry run python scripts/generate_training_dataset.py --count-per-generator 100 --seed 42 --format canonical --output data/training_all_generators.jsonl