ClaudeでVOC分析 — 問い合わせCSVから週次レポートを作る手順
ヘルプデスクの問い合わせCSVをClaudeに渡し、分類・件数の検算・個人情報の除外・Artifactsでの共有までを週次で回す手順です。
問い合わせCSVから週次VOCレポートを作る流れ
VOC(Voice of Customer、顧客の声)の週次レポートは、ヘルプデスクから書き出したCSVをClaudeにアップロードし、分類・集計・レポート化まで同じ会話の中で進められます。Claudeがサンドボックス(隔離された実行環境)でPythonを動かすので、集計のコードを自分で書く必要はありません。
ただし、問い合わせの本文は自由記述です。分類の基準がぶれやすく、件数も合っているかどうかを自分で確かめる工程が要ります。この記事では、毎週同じ品質で回すために、次の4点を順に押さえます。
- 分類軸を先に決めて、毎週同じものを使う
- 件数を検算して、集計の取りこぼしを見つける
- 個人情報の列をアップロード前に落とす
- 結果をArtifactsにまとめて共有する
Zendeskなどに接続して取り込む方法はZendeskチケット分析にあります。この記事は接続せず、エクスポートしたCSVを渡す経路です。
事前に確認すること
CSVの分析は「コード実行とファイル作成」の機能に乗っています。Free、Pro、Max、Team、Enterpriseのどのプランでも既定で有効ですが、TeamとEnterpriseは組織の管理者が止められます。設定はFree・Pro・Maxなら「Settings > Capabilities」、Team・Enterpriseなら「Organization settings > Capabilities」にあります。
Artifactsを使う場合も、同じ機能がオンである必要があります。ArtifactsのヘルプにCloud code execution and file creationを有効にするよう明記されています。
ファイルの上限は、アップロードもダウンロードも1ファイル30MBです。1週間分の問い合わせなら多くの場合は収まりますが、本文の長いメール履歴を丸ごと含めると膨らみます。必要な列だけに絞ったCSVを作ります。
チャットで使う量にも注意が必要です。ファイル作成を伴う作業は、通常のチャットよりプランの使用量を多く消費します。毎週の定例にするなら、1回の会話で何往復も試行錯誤せず、プロンプトを固定して回すのが現実的です。
手順1: CSVの列を絞り、個人情報を落とす
最初にやるのは分析ではなく、渡す列を減らすことです。VOC集計に要るのは、問い合わせ日・チャネル・件名・本文・ステータスくらいです。氏名、メールアドレス、電話番号の列は、集計に使わないなら渡す必要がありません。
ヘルプデスクのCSVには、列を落としても本文の中に個人情報が残る問題があります。「連絡先はtaro@example.comです」のような一文です。列の削除と本文の置換をまとめて行う小さなスクリプトを、手元で動かしてからアップロードします。
import csv, re, sys
DROP = {"customer_name", "customer_email", "phone"}
EMAIL = re.compile(r"[\w.+-]+@[\w-]+(\.[\w-]+)+")
PHONE = re.compile(r"0\d{1,4}-\d{1,4}-\d{3,4}")
src, dst = sys.argv[1], sys.argv[2]
with open(src, newline="", encoding="utf-8-sig") as f:
rows = list(csv.DictReader(f))
keep = [c for c in rows[0].keys() if c not in DROP]
masked = 0
with open(dst, "w", newline="", encoding="utf-8") as f:
w = csv.DictWriter(f, fieldnames=keep)
w.writeheader()
for r in rows:
out = {c: r[c] for c in keep}
for c in ("subject", "body"):
new = PHONE.sub("[電話]", EMAIL.sub("[メール]", out[c]))
masked += new != out[c]
out[c] = new
w.writerow(out)
print(f"{len(rows)}行を読み込み、列{len(keep)}個を出力。本文を置換した行: {masked}")3行のサンプルCSVで、Python 3.12.2に対して実行した出力が次のとおりです。標準ライブラリだけで動くので、追加のインストールは要りません。
python3 mask_voc.py tickets.csv tickets_masked.csv3行を読み込み、列5個を出力。本文を置換した行: 2ticket_id,created_at,channel,subject,body
1001,2026-10-05,email,請求書が届かない,先週から請求書が届きません。連絡先は [メール] です。
1002,2026-10-05,chat,ログインできない,パスワード再設定後もログインできません。電話は[電話]です。この正規表現が拾えるのは、メールアドレスと「03-1234-5678」形式の電話番号だけです。本文に書かれた氏名、住所、注文番号は残ります。完全な匿名化とは考えず、渡す情報を減らす一段目の処置として使います。
顧客のデータをアップロードする前に、アカウントの学習利用の設定も確認しておきます。プラン別の既定と手順はClaudeを学習させない設定にあります。
手順2: 分類軸を決めて、プロンプトに固定する
VOCレポートで週ごとの比較が成り立つのは、分類軸が週をまたいで同じときだけです。Claudeに「適当にカテゴリ分けして」と頼むと、週ごとに違う名前のカテゴリが生まれ、前週比が取れなくなります。
そこで、最初の週に分類軸を人が決め、定義をプロンプトに書き込みます。
| 分類 | 含める問い合わせ | 迷いやすい例 |
|---|---|---|
| 請求・支払い | 含める問い合わせ請求書、決済失敗、返金 | 迷いやすい例請求書の再発行依頼 |
| ログイン・アカウント | 含める問い合わせログイン不可、パスワード、権限 | 迷いやすい例招待メールが届かない |
| 使い方 | 含める問い合わせ操作方法、設定の質問 | 迷いやすい例機能の有無を聞く問い合わせ |
| 不具合 | 含める問い合わせエラー表示、想定と違う動作 | 迷いやすい例使い方の質問に見えるエラー |
| 契約・解約 | 含める問い合わせプラン変更、解約手順 | 迷いやすい例解約を迷っている相談 |
| 要望 | 含める問い合わせ機能追加、改善の提案 | 迷いやすい例不具合の指摘を兼ねるもの |
「迷いやすい例」の列が効きます。境界の判断を先に書いておけば、同じ文面が週によって別の分類に入る揺れを減らせます。分類は1件につき1つに限り、どれにも当てはまらないものは「その他」に入れ、「その他」の内訳を別に出させる運用にします。
添付のtickets_masked.csvは、今週(10/5〜10/11)の問い合わせです。
次の6分類のうち、1件につき1つだけを割り当ててください。
分類: 請求・支払い / ログイン・アカウント / 使い方 /
不具合 / 契約・解約 / 要望
どれにも当てはまらないものは「その他」にしてください。
まず分類表(分類・定義・割り当て件数)を出し、
合計が全行数と一致するかを報告してください。
一致しない場合は、集計に進まずに理由を説明してください。分類結果は、ticket_id付きの一覧として必ず出力させます。Claudeの返した件数を信じる前に、人が見直せる形で残すためです。
手順3: 件数を検算する
Claudeが返す集計表は、きれいに見えても合っているとは限りません。VOCの場合、取りこぼしが起きやすい場所は3つあります。
件数がずれる原因
行の取りこぼし
ヘッダ行、空行、改行を含む本文の扱いで、読み込んだ行数がヘルプデスクの管理画面の件数とずれます。
分類の二重カウント
1件に複数の分類を許すと、分類の合計が全件数を超えます。1件1分類と決めておけば、合計と全件数を突き合わせられます。
期間の境界
エクスポートのタイムゾーンと、レポートの週の区切りがずれると、日曜深夜の問い合わせが前後の週に入ります。
検算は、次の順で行います。
件数の検算の順序
- 1
管理画面の件数と突き合わせる
ヘルプデスクの画面で、同じ期間の問い合わせ件数を確認します。Claudeが報告した読み込み行数と一致するかを見ます。
- 2
分類別の合計を確認する
分類別の件数を足して、全行数と一致するかを確認します。一致しないときは分類表を信用せず、割り当て一覧を調べます。
- 3
分類をサンプルで目視確認する
分類ごとに数件をランダムに抜き出させ、本文と分類が合っているかを人が読みます。「その他」と「不具合」は特に抜き出す数を増やします。
- 4
前週との差を確認する
増減が大きい分類は、本当に増えたのか、分類の揺れによるものかを確かめます。
手順3のサンプル確認は、次のように依頼します。
各分類から5件ずつ、ランダムにticket_id・件名・本文の冒頭50字を
表示してください。「その他」は10件表示してください。
表示する前に、乱数の種を固定したことを教えてください。乱数の種を固定させるのは、同じ抜き出しを後から再現できるようにするためです。数件の確認で分類の誤りが見つかったら、「迷いやすい例」の列に境界の判断を足して、全件の分類をやり直させます。
手順4: 週次のコメントと代表的な声をまとめる
件数が確定したら、数字の背景を読む工程に入ります。ここで頼むのは、件数の多い分類の傾向と、前週から増えた分類の具体的な内容です。
検算済みの分類結果をもとに、次を作ってください。
1. 件数が多い上位3分類について、問い合わせの共通点を2〜3行で説明
2. 前週(添付のlast_week.csv)から件数が20%以上増減した分類と、
増減の理由と読める具体的な問い合わせ例(ticket_id付き)
3. 分類ごとの代表的な声を1件ずつ、本文のまま引用
推測で書いた部分には「推測」と明記してください。「ticket_id付き」の指定が重要です。レポートに書かれた理由が本当にデータから導かれたものか、後から原票に戻って確かめられます。引用は本文の原文のままに限り、要約や言い換えをさせません。代表的な声が実在の問い合わせであることを、レポートの読み手に示すためです。
一般的な顧客像の作成が目的なら、Claudeで顧客データからカスタマーペルソナを作る手順が別の入口になります。週次の集計は、あくまで件数の変化を追うための作業です。
手順5: Artifactsにレポートとして残す
分析の結果は、そのままチャットに流しておくこともできますが、チームに共有するならArtifactsにまとめます。Claudeは、内容が自己完結していて、後から参照や再利用がされそうなものをArtifactにします。週次のレポートはこの条件に合います。
Artifactsには、DocsやSlides、Design、Dashboards(beta)といったテンプレートがあります。週次のVOCレポートなら、文章と表が中心のDocsが向いています。DocsはWord、PDF、Markdown、Google Docsに書き出せます。
Dashboardsテンプレートは、データ基盤や連携アプリを起点に作るものです。アップロードしたCSVを起点にするとはヘルプに書かれていないため、CSVの集計結果を見せたいなら、DocsかチャットでのArtifact作成で組み立てます。
検算済みの集計結果を、次の構成でレポートにしてください。
- 今週のサマリー(件数・前週比を3行)
- 分類別の件数表(前週との差つき)
- 増減が大きかった分類の説明と、代表的な声
- 来週の確認事項
数字はすべて、先ほど検算した分類表と一致させてください。
グラフを入れる場合も、元の数値を表で併記してください。注意点が2つあります。ひとつは、2026年9月16日より前にチャットで作ったArtifactsは「レガシー」として扱われ、新しく作れない点です。以前の手順を前提にした記事を見るときは、この違いを意識します。もうひとつは、共有の範囲です。共有する前に、共有設定で誰が見られるかを確認します。
週ごとの履歴をArtifactに残すかどうか
Artifactsにはデータを保存する機能があり、個人用と共有用を選べます。ストレージは1つのArtifactにつき20MBで、テキストのみです。ただし、VOCの本文や顧客の声を共有ストレージに入れると、そのArtifactを使う全員に見えます。ヘルプにも、機微な情報を入力する前に共有ストレージかどうかを確認するよう警告があります。
履歴を残すなら、分類別の週次の件数だけを保存する形が安全です。問い合わせの本文は、保存対象から外します。前週との比較は、保存した件数表か、前週のCSVを同じチャットに添付して行います。
毎週同じ形で回す
2週目以降は、初週に固めたプロンプトを使い回します。プロジェクトにファイルを置くと、Claudeの実行環境から参照でき、毎回貼り直す手間が省けます。分類表とプロンプトのひな形をプロジェクトに置いておけば、毎週の作業は、新しいCSVの添付と日付の差し替えだけになります。
毎週の流れは、次のとおりです。
- ヘルプデスクから今週のCSVをエクスポートする
mask_voc.pyで列と本文の個人情報を落とす- 分類表つきのプロンプトで分類と件数の合計を出させる
- 管理画面の件数と突き合わせ、サンプルを目視する
- 傾向のコメントを作らせ、Docsなどのレポートにまとめる
同じ作業を人手で繰り返すと、分類軸の解釈が担当者によって違ってきます。Claudeに渡す分類表は、その解釈を文書にして固定する役割も持ちます。分類を増減するときは、前週との比較ができなくなるので、変更した週をレポートに明記します。
よくあるつまずき
分類の件数が毎週大きく動く
分類の定義があいまいか、「迷いやすい例」が足りていません。件数が動いた分類からサンプルを抜き出し、同じ文面が別の分類に入っていないかを調べます。
日本語が文字化けする
CSVの文字コードがUTF-8でない可能性があります。上のスクリプトは utf-8-sig で読み込み、UTF-8で書き出すので、BOM付きのUTF-8には対応します。Shift_JISのCSVは、読み込み時の encoding を cp932 に変えます。
件数が多くて途中で止まる
週の件数が多い場合は、チャネルや日付で分けて別々の会話で分類し、最後に件数を足し合わせます。Claudeが1回に実行できるタスクの長さには上限があるため、一度に全件を処理させるより、分けたほうが安全です。
個人情報をチャットに入れて良いか迷う
判断は組織の規程によります。Team・Enterpriseでは、管理者が機能そのものを止められます。Team・Enterpriseの管理者がネットワークアクセスを無効にしても、コード実行とファイル作成の機能自体は使えるため、データの分析は進められます。無効にすると、サンドボックスから外部へデータが送られなくなります。社外に出せないデータは、社内の規程を確認してから扱います。
既存の分析記事との使い分け
CSVを渡して集計する基本はClaude CSV分析の使い方にまとめています。研修後のアンケートの自由記述を分類する手順は研修後アンケートの集計・分析にあります。この記事の特徴は、問い合わせという「毎週届く、個人情報を含む自由記述」を前提に、渡す前の除外と検算を工程に組み込んだ点です。
問い合わせへの返信文を作る使い方はClaudeで問い合わせ返信を作るで扱っています。集計と返信は別の作業なので、同じ会話に混ぜず、会話を分けると分類の精度を確かめやすくなります。
まとめ
週次VOCで時間がかかるのは分類そのものではなく、毎週の結果が信用できる状態に保つ作業です。分類表を固定し、件数を管理画面と突き合わせ、個人情報はアップロードの前に落とす。この3つをプロンプトと手元のスクリプトに組み込めば、Claudeに任せる範囲が広がっても、レポートの数字を人が説明できます。