Intelligence-Based Medicine
Evaluation Design, Class Imbalance, and Cross-Dataset Generalisation in Voice-Based Parkinson's Disease Detection: A Reproducibility Report
By Bhekisipho Twala.
Abstract
Voice is among the most studied non-invasive signals for Parkinson's disease detection, with reported accuracies frequently above 90 per cent. How much of that survives honest evaluation? On the two standard public datasets — Oxford Parkinson's Disease Detection and Sakar — I benchmark three classifiers under leakage-free, participant-level cross-validation, then test transfer between them across the sixteen acoustic measures their feature sets share. Within datasets, accuracy ranged from the high-70s to the mid-80s per cent and the area under the ROC curve from 0.74 to 0.85. Specificity trailed accuracy badly on both; class weighting helped little. Scoring the Oxford data by recording rather than participant inflated accuracy by 2.2 to 11.1 percentage points and the area under the curve by up to 0.169. Transfer was strongly asymmetric: models trained on the larger dataset reached an area under the curve of 0.90 on the smaller; in the reverse direction, at most 0.71. One transferred model matched majority-class accuracy exactly while assigning every participant to the Parkinson's class. A feature-level analysis traces this to measurement, not biology. Fifteen of the sixteen shared measures agree in the direction of their association with diagnosis. However, pitch period entropy — the strongest single discriminator in Oxford — reverses sign between corpora whose implementations occupy almost disjoint ranges. A subgroup analysis by recorded sex on Sakar found specificity gaps of up to 41.7 percentage points between groups whose overall accuracies differed by less than one point. I also document a discrepancy in the Oxford dataset description: the distributed file contains 32 participant identifiers, not the 31 reported. Voice-based performance is real but conditional—on how data are split, whose voices are measured, and which feature implementation is used. Every value here is regenerable from the released code.



