Skip to main content
Jonathan Andrei
Retour aux billets
Août 202611 min de lecture

Assay : un tracker soin de la peau avec une barre d'erreur. Recadrer la même photo déplace la texture de 5,81 points, alors un verdict ne s'affiche que si le changement dépasse ce plancher sur votre visage.

La mesure existe : l'API YouCam Skin Analysis note seize résultats de peau depuis une photographie, et c'est un vrai bon instrument (entrée octet-identique donne sortie octet-identique). Le problème est qu'un score rapporté sans son erreur est un nombre avec lequel on ne peut pas prendre de décision. Sur mon propre visage avec une variable changée à la fois, la luminosité ±8 % déplace les boutons de 4,85 points et recadrer la même photo différemment déplace la texture de 5,81. Un effet de traitement réaliste sur quatre semaines est d'environ cinq. Assay mesure sa propre erreur d'abord, puis n'appelle un changement réel que quand il dépasse ce plancher.

YouCamHackathonYouCam Skin Analysis APIPerfect CorpSEMMDC95n-of-1Next.jsTypeScript
J'ai créé ce billet et le projet Assay pour le YouCam API Skin AI & Apparel VTO Hackathon. #YouCamHackathon
La revendication en une phrase : la femme moyenne dépense environ 170 $ par an à chercher un soin qui lui convient et garde encore quatre produits qui n'ont pas marché, parce qu'un score rapporté sans sa barre d'erreur ne suffit pas à décider quoi que ce soit. Sur le même visage, recadrer la photo différemment déplace la texture de 5,81 points ; un effet de traitement réaliste sur quatre semaines est d'environ cinq. Assay mesure combien la lecture bouge quand votre peau n'a pas changé, puis exige que tout changement revendiqué dépasse cette barre avant de dire quoi que ce soit.
Page d'accueil d'Assay en blanc cassé chaud : « Four of the products on your shelf are doing nothing. Assay tells you which. » Sous-titre : « Most skin trackers report your lighting as progress. Assay measures its own error first, then calls a change real only when it beats that margin on your face, on your device. » Quatre statistiques en dessous : 170 $ dépensés par an, 4 produits ratés gardés, 1 femme sur 9 a testé dix produits ou plus qui n'ont pas marché, 1 milliard £ de soins abandonnés chaque année au Royaume-Uni seul.
Tout l'argument en une page. Chiffres d'une enquête AmLactin/OnePoll auprès de 2 000 personnes (fév. 2022) et d'une enquête Body Shop / Professional Beauty auprès de 2 000 personnes, toutes deux citées dans le texte. Tout ce qui suit, c'est cette revendication, rendue honnête.

L'instrument est bon. Le nombre affiché n'est pas le nombre mesuré.

L'API YouCam Skin Analysis est un vrai bon instrument. Assay l'a vérifié : trois analyses d'une entrée octet-identique renvoient une sortie octet-identique, écart-type 0,000 sur chaque attribut. Le bruit du modèle est zéro. C'est ce qui légitime tout le reste que fait l'app : chaque point d'écart entre deux images vient de la variation de capture, pas du modèle qui change d'avis. Le problème n'est pas la mesure. C'est que la doc de Perfect Corp décrit ouvertement le score affiché comme « un motivateur psychologique », ajusté à la hausse par rapport à la mesure sous-jacente parce que « les consommateurs préfèrent généralement les évaluations positives concernant la santé de leur peau ». L'écart le plus large que j'ai vu sur mon propre visage était sur l'hydratation, la préoccupation qu'un produit hydratant est censé bouger. Assay calcule tout sur la mesure et jamais sur le motivateur.

Tableau de calibration montrant « Sur une peau qui n'a pas changé, un tracker normal se serait trompé 10 fois sur 12 ». En-têtes : préoccupation, sessions, différence, ce qu'un tracker dit. Lignes : rougeur -4,18 (changé), rougeur +17,04 (changé), pores -0,18 (pas de changement), pores +1,68 (changé), texture +1,36 (changé), etc. Même visage, 15 minutes, rien appliqué.
Même visage, quinze minutes d'écart, rien appliqué entre les prises. Un tracker normal aurait appelé dix changements sur douze réels. La calibration d'Assay mesure exactement ça pour pouvoir refuser d'en appeler aucun.

Les maths, en deux lignes

Deux quantités standard de la science de la mesure clinique font le travail. SEM est l'écart-type poolé à travers les captures répliquées. MDC95 = 1,96 × √2 × SEM est le changement minimum qu'on peut distinguer du bruit de mesure à 95 % de confiance ; le √2 est là parce que deux mesures sont comparées et chacune porte sa propre erreur. En dessous de ce seuil, la réponse honnête n'est pas zéro et n'est pas une petite amélioration. C'est « impossible de conclure pour l'instant », et Assay le dit, avec le nombre de sessions supplémentaires requises. Six verdicts en sortent : Fonctionne (dépasse le plancher et la tendance concorde), Empire (dépasse le plancher dans le mauvais sens, rapporté tôt parce qu'une réaction indésirable apparaît vite), Poussée attendue (pire mais dans la fenêtre qu'un rétinoïde ou BHA est connu pour traverser), Ne fonctionne pas (plat, passé le point où cet ingrédient aurait dû faire quelque chose, un résultat nul pas précoce), Pas encore d'évidence (plat mais l'étude ne peut pas encore résoudre un effet de cette taille), et Impossible à mesurer (la préoccupation est plafonnée en bout d'échelle).

Carte de verdict d'Assay pour l'étude livrée. Texture : changement -7,5, plancher de bruit ±3,1, verdict « Empire ». Le graphique en barres montre que le changement dépasse le plancher, dans le mauvais sens. Copie : « La texture a bougé de 7,5 points dans le mauvais sens, au-delà du plancher de bruit de 3,1 points. C'est hors de la fenêtre où ce produit est censé causer une irritation temporaire. Vaut la peine d'arrêter et de reconsidérer. » En dessous : carte Boutons avec changement -6,9, plancher ±6,4, verdict « Empire ».
Chaque carte de verdict porte le changement et le plancher ensemble. Deux nombres, et le verdict en découle. Pas d'adjectif sans une borne.

Où le plancher de bruit est mesuré, et la limite que je déclare d'entrée

Les images prises à quelques secondes d'intervalle sans toucher la caméra capturent le bruit de capteur et de pose, et rien d'autre. Elles ne peuvent pas voir l'erreur ajoutée en remontant la caméra demain, que l'expérience de recadrage ci-dessus montre être la plus grande erreur qui existe. Donc la calibration est plusieurs sessions séparées dans le temps plutôt que plusieurs images séparées de secondes ; la peau ne peut pas changer en vingt minutes, donc l'écart entre ces moyennes de session est de l'erreur de mesure pure et non de la biologie. Une chose à être clair là-dessus, parce que c'est la limite du nombre : les trois sessions de calibration dans l'étude livrée sont échantillonnées à 120s, 520s et 900s d'un seul enregistrement continu. Ça capture le pose, la distance et le drift d'expression qui s'accumulent entre séances, mais pas l'erreur de démonter physiquement la caméra et de la remettre. Le plancher qu'il donne est donc une borne inférieure de la vraie erreur inter-session, et la conséquence honnête va contre le projet : un plancher sous-estimé fait déclencher les verdicts plus facilement qu'ils ne devraient, pas moins. `src/data/study.json` l'enregistre sur le bloc de calibration lui-même, et l'app prend le plus grand entre l'erreur inter-session et l'erreur inter-image, jamais le plus petit, ce qui empêche cette borne de s'effondrer davantage.

Capture en direct dans le navigateur : visage aligné avec une superposition MediaPipe face-mesh pour un cadrage cohérent, pipeline de capture normalisant chaque image aux mêmes dimensions et à la même qualité JPEG avant l'envoi, pour qu'au moins ces deux sources d'erreur soient tenues constantes entre les sessions.
Le recadrage a déplacé la texture de 5,81 et la qualité JPEG a déplacé les boutons de 2,91, donc le pipeline de capture les tient tous les deux constants avant que quoi que ce soit ne parte à l'API. Si on ne peut pas contrôler une erreur, au moins ne pas l'ajouter.
Budget d'erreur par source : la qualité JPEG q80 à q96 déplace les boutons de 2,91, l'hydratation de 0,35, la texture de 0,12, les pores de 2,55. La luminosité ±8 % déplace les boutons de 4,85, l'hydratation de 3,87, la texture de 1,96, les pores de 1,52. Le modèle (octets identiques) est à 0,00 sur chaque attribut. Mouvement de score en points, par source de variation, plus grand est pire.
Le budget d'erreur, décomposé par cause. Parce que le bruit du modèle est zéro, chaque point de l'écart restant a un nom : JPEG, luminosité, ou pose. Assay contrôle les deux premiers et calibre contre le troisième.
Projet associé

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.

Voir le projet