ガイド
クラスタ化されたケース
区間の計算の多くは、すべてのケースが他のすべてのケースから独立していることを前提にしています。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_clusters | 20 | クラスタ数がこれより少ないと、ルールは 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.15label-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.yamlComparison 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 なのは、同じ種類のケースを増やしても解決しないからです。