BCINexus · Reading studies

Understanding metrics

Every number a study can report, what it measures, and which way is good. Accuracy going up is good; an error going up is bad; a few numbers are only good when they sit at chance.

Three ways a number can be good

Before reading any score, check which kind it is. Every metric on this page carries one of these tags, and so do the study tables in BCILattice.

TagMeansExamples
Higher is betterThe bigger the number, the better the model.Accuracy, kappa, ROC AUC, R², ITR
Lower is betterThe number is an error or a cost; zero is perfect.MAE, RMSE, log loss, false activations, p
Read against a referenceNeither direction is good. Compare it with a stated reference, usually chance.Domain discriminator accuracy, teacher accuracy
Context, not a scoreDescribes the data or the test, not the model’s quality.n, SD, df, decisions per minute
Accuracy, two balanced classesHigher is better
0%25%50%70%100%chance70% BCI bar
At or below chanceAbove chance, weakUsable
70% is the threshold the BCI literature commonly uses for a decoder someone could communicate with. It is a convention, not a law; what counts is how far above chance a result sits and how much it varies across participants.

The four ranges

Metrics only share a chart axis when they share a range, which is why a study’s charts are split into panels.

RangeAxis labelExamples
0 – 1Score (0–1)Accuracy, F1, precision, recall, ROC AUC
−1 – 1Coefficient (−1–1)Cohen's kappa, MCC, Pearson r, R² (which can go lower)
0 – ∞Loss / errorLog loss, MAE, MSE, RMSE, training loss
1, 2, 3 …CountMedian rank, effective rank

Classification

Used when the model picks a class: left hand vs right hand, target vs non-target. A study reports one of three sets. Minimal is accuracy alone. Standard, the default, adds balanced accuracy, F1, precision, recall and Cohen’s kappa. Full adds the rest of the table below.

MetricBetterRangeChance / goodWhat it tells you
AccuracyHigher0 – 1Chance = 1 / number of classesShare of trials predicted correctly. Overstates a model when one class is much more common than the others.
Balanced accuracyHigher0 – 1Chance = 1 / number of classes, whatever the class balanceAccuracy computed per class, then averaged. Use it instead of accuracy when classes are unbalanced.
F1 (macro)Higher0 – 11 = perfectBalance of precision and recall, each class counted equally. Drops sharply when the model ignores a class.
F1 (micro)Higher0 – 11 = perfectF1 pooled over all trials. For ordinary one-label classification it equals accuracy.
F1 (weighted)Higher0 – 11 = perfectF1 per class, weighted by how many trials each class has.
Precision (macro / weighted)Higher0 – 11 = no false alarmsOf the trials the model called class X, how many really were X.
Recall (macro / weighted)Higher0 – 11 = nothing missedOf the trials that really were class X, how many the model found. Also called sensitivity.
Cohen's kappaHigher−1 – 10 = chance · above 0.6 substantialAgreement with the true labels beyond what chance would give. Corrects for unbalanced classes.
Matthews correlation (MCC)Higher−1 – 10 = chance · 1 = perfectCorrelation between true and predicted labels using every cell of the confusion matrix. Hard to fool with unbalanced classes.
ROC AUCHigher0 – 10.5 = chance · above 0.8 excellentHow well the model ranks the right class above the wrong ones across every threshold. Needs class probabilities.
Log lossLower0 – ∞Guessing evenly scores ln(classes): 0.69 for twoPenalises confident wrong answers. Low means the probabilities are both right and well calibrated. Needs class probabilities.

Chance accuracy: what guessing scores

0%25%50%75%100%2 classes50%3 classes33.3%4 classes25%5 classes20%6 classes16.7%
With balanced classes, a model that guesses scores 1 / k. An accuracy only means something once you know which of these bars it has to clear.
Cohen's kappaHigher is better
-1-0.500.20.40.60.81chance
Worse than chanceSlightFairModerateSubstantialAlmost perfect
Bands from Landis & Koch (1977). Matthews correlation reads on the same −1 to 1 range, with 0 at chance.
ROC AUCHigher is better
00.50.70.80.91chance
Worse than chancePoorAcceptableExcellentOutstanding
Bands from Hosmer & Lemeshow, Applied Logistic Regression.

The pictures beside the numbers

A classification run also shows a confusion matrix, a per-class report, a ROC curve and a precision–recall curve. They are not single numbers, but they explain the numbers.

Confusion matrix (sketch)

Predicted: LeftPredicted: RightTrue: Left

Correct

Left called Left

Mistake

Left called Right

True: Right

Mistake

Right called Left

Correct

Right called Right

A good model puts its counts on the diagonal. Each row is one true class, so a row whose count sits mostly off the diagonal is a class the model cannot recognise, even when the overall accuracy looks fine.

ROC curve (sketch)

False positive rateTrue positive rate

Curve: every threshold the model could use, from strict to lenient.

Shaded area: the AUC. 1.0 is perfect separation.

Dashed diagonal: guessing, AUC 0.5. A curve bowing towards the top-left beats it.

The precision–recall curve reads the same way, with “better” towards the top-right. Its chance line is flat at the share of the positive class, so it is the more honest picture when one class is rare.

Regression

Used when the model predicts a quantity rather than a class: a reaction time, a workload score, a joint angle. Error metrics are in the target’s own units, so they can only be compared between studies that predict the same thing on the same scale.

MetricBetterRangeChance / goodWhat it tells you
R²Higher−∞ – 10 = predicting the mean · 1 = perfectShare of the target’s variance the model explains. Negative means worse than always predicting the average.
Explained varianceHigher−∞ – 11 = perfectLike R², but ignores a constant offset in the predictions.
Pearson rHigher−1 – 10 = no relationshipWhether predictions rise and fall with the truth. Can be high even when every prediction is off by the same amount.
MAELower0 – ∞0 = perfectAverage size of the error, in the target’s own units.
MSELower0 – ∞0 = perfectAverage squared error. Punishes a few large errors much more than many small ones.
RMSELower0 – ∞0 = perfectSquare root of MSE, back in the target’s units.
Median absolute errorLower0 – ∞0 = perfectThe typical error, unaffected by a few outliers.
MAPELower0 – ∞0.10 = off by 10% on averageAverage error as a share of the true value. Rows whose true value is zero are left out.
R²Higher is better
-1-0.500.51mean predictor
Worse than predicting the meanExplains some varianceExplains most variance
R² has no lower limit; the bar is cut at −1 for display.
MAE, MSE, RMSE, median errorLower is better
0perfectmean predictor
Small errorLarger errorAs large as just predicting the mean, or worse
A schematic, not a scale: there is no universal “good” error. Judge it against what predicting the average would score, and against the size of the quantity being predicted.

Multi-label

Used when one trial can carry several labels at once. A study shows subset accuracy, Hamming loss and macro F1 together on purpose: they disagree, and any one of them alone can be made to look good.

MetricBetterRangeChance / goodWhat it tells you
Subset accuracyHigher0 – 11 = every label right on every rowThe harshest reading: a row counts only if all of its labels are exactly right.
Hamming lossLower0 – 10 = no wrong labelsThe most forgiving reading: the share of individual label slots that are wrong.
F1 (macro / micro / weighted)Higher0 – 11 = perfectAs for classification, computed per label. Macro notices a label the model never predicts.
F1 (samples)Higher0 – 11 = perfectF1 computed per row, then averaged over rows.
Jaccard (samples)Higher0 – 11 = predicted set equals true setOverlap of the predicted and true label sets, per row.
Precision / RecallHigher0 – 11 = perfectMacro-averaged over labels.
Per-label F1Higher0 – 1 each1 = perfectOne F1 for each label, so a weak label is visible.
Label ranking average precisionHigher0 – 11 = true labels always ranked firstWhether the true labels get the highest scores. Needs label scores.
Coverage errorLower1 – labelsBest = the average number of true labelsHow far down the score ranking you go before every true label is covered.
Label ranking lossLower0 – 10 = perfect orderingShare of label pairs ordered the wrong way round.
ROC AUCHigher0 – 10.5 = chanceMacro-averaged over labels. Needs label scores.

Self-supervised (representation) learning

A self-supervised run has no labels, so it has no accuracy. Its numbers answer two other questions: did the encoder learn anything, and did it collapse to a single point?

MetricBetterRangeChance / goodWhat it tells you
Contrastive lossLower0 – ∞Compare across epochs, not across studiesThe pretext task’s own objective.
View match (top-1)Reference0 – 1Must beat view match chanceHow often an augmented view is matched back to its own pair. At chance the encoder learned nothing.
View match chanceReference0 – 1The floor, not a resultWhat guessing would score on the view-match task.
View match median rankLower1 – ∞1 = the pair always found firstWhere the true pair typically lands in the ranking.
Masked reconstruction MSELower0 – ∞Must beat its mean baselineError when filling in masked parts of the signal, measured on the masked parts only.
Masked reconstruction baselineReference0 – ∞The reference, not a resultWhat predicting each feature’s average would score.
Masked reconstruction gainHighersignedAbove 0 = beats the baselineBaseline error minus model error.
Embedding spreadReference0 – ∞Near 0 = collapsedHow spread out the learned features are. Past a healthy level, larger is not better.
Effective rankHigher1 – dims1 = collapsedHow many directions the embedding actually uses.

Training-method numbers

Some training methods report extra numbers that say whether the method itself worked. They sit next to the ordinary scores, which are the same across methods so runs stay comparable.

Domain adaptation (DANN)

MetricBetterRangeChance / goodWhat it tells you
Target accuracyHigher0 – 1The headline numberAccuracy on the new domain (e.g. a new participant), whose labels were never trained on.
Source accuracyHigher0 – 1—Accuracy on the domain the model was trained on.
Domain discriminator accuracyReference0 – 1Chance is the goalHigh means the two domains are still easy to tell apart. Very low usually means the discriminator never trained, which looks like success but is not.
Domain probe (inputs / features)Reference0 – 1Read against chanceA fresh classifier trying to tell the domains apart, before and after the network. Two separate facts, not a before/after pair.
Domain discriminator accuracy, two domainsRead against a reference
0%50%100%chance (the goal)
Suspiciously low: discriminator may not have trainedNear chance: domains alignedDomains still separable
The width of the green band is illustrative. The point is the shape: the target is the middle, not either end.

Knowledge distillation

MetricBetterRangeChance / goodWhat it tells you
Student accuracyHigher0 – 1The resultAccuracy of the smaller model being trained.
Teacher accuracyReference0 – 1The ceiling, not a resultAccuracy of the model being copied.
Teacher agreementHigher0 – 11 = always agreesHow often the student predicts what the teacher predicts.
Distillation KLLower0 – ∞0 = identical outputsDistance between the student’s and teacher’s probabilities.

Continual learning

MetricBetterRangeChance / goodWhat it tells you
Average accuracy (all tasks)Higher0 – 1—Mean accuracy over every task after training on the last one.
Backward transferHigher−1 – 10 = no forgetting · negative = forgettingHow learning later tasks changed earlier ones.
Forward transferHigher−1 – 1Above 0 = earlier tasks helpedHow earlier tasks helped with later ones.
First / final task accuracyHigher0 – 1—Accuracy on the first and last task in the sequence.
Task drift (MMD)Reference0 – ∞Near 0 = tasks barely differHow different consecutive tasks are. Near zero means there was little to forget.

Multi-task

MetricBetterRangeChance / goodWhat it tells you
Mean task accuracyHigher0 – 1—Accuracy averaged over tasks.
Worst task accuracyHigher0 – 1—The weakest task, shown next to the mean so one strong task cannot hide a weak one.

Real-time (pseudo-online) evaluation

Offline scores are computed on cut-out trials, where the decoder is told when each trial starts. A pseudo-online evaluation slides a window over the continuous recording instead, as a live session would. Its numbers are not comparable to offline accuracy, and studies label them separately.

MetricBetterRangeChance / goodWhat it tells you
Detection rateHigher0 – 11 = every event caughtShare of real events the decoder answered correctly within the tolerance window.
False activations / minLower0 – ∞0 = never fires by mistakeDecisions that match no event. The number that decides whether a BCI is usable; no offline score shows it.
Decision latency (ms)Lower0 – ∞Lower = faster responseMedian time from an event to the decoder’s correct answer.
ITR (bits / min)Higher0 – ∞0 = no better than chanceInformation transfer rate: accuracy, number of choices and speed in one number. The fair way to compare BCIs with different class counts.
Decision accuracyHigher0 – 1Chance = 1 / selectable classesShare of the decoder’s decisions that were right.
Decisions / minContext0 – ∞—How often the decoder made a decision. Context for ITR.

Information per decision (Wolpaw ITR)

00.511.520%25%50%75%100%Decision accuracybits / decision2 classes4 classes
Each curve is zero up to chance (50% for two classes, 25% for four) and rises steeply near 100%. Multiply by decisions per minute to get bits per minute. This is why a 4-class decoder at 70% can carry more information than a 2-class decoder at 85%.

A high accuracy is not enough on its own

A decoder that is 92% accurate offline but fires eleven times a minute at rest is not usable. Read detection rate and false activations per minute together.

Statistics symbols

Group comparisons and validation tables use the short symbols a paper uses. This is the same key the app prints under its tables.

SymbolBetterMeaning
tContextt statistic: the difference divided by its standard error; t(df) shows the degrees of freedom.
FContextF statistic (ANOVA): variation between conditions over variation within them; F(df1, df2) shows the degrees of freedom.
HContextKruskal–Wallis H: a rank-based test of whether several groups differ.
χ²ContextChi-squared statistic (here from the Friedman test on ranks).
UContextMann–Whitney U: a rank-based test of whether two groups differ.
WContextW statistic of the named test (Wilcoxon signed-rank, Shapiro–Wilk or Mauchly).
zContextz-score: how many standard deviations a value lies from the mean.
dfContextDegrees of freedom: how many independent values the test rests on.
pLowerProbability of a difference at least this large if there were no real effect. Smaller is stronger evidence; below α (usually 0.05) counts as significant.
p correctedLowerp adjusted for running many tests at once (Holm, Bonferroni or FDR), so chance hits are not counted as findings.
αContextSignificance threshold: a p below it counts as significant.
dzHigherCohen's dz, the paired effect size: the mean difference divided by the standard deviation of the differences (about 0.2 small, 0.5 medium, 0.8 large).
dHigherCohen's d: the difference between two means in standard-deviation units.
gHigherHedges' g: Cohen's d corrected for small samples.
rHigherCorrelation (or, as rank-biserial r, an effect size), from −1 to 1.
η²HigherEta squared: the share of the variance explained by the factor (partial η² leaves the other factors out).
ε²HigherEpsilon squared: the share of the variance explained, for the rank-based Kruskal–Wallis test.
Kendall's WHigherAgreement of the participants' rankings, from 0 (none) to 1 (complete).
εContextGreenhouse–Geisser epsilon: how far the data depart from sphericity; p is corrected by it.
ICC(3,1)HigherIntraclass correlation, test–retest reliability from 0 to 1 (above 0.75 is usually read as good).
κHigherCohen's kappa: agreement beyond what chance would give.
nContextNumber of independent units the test counts (participants, sessions).
SDContextStandard deviation: how spread out the values are.
SEMContextStandard error of the mean (SD / √n): how precisely the mean is estimated.
CIContextConfidence interval: the range of plausible values for the true mean (a 95% CI misses it in 5% of studies).
p valueLower is better
00.010.050.10.2α = 0.05
Strong evidenceSignificant at α = 0.05Not significant
Axis cut at 0.2 for display; p runs to 1. A small p says an effect is unlikely to be chance, not that it is large. Read it with the effect size.
Effect size: Cohen's d, dz, Hedges' gHigher is better
00.20.50.81.2
NegligibleSmallMediumLarge
Bands from Cohen (1988). The size, not the sign, is what these bands read; a negative value means the difference runs the other way.
ICC(3,1), test–retest reliabilityHigher is better
00.50.750.91
PoorModerateGoodExcellent
Bands from Koo & Li (2016).

Training loss

loss, train_loss and val_loss are lower-is-better, but they measure whatever objective the model was trained with. Compare them across epochs of one model, never between models or studies. A validation loss that climbs while training loss keeps falling is the usual sign of overfitting.

Reading a results table

  • Mean ± SD. A score is usually averaged over participants or folds; SD is how much it varied between them. A 75% ± 15% result means some participants were near chance.
  • Train → test. A condition such as Session 1 → Session 2 means the model was trained on the first and scored on the second. Transfer across sessions or participants is usually lower than within one.
  • Prefixes. train_ is the score on the training data and is never a result. within_ is the same-part check, baseline_ the model before adaptation, adapted_ after it, and transfer_ the unseen part. Each is the same metric read on a different slice of data.
  • Before and after. When a study adapts or fine-tunes a model, it shows both values side by side. The gain between them is the finding.
  • Skipped, not zero. A metric the app could not compute (no probabilities, a single class in the test data) is listed as skipped with the reason, never shown as a number.

The most common way a result is overstated

Accuracy alone on unbalanced classes. If 80% of trials are one class, a model that always guesses that class scores 80%. Check balanced accuracy or kappa before trusting it.

For how studies are checked before publishing, see publish readiness and how review works.

Something missing or out of date? Email support or request a doc page. Include the page name and what you expected to find.