Customer Experience Insights では、Agent Assist から会話をインポートして分析できます。このドキュメントでは、インポートされた Agent Assist データでいくつかの重要な会話指標を計算するプロセスについて説明します。
前提条件
Agent Assist を使用して、スマート リプライ機能または要約機能のいずれかを使用して会話データを生成します。
CX Insights から BigQuery にデータをエクスポートします。
トリガー率
トリガー率は、特定のタイプのアノテーションが会話に表示される頻度を表します。
文レベルのトリガー率
文レベルのトリガー率は、文ごとに少なくとも 1 回表示されるアノテーションに適用されます。
| アノテーション名 | アノテーション型 | 条件 |
|---|---|---|
| 記事の候補 | 'ARTICLE_SUGGESTION' |
スレッド内のメッセージごとに、少なくとも 1 つの SuggestArticles リクエストが送信されます。 |
| FAQ アシスト | 'FAQ' |
スレッド内の各メッセージに対して、少なくとも 1 つの SuggestFaqAnswers リクエストまたは AnalyzeContent リクエストが送信されます。 |
| スマート リプライ | 'SMART_REPLY' |
スレッド内の各メッセージに対して、少なくとも 1 つの SuggestSmartReplies リクエストまたは AnalyzeContent リクエストが送信されます。 |

WITH calculation AS ( SELECT COUNTIF( ( SELECT COUNT(*) FROM UNNEST (sen.annotations) AS annotation WHERE annotation.type = 'ANNOTATION_TYPE' ) > 0 ) AS numSentencesAtLeastOneAnnotation, COUNT(*) AS numSentencesTotal FROM BIGQUERY_TABLE, UNNEST (sentences) AS sen ) SELECT numSentencesAtLeastOneAnnotation, numSentencesTotal, numSentencesAtLeastOneAnnotation / numSentencesTotal AS triggerRate FROM calculation;
会話レベルのトリガー率
会話レベルのトリガー率は、会話ごとに 1 回のみ表示されるアノテーションに適用されます。
| アノテーション名 | アノテーション型 | 条件 |
|---|
| 生成ナレッジ アシスト(GKA) | 'KNOWLEDGE_SEARCH' | 会話内の各メッセージに対して、少なくとも 1 つの SearchKnowledge リクエストが送信されます。|
| プロアクティブ生成ナレッジ アシスト | 'KNOWLEDGE_SEARCH' | スレッド内の各メッセージに対して、少なくとも 1 つの SearchKnowledge リクエストまたは AnalyzeContent リクエストが送信されます。|
| 要約 | 'CONVERSATION_SUMMARIZATION' | 各会話に対して 1 件以上の SuggestConversationSummary リクエストが送信されます。|

WITH calculation AS ( SELECT COUNTIF( ( SELECT COUNT(*) FROM UNNEST (sentences) AS sen, UNNEST (sen.annotations) AS annotation WHERE annotation.type = 'ANNOTATION_TYPE' ) > 0 ) AS numConversationsAtLeastOneAnnotation, COUNT(*) AS numConversationsTotal FROM BIGQUERY_TABLE ) SELECT numConversationsAtLeastOneAnnotation, numConversationsTotal, numConversationsAtLeastOneAnnotation / numConversationsTotal AS triggerRate FROM calculation;
クリック率
クリック率は、通話エージェントに提案されたアノテーションがクリックされた頻度を示します。
文レベルのクリック率
文レベルのクリック率は、エージェントが文ごとに複数回クリックできるアノテーションに適用されます。
| アノテーション名 | アノテーション型 | 条件 |
|---|---|---|
| 記事の候補 | 'ARTICLE_SUGGESTION' |
スレッド内のメッセージごとに、少なくとも 1 つの SuggestArticles リクエストが送信されます。 |
| FAQ アシスト | 'FAQ' |
スレッド内の各メッセージに対して、少なくとも 1 つの SuggestFaqAnswers リクエストまたは AnalyzeContent リクエストが送信されます。 |
| スマート リプライ | 'SMART_REPLY' |
スレッド内の各メッセージに対して、少なくとも 1 つの SuggestSmartReplies リクエストまたは AnalyzeContent リクエストが送信されます。 |

WITH calculation AS ( SELECT COUNTIF( ( SELECT COUNT(*) FROM UNNEST (sen.annotations) AS annotation WHERE annotation.type = 'ANNOTATION_TYPE' AND annotation.displayed = TRUE AND annotation.clicked = TRUE ) > 0 ) AS numSentencesAtLeastOneClickedAndDisplayedAnnotation, COUNTIF( ( SELECT COUNT(*) FROM UNNEST (sen.annotations) AS annotation WHERE annotation.type = 'ANNOTATION_TYPE' AND annotation.displayed = TRUE ) > 0 ) AS numSentencesAtLeastOneDisplayedAnnotation, FROM BIGQUERY_TABLE, UNNEST (sentences) AS sen ) SELECT numSentencesAtLeastOneClickedAndDisplayedAnnotation, numSentencesAtLeastOneDisplayedAnnotation, numSentencesAtLeastOneClickedAndDisplayedAnnotation / numSentencesAtLeastOneDisplayedAnnotation AS clickThroughRate FROM calculation;
会話レベルのクリック率
会話レベルのクリック率は、通話エージェントが 1 つの会話で複数回クリックできるアノテーションに適用されます。通話エージェントは、会話レベルのアノテーションを作成するリクエストを事前に送信する必要があります。
| アノテーション名 | アノテーション型 | 条件 |
|---|---|---|
| 生成ナレッジ アシスト(GKA) | 'KNOWLEDGE_SEARCH' |
スレッド内のメッセージごとに、少なくとも 1 つの SearchKnowledge リクエストが送信されます。 |
| プロアクティブ生成ナレッジ アシスト | 'KNOWLEDGE_SEARCH' |
スレッド内の各メッセージに対して、少なくとも 1 つの SearchKnowledge リクエストまたは AnalyzeContent リクエストが送信されます。 |
機能固有の指標
このセクションでは、各機能に固有の指標を一覧表示します。
生成ナレッジ アシスト
生成ナレッジ アシスト(GKA)は、提供されたドキュメント内の情報に基づいて、エージェントの質問に回答します。エージェントが回答を見つけられない場合、GKA は同様の質問を提案し、回答を提供します。この機能では、次のナレッジ検索指標が生成されます。
| 指標名 | 定義 | 計算 |
|---|---|---|
| 結果の件数 | すべての会話で 1 人のエージェントに提供された回答の総数。 | |
| エージェントのクエリソースの比率 | 質問の総数に対するエージェントの質問の割合。 | エージェントの質問数を質問の合計数で割って計算します。 |
| 提案されたクエリのソース比率 | 質問の総数に対する候補の質問の割合。 | 提案された質問数を質問の総数で割って計算します。 |
| URI クリック率 | 少なくとも 1 つの URI がクリックされた回答の割合。回答の総数に対する割合です。 | エージェントが URI をクリックした回答の数を、回答の総数で割って計算します。 |
| 高評価の割合 | 回答に対する肯定的なフィードバックの割合。 | 肯定的なフィードバックを受けた回答の数を、回答の総数で割った値を計算します。 |
| 低評価率 | 回答に対する否定的なフィードバックの割合。 | 否定的なフィードバックを受けた回答の数を、回答の総数で割った値を計算します。 |
プロアクティブ生成ナレッジ アシスト
プロアクティブな生成ナレッジ アシストは、現在の会話のコンテキストに基づいて質問を提案し、提供されたドキュメントの情報に基づいて回答を提供します。プロアクティブ生成ナレッジ アシストでは、エージェントの操作は必要ありません。この機能では、次のナレッジ アシスト指標が生成されます。
| 指標名 | 定義 | 計算 |
|---|---|---|
| 結果の件数 | すべての会話で 1 人のエージェントに提供された提案の合計数。 | |
| URI クリック率 | 提供された候補の総数のうち、少なくとも 1 つの URI がクリックされた候補の割合。 | エージェントが URI をクリックした候補の数を、提供された候補の合計数で割って計算します。 |
| 高評価の割合 | 提案に対する肯定的なフィードバックの割合。提案の総数に対する肯定的なフィードバックの割合です。 | 肯定的なフィードバックを受けた提案の数を提案の総数で割って計算します。 |
| 低評価率 | 候補に対する否定的なフィードバックの割合。候補の総数に対する否定的なフィードバックの割合。 | 否定的なフィードバックを受けた提案の数を、提案の総数で割った値を計算します。 |
スマート リプライ
このセクションでは、スマート リプライに固有の指標について説明します。
有効クリック率(有効 CTR)
有効クリック率は、通常のクリック率の指標よりも、コールセンターのエージェントがスマート返信のアノテーションをクリックする頻度をより正確に反映しています。次のクエリは、各エージェントのレスポンスと、そのエージェントのレスポンスに対してのみ行われ、エージェントがクリックしたスマート返信のアノテーションを取得します。次に、エージェントがスマート返信候補を使用して返信を作成した回数をカウントし、この数値をエージェントの返信の合計数で割ります。

WITH calculation AS ( SELECT sen.sentence AS agentResponse, ( # Get a list of effective smart replies that map to each agent response. SELECT ARRAY_AGG(JSON_QUERY(PARSE_JSON(JSON_VALUE(annotation.annotationRecord)), "$.reply")) FROM UNNEST (sentences) AS sen2, UNNEST (sen2.annotations) AS annotation WHERE annotation.type='SMART_REPLY' AND annotation.clicked=TRUE AND annotation.annotationRecord IS NOT NULL AND annotation.createTimeNanos >= ( # Get the timestamp of the agent response that immediately precedes # the current agent response. The timestamp of the effective smart # reply must be greater than this timestamp. SELECT MAX(sen3.createTimeNanos) FROM UNNEST(sentences) AS sen3 WHERE sen3.participantRole = 'HUMAN_AGENT' AND sen3.createTimeNanos < sen.createTimeNanos ) AND annotation.createTimeNanos <= sen.createTimeNanos ) AS effectiveSmartRepliesPerAgentResponse FROM BIGQUERY_TABLE, UNNEST (sentences) AS sen WHERE sen.participantRole = 'HUMAN_AGENT' ) SELECT COUNTIF(ARRAY_LENGTH(effectiveSmartRepliesPerAgentResponse) > 0) / COUNT(agentResponse) AS effectiveCTR FROM calculation;
レートを編集
エージェントは、提案されたスマート リプライの回答をそのまま使用するか、回答を編集してからお客様に送信するかを選択できます。スマート リプライの回答の編集率を計算すると、候補の回答が編集される頻度を確認できます。次のクエリは、提案された各スマート リプライと、そのスマート リプライの直後に続くエージェントのレスポンスを取得します。次に、エージェントのレスポンスに対応するスマート リプライが含まれていない回数をカウントし、この数をスマート リプライの合計数で割ります。

WITH calculation AS ( SELECT JSON_VALUE(PARSE_JSON(JSON_VALUE(annotation.annotationRecord), wide_number_mode=>'round'), "$.reply") AS smartReply, ( # Get the agent response that immediately follows the smart reply. SELECT sen2.sentence FROM UNNEST (sentences) AS sen2 WHERE sen2.createTimeNanos = ( SELECT MIN(sen3.createTimeNanos) FROM UNNEST (sentences) AS sen3 WHERE sen3.createTimeNanos > sen.createTimeNanos AND sen3.participantRole = 'HUMAN_AGENT' ) ) AS agentResponseThatFollows, FROM BIGQUERY_TABLE, UNNEST (sentences) AS sen, UNNEST (sen.annotations) AS annotation WHERE annotation.type='SMART_REPLY' AND annotation.clicked=TRUE AND annotation.annotationRecord IS NOT NULL ) SELECT COUNTIF(REGEXP_CONTAINS(agentResponseThatFollows, smartReply)) / COUNT(smartReply) AS editRate FROM calculation;
要約
このセクションでは、要約に固有の指標について説明します。
GENERATOR_SUGGESTION_RESULT型には、要約を含むすべての生成結果が含まれます。CONVERSATION_SUMMARIZATION_SUGGESTION型には以前の要約が含まれます。
生成ツールの概要
JSON としてジェネレータの要約と要約に対するエージェントの編集にアクセスするクエリの例:
SELECT IF (JSON_VALUE(annotation.annotationRecord) != '', JSON_QUERY(PARSE_JSON(JSON_VALUE(annotation.annotationRecord)), "$.generatorSuggestion.summarySuggestion"), NULL) AS generator_summary, IF (JSON_VALUE(annotation.detailedFeedback) != '', JSON_QUERY(PARSE_JSON(JSON_VALUE(annotation.detailedFeedback)), "$.summarizationFeedback.summaryText"), NULL) AS feedback, FROM BIGQUERY_TABLE AS c, UNNEST(c.sentences) AS sentences, UNNEST(sentences.annotations) AS annotation WHERE annotation.type = 'GENERATOR_SUGGESTION_RESULT' AND JSON_QUERY(PARSE_JSON(JSON_VALUE(annotation.annotationRecord)), "$.generatorSuggestion.summarySuggestion") IS NOT NULL LIMIT 10 ;
編集距離
要約の編集距離は、エージェントが編集した要約と提案された要約の差を測定するものです。この指標は、エージェントが提案された要約の編集に費やした時間と相関関係があります。
要約とその修正された要約(存在する場合)をクエリします。
通話エージェントは
clickedブール値をtrueに設定せずに要約の修正を送信できるため、clickedのステータスに関係なくクエリの要約が可能です。エージェントの要約が null の場合、エージェントは提案された要約を修正しなかったか、修正された要約が推奨されるフィードバック ルートを使用して Agent Assist に送信されませんでした。推奨される要約とエージェントが修正した要約を、好みの編集距離アルゴリズムを使用して比較し、要約の編集距離を計算します。たとえば、挿入、削除、置換に同じペナルティが適用されるレーベンシュタイン距離などです。

SELECT JSON_VALUE(PARSE_JSON(JSON_VALUE(annotation.annotationRecord)), "$.text") AS suggestedSummary, IF (JSON_VALUE(annotation.detailedFeedback) != '', JSON_QUERY(PARSE_JSON(JSON_VALUE(annotation.detailedFeedback)), "$.summarizationFeedback.summaryText"), NULL) AS feedback, FROM BIGQUERY_TABLE, UNNEST (sentences) AS sen, UNNEST (sen.annotations) as annotation WHERE type='CONVERSATION_SUMMARIZATION_SUGGESTION';
レートを編集
要約の編集率は、編集距離を編集された要約の文字列の長さで割ることで計算できます。この指標は、エージェントが要約を編集した割合を示します。この編集率に上限はありませんが、値が 1 以上の場合は、生成された要約が不適切であることを意味し、この機能を無効にすることをおすすめします。
割合を編集する
編集率は、エージェントがそのまま使用せずに編集した、提案された要約の合計数に対する割合です。エージェントが編集した要約の数を、提案された要約の数で割って算出されます。この指標は、値が 0 に近い場合にモデルの品質を示す優れたシグナルとなります。ただし、1 に近い場合でも、編集が軽微で、提案された要約が編集されたとカウントされるため、モデルの品質が低いとは限りません。

WITH summaryAndEdits AS ( SELECT JSON_VALUE(PARSE_JSON(JSON_VALUE(annotation.annotationRecord)), "$.text") AS suggestedSummary, IF (JSON_VALUE(annotation.detailedFeedback) != '', JSON_QUERY(PARSE_JSON(JSON_VALUE(annotation.detailedFeedback)), "$.summarizationFeedback.summaryText"), NULL) AS editedSummary, FROM BIGQUERY_TABLE, UNNEST (sentences) AS sen, UNNEST (sen.annotations) AS annotation WHERE type='CONVERSATION_SUMMARIZATION_SUGGESTION' ) SELECT countif (suggestedSummary IS NOT NULL) AS totalSummaries, countif (editedSummary IS NOT NULL) AS editedSummaries, countif (editedSummary IS NOT NULL) / countif (suggestedSummary IS NOT NULL) AS editRate FROM summaryAndEdits;