Skip to main content

Overview

Questions are the core forecasting objects on Metaculus. Each question asks forecasters to predict the outcome of a future event. Metaculus supports multiple question types to accommodate different kinds of predictions.

Question Types

Metaculus supports five distinct question types, each optimized for different forecasting scenarios:

Binary

Yes/No questions with probability forecasts between 0% and 100%

Numeric

Continuous range predictions with customizable scales (linear or logarithmic)

Date

Predictions about when an event will occur

Multiple Choice

Select from predefined options with probability distributions

Discrete

Continuous predictions over a discrete set of outcomes

Binary Questions

Binary questions are the simplest type, asking for a yes/no prediction. Data Model (from questions/models.py:80-85):
class QuestionType(models.TextChoices):
    BINARY = "binary"
Forecasters provide a single probability value representing their confidence that the answer will be “yes.” Example: “Will SpaceX launch Starship to orbit before 2026?”

Multiple Choice Questions

Multiple choice questions allow forecasters to distribute probabilities across multiple options. Key Features:
  • Options can be modified before forecasting begins
  • Options history is tracked (from questions/models.py:222-231)
  • Support for dynamic ordering (by community prediction or default)
  • “Other” category for unlisted outcomes
Options Ordering (from questions/models.py:233-244):
  • DEFAULT: Display views sorted by CP, forecast maker preserves creation order
  • CP_DESC: All views sort options by descending community prediction
Example: “Which company will achieve AGI first? [OpenAI, Anthropic, Google, Meta, Other]“

Numeric Questions

Numeric questions ask for predictions over a continuous range of numbers. Configuration Options (from questions/models.py:177-217):
  • range_min / range_max: Minimum and maximum values
  • zero_point: For logarithmic scales, the value of the zero point
  • open_upper_bound / open_lower_bound: Whether resolutions outside the range are possible
  • unit: Display unit (e.g., “meters”, “dollars”)
Example: “What will be the global average temperature anomaly in 2030? (°C)“

Date Questions

Date questions are specialized numeric questions for temporal predictions. Features:
  • Same configuration options as numeric questions
  • Internally represented as timestamps
  • Displayed with calendar interfaces
Example: “When will the next recession begin?”

Discrete Questions

Discrete questions provide predictions over a fixed number of discrete outcomes. Configuration (from questions/models.py:210-215):
  • inbound_outcome_count: Number of possible outcomes (default: 200)
  • Range bounds similar to numeric questions
  • Does NOT use zero_point (continuous scale only)
Example: “How many seats will Democrats win in the 2026 Senate? [0-100]“

Question Lifecycle

Questions progress through several states during their lifecycle:
1

Upcoming

Question is created but not yet open for forecasting. The open_time is in the future.
2

Open

Question is actively accepting forecasts. Current time is between open_time and scheduled_close_time.
3

Closed

Forecasting period has ended, but resolution is not yet known.
4

Resolved

The outcome is known and the question has been resolved with a final answer.

Status Determination

The question status is computed dynamically (from questions/models.py:355-375):
@property
def status(self) -> QuestionStatus:
    now = timezone.now()
    
    if not self.scheduled_close_time or not self.open_time or self.open_time > now:
        return QuestionStatus.UPCOMING
    
    if self.resolution or (self.actual_resolve_time and self.actual_resolve_time < now):
        return QuestionStatus.RESOLVED
    
    if self.scheduled_close_time <= now or (self.actual_close_time and self.actual_close_time <= now):
        return QuestionStatus.CLOSED
    
    return QuestionStatus.OPEN

Time Fields

Questions have several important timestamps that control their lifecycle:
Time when forecasting begins. Defines the start of the scoring period. Should not be changed after forecasts are made.
Planned time when forecasting ends. Defines the end of the scoring period. Should not be changed after forecasts are made.
Predicted time when the resolution will become known.
Actual time when the resolution became known.
Actual time when the question closed (minimum of scheduled_close_time and actual_resolve_time).
Time when the community prediction becomes visible to forecasters.
Time when spot scores are evaluated. Defaults to cp_reveal_time if not set.

Resolution

Resolution is the process of determining the final outcome of a question.

Resolution Values

The resolution field stores the outcome as a string (from questions/models.py:88):
  • Binary: "yes" or "no" (or probability for ambiguous resolutions)
  • Multiple Choice: The selected option text or index
  • Numeric/Date/Discrete: The numeric value as a string
  • Unsuccessful resolutions: "ambiguous" or "annulled" (from questions/constants.py:4-6)

Resolution Criteria

Each question includes three key description fields (from questions/models.py:116-119):
  1. Description: Background and context for the question
  2. Resolution Criteria: Precise conditions that determine the outcome
  3. Fine Print: Additional clarifications and edge cases
Clear, unambiguous resolution criteria are essential for high-quality forecasting questions.

Question Weights

Questions can have different weights for scoring purposes (from questions/models.py:90):
question_weight = models.FloatField(default=1.0)
A weight of 0 excludes the question from scoring entirely, while higher weights increase its contribution to leaderboards.

Community Prediction (CP)

The community prediction aggregates all forecaster predictions into a single consensus forecast.

Hidden Community Predictions

Questions can hide the CP until a specified time (from questions/models.py:377-383):
@property
def is_cp_hidden(self):
    return (
        not self.resolution  # always show cp when resolved
        and self.cp_reveal_time
        and self.cp_reveal_time > timezone.now()
    )
This prevents anchoring bias where forecasters might simply follow the crowd.

Aggregation Methods

Metaculus supports multiple aggregation methods (from questions/types.py:18-22):
  • recency_weighted: Recent forecasts weighted more heavily (default)
  • unweighted: All forecasts weighted equally (better for short-term questions)
  • single_aggregation: Single point-in-time aggregation
  • metaculus_prediction: Proprietary Metaculus algorithm

Advanced Features

Group of Questions

Multiple related questions can be grouped together (from questions/models.py:508-536):
  • Shared description and resolution criteria
  • Fan graphs or multiple choice visualizations
  • Subquestions can be manually ordered or sorted by CP

Conditional Questions

Conditional questions split into two variants based on a condition (from questions/models.py:486-505):
  • condition: The binary question that determines the path
  • question_yes: Question resolved if condition is YES
  • question_no: Question resolved if condition is NO
Example: “If Trump wins 2024, will GDP growth exceed 3%?” vs. “If Trump loses 2024, will GDP growth exceed 3%?”

API Reference

Questions API

Explore the full Questions API documentation

Forecasting

Learn how to make and update predictions

Scoring

Understand how forecasts are evaluated

Projects

Organize questions into collections

Tournaments

Compete in forecasting competitions

Build docs developers (and LLMs) love