Assay: A Skincare Tracker with an Error Bar. Cropping the Same Photo Moves Texture by 5.81 Points, So a Verdict Only Fires When the Change Beats That Floor on Your Face.
The measurement exists: YouCam's Skin Analysis API scores sixteen skin outputs from a photograph, and it is a genuinely good instrument (byte-identical input gives byte-identical output). The problem is that a score reported without its error is a number you cannot make a decision with. On my own face with one variable changed at a time, brightness ±8% moves blemishes by 4.85 points and cropping the same photograph differently moves texture by 5.81. A realistic four-week treatment effect is about five. Assay measures its own error first, then calls a change real only when it beats that floor.

The instrument is good. The number you are shown is not the number that was measured.
YouCam's Skin Analysis API is a genuinely good instrument. Assay verified it: three analyses of a byte-identical input return byte-identical output, standard deviation 0.000 on every attribute. Model noise is zero. That is what licenses everything else the app does: every point of spread between two frames comes from capture variation, not the model changing its mind. The problem is not the measurement. It is that Perfect Corp's documentation openly describes the displayed score as 'a psychological motivator', adjusted upward from the underlying measurement because 'consumers generally prefer positive evaluations regarding their skin health.' The largest gap I saw on my own face was on moisture, the concern a hydrating product is supposed to move. Assay computes everything on the measurement and never on the motivator.

The maths, in two lines
Two standard quantities from clinical measurement science do the work. SEM is the pooled standard deviation across replicate captures. MDC95 = 1.96 × √2 × SEM is the minimum change you can distinguish from measurement noise at 95% confidence; the √2 is there because two measurements are being compared and each carries its own error. Below that threshold, the honest answer is not zero and it is not a small improvement. It is 'cannot tell yet', and Assay says so, with the number of further sessions required. Six verdicts fall out: Working (clears the floor and the trend agrees), Getting worse (clears the floor in the wrong direction, reported early because an adverse reaction shows up fast), Expected flare (worse but inside the window a retinoid or BHA is known to purge), Not working (flat, past the point where this ingredient should have done something, a null result not an early one), No evidence yet (flat but the study cannot yet resolve an effect this size), and Cannot measure (the concern is pinned against the end of the scale).

Where the noise floor is measured, and the limit I state up front
Frames taken seconds apart without touching the camera capture sensor and pose noise, and nothing else. They cannot see the error you add by setting the camera back up tomorrow, which the crop experiment above shows is the largest error there is. So calibration is several sessions separated in time rather than several frames separated in seconds; skin cannot change in twenty minutes, so the spread across those session means is pure measurement error rather than biology. One thing to be clear about, because it is the limit of the number: the three calibration sessions in the shipped study are sampled at 120s, 520s and 900s of a single continuous recording. That captures the pose, distance and expression drift that accumulates between sittings, but not the error of physically taking the camera down and setting it back up. The floor it yields is therefore a lower bound on the true between-session error, and the honest consequence runs against the project: an underestimated floor makes verdicts fire more readily than they should, not less. `src/data/study.json` records this on the calibration block itself, and the app takes whichever is larger, the between-session error or the frame-level error, never the smaller, which is what keeps this bound from collapsing further.


Assay: A Skincare Tracker with an Error Bar. Cropping the Same Photo Moves the Texture Score by 5.81 Points, So a Verdict Only Fires When the Change Beats That Floor on Your Face.
View the project