Skip to content

Guides

Règles de comparaison

Comparer un candidat à une référence présente le flux de travail. Cette page est la référence des règles qui tranchent une comparaison : quels types existent, ce que chacun demande, dans quelle unité une marge est exprimée, et ce qui déplace l'intervalle sur lequel elles sont lues.

Trois types

Une règle de comparaison nomme un kind et une métrique. Elle ne prend jamais min ni max : une différence ne se déduit pas d'un seuil.

TypeDemandePrend
superiorityLe candidat est-il meilleur que la référence ?aucune marge
non_inferiorityLe candidat n'est-il pas pire que la référence de plus que la marge ?margin, et éventuellement direction
equivalenceLe candidat est-il dans la marge de la référence, dans les deux sens ?margin

Une marge s'exprime dans les unités propres de la métrique. Pour un taux, 0.05 vaut cinq points de pourcentage ; pour un quantile de latence, 5 vaut cinq millisecondes.

version: 1
rules:
  - id: not-worse
    kind: non_inferiority
    metric: exact_label
    margin: 0.05
  - id: same-quality
    kind: equivalence
    metric: exact_label
    margin: 0.05
  - id: better
    kind: superiority
    metric: exact_label
  - id: not-slower
    kind: non_inferiority
    metric: latency_p50
    direction: max
    margin: 5

Les règles de comparaison vivent dans leur propre fichier, passé avec --policy, parce que release.yaml décide d'une exécution unique et qu'une règle de seuil et une règle de comparaison lisent des preuves différentes.

oloproof compare CANDIDATE_RUN_ID BASELINE_RUN_ID --policy compare.yaml

Les mêmes règles face à deux candidats

Deux cents questions étiquetées. La référence en étiquette mal vingt. Chaque candidat ci-dessous a été exécuté sur la même suite et comparé à cette référence avec le fichier ci-dessus.

Un candidat qui se comporte exactement comme la référence :

Comparison sha256:7d2396c475b94028925930d4e52ae070d9a216a4558e22646169db492757c4de of run_01M3C44TVGT0X067W2H0BZ6GC9 against run_01M3C44SWMXMSQJE17SYHV87PW · 200 paired cases
exact_label: +0.0 points [-2.7, +2.7] · 200 paired · 0 missing · 0 excluded
latency_p50: -0.067 ms [-0.113, -0.001] ms · p50 of per-case differences · 200 paired · 0 missing
Decisions
  not-worse  exact_label  non-inferiority, margin 5.0 points  PASS  lower_bound_above_margin
  same-quality  exact_label  equivalence, margin ±5.0 points  PASS  interval_within_margins
  better  exact_label  superiority  INSUFFICIENT_EVIDENCE  interval_overlaps_zero
  not-slower  latency_p50  maximum increase 5 ms  PASS  lower_bound_above_margin
Gate: BLOCK (exit 3)

Un candidat qui corrige les vingt :

Comparison sha256:1e36f48662cbbc0af20217a2c69248f90b473bbf0873dc6dd222ccb1895bb33a of run_01M3C44VQ0TFFNW4FRM5Z2D12R against run_01M3C44SWMXMSQJE17SYHV87PW · 200 paired cases
exact_label: +10.0 points [+4.6, +17.9] · 200 paired · 0 missing · 0 excluded
latency_p50: -0.038 ms [-0.089, +0.009] ms · p50 of per-case differences · 200 paired · 0 missing
Decisions
  not-worse  exact_label  non-inferiority, margin 5.0 points  PASS  lower_bound_above_margin
  same-quality  exact_label  equivalence, margin ±5.0 points  INSUFFICIENT_EVIDENCE  interval_overlaps_margins
  better  exact_label  superiority  PASS  difference_above_zero
  not-slower  latency_p50  maximum increase 5 ms  PASS  lower_bound_above_margin
Gate: BLOCK (exit 3)

Lisez les deux gates ensemble. Tous deux bloquent, pour des raisons opposées. Le premier candidat est établi comme équivalent et non établi comme meilleur ; le second est établi comme meilleur et, par conséquent, non établi comme équivalent. Une politique qui applique les trois types à une même métrique pose deux questions incompatibles, et l'une d'elles restera toujours sans réponse. Choisissez la règle qui énonce l'affirmation que vous faites.

Sens

non_inferiority utilise par défaut direction: min : plus haut est meilleur, et la règle demande que le candidat ne descende pas sous la référence de plus que la marge. direction: max s'applique aux métriques pour lesquelles plus bas est meilleur, comme la latence, les tokens ou le coût. La règle se lit alors comme un plafond sur une hausse, et c'est ainsi que le terminal l'affiche : maximum increase 5 ms.

superiority et equivalence ne prennent pas de sens. L'équivalence borne déjà les deux côtés, et la supériorité demande si la différence est au-dessus de zéro au sens propre de la métrique.

Ce qui déplace l'intervalle

Une comparaison est appariée : le résultat du candidat pour chaque cas est confronté au résultat de la référence pour ce même cas. Deux choses élargissent l'intervalle obtenu, et aucune n'est la modification que vous avez faite.

Cas manquants d'un côté ou de l'autre

Un cas qui a échoué en erreur dans l'une ou l'autre exécution manque à la paire, et il est borné plutôt qu'écarté : l'intervalle admet que chaque cas manquant ait pu basculer dans un sens comme dans l'autre. Une suite plus petite, avec un critère nommé ok : les quatre mêmes désaccords sur trente-quatre cas appariés, d'abord sans cas manquant, puis avec quatre cas de plus en erreur dans les deux exécutions :

ok: +11.8 points [-7.2, +34.3] · 34 paired · 0 missing · 0 excluded
ok: +11.8 points [-24.8, +44.7] · 34 paired · 4 missing · 0 excluded

L'estimation est la même, car elle est calculée à partir des cas observés des deux côtés. L'intervalle ne l'est pas, car quatre cas que personne n'a vus auraient chacun pu déplacer la différence d'un cas entier. Corrigez les erreurs avant d'ajouter des cas : davantage de cas au même taux d'erreur ne comblent pas l'écart.

Une différence de classement appariée, comme la ROC-AUC entre deux versions d'un modèle, ne peut pas borner ainsi les lignes manquantes : elle compare les lignes que les deux côtés ont notées. Une règle qui porte sur elle donne missingness_unbounded tant qu'elle ne déclare pas max_missing_fraction, la part de lignes manquantes qu'elle accepte comme manquantes au hasard.

La méthode

L'intervalle par défaut pour une différence de taux est un intervalle de moyenne bornée sur les différences par cas. Une politique peut désigner à la place la méthode exacte conditionnelle :

version: 1
difference_method: conditional_exact_paired_difference@1
rules:
  - {id: not-worse, metric: exact_label, kind: non_inferiority, margin: 0.05}

Le candidat ci-dessus, meilleur de dix points, donne [+4.6, +17.9] avec la méthode par défaut et ceci avec la méthode exacte :

exact_label: +10.0 points [+3.5, +15.8] · 200 paired · 0 missing · 0 excluded

Aucune n'est uniformément plus étroite, et c'est pourquoi la méthode est choisie dans la politique, avant la lecture de toute preuve, et jamais par le moteur à partir des données. Elle ne s'applique qu'aux différences de taux.

Quand une règle ne peut pas trancher

Une règle de comparaison en INSUFFICIENT_EVIDENCE peut porter en dessous une ligne indiquant ce qui la trancherait. La comparaison à trente-quatre cas sans rien de manquant :

Decisions
  not-worse  ok  non-inferiority, margin 5.0 points  INSUFFICIENT_EVIDENCE  interval_overlaps_margin
    about 5 more paired cases would decide it, if the difference holds (39 in total at 12% discordance)
Gate: BLOCK (exit 3)

Cette estimation suppose que la différence et la part de cas en désaccord se maintiennent à mesure que des cas s'ajoutent. oloproof plan COMPARISON_ID affiche la même ligne avec le temps que prendraient les cas supplémentaires.

Lorsque des paires manquent, aucune taille n'est proposée, car les paires manquantes sont bornées au pire et davantage de cas ne les résoudraient pas. La même comparaison avec quatre paires manquantes n'affiche aucune ligne de conseil, et le plan explique pourquoi :

oloproof plan COMPARISON_ID
Comparison sha256:22c1aa4fddc4e96ca77e0509ac9835c2a377ed237ca80556bbf1a54a172239bd: no sample size can be computed for a rule that did not decide.
  not-worse: 4 missing pairs are bounded at their worst, and the advice does not size under missingness; resolve them and compare again

Et lorsque la différence elle-même se situe du mauvais côté de la marge, davantage de cas ne feraient que la confirmer ; le conseil le dit alors :

  overall  ok  non-inferiority, margin 5.0 points  INSUFFICIENT_EVIDENCE  interval_overlaps_margin
    no sample size would make this PASS: the difference itself (-5.0 points) is outside the margin, so more cases would move it toward FAIL

Pour aller plus loin

lecture d'un intervalle.

  • Cas groupés couvre les suites dont les cas ne sont pas indépendants, qu'une

comparaison ne tranche pas encore.

  • Segments couvre les règles limitées à une partie de la suite.