Skip to content

ガイド

クラスタ化されたケース

区間の計算の多くは、すべてのケースが他のすべてのケースから独立していることを前提にしています。1 つの会話の 3 つのターンは独立ではありません。会話がうまくいかなくなると、3 つとも失敗しがちです。それらを独立として扱うスイートは、エビデンスが裏付けるよりも狭い区間を報告し、ゲートがそれにもとづいて合格してしまうことがあります。

クラスタを宣言する

ケースは、行のトップレベルで id と並べて group_id を指定することで、自分のクラスタを示します。

{"id": "conv00_t0", "group_id": "conv00", "input": {"question": "Conversation 0 turn 0: refund please (garbled)"}, "expected": {"label": "refund"}}
{"id": "conv00_t1", "group_id": "conv00", "input": {"question": "Conversation 0 turn 1: where is my order (garbled)"}, "expected": {"label": "other"}}
{"id": "conv00_t2", "group_id": "conv00", "input": {"question": "Conversation 0 turn 2: refund please (garbled)"}, "expected": {"label": "refund"}}

いずれかのケースがクラスタを宣言すると、スイート全体がクラスタ単位で分析されます。メトリクスごとに元へ戻すスイッチはありません。グループ化されたケースを独立として扱うのは安全でない方向なので、その選択肢は提供していません。

何が変わるか

36 の会話からなる同じ 108 ターンで、会話の 6 つに 1 つが最初のターンから最後のターンまで文字化けしています。group_id なしの場合:

│ exact_label │ 83.3%    │ [74.9%, 89.9%] │ 90 / 108 observed · 0 missing · 0 excluded │

ありの場合:

│ exact_label │ 83.3%    │ [65.2%, 94.6%] │ 90 / 108 observed · 0 missing · 0 excluded · 36 clusters · approximate │

推定値は同じです。区間はおよそ 2 倍の幅になります。スイートが持つ独立な観測は 108 ではなく 36 だからです。下限 0.70 に対して、後述のオプトインを有効にすると、1 つ目の実行は合格し、2 つ目は合格しません。

label-floor: PASS (lower_bound_meets_minimum)
label-floor: INSUFFICIENT_EVIDENCE (interval_overlaps_threshold)

このデータにとって正しい答えは 2 つ目です。

オプトイン

クラスタ化された区間は、スチューデント化クラスタブートストラップです。これは近似的な手法であり、ルールがそれにもとづいて判断できるようになる前に、ポリシーがそれを受け入れると明示する必要があります。そうしない場合、同じグループ化された実行は次のようになります。

label-floor: MANUAL_REVIEW (approximate_method_not_permitted)

そして 4 で終了します。ルールに判断させるには、release.yaml に次を追加します。

allow_approximate_methods: true

さらに 2 つの設定で、この手法に任せる範囲を制限します。

設定デフォルト動作
min_clusters20クラスタ数がこれより少ないと、ルールは insufficient_clusters とともに INSUFFICIENT_EVIDENCE になります。10 まで下げられますが、それ以下にはできません。
max_missing_fractionなしルールに設定します。クラスタ化された区間は、独立な場合の区間のようには欠測ケースを範囲に織り込めません。そのため、欠測ケースが 1 つでもあるメトリクスに対するクラスタ化されたルールは、ルールがどれだけの欠測を許容するかを明示するまで missingness_unbounded になります。

min_clusters: 5 を設定したポリシーは、何かが判断される前に拒否されます。

Configuration error: p5.yaml: min_clusters: Input should be greater than or equal to 10

同じ会話で、そのうち 1 つがすべてのターンでエラーになる場合:

│ exact_label │ 82.9%    │ [64.3%, 94.5%] │ 87 / 105 observed · 3 missing · 0 excluded · 35 clusters · approximate │
label-floor: INSUFFICIENT_EVIDENCE (missingness_unbounded)

許容する欠測を明示したルール:

rules:
  - id: label-floor
    metric: exact_label
    min: 0.60
    max_missing_fraction: 0.15
label-floor: PASS (lower_bound_meets_minimum)

割合を明示することは、欠測ケースがランダムに欠測しているという仮定を記録することです。判断の質はその仮定の質を超えません。だからこそ、エンジンがその仮定を代わりに置くことはありません。

クラスタ化されたスイートにまだできないこと

クラスタ化された区間を持つのは合格/不合格の比率だけです。group_id を宣言したスイートでは:

  • 平均、分位点、ランキングのメトリクスには区間がなく、それらに対するルールは unsupported_dependence_structure とともに MANUAL_REVIEW になります。
  • replicates: が 1 を超える場合、合格/不合格の比率も含めて、どのメトリクスにも区間がありません。2 つの依存構造が組み合わさり、その両方をモデル化するものがないからです。
  • 2 つの実行の比較には、どのメトリクスについても区間がありません。

グループ化されたスイートでのレイテンシの分位点:

│ latency_p50 │ 1.365 ms │ no interval: unsupported_dependence_structure │ p50 of 108 observed · 0 missing · 0 excluded │

最も重要なのは最後の制限です。会話スイートの 2 つの実行を比較し、候補が文字化けしたすべての会話を修正した場合:

oloproof compare CANDIDATE_RUN_ID BASELINE_RUN_ID --policy compare.yaml
Comparison sha256:ed7820e6471f70ce2b5e16ba618fdd48ea92a5ed39d23cce0b719ab31fcb16af of run_01M3C43MWTH8127R7S5M4N9DQ9 against run_01M3C43J2DVM93EWWWRBMRW22E · 108 paired cases
exact_label: +16.7 points · 108 paired · 0 missing · 0 excluded
  no interval: unsupported_dependence_structure
Decisions
  no-regression  exact_label  non-inferiority, margin 5.0 points  MANUAL_REVIEW  unsupported_dependence_structure
Gate: BLOCK (exit 4)

クラスタ化されたスイートのための対応のある手順で、検証グリッドを通過したものはまだありません。そのため比較は、近似的に判断する代わりに差分を報告し、人に判断を求めます。INSUFFICIENT_EVIDENCE ではなく MANUAL_REVIEW なのは、同じ種類のケースを増やしても解決しないからです。

次に読むページ

  • 比較ルール では、比較の判断に使われるルールを扱います。
  • 基本概念 では、4 つの判断状態を扱います。