Skip to content
Euler Docs

Data utility

A single readiness number answers three questions at once, and they are not the same question. Was the recording captured correctly? Do the labels describe what actually happened? Will this data help the model you are about to train?

Those have different owners and different fixes, so Euler reports them as three separate layers, and reports what it has not measured just as plainly as what it has.

Anything unmeasured is reported as not assessable, with the reason and what would unlock it. Euler never reports a missing measurement as a zero. A missing embedding index is not poor coverage, and an unlinked failure is not irrelevant data. The two look identical in a number and completely different in a decision.

The three layers

LayerThe question it answersWhat you do when it is weak
IntegrityWas this recording captured correctly?Fix the rig, the clocks or the capture script, then recollect
Semantic qualityDo the labels describe what actually happened?Re-annotate, or raise the bar your annotation layers have to clear
UtilityWill this data help the model you are about to train?Collect a different slice, or curate a different subset

Read them with:

curl -fsS -H "Authorization: Bearer $EULER_TOKEN" \
  "$EULER_BASE_URL/v1/projects/$PROJECT/utility"

The response carries each layer, every signal inside it, and the headline readiness score unchanged so you can reconcile the layers against it. Nothing is recomputed here: the integrity and semantic numbers are the same measurements behind your readiness score, read through your own project’s settings. A layer can never disagree with the headline.

Every signal also says which layer it sits in and why, so you can argue with the placement rather than guess at it.

Utility has no single score

The utility layer reports its signals separately and gives you no blended number. That is deliberate.

Blending them would need weights, and nobody has calibrated those weights against a measured training outcome. A utility score that has never been validated against a real training result would be a guess with a decimal point on it, and it is exactly the claim we were asked not to make. When a measured probe run exists to calibrate it, a blend becomes possible. Until then the absence is the honest answer.

The utility signals

SignalWhat it meansAvailable once
Policy fitThe share of your reviewed recordings that your declared training target can actually consume. A file a trainer rejects is not training data.You declare a target profile
Distribution spreadHow much of the content space this data covers. A tight cluster trains a policy that only works in that cluster.The project is indexed
Near duplicate rateNear-identical recordings as a share of all pairs. A high rate means the dataset is smaller than its episode count suggests.The project is indexed
Failure relevanceHow much of this data sits near failures your model actually made. This is the data most likely to change an evaluation.You link model feedback
Predicted downstream valueWhether these scores actually predict that a model trained on this data gets better.You supply a measured probe run

Failure relevance counts only failures your model reported. Euler’s own candidate flags are not model feedback, and they are never reported as if your model had failed there.

Predicted downstream value has no path to a value other than a measured training run you supply. Euler does not predict a training improvement it has not measured.

The proxy metrics under semantic quality

These are how Euler checks its own annotation work. Each one carries its plain definition, how it was measured, what was excluded, and how many units the number is over.

Temporal segment overlap

How closely Euler’s action segments line up in time with a human-adjudicated segmentation of the same recording.

Each predicted segment is matched to at most one adjudicated segment, best overlap first, and every unmatched prediction counts against the score. Splitting one real step into many therefore lowers the number rather than raising it, which is the point: a method that emits a boundary every half second scores near zero.

Not comparable to published action-segmentation scores. Euler matches on time alone. Published scores also require the labels to match, and Euler’s step labels are free text rather than draws from a fixed taxonomy, so requiring a label match would measure spelling rather than timing. Label agreement is reported as its own separate number. Do not put a Euler segment score next to a published benchmark figure.

Boundary agreement

How often Euler puts a step boundary within a short window of where a human put one, balanced against how many boundaries it invents. You choose the window:

curl -fsS -H "Authorization: Bearer $EULER_TOKEN" \
  "$EULER_BASE_URL/v1/projects/$PROJECT/utility?boundary_tolerance_s=0.25"

The clip’s own first and last edges are excluded, because every method gets those right for free and counting them would inflate the number.

Language and action agreement

The share of caption windows where an independent referee agreed that the written language describes what the frames show. Windows the referee could not confidently judge are excluded from the ratio and counted separately, rather than being folded in as agreement.

Annotation confidence

The confidence the segmenter reported about its own output. This is what the model claimed, not evidence that it was right, and it is always labelled that way.

Why these need a gold set

Segment overlap and boundary agreement are only reported when a human-adjudicated segmentation is stored for the recording. Without one they read not assessable with that reason.

Euler will not score its own segmentation against itself. Your reviewers’ edits replace the machine output rather than sitting beside it, so scoring the stored output would compare a thing to itself and report a perfect number on every reviewed recording. A separate adjudicated record is the only honest reference, and no record means no measurement.

Raw against filtered against curated

The real question about a data product is not “what is my score”, it is “does acting on this score change anything”. Downstream training feedback answers that and takes months, so Euler runs the controlled comparison instead: hold the model and the compute fixed, vary only the data, and report what each subset contains.

curl -fsS -X POST -H "Authorization: Bearer $EULER_TOKEN" \
  -H "Content-Type: application/json" \
  "$EULER_BASE_URL/v1/projects/$PROJECT/ablation" \
  -d '{}'
ArmWhat it isWhat it isolates
RawEvery recording in the project, nothing removedThe baseline any claim has to beat
Readiness filteredOne stage only: the readiness floorWhat the score alone buys you
Euler curatedThe full recommended plan: floor, then duplicates, then balance, then coverageThe whole product

The readiness floor is held constant across the filtered and curated arms, so the difference between them is exactly what curation does beyond the score. Each arm reports its size, its readiness distribution, its duplicate rate, how many failure-linked recordings survive, which faults it still carries and its composition across your facets. The curated arm carries the same per-stage receipt the curation screen shows, because it is the same engine.

Nothing is saved. The comparison needs read access only, exactly like a curation preview.

This is composition, not a training result. The comparison tells you what each subset contains. It does not claim your model trains better on one of them, and it will not, unless you supply a measured probe-training run with the request. Composition is evidence. Conflating it with a training outcome is the claim this whole page exists to avoid.

Supplying a measured run flips the report’s own claim from not assessable to measured, and your numbers are reported as yours:

curl -fsS -X POST -H "Authorization: Bearer $EULER_TOKEN" \
  -H "Content-Type: application/json" \
  "$EULER_BASE_URL/v1/projects/$PROJECT/ablation" \
  -d '{
        "probe": {
          "measured": true,
          "model_description": "3-seed BC probe, identical schedule per arm",
          "metric_name": "success_rate",
          "raw_score": 0.41,
          "filtered_score": 0.47,
          "curated_score": 0.52
        }
      }'

What this dataset does not cover

curl -fsS -H "Authorization: Bearer $EULER_TOKEN" \
  "$EULER_BASE_URL/v1/projects/$PROJECT/distribution-gap"

Gaps are ranked in the order a team should act on them, and each one names what kind of work fixes it.

GapWhat it meansWhat to do
Fault concentratedMost recordings of this slice carry a readiness faultFix the capture problem first. Collecting more under the same setup repeats the fault
Lost in curationThe dataset has this slice and the curated subset keeps none of itCheck why every recording was dropped, then loosen the stage or recollect it
Failure uncoveredYour model failed here and almost nothing in the project sits near that failureCollect more of this situation. It is the data most likely to change your next evaluation
Thin coverageToo few recordings to train on or evaluate onCollect more of this slice

Every gap names something that exists in your recorded data. Euler cannot know about a situation nobody has ever recorded, and it says so rather than inventing a category. When nothing crosses the bar, the report says nothing stood out and adds that this is not proof of full coverage.

Signals the report wanted and did not have are listed too. Without an index, gaps are reported over your recorded facets rather than over the content space. Without linked model feedback, Euler cannot tell you which gaps matter to a failure you actually saw.

Next