facebook/WearableQA

Dataset

11

stars

2

commits

1

linked in READMEs

Sep 3, 2026

updated

benchmark
health
reasoning
time-series
wearable

README

WearableQA

A benchmark for health reasoning over real-world wearable data.

WearableQA comprises 4,084 ten-option multiple-choice questions built from the wearable time series, blood biomarkers, and demographics of 200 real users, each with up to about 500 days of daily measurements. Unlike benchmarks built on synthetic or idealized signals, it preserves authentic wearable distributions β€” device noise, missing days, and inter-individual variability included.

Quick start

from datasets import load_dataset

ds = load_dataset("facebook/WearableQA", split="test")

ex = ds[0]
ex["question"]   # the complete prompt, ready to send to a model
ex["choices"]    # {"A": ..., ..., "J": ...}
ex["answer"]     # "A"

The dataset is large (median prompt ~86k characters), so streaming is often convenient:

ds = load_dataset("facebook/WearableQA", split="test", streaming=True)

Configurations

The same 4,084 questions in five forms. Ids and answers are identical across all of them β€” only the way the sensor time series is presented changes.

ConfigWhat it gives you
row (default)Prompt with the sensor data as one line per day. This is the released benchmark and the setting the paper reports.
colOne block per metric, showing each metric's trajectory together.
csvDense CSV table, missing values as empty fields.
markdownThe same table in markdown.
structuredNo prompt text. Each record carries its own sliced sensor window as structured values, so you can build your own prompt.
load_dataset("facebook/WearableQA", "markdown", split="test")     # a different serialization
load_dataset("facebook/WearableQA", "structured", split="test")   # build your own prompts

The representation matters: in our experiments it moved accuracy by several points, and image-based renderings of the same data were far worse than any text form.

Fields β€” rendered configs (row, col, csv, markdown)

FieldTypeMeaning
idstringUnique question id (<source>_<user>_<end-date>)
questionstringThe complete prompt: instruction, user profile, sensor history, blood panel, cohort percentiles, question stem, and options
choicesstructThe ten options, keyed A–J
answerstringGround-truth option letter
categorystringOne of the 16 question types
reasoning_groupstringdata or health
signalstringsingle or cross
groundingstringpopulation or literature
representationstringWhich serialization this config used

Fields β€” structured

Everything above except question and representation, plus:

FieldTypeMeaning
stemstringThe question text on its own, without the surrounding prompt
sensor_historylist of structsThis question's own window β€” one struct per day, with date and the 16 metrics (null where the device recorded nothing)
demographicsJSON stringAge, sex, BMI, ethnicity
blood_panelJSON stringUp to 17 biomarkers
cohort_referenceJSON stringPopulation percentiles (empty when the question withholds them)
end_datestringLast day of the observation window
window_sizeintLength in days of the window the question asks about (28 throughout)

Each record is self-contained β€” no joins against a separate user table:

ds = load_dataset("facebook/WearableQA", "structured", split="test")
ex = ds[0]
ex["sensor_history"][0]    # {"date": "2023-10-20", "steps": 27858.0, "rhr": 38.0, ...}

# build whatever prompt you want
my_prompt = f"{ex['stem']}\n" + "\n".join(
    f"{d['date']}: steps={d['steps']}, rhr={d['rhr']}" for d in ex["sensor_history"])

Taxonomy

The 16 question types are organized along two complementary axes:

  • Data vs. health reasoning β€” computing over longitudinal measurements (correlations, excursion counts, recovery times, trend shapes) versus interpreting them physiologically (risk assessment, differential diagnosis, prognostic prediction).
  • Single- vs. cross-signal reasoning β€” reasoning within one metric versus integrating several.
AxisSplitCount
Reasoning groupdata / health2,724 / 1,360
Signal complexitysingle / cross1,682 / 2,402
Groundingpopulation / literature3,154 / 930

Ground-truth answers are balanced uniformly across options A–J within each reasoning group, so the random baseline is 10%.

Citation

@misc{lee2026wearableqa,
      title={{WearableQA}: A Benchmark for Health Reasoning over Real-World Wearable Data},
      author={Ji Soo Lee and Xilun Chen and Pierce Chuang and Ashish Shenoy and Jason Wei and Dohwan Ko and Hyunwoo J. Kim and Benoit Corda},
      year={2026},
      eprint={2609.05405},
      archivePrefix={arXiv},
      primaryClass={cs.CL},
      url={https://arxiv.org/abs/2609.05405},
}

License

The data is licensed under Creative Commons Attribution-Non Commercial 4.0 International (CC BY-NC 4.0), and subject to the following additional terms: (i) No re-identification or attempted re-identification; (ii) No use in connection with clinical, diagnostic, or treatment decisions; (iii) No use in a manner that is discriminatory, harmful, or misleading with respect to health-related outcomes; (iv) The Dataset is provided "as is", without warranties of any kind, whether express or implied, including without limitation accuracy, completeness, or fitness for a particular purpose, and is provided for research and benchmarking purposes only.

Contributors

ccsasuke

1 commits

meta-bot

1 commits

facebook/WearableQA

Dataset

11

stars

2

commits

1

linked in READMEs

Sep 3, 2026

updated

benchmark
health
reasoning
time-series
wearable

README

WearableQA

A benchmark for health reasoning over real-world wearable data.

WearableQA comprises 4,084 ten-option multiple-choice questions built from the wearable time series, blood biomarkers, and demographics of 200 real users, each with up to about 500 days of daily measurements. Unlike benchmarks built on synthetic or idealized signals, it preserves authentic wearable distributions β€” device noise, missing days, and inter-individual variability included.

Quick start

from datasets import load_dataset

ds = load_dataset("facebook/WearableQA", split="test")

ex = ds[0]
ex["question"]   # the complete prompt, ready to send to a model
ex["choices"]    # {"A": ..., ..., "J": ...}
ex["answer"]     # "A"

The dataset is large (median prompt ~86k characters), so streaming is often convenient:

ds = load_dataset("facebook/WearableQA", split="test", streaming=True)

Configurations

The same 4,084 questions in five forms. Ids and answers are identical across all of them β€” only the way the sensor time series is presented changes.

ConfigWhat it gives you
row (default)Prompt with the sensor data as one line per day. This is the released benchmark and the setting the paper reports.
colOne block per metric, showing each metric's trajectory together.
csvDense CSV table, missing values as empty fields.
markdownThe same table in markdown.
structuredNo prompt text. Each record carries its own sliced sensor window as structured values, so you can build your own prompt.
load_dataset("facebook/WearableQA", "markdown", split="test")     # a different serialization
load_dataset("facebook/WearableQA", "structured", split="test")   # build your own prompts

The representation matters: in our experiments it moved accuracy by several points, and image-based renderings of the same data were far worse than any text form.

Fields β€” rendered configs (row, col, csv, markdown)

FieldTypeMeaning
idstringUnique question id (<source>_<user>_<end-date>)
questionstringThe complete prompt: instruction, user profile, sensor history, blood panel, cohort percentiles, question stem, and options
choicesstructThe ten options, keyed A–J
answerstringGround-truth option letter
categorystringOne of the 16 question types
reasoning_groupstringdata or health
signalstringsingle or cross
groundingstringpopulation or literature
representationstringWhich serialization this config used

Fields β€” structured

Everything above except question and representation, plus:

FieldTypeMeaning
stemstringThe question text on its own, without the surrounding prompt
sensor_historylist of structsThis question's own window β€” one struct per day, with date and the 16 metrics (null where the device recorded nothing)
demographicsJSON stringAge, sex, BMI, ethnicity
blood_panelJSON stringUp to 17 biomarkers
cohort_referenceJSON stringPopulation percentiles (empty when the question withholds them)
end_datestringLast day of the observation window
window_sizeintLength in days of the window the question asks about (28 throughout)

Each record is self-contained β€” no joins against a separate user table:

ds = load_dataset("facebook/WearableQA", "structured", split="test")
ex = ds[0]
ex["sensor_history"][0]    # {"date": "2023-10-20", "steps": 27858.0, "rhr": 38.0, ...}

# build whatever prompt you want
my_prompt = f"{ex['stem']}\n" + "\n".join(
    f"{d['date']}: steps={d['steps']}, rhr={d['rhr']}" for d in ex["sensor_history"])

Taxonomy

The 16 question types are organized along two complementary axes:

  • Data vs. health reasoning β€” computing over longitudinal measurements (correlations, excursion counts, recovery times, trend shapes) versus interpreting them physiologically (risk assessment, differential diagnosis, prognostic prediction).
  • Single- vs. cross-signal reasoning β€” reasoning within one metric versus integrating several.
AxisSplitCount
Reasoning groupdata / health2,724 / 1,360
Signal complexitysingle / cross1,682 / 2,402
Groundingpopulation / literature3,154 / 930

Ground-truth answers are balanced uniformly across options A–J within each reasoning group, so the random baseline is 10%.

Citation

@misc{lee2026wearableqa,
      title={{WearableQA}: A Benchmark for Health Reasoning over Real-World Wearable Data},
      author={Ji Soo Lee and Xilun Chen and Pierce Chuang and Ashish Shenoy and Jason Wei and Dohwan Ko and Hyunwoo J. Kim and Benoit Corda},
      year={2026},
      eprint={2609.05405},
      archivePrefix={arXiv},
      primaryClass={cs.CL},
      url={https://arxiv.org/abs/2609.05405},
}

License

The data is licensed under Creative Commons Attribution-Non Commercial 4.0 International (CC BY-NC 4.0), and subject to the following additional terms: (i) No re-identification or attempted re-identification; (ii) No use in connection with clinical, diagnostic, or treatment decisions; (iii) No use in a manner that is discriminatory, harmful, or misleading with respect to health-related outcomes; (iv) The Dataset is provided "as is", without warranties of any kind, whether express or implied, including without limitation accuracy, completeness, or fitness for a particular purpose, and is provided for research and benchmarking purposes only.

Contributors

ccsasuke

1 commits

meta-bot

1 commits