| row_id | source_file | start_s | end_s | unit | context |
|---|---|---|---|---|---|
| event_001 | rec_017.wav | 12.30 | 12.48 | event | 10 s segment |
| event_002 | rec_017.wav | 16.10 | 16.22 | event | 10 s segment |
| event_003 | rec_104.wav | 4.80 | 5.16 | event | 10 s segment |
Illustrative schema—not actual participant recordings.
One interval per call. Compare examples while tracking individual, session, and detector origin.
One fixed window per observation. Keep duration and sampling policy consistent.
Which level will your result generalize to: another frame, recording, individual, or site?
# Z: [T, D]; t: frame-center timestamps in recording seconds
# start_s and end_s come from a declared annotation/detection policy
inside = (t >= start_s) & (t < end_s)
if not inside.any():
raise ValueError("No frame centers fall inside this interval")
z_event = Z[inside].mean(axis=0) # [D] Very short intervals may contain no frame center: flag them, rather than silently producing NaNs.
Will be absent from a prediction-selected repertoire.
May appear as a convincing “new cluster.”
Store both the source interval and the extraction segment/context policy.
| Operation | What it changes | Use it deliberately |
|---|---|---|
| Waveform normalization | The model’s audio input | Part of the extraction pipeline |
| L2-normalize each vector | Each observation’s overall vector length | Makes direction, rather than magnitude, central |
| Scale each feature column | Relative weight of different dimensions | Changes distances and fitted projections |
Interactive example requires JavaScript.
For your question, could vector magnitude carry useful information—or a nuisance factor?
features
row_id → vector
metadata
row_id → file, interval,
individual, site,
device, session Check the join.
Are IDs unique?
Did any rows disappear?
Are there unexpected duplicates?
Can three random rows be traced to audio?
Keep missing metadata explicitly missing; do not invent individuals, sites, or devices.
Checkpoint hash, package snapshot, layer policy, rate, channel, segment length, aggregation.
row_id, source file, interval, annotation or detector origin, threshold/fusion settings.
analysis_bundle/
embeddings.npy # rows identified by rows.csv
rows.csv # row_id, source interval, metadata
extraction.json # checkpoint and processing provenance Proposed export convention for the practical—not a built-in CLI output schema.
Useful temporal detail.
Not many independent calls.
Useful repeated observations.
Not many independent sites.
Interactive example requires JavaScript.
Reveal the colours by call group, site, and device. Which interpretation survives?
A method comparison is uninterpretable when the underlying observations also change unnoticed.
| Check | Required answer |
|---|---|
| What is a row? | One declared frame, event, window, or recording |
| Which space? | One checkpoint and one extraction/preprocessing policy |
| Where is the sound? | Source file + interval + stable row ID |
| What could confound similarity? | At least two biological or technical metadata fields |
Pick one query observation. Explain what would count as a useful neighbour.