HealthLoopQA: A Context-Aware Question Answering Benchmark for Interpreting Wearable Monitoring Data in Diabetes Care
Organizations: Nanyang Technological University · Mayo Clinic · The University of Manchester · Imperial College London, Imperial Global Singapore ·
Abstract
As medical wearables become integrated into daily chronic disease care, effectively interpreting longitudinal monitoring data is essential for patients and clinicians to understand health trends, detect safety-critical events, and make informed decisions. While large language models (LLMs) show promise for transforming this streaming physiological data into personalized health insights, evaluating their reasoning capability and analytical rigor in diverse monitoring tasks remains a fundamental challenge. Existing medical wearable question answering (QA) benchmarks primarily assess short-horizon classification or statistical summaries, largely ignoring the long-term patterns, therapeutic and behavioural contexts, and potential system failures inherent in real-world deployments. To address this, we introduce HealthLoopQA, a comprehensive diagnostic benchmark for evaluating LLM reasoning over continuous diabetes monitoring data. Grounded in a novel taxonomy of eleven atomic reasoning abilities, HealthLoopQA comprises 127 tasks and over 1,500 QA instances spanning process mining, anomaly detection, and prediction over 30-day horizons. To systematically evaluate safety awareness, we complement real-world datasets with a fault-injected simulation testbed modeling diverse device malfunctions and cyber-physical attacks to generate physiologically plausible hazard scenarios. Evaluating state-of-the-art LLMs across prompting and agentic frameworks reveals severe limitations in complex temporal pattern mining. Furthermore, we identify a broader phenomenon of In-context Laziness under long-context prompting, highlighting critical open challenges in deploying LLMs for rigorous long-horizon medical reasoning.
Figures & tables
| AID System Monitoring Data |
| Question Template Metadata "patient_id": "Patient_0", "metric": "Affinity F-score", "answer_type": "list of {"start": int, "end": int}", "example_answer": [{"start": 20695, "end": 20745}] Question "question_id": "ad_10", "question_text": "When did my CGM show abrupt glucose spikes that returned to normal without corresponding insulin delivery?" Answer Extraction Module "function_name": "extract_high_readings_intervals_ad10", "answer_generation_rule": "Intervals with faults_label == ’positive_spike’ or ’negative_spike’" Context Extraction Module "carb_events_extraction()", "exercise_events_extraction()", "insulin_events_extraction()" Reasoning Rationale "answer_instruction": "Return a list of time intervals where the blood glucose readings exhibit sudden and sharp increases or decreases of approximately 60 mg/dL or more compared to the previous value." "explanation": "Examine the data for time points marked by noticeable glucose spikes. These spikes should stand out as rapid rises followed by a swift return to normal levels, occurring independently of any recorded bolus insulin delivery or activities during the same periods." |
| Instantiated QA Data Input Data "input_context": { "carb_events": [{"time": 456.970, "day": 1, "time_str": "07:36", "carbs": 61.212, "meal_type": "breakfast"}, ...], "exercise_events": [{"time": 1170.0, "day": 1, "time_str": "19:30", "duration": 30.0, "magnitude": 90.0, "exercise_type": "cycling"}, ...], "insulin_events": [4.804e-07, ...], "bg_mgdl": [108.0, ...] } Golden Standard Answer "answer": [{"start": 37445, "end": 37446}, {"start": 37625, "end": 37626}, {"start": 37805, "end": 37806}, {"start": 37985, "end": 37986}, {"start": 38165, "end": 38166}, {"start": 38345, "end": 38346}] |
| Simulated Dataset | Real-World Dataset | ||||
| Task Categor | Count ( ) | Ratio (%) | Count ( ) | Ratio (%) | |
| QA pairs | 1,044 | 100.00 | 472 | 100.00 | |
| Distinct Tasks | 127 | — | 44 | — | |
| Time Series Task | |||||
| PM | 369 | 35.34 | 367 | 77.75 | |
| AD | 355 | 34.00 | 0 | 0.00 | |
| Model | Time-series task | Cognitive level | Overall | ||||
|---|---|---|---|---|---|---|---|
| PM | AD | PD | Desc. | Mem. | Patt. | ||
| Simulated dataset (127 tasks) | |||||||
| Gemini Prompt. | 67.4 | 21.2 | 62.3 | 66.5 | 49.5 | 31.6 | 43.7 |
| Gemini Agent | 85.5 | 52.4 | 64.8 | 86.8 | 79.3 | 49.4 | 65.8 |
| GPT Agent | 88.3 | 72.9 | 74.6 | 88.2 | 91.4 | 66.7 | 78.5 |
| Claude Agent | 92.3 | 70.6 | 64.8 | 91.6 | 89.5 | 64.0 | 77.2 |
| Input: Question: What was the average glucose reading between 2–4 pm on week 3, day 1? Instruction: Return the average glucose value for week 3, day 1 between 2–4 pm, rounded to one decimal place. |
| Reasoning: I need to hone in on Week 3, Day 1, which breaks down to Day 15. So, if I calculate the readings prior—14 days at 288 readings per day—it amounts to 4032 readings before Day 15. For 2 PM on Day 15, that’s 168 readings into the day, meaning I should focus on reading indices from 4200 to 4223. Counting those manually seems daunting! I’m neck-deep in numbers trying to establish the average for Week 3, Day 1, and it’s quite the headache! I suspect the midday average is around 145.3, but that feels risky without solid data. It could be useful to scan for patterns or specific values, especially around meal times. I’m leaning towards 148.7 since it appears frequently in my analysis. Okay, let’s just wrap this up in a JSON object: {"answer": 148.7} . That feels like a reasonable move! |
Appendix figures & tables15 assets
Supplementary material from the paper’s appendix.
Appendix
| Analytic Stage | Atomic Ability | Definition | Purpose | Example |
| Intention Understanding | Question Understanding (QU) | Inferring user intent, task type, and target variables from the query. | Provides semantic grounding for downstream reasoning. | Distinguishing whether the query requests forecasting, anomaly diagnosis, or description. |
| Instruction Alignment (IA) | Following task instructions, output constraints, and evaluation requirements. | Ensures reliable and instruction-consistent reasoning. | Producing outputs in specified formats or using a prescribed reasoning chain. | |
| Cognitive Reasoning | Quantitative Calculation (QC) | Executing numerical/statistical operations on physiological time-series data. | Forms accurate quantitative perception of signals. | Computing means, ranges, rate-of-change, or metrics (e.g., GRI). |
| Temporal Retrieval (TR) | Selecting time-specific segments of the monitoring history. | Focuses analysis on relevant temporal windows. | Retrieving data from a specific interval (e.g., “last Sunday night”). | |
| Event Retrieval (ER) | Extracting data linked to events or contextual markers. | Grounds reasoning in event-driven physiological changes. | Pulling records around meals, exercise, or insulin dosing. | |
| Comparative Analysis (CA) | Comparing characteristics across multiple retrieved episodes. | Establishes inter-episode relationships and trends. | Comparing QC metrics across post-meal intervals or exercise events. |
| Ordered sequence | Gemini | Gemini | GPT | Claude |
|---|---|---|---|---|
| Simulated dataset | ||||
| QC | 68.8 | 89.5 | 92.7 | 95.6 |
| CA | 34.0 | 76.6 | 95.0 | 85.0 |
| PC | 23.8 | 45.9 | 63.5 | 62.2 |
| PR | 14.9 | 40.7 | 64.4 | 64.7 |
| ER QC | 20.8 | 60.0 | 100.0 | 100.0 |
| Method | Correct (✓and ✓*) | Applicable Total | Accuracy |
|---|---|---|---|
| Structured 30-day | 20 | 44 | 45.5% |
| Structured 7-day | 16 | 41 | 39.0% |
| Structured 1-day | 22 | 34 | 64.7% |
| Timelined 30-day | 25 | 44 | 56.8% |
| Agent 30-day | 34 | 44 | 77.3% |
| ID | 30-day | 7-day | 1-day | Timelined | Agent | Reasoning Path |
|---|---|---|---|---|---|---|
| pm_0 | RC; UA | RC; UA | ✓ | RC; UA | ✓ | QC |
| pm_1 | ✓ | ✓ | ✓ | ✓ | ✓ | QC |
| pm_2 | ✓ | ✓ | ✓ | ✓* | ✓ | QC |
| pm_3 | TM; UA | TM: UA | ✓ | ✓ | ✓ | QC TR |
| pm_4 | RC; UA | ✓ | ✓ | ✓* | ✓ | QC |
| pm_5 | RC; UA | ✓ | ✓ | RC; UA | ✓ | QC |
| Malfunction | Description | Simulated Fault Pattern | Failure Mode | ad_IDs |
|---|---|---|---|---|
| Miscalibration | Incorrect calibration during BG fluctuations; infrequent calibration; low-value calibration during unstable diffusion. | Positive/negative bias in BG readings | Positive/negative biased readings | 53 |
| Pressure-induced sensor attenuation | Pressure during sleep or tight clothing causing signal drop. | Sudden negative BG drop | Negative spike readings | 54 |
| Unphysiological motion-induced spikes | Transient spikes exceeding physiological thresholds due to motion. | Positive/negative spikes during activity | Positive/negative spike readings | 55 |
| Loss of sensitivity to glucose | Improper insertion, dislocation, or signal averaging along sensor. | (1) Zero readings; (2) Flat readings with noise; (3) Spikes | Zero / repeated / spike readings | 8, 56 |
| Lowered local glucose concentration | Bleeding, foreign-body response, diffusion restriction. | Average BG decreased by 32 mg/dL | Decreased average BG level | 57 |
| Communication loss | Wireless shielding or excessive distance. | Missing BG readings | Missing signal | 43 |
| Attack Type | Description | Simulated Fault Pattern | Failure Mode | ad_IDs |
|---|---|---|---|---|
| Availability attack (DoS, jamming, ransomware) | System overload halts insulin delivery or data transmission. | Missing CGM readings; insulin rate forced to 0 | Missing signal | 43 |
| Process-aware attack | Altering sensory or controller logic using process knowledge. | False meal event | False meal | 44 |
| Replay attack | Replaying insulin requests or meal events. | Repeated bolus; repeated BG episode | False bolus / repeated episode | 45 |
| Personalised insulin dose manipulation | Targeted overdosing/underdosing that avoids detection. | (1) Increased basal during exercise; (2) Bolus during activity | Overdelivery / false bolus | 46 |
| Bias injection attack | Injecting constant bias into sensor signals. | BG ±32 mg/dL for random interval | Positive/negative biased readings | 47 |
| Unauthorized remote control | Unauthorized alteration of pump settings. | Bias/max/min basal rates; false bolus | Biased/max/min basal | 48 |
| Metric | Real-World Data | Simulated (Regular) | Simulated (Fault-Injected) |
|---|---|---|---|
| Number of data points | 13,565.7 (9,843.3) | 17,280.0 (0.0) | 8,550.0 (0.0) |
| [7,411.0, 32,294.0] | [17,280.0, 17,280.0] | [8,550.0, 8,550.0] | |
| Average glucose (mg/dL) | 155.5 (23.7) | 121.5 (14.0) | 132.8 (21.0) |
| [132.2, 198.1] | [82.9, 146.1] | [115.2, 189.9] | |
| Glucose management indicator | 7.03 (0.57) | 6.22 (0.34) | 6.49 (0.50) |
| [6.47, 8.05] | [5.29, 6.80] | [6.07, 7.85] |
| Key / Field | Sub-Key | Data Type & Internal Structure | Concrete Runtime Example |
|---|---|---|---|
| patient_id | — | string | "Patient_1" |
| input_context — Longitudinal Physiological, Therapeutic, and Behavioral Context Logs | |||
| input_context | bg_mgdl | list[float] (CGM readings every 5 min in mg/dL) | [110.7, 112.1, 113.9] |
| carb_events | list[dict] {time: float (min), day: int, time_str: string, carbs: float (g), meal_type: string} | [{"time": 363.64, "day": 1, "time_str": "06:03", "carbs": 74.2, "meal_type": "breakfast"}] | |
| cycling_events | list[dict] {time: float (min), day: int, time_str: string, duration: float (min), magnitude: float (W), exercise_type: string} | [{"time": 16871.52, "day": 12, "time_str": "17:11", "duration": 37.37, "magnitude": 78.9, "exercise_type": "cycling"}] | |
| insulin_events | list (mU/min) or list[dict] {time: float (min), day: int, time_str: string, dosage: float (mU/min), insulin_type: string} | [55.1, 57.6, 60.7] or [{"time": 25415, "day": 18, "time_str": "15:35", "dosage": 44.2, "insulin_type": "basal_insulin"}] | |
Clinical Language Model Evaluation
Clinical language model evaluation measures whether AI systems are accurate, safe, fair, and useful across medical tasks and care settings.
See all 419 papers