Evaluating conversation analytics across voice and digital channels
Evaluate conversation analytics with task-specific labels, transcript checks, channel and language slices, human disagreement and a summary-review rubric.
- Published
The short answer
Evaluate conversation analytics against a defined review task, not a vendor's single accuracy number. Separate transcription, speaker attribution, intent, sentiment and summary quality; specify labels, permitted evidence and failure consequences before comparing outputs. Use a held-out, appropriately permissioned test set with channel/language slices and independently reviewed annotations, preserve unresolved disagreement, and inspect critical omissions as well as unsupported claims. Synthetic examples can test a rubric and its arithmetic, but cannot establish real-world accuracy, fairness, language capability or business improvement.
Separate speech analytics, Conversation Analytics and Data Analytics
Vendor terminology overlaps. Parloa's full overview describes conversation content analysis across voice and digital channels and compares several market labels. Use that as terminology context, not a universal taxonomy or evidence that every vendor handles every channel. Text analytics can also be multi-turn, and a product name alone does not establish its actual input, context or output contract. [1]
| Area | Typical question | Evidence to inspect |
|---|---|---|
| Speech analytics | What was said in voice, by whom, and what voice-specific features are permitted and relevant? | Audio-to-text errors, speaker attribution, supported acoustic features, language and recording conditions. |
| Conversation Analytics | What does the permitted voice or digital exchange support about intent, topics, expressed sentiment and a useful summary? | Turn/channel context, task labels, source-grounded claims, missing facts, uncertainty and human review. |
| Operational Data Analytics | How are interactions, queues, events and outcomes counted and reconciled for reporting? | Metric definitions, source semantics, completeness, time boundaries and data quality—not sentiment alone. |
This guide evaluates conversation-content outputs across voice and digital channels. It does not design ingestion pipelines, ETL, a warehouse or dashboard metric reconciliation. It also stops before individual CRM approval/writeback: a good summary score does not confer permission to save a record or trigger an action.
Start with a specific decision and a reviewable label contract
Replace 'measure sentiment accuracy' with a concrete question: can the output help an authorised quality reviewer find an unresolved sign-in problem without misrepresenting what was said? Specify the evaluation unit—a turn, speaker, interaction or permitted linked journey—and the evidence the reviewer may see. A turn-level classification is not automatically a valid conversation-level conclusion.
- Define the task separately: intent/topic classification, expressed sentiment, extraction of facts, source-grounded summary or prioritisation for review.
- Write label meanings, examples and boundaries. If mixed or unclear evidence is possible, define how to represent it rather than force certainty.
- Define missing input, abstention, unsupported language, truncated context and processing failure. None should silently become a successful neutral result.
- Identify consequential errors and the person responsible for review. Set acceptance criteria for the actual risk and use case, not a generic percentage.
- Record the model/version, prompt, taxonomy, preprocessing, context window, sampling settings, transcript source and evaluator/rubric revision for a comparison.
The fictional sentiment exercise below uses positive, neutral and negative as candidate labels. Its invented annotation roles may also mark needs-review; that is an unresolved annotation state, not an emotion category. For the exercise, unresolved service-problem language outweighs polite thanks when assigning the task's sentiment label. This local teaching rule is not an objective measure of the person's feelings.
Build a test set whose limits are visible
A synthetic set is useful for testing known edge cases and rubric consistency. It cannot replace an approved, representative operational evaluation. Microsoft's sentiment transparency note explicitly warns that synthetic tests which do not reflect the end-to-end scenario may be insufficient; performance depends on domain and input variation. Obtain appropriate permission, purpose, access and retention decisions before using operational material. This article collects none. [2]
- Separate development/calibration examples from a held-out evaluation set. Keep duplicates, fragments of the same conversation and closely related journeys from leaking across the split.
- Slice by channel, supported language/locale, task, interaction length and relevant input conditions. English success does not establish another language or dialect.
- For voice, examine noise, codec/recording conditions, overlapping speakers and diarisation. For chat/email, examine quoted history, short messages, typos, missing turns, attachment-only information and asynchronous context.
- Include rare but consequential cases, not just the most common easy label. Declare how sampling and weighting relate to the intended population.
- Record how many examples are scorable, disputed, missing, unsupported or failed in each slice. A slice with no evidence is not a zero-error success.
- Report denominators and use an appropriate uncertainty method for the sampling design. Correlated turns are not necessarily independent observations; a small fixture cannot justify a narrow confidence interval.
Do not infer demographics or sensitive attributes to fill a fairness spreadsheet. Any such evaluation needs an independently approved purpose, lawful handling and qualified review. Language, geography and demographic identity are not interchangeable. The examples here are English text only and establish no subgroup performance.
Use an original rubric that does not average away critical errors
Use pass, review, fail or not-assessable for each applicable dimension, with an evidence span and a reason. Define which failures block the intended use before comparing candidates. A polished summary with the wrong outcome should not pass because its readability score compensates for the error. The rubric below is an original proposed checklist, not an approved industry scorecard or a numerical benchmark.
| Dimension | Evidence question | Review or failure example |
|---|---|---|
| Task and label correctness | Does the output follow the stated task and permitted label definitions? | A neutral output is used for a failed input, or the classifier labels the agent rather than the intended speaker. |
| Transcript and speaker fidelity | Are important words, negation, amounts and speaker roles preserved? | A missing 'not' reverses a request; an agent's promise is attributed to the customer. |
| Sentiment evidence and uncertainty | Does the label reflect the available text/context under this rubric? | Polite thanks overrides an unresolved problem; sarcasm is forced into a confident label. |
| Summary grounding and attribution | Is each claim supported by the permitted source and attributed correctly? | The person reports a problem, but the summary presents a verified account fact or invents completion. |
| Must-cover facts and critical omissions | Are the predefined facts needed for this task preserved? | The summary omits a no-phone-call restriction, unresolved status or a negated request. |
| Channel and language fit | Is the output evaluated for this supported channel/language and context window? | An email-only restriction disappears or a translated test is treated as native-language evidence. |
| Usability without false assurance | Can a reviewer see the source, uncertainty and unresolved next step? | A fluent one-line result hides missing context or an unavailable input. |
| Permitted disclosure and provenance | Are context, output access and diagnostic evidence within approved boundaries? | A summary or evaluation log exposes unnecessary personal details or treats retrieved instructions as policy. |
Not-assessable is not pass. Keep missing evidence visible and report it separately. Record candidate failures, not just an average score; acceptance remains a decision by the responsible evaluation and operational owners.
Measure transcript errors and sentiment disagreement separately
For real speech recognition evaluation, Microsoft's current guide requires audio with corresponding human-labelled transcripts and defines word error rate as (substitutions + deletions + insertions) divided by reference words. Tokenisation and normalisation matter. WER is a transcription metric, not sentiment accuracy, factual correctness or permission to act. This guide does not adopt the vendor page's generic quality thresholds as acceptance criteria for your use case. [3]
The first fictional example deletes 'not' from six reference words. The text-edit calculation is one deletion divided by six words: 16.67%. No audio was supplied and no ASR engine ran. The point is that a single meaning-critical error needs its own review even when an aggregate transcription score appears acceptable.
Where authorised, compare downstream analytics on an approved reference transcript and on the actual ASR output, then review the end-to-end result. That helps separate transcript-induced changes from analytics-model errors; it does not make reference text infallible. Digital channels avoid an ASR stage but can still lose speakers, quoted history and relevant turns.
Microsoft's sentiment note explains that its text model can struggle with domain mismatch, underrepresented language/dialects, sentence importance and sarcasm. It also distinguishes confidence in a classification from intensity of sentiment. These are documented limits of that service, not a universal calibration rule for every model. A sentiment score is not verified emotion, satisfaction, truthfulness or intent. [2]
In a real evaluation, have qualified annotators apply the same rubric independently and retain initial disagreements before adjudication. Blind candidate identity/order where practical. Report raw agreement and choose any additional agreement statistic with its assumptions stated; agreement is not proof of truth. Do not quietly drop disputed items to make a headline accuracy number look better.
Evaluate grounded claims and missing facts independently
A summary can contain only supported sentences and still omit the fact the reviewer most needs. Evaluate source support, attribution, contradictions, must-cover facts and uncertainty separately. Define required facts from the task, not from whichever summary happened to be generated.
Microsoft's current GroundednessEvaluator reference describes checking whether claims are substantiated by provided context, noting that a factually correct statement can still be ungrounded if that source does not verify it. Groundedness is not completeness or real-world truth: a response can agree with an erroneous transcript. The manual annotations below do not execute that evaluator or use its scoring scale. [4]
For a bounded reference, distinguish what the person requested, what they reported, what another speaker promised and what an authoritative system actually confirmed. If the source establishes no completed action, do not invent one. Summary evaluation does not authorise individual writeback or consequential automation.
Inspect six annotated examples—not customer evidence
Every line, candidate output and annotation below is invented. A and B are hypothetical annotation roles, not actual employees, SMEs or people who performed review. Voice-reference-text means written text standing in for voice, with no recording, speaker segmentation or acoustic test. Candidate labels and summaries were hand-authored, not generated by a vendor model.
| Fixture / channel | Reference text | Candidate summary | Annotation and limitation |
|---|---|---|---|
| SYN-E01 / voice-reference-text | Please do not cancel my plan. | The person requested cancellation and the plan was cancelled. | A/B: neutral/neutral; candidate sentiment neutral. Two unsupported or contradicted claims; negation and lack of confirmed action are not preserved. Simulated transcript: Please do cancel my plan. |
| SYN-E02 / chat | Thanks for trying, but I still cannot sign in. | The sign-in problem remains unresolved. | A/B: negative/negative; candidate sentiment positive. Summary preserves the one required fact, but polite thanks misleads the fictional classifier. |
| SYN-E03 / email | Please email the reset steps. I cannot take a phone call. | The person requests reset instructions. | A/B: neutral/neutral; candidate sentiment neutral. One of two required facts covered; email-not-phone restriction is a critical omission. |
| SYN-E04 / chat | Great, another reset loop. | The person reports another reset loop. | A/B: negative/needs-review; candidate sentiment positive. Reference sentiment remains unresolved and is excluded from sentiment correctness, not hidden. Summary can still be reviewed against its one required fact. |
| SYN-E05 / voice-reference-text | I can sign in now. Thank you. | The person reports that access now works. | A/B: positive/positive; candidate sentiment positive. Required fact covered with user-report attribution; no verified system outcome is claimed. |
| SYN-E06 / email | This is the third incorrect bill. The issue is still open. | The billing issue has been resolved. | A/B: negative/negative; candidate sentiment neutral. Unsupported resolution claim; repeated reported issue and unresolved status both omitted. |
The exercise intentionally exposes a mismatch between fluent summaries and useful review evidence. It contains no adversarial benchmark suite, representative channel distribution or native-language validation. The critical-omission annotations are teaching decisions for this local rubric, not legal or production release requirements.
Reproduce only the fixture arithmetic offline
Save the following as analytics-fixture.mjs and run node analytics-fixture.mjs. It has no dependencies, network, model, account, recordings or customer data. Its annotation arrays encode manual teaching decisions; the code tallies them, not language understanding. All percentages below are calculated fixture results, never vendor accuracy benchmarks, customer outcomes or acceptance thresholds.
const fixture = [
{ id: 'SYN-E01', channel: 'voice-reference-text', reference: 'Please do not cancel my plan.', candidateSummary: 'The person requested cancellation and the plan was cancelled.', a: 'neutral', b: 'neutral', expected: 'neutral', predicted: 'neutral', required: ['no-cancellation-request', 'no-confirmed-action'], covered: [], criticalMissing: ['no-cancellation-request'], unsupported: ['cancellation-request', 'completed-cancellation'] },
{ id: 'SYN-E02', channel: 'chat', reference: 'Thanks for trying, but I still cannot sign in.', candidateSummary: 'The sign-in problem remains unresolved.', a: 'negative', b: 'negative', expected: 'negative', predicted: 'positive', required: ['signin-unresolved'], covered: ['signin-unresolved'], criticalMissing: [], unsupported: [] },
{ id: 'SYN-E03', channel: 'email', reference: 'Please email the reset steps. I cannot take a phone call.', candidateSummary: 'The person requests reset instructions.', a: 'neutral', b: 'neutral', expected: 'neutral', predicted: 'neutral', required: ['reset-request', 'email-not-phone'], covered: ['reset-request'], criticalMissing: ['email-not-phone'], unsupported: [] },
{ id: 'SYN-E04', channel: 'chat', reference: 'Great, another reset loop.', candidateSummary: 'The person reports another reset loop.', a: 'negative', b: 'needs-review', expected: null, predicted: 'positive', required: ['repeat-reset-loop'], covered: ['repeat-reset-loop'], criticalMissing: [], unsupported: [] },
{ id: 'SYN-E05', channel: 'voice-reference-text', reference: 'I can sign in now. Thank you.', candidateSummary: 'The person reports that access now works.', a: 'positive', b: 'positive', expected: 'positive', predicted: 'positive', required: ['user-reports-access-restored'], covered: ['user-reports-access-restored'], criticalMissing: [], unsupported: [] },
{ id: 'SYN-E06', channel: 'email', reference: 'This is the third incorrect bill. The issue is still open.', candidateSummary: 'The billing issue has been resolved.', a: 'negative', b: 'negative', expected: 'negative', predicted: 'neutral', required: ['reported-repeat-bill-error', 'billing-unresolved'], covered: [], criticalMissing: ['billing-unresolved'], unsupported: ['billing-resolved'] }
];
const rate = (numerator, denominator) => ({ numerator, denominator, percent: denominator ? (100 * numerator / denominator).toFixed(2) + '%' : null });
const sum = (rows, field) => rows.reduce((n, r) => n + r[field].length, 0);
const scorable = fixture.filter(r => r.expected !== null);
const negative = scorable.filter(r => r.expected === 'negative');
const predictedNegative = scorable.filter(r => r.predicted === 'negative');
const trueNegativeLabel = negative.filter(r => r.predicted === 'negative').length;
const labels = ['negative', 'neutral', 'positive'];
const confusion = labels.map(actual => labels.map(predicted => scorable.filter(r => r.expected === actual && r.predicted === predicted).length));
const tokens = text => text.toLowerCase().replace(/[.!?,]/g, '').trim().split(/\s+/);
function editDistance(a, b) {
let row = Array.from({ length: b.length + 1 }, (_, i) => i);
for (let i = 1; i <= a.length; i++) {
const next = [i];
for (let j = 1; j <= b.length; j++)
next[j] = Math.min(row[j] + 1, next[j - 1] + 1, row[j - 1] + (a[i - 1] === b[j - 1] ? 0 : 1));
row = next;
}
return row[b.length];
}
const referenceWords = tokens(fixture[0].reference);
const alteredWords = tokens('Please do cancel my plan.');
const metrics = {
fictionalAnnotationAgreement: rate(fixture.filter(r => r.a === r.b).length, fixture.length),
referenceScorableCoverage: rate(scorable.length, fixture.length),
sentimentCorrectnessOnScorable: rate(scorable.filter(r => r.predicted === r.expected).length, scorable.length),
negativeLabelRecall: rate(trueNegativeLabel, negative.length),
negativeLabelPrecision: rate(trueNegativeLabel, predictedNegative.length),
requiredFactCoverage: rate(sum(fixture, 'covered'), sum(fixture, 'required')),
summariesWithCriticalOmissions: rate(fixture.filter(r => r.criticalMissing.length).length, fixture.length),
unsupportedOrContradictedClaimCount: sum(fixture, 'unsupported'),
textEditWER: rate(editDistance(referenceWords, alteredWords), referenceWords.length),
confusion: { rows: labels, columns: labels, counts: confusion },
slices: [...new Set(fixture.map(r => r.channel))].map(channel => ({ channel, examples: fixture.filter(r => r.channel === channel).length, scorable: scorable.filter(r => r.channel === channel).length }))
};
console.log(JSON.stringify(metrics, null, 2));| Measure | Fixture calculation | Interpretation limit |
|---|---|---|
| Fictional annotation agreement | 5 / 6 = 83.33% | Raw agreement between invented roles, not measured human reliability or truth. |
| Reference-scorable coverage | 5 / 6 = 83.33% | One unresolved sentiment reference remains visible; this is not candidate abstention coverage. |
| Sentiment correctness on scorable references | 3 / 5 = 60.00% | Excludes the unresolved reference with its reason declared; no population estimate. |
| Negative-label recall | 0 / 2 = 0.00% | Both negative references are missed despite the aggregate correctness figure. |
| Negative-label precision | 0 / 0: not defined | There are no negative candidate labels on the scorable set; do not display a perfect or zero precision score. |
| Required-fact coverage | 4 / 9 = 44.44% | Counts the predefined required facts across six summaries; not a groundedness or readability score. |
| Summaries with critical omissions | 3 / 6 = 50.00% | Local rubric flags negation, contact restriction and unresolved status; no universal failure threshold. |
| Unsupported or contradicted claims | 3 claims | A count from manual fixture annotations; no claim-level precision denominator is defined. |
| Text-edit WER illustration | 1 / 6 = 16.67% | One deleted 'not' under the declared English tokenisation; no actual speech recognition test. |
The code also emits a confusion matrix with actual labels as rows and candidate labels as columns, plus channel sample counts. Each channel has only two invented examples; chat has just one scorable sentiment reference. No per-language, acoustic or channel performance conclusion is supported. Keep the denominators and unresolved items alongside any reported metric, and never convert an undefined ratio into a pass.
Calibrate automated grading against appropriate human review
OpenAI's current evaluation guide recommends task-specific tests, representative datasets and human feedback to calibrate automated scoring; it discusses disagreement and judge position/verbosity bias. Use those methodological principles rather than copying its illustrative target numbers or assuming one judge is an independent authority. Any provider-hosted evaluation feature's lifecycle must be checked separately; this guide depends on no hosted evaluation API. [5]
If an LLM judge is later approved, give it a bounded rubric and permitted evidence, validate its agreement and failure cases against qualified review, and test candidate-order effects. Record judge/model/prompt versions and repeated-run variability. Do not let a transcript instruct the judge to ignore the rubric. A generated rationale is not proof that a judgement is right, and using the same model family to generate and grade can leave shared blind spots.
Human review is also fallible. Use native/domain-competent reviewers for the intended languages, training/calibration examples and a documented route to resolve or retain disputes. Do not present a machine-generated translation reviewed only in English as validation of the original language's nuance.
State inappropriate uses and the evidence needed after changes
Do not treat inferred sentiment as a diagnosis, a lie detector, proof of satisfaction or an automatic basis for consequential decisions about employees or customers. Microsoft's sentiment note specifically cautions against automatic high-impact actions without human intervention. Responsible legal and operational owners must assess the actual use, affected people and applicable requirements; this guide does not provide a universal legal rule. [2]
- Before use: approve the task, permitted evidence, rubric, failure consequences, receiving workflow and review ownership.
- Before a comparison: freeze the held-out set and label definitions, document exclusions, and compare candidates on the same applicable evidence.
- Before a consequential next step: require the relevant verification, human decision and system permission; an analytics score alone grants none.
- After model, prompt, ASR, taxonomy or context changes: rerun approved regression slices and inspect critical failures, not just the aggregate average.
- During an approved operating review: check changed input mix, language/channel gaps, reviewer disagreement and correction patterns with minimal permitted diagnostics.
- If evidence is missing or disputed: narrow the supported use, require review or withhold the output from the affected decision rather than label it reliable.
Logging, monitoring or a vendor's ability to process all captured interactions is not permission to record everything. Decide collection, access, redaction limits, retention and any reuse with responsible privacy/security owners. Redaction is not a guarantee that material is anonymous. This article adds no tracking, data upload, capture pipeline or automatic training loop.
Limitations
This guide is illustrative, not an icommunix customer evaluation or a claim that a specific analytics stack is deployed. All interactions, candidate outputs and annotation roles are invented teaching fixtures; numerical results are calculated from their documented labels only. No person actually annotated these examples, no model or speech service was run, and no real calls or customer data were collected. Six short English text examples, including text standing in for voice, cannot establish acoustic performance, representative accuracy, multilingual capability, fairness, reliability or business outcomes. Sources were checked on 30 October 2026; service/API availability and selected model versions need separate review.
References
- [1] Parloa — What is conversational analytics? Vendor terminology and scope overviewAccessed
- [2] Microsoft — Transparency note for Sentiment Analysis: domain, context, disagreement and confidence limitsAccessed
- [3] Microsoft — Test accuracy of a custom speech model: reference transcripts and word error rateAccessed
- [4] Microsoft — GroundednessEvaluator reference: claims supported by provided contextAccessed
- [5] OpenAI — Evaluation best practices: task-specific tests, human calibration and judge limitationsAccessed
Resources
Need to integrate conversation insights into a product or review workflow?
Discuss your channels, data boundaries and evaluation requirements with our team. Start with a non-sensitive outline of the intended task and systems—not recordings, transcripts, customer information or credentials.
