STANDARD OF TASTE

THE LAB

The measurement layer, with the lid off.

Most products show you a score and hide the machine. This page is the machine. Every number the gym computes is defined here — the formula, who owns it, what good would look like, and the caveat that has to travel with it. Where a number has no defensible target yet, it says so instead of inventing one.

SIMULATEDREALMIXEDMEASURED

Every panel that shows data carries one of these badges. Right now the instrument has never been fielded, so no real cohort exists and nothing here is a percentile. Numbers generated from a known model to validate the pipeline are labelled SIMULATED wherever they appear. When real responses arrive they flow through the identical pipeline — the only thing that changes is the badge. Figures taken off the audio files themselves, which involve nobody, are labelled MEASURED.

Panels

Metric dictionary

24 METRICS · 3 OWNERS

Every number this product computes, with its formula, owner, acceptance band, and the caveat that travels with it.

▸ HAS AN ACCEPTANCE TARGET · — NO DEFENSIBLE TARGET YET

INSTRUMENT

Sway (drift-corrected)

sway_pct

How far ratings moved toward the shown label between the blind and labeled passes, as a share of the rating scale. Positive = swayed by the label; negative = resisted it.

pct = round((adjusted mean shift / scale span) · 100), adjusted = raw − d̄·(nUp−nDown)/n
Target
none defensible yet
Unit
percent
Computed in
src/engine/bias.ts

Not a percentile. Understates the true effect: re-rating anchors people on their first answer, and the scale ceiling truncates upward movement.

Sway (uncorrected)

sway_raw_pct

The same shift before the control-drift correction is applied. Shown beside the corrected figure so the correction is never invisible.

rawPct = round((mean shift toward label / scale span) · 100)
Target
none defensible yet
Unit
percent
Computed in
src/engine/bias.ts

Control drift

control_drift_pts

How much a respondent's ratings move on the second pass for clips that carry NO label — the baseline for memory, familiarity, and regression.

d̄ = mean(second pass − first pass) over control items
Target
none defensible yet
Unit
points
Computed in
src/engine/bias.ts

Biased toward zero by the scale ceiling: control ratings sitting at the maximum can only fall, so the correction it feeds is systematically too small.

Sway share

sway_share

Of the clips that had room to move toward their label, the share that actually did. The one sway statistic the scale-edge artifact cannot touch.

share = (items moved toward label) / (items with headroom > 0)
Target
none defensible yet
Unit
proportion
Computed in
src/engine/bias.ts

Degrees used

degrees_used

How many distinct points of the rating scale a listener actually landed on during the blind pass — Hume's comparison criterion, which holds that degrees of praise can only be assigned by someone who has weighed works against each other.

degreesUsed = |{ blind rating : every clip rated, controls included }|
Target
none defensible yet
Unit
count
Computed in
src/engine/comparison.ts

Bounded by the number of clips as well as by the scale, and a narrow spread may simply be the correct answer if the clips really are close in quality. The instrument cannot tell those two cases apart. Read it against the indifferent-rater figure, never against the ceiling.

Degrees an indifferent rater would use

degrees_if_indifferent

How many distinct scale points somebody rating every clip at random would be expected to land on. The reference point for the degrees-used count, because the top of the scale is reachable by accident.

D · (1 − ((D−1)/D)^n) for n clips on a D-point scale
Target
none defensible yet
Unit
count
Computed in
src/engine/comparison.ts

Arithmetic, not a norm. It is what chance produces, not what anybody scored — there is no cohort and this is not a percentile.

Rating span

rating_span

The distance between the highest and lowest blind rating, in points of the rating scale.

span = max(blind) − min(blind)
Target
none defensible yet
Unit
points
Computed in
src/engine/comparison.ts

Order reversals

order_reversals

Pairs of clips a listener ordered one way blind and the opposite way on the labelled pass, counted only where the shown labels push both clips the same direction and so offer no differential reason to change one's mind.

reversed / asserted, over pairs with equal label direction (or both controls) separated by at least the assertion floor blind
Target
none defensible yet
Unit
proportion
Computed in
src/engine/comparison.ts

Two labels pushing the same way need not push equally hard, so this removes the first-order reason for a reversal rather than every reason. Pairs that became equal stay in the denominator and can never be reversals, which biases the figure toward calling a listener steady. Null when no pair was separated far enough to count.

Delicacy accuracy

delicacy_accuracy

Share of trials where the respondent correctly identified which of two clips was the unmodified original.

accuracy = (correct side picks) / (trials)
Target
above 0.50 chance
Unit
proportion
Computed in
src/engine/delicacy.ts

Two-alternative forced choice: 50% is a coin flip, not a middling score.

Flaw-identification accuracy

flaw_accuracy

Share of correctly-identified trials where the respondent also named the right degradation family.

accuracy = (correct flaw picks) / (trials where the side pick was correct)
Target
above 0.33 chance
Unit
proportion
Computed in
src/engine/delicacy.ts

Scored only on trials where the side pick was right — judging the flaw in the wrong file is unscoreable, not wrong.

Your spread across works the critic separated

spread_far_pairs

The average distance between your two ratings, across pairs of works a published critic placed at least ten positions apart in his own ranking.

mean |rating(a) − rating(b)| over pairs with |Δposition| ≥ 10
Target
none defensible yet
Unit
points
Computed in
src/engine/spread.ts

Read it beside the close-pairs figure and beside the indifferent-rater figure; alone it says nothing. It measures whether your ratings moved, never whether they moved the same way the critic's did — agreement is not scored and cannot be computed from what this instrument stores. Three further limits travel with it: a forty-second excerpt cannot carry a critic's verdict on a work up to forty minutes long, so the clip is longer than this product's others and that is a mitigation rather than a fix; clips the listener says they already knew are removed on their word alone, unverified; and the difference between the two figures is never reported, because four pairs against four drawn from clips that appear in several pairs each, with nobody having sat the instrument twice, leaves no measured wobble against which a difference could be called real.

Your spread across works the critic bracketed together

spread_close_pairs

The average distance between your two ratings, across pairs of works the same critic placed within three positions of each other.

mean |rating(a) − rating(b)| over pairs with |Δposition| ≤ 3
Target
none defensible yet
Unit
points
Computed in
src/engine/spread.ts

The recordings in this pool differ in where their spectrum ends by 10,002 Hz, for reasons no ranking caused — one source is a 128 kbps mp3 that stops at 8,624 Hz. Measured, that difference is larger across these pairs (6,498 Hz mean) than across the separated ones (3,758 Hz), so the confound works against finding a difference rather than for it. It cannot be removed without destroying the recordings; its direction is guarded instead.

What an indifferent rater would produce

spread_if_indifferent

The average distance between two ratings chosen at random on this scale. Chance does not know which works a critic separated, so it produces this same figure on both kinds of pair — which is what makes it the reference point for both.

(D² − 1) / (3D) for a D-point scale
Target
none defensible yet
Unit
points
Computed in
src/engine/spread.ts

Arithmetic, not a norm. It is what chance produces, not what anybody scored — there is no cohort and this is not a percentile.

Sensitivity threshold

sensitivity_threshold

The smallest amount of one kind of damage a listener still reliably detects, in that damage's own physical unit — cents of peak detune, milliseconds of drift, or kbps. Fitted from every answer in the session rather than averaged from the levels the staircase happened to visit.

the magnitude at which the fitted psychometric curve crosses the target detection rate, from all (magnitude, correct) observations in the run — reported in cents, milliseconds or kbps depending on the family
Target
none defensible yet
Unit
physical
Computed in
src/engine/threshold-fit.ts

A fact about one person on one sitting, not a statistic describing the instrument, and not comparable across families because the units differ. Most sittings report a BAND rather than a single number, because a point estimate from a noisy measurement is a claim the measurement cannot support. The estimator that averaged reversal levels was retired for printing a 95% interval that covered the truth 49-72% of the time; this one was measured at 94-100%, and 94-98% even when the psychometric model is wrong.

Brier score

brier

Mean squared error between claimed confidence and what actually happened. Lower is better; it rewards knowing how right you are.

brier = mean((claimed probability − outcome)²)
Target
below 0.25 (the always-guess-50% anchor)
Unit
proportion
Computed in
src/engine/calibration.ts

Misleads alone: a perfectly accurate respondent who always claims 50% scores the same 0.25 as someone guessing. Always pair it with the confidence gap.

Confidence gap

calibration_gap_pts

Mean claimed confidence minus actual accuracy. Positive = claiming more than delivered.

gap = mean(confidence) − accuracy, both in percentage points
Target
within ±10 points
Unit
points
Computed in
src/engine/calibration.ts

The ±10 threshold is provisional judgment, not data. At session length the gap's standard error can exceed the threshold itself.

PSYCHOMETRICS

Item difficulty (p)

item_p_value

Proportion of respondents who answered the item correctly. Higher means EASIER — the field's unfortunate convention, kept because the acceptance band is written in it.

p = (number correct) / (number who answered)
Target
0.55 – 0.85
Unit
proportion
Computed in
src/analytics/estimate.ts

Population-dependent: the same item is 'easier' in an abler cohort. Not an intrinsic property of the item.

Item discrimination (corrected r-pbis)

item_discrimination

How well an item separates strong respondents from weak ones — the correlation between getting this item right and scoring well on everything else.

r = corr(item score, total score EXCLUDING this item)
Target
≥ 0.2
Unit
correlation
Computed in
src/analytics/estimate.ts

Undefined (not zero) when everyone answers alike. Attenuated at extreme difficulty, which caps how well it can track true discrimination.

Reliability (Cronbach's α / KR-20)

alpha

How consistently the trials measure the same underlying ability. Low α means an individual score is mostly noise.

α = k/(k−1) · (1 − Σp·q / Var(total))
Target
≥ 0.70 (conventional floor)
Unit
proportion
Computed in
src/analytics/estimate.ts

The live 18-trial delicacy pool measures α ≈ 0.49 under simulation — below the 0.70 floor. Spearman-Brown puts that floor near 44 trials; two-alternative trials throw away information that no scoring cleverness recovers.

Split-half reliability

split_half

Reliability estimated by correlating two halves of the test and correcting for the halving.

r_sb = 2r / (1 + r), halves split odd/even
Target
≥ 0.70 (conventional floor)
Unit
proportion
Computed in
src/analytics/estimate.ts

Odd/even is ONE arbitrary split; a different split gives a different number.

Item-difficulty recovery error

item_p_rmse

Root mean squared error between estimated item difficulty and the known difficulty that generated the data. The headline evidence that the estimator works.

rmse = √mean((estimated p − true p)²)
Target
shrinks toward 0 as sample size grows
Unit
proportion
Computed in
src/analytics/recovery.ts

Computable only against simulated data, where the truth is known by construction.

Ability recovery correlation

theta_recovery_r

Correlation between a respondent's score and their true underlying ability. Capped by reliability — it cannot reach 1 on a test of finite length.

r = corr(proportion correct, true θ)
Target
approaches √reliability
Unit
correlation
Computed in
src/analytics/recovery.ts

Improves with TEST LENGTH, not with sample size.

Sway attenuation bias

mean_beta_bias

How far the cohort's mean measured sway sits below the true mean susceptibility. Systematic, not noise — recruiting more respondents does not reduce it.

bias = mean(estimated sway) − mean(true β), averaged over replications
Target
0 (currently ≈ −0.065)
Unit
points
Computed in
src/analytics/recovery.ts

Magnitude depends on assumed model parameters and must not be quoted as a measured property of real listeners.

OPS

Completed sessions

sessions_completed

Sessions that reached the result screen. The denominator under every cohort statistic.

count(bias_result events), excluding ?ref=dev traffic
Target
≥ 300 for defensible provisional norms; ≥ 100 for meaningful charts
Unit
count
Computed in
scripts/analysis/kpi-status.mjs

Currently 0 — the instrument has never been fielded.

Not built yet

Listed rather than mocked up. An empty panel is not a panel — and a date is not a reason, so each of these says what is actually in the way.

  • Calibration & bias distributions

    Brier scores, over- and under-confidence, and the distribution of prestige sway across respondents.

    A distribution is a fact about a group of people, and no group has been through this yet. Simulating one would draw the model we assumed rather than anything measured — a shape with no information in it, wearing the badge of a finding.

  • Funnel & cohorts

    Entry through completion by channel, and what each cohort did after arriving.

    A funnel is a set of ratios, and a ratio needs a denominator. This one has none: nobody has been through the instrument, so every rate it could print would be zero divided by zero. What it would measure, and how much traffic each step would need before its rate could be published at all, is specified below.

The funnel, specified

The panel above is not built, so here is what it would be. Every step names the event it would be counted from, and each description is the one the code's own event registry carries — not a second copy written here, which would be free to drift from what actually fires.

  1. 01Arriveslanding_viewthe homepage mounts

    Not a denominator. A shared link opens the instrument directly, so someone can reach the next step without ever passing through this one — which means this ratio can exceed one. The descent proper begins below it.

  2. 02Reaches the instrumentbias_frame_viewthe Hume frame is shown on /bias
  3. 03Begins ratingbias_startthe blind pass begins
  4. 04Finishes the blind passbias_blind_completethe final blind rating is given and the pass ends
  5. 05Finishes the labelled passbias_labeled_completethe final labelled rating is given; the verdict is computed
  6. 06Gets a verdictbias_resultthe verdict is computed — the interim D6 record, carrying the raw ratings
  7. 07Reads the debriefbias_debrief_viewthe mandatory debrief is shown, disclosing the swapped labels
  8. 08Shares itbias_sharethe share control is used on the reveal

WHAT IT WOULD TAKE

A step's rate cannot be published until it can be estimated. At the worst case for a proportion — a rate near half, where the uncertainty is largest — one step needs 385 sessions reaching it before its rate is known to within five percentage points, and 97 to within ten. Those are requirements per step, not for the funnel: the last step is the expensive one.

How many arrivals it takes to put 385 people at the bottom depends on the pass-through between steps, which has never been measured here — so this page does not estimate it. No panel on this page carries a REAL badge.

THE ESTIMATOR, DEMONSTRATED

SIMULATED

The panel is absent because there is no traffic. The ANALYSIS is not absent, and this shows it working. 4,000 synthetic arrivals were pushed through the steps below 200 times, each step keeping people at a rate chosen in advance. The estimator then read those rates back off the counts, knowing nothing about how they were made.

The pass-through rates in the first column are inventions. They are not this product's rates, they are not anybody's rates, and nothing here should be read as an estimate of what real visitors would do. They are the answer key: the point is whether the estimator finds them.

StepTrue rateRecoveredError95% interval covered it
landing_view90.0%90.0%+0.02 pts94.5%
bias_frame_view50.0%50.0%+0.04 pts95.0%
bias_start75.0%74.9%-0.06 pts96.5%
bias_blind_complete60.0%59.9%-0.13 pts95.0%
bias_labeled_complete55.0%54.9%-0.07 pts93.5%
bias_result45.0%45.2%+0.16 pts93.5%
bias_debrief_view70.0%69.9%-0.11 pts91.5%
bias_share65.0%64.6%-0.37 pts92.5%

What the last column is for. A rate without an interval is decoration, and an interval that does not contain the truth as often as it claims is worse than none. A 95% interval should contain the answer key about 95 times in 100, and that column is the measurement of whether it does.

Read it down the column, not across. Coverage sits on 95 at the top and slips a point or two at the bottom, and that is the most useful thing on this page. Each step's denominator is the step above it, so a run that starts with 4,000 arrivals has a few hundred left by the debrief — and an interval built on a few hundred is doing worse than one built on thousands, exactly where a funnel is most often quoted. That is the arithmetic reason this panel is not built, shown rather than asserted.

The same code is what would run the day traffic arrives; it is exercised on the real event names above. Everything it cannot do without respondents — say what any of these rates IS — it still cannot do, and this page will go on saying so.

Methodology · The Prestige Test · The Delicacy Trials · The Threshold Test · The Ranking Test