内定辞退の理由と辞退率を分析するClaude手順 — 選考ステップ別に見る
ATSのCSVをClaudeに渡し、内定辞退の理由を分類して選考ステップ別の辞退率を出す手順です。分母の取り方、辞退理由コードブック、依頼文、手元での検算までを通します。
内定辞退の分析で最初に決めるのは、ClaudeへのプロンプトではなくCSVの列と辞退率の分母です。辞退が出る場所は内定後だけではありません。面接の案内を出した時点でも、最終面接の案内後でも、候補者は辞退します。
この記事は、ATS(採用管理システム)から書き出したCSVをClaudeに渡し、辞退の自由記述を理由コードに分類し、選考ステップ別の辞退率を出すまでの手順です。最後に、同じ数字を手元のPythonで再計算して突き合わせます。
辞退率の分母は「企業が次へ進めた人数」にする
辞退率は、分母の取り方で意味が変わります。応募者全体を分母にすると、書類で落とした人まで入り、辞退の多さが見えなくなります。
ここでは、企業側が次のステップに進める判断を出した人を分母にします。その中で、候補者のほうから降りた人が分子です。
| ステップ | 分母(企業が進めた人) | 分子 |
|---|---|---|
| 面接案内 | 分母(企業が進めた人)書類を通過して面接を案内した人 | 分子面接前に辞退した人 |
| 最終案内 | 分母(企業が進めた人)一次面接を通過して最終面接を案内した人 | 分子最終面接前に辞退した人 |
| 内定 | 分母(企業が進めた人)内定を出した人 | 分子承諾前に辞退した人 |
この定義は筆者が分析のために置いた約束事で、ATSやClaudeの仕様ではありません。自社の選考フローに合わせてステップ名を増減して構いませんが、分母と分子の定義は先に文章にして、Claudeにも渡します。
落とし穴
結果の出ていない人を分母に入れると辞退率が低く出る
書き出した時点で選考中の人は、まだ辞退するかどうかが決まっていません。その人を分母に入れると、辞退率は実態より低く見えます。分母から外し、外した人数を併記させます。
歩留まり全体を媒体別に見る集計やCSVの整え方は、採用の歩留まりをClaudeで分析する手順にあります。ここで扱うのは、辞退した人だけを取り出して段階と理由を見る分析です。
ATSのCSVを辞退分析用の列に寄せる
1候補者1行、書類を通過した人だけを残します。書類で不合格になった行は、辞退分析には要りません。
| 列 | 中身 | 例 |
|---|---|---|
| candidate_id | 中身候補者を区別するID | 例C001 |
| source | 中身応募経路 | 例人材紹介 |
| last_offer_step | 中身企業が最後に案内したステップ | 例最終案内 |
| status | 中身辞退 / 不合格 / 承諾 / 選考中 | 例辞退 |
| days_in_process | 中身応募から結果までの日数 | 例35 |
| reason_text | 中身辞退理由の自由記述 | 例提示年収が希望を下回ったため |
candidate_id,source,last_offer_step,status,days_in_process,reason_text
C001,人材紹介,内定,承諾,26,
C002,求人媒体A,面接案内,選考中,23,
C003,求人媒体A,面接案内,不合格,17,ATSによっては、面接官の列やエージェントの担当者名を書き出せます。面接官ごとの辞退率を見たくなりますが、1人あたりの担当件数は少ないのが普通です。5件中2件の辞退を「辞退率40%」と読めば、個人の評価につながる数字になります。使うなら面接官の名前ではなくIDに置き換え、件数が少ない人は集計に出さない運用が安全です。
氏名と連絡先は外し、自由記述の固有名詞も確かめる
分析に氏名・メールアドレス・電話番号は使いません。表計算ソフトで列ごと削除してから添付します。見落としやすいのがreason_textの中身です。「〇〇さんの対応が遅かった」のように面接官や担当者の名前が入っていることがあります。
自由記述の固有名詞は、氏名の一覧を使って手元で置換します。辞退先の企業名は集計に要らないので、[他社]に置き換えてしまう手もあります。健康や家庭の事情のように要配慮個人情報に当たる記述が混ざる場合の考え方は、要配慮個人情報をClaudeに入力してよいかで扱っています。
辞退理由のコードブックを先に決める
辞退理由は自由記述なので、同じ不満でも書き方がばらばらです。分類の枠を先に文書にしておくと、月をまたいでも件数を比べられます。同じ型で退職面談の理由を数える手順は退職面談の離職理由を分析するClaude手順にあります。
# 内定辞退の理由コードブック v1
主たる理由を1つだけ選ぶ。
- competing_offer: 他社の内定・選考結果を理由に挙げている
- compensation: 年収・待遇の提示額が理由
- response_speed: 連絡や日程調整の遅さが理由
- interview_impression: 面接での印象・説明の不足が理由
- work_style: 勤務地・出社頻度・働き方が理由
- motivation: 志望度の変化・進路の見直しが理由
- unknown: 理由の記載がない、または「一身上の都合」など中身がない
## 判断ルール
- 記述にある理由だけで選ぶ。書かれていない事情を推測で補わない
- 複数の理由が並ぶときは、本人が先に挙げたものを主とする
- 迷ったら unknown にせず、迷った旨を note 列に書くunknownを独立させるのが要点です。辞退の連絡では理由が書かれない、あるいは「一身上の都合」だけで済まされることがあります。それを近いカテゴリに押し込むと、競合他社への流出が実際より多く見えます。
この表の理由コードは、候補者が辞退時に述べた理由です。本音とずれる場合があることは、結果を読む段階で頭に置いておきます。
Claudeに渡す依頼文
CSVを添付し、最初の依頼では集計させません。読み込めた行数と値の種類を答えさせ、人間が想定とのずれを先に見ます。
添付のCSVは、採用選考の候補者データです。集計に入る前に、次に答えてください。
- 読み込んだ行数
- last_offer_step と status の値の種類と、それぞれの件数
- reason_text が空欄の行数(status が辞退の行に限る)件数がATS側と合わなければ、書き出し条件が違っています。確認が済んだら、分類を頼みます。
status が「辞退」の行だけを対象に、reason_text を
decline_codebook_v1.md の理由コードのどれか1つに分類してください。
コードブックにない理由は作らないでください。
返す形は candidate_id, last_offer_step, reason_text, reason_code,
note の5列のCSVです。reason_text は原文のまま書き換えず、
迷った行は note に理由を書いてください。コードブックは同じ会話にテキストで貼るか、ファイルとして添付します。CSVはClaudeが対応する文書形式の一つで、XLSXを使う場合はコード実行とファイル作成を有効にしておく必要があります。分類のCSVが返ったら、ステップ別の集計に進みます。
先ほどの分類結果と元のCSVを使って、次を表にしてください。
- ステップ(面接案内・最終案内・内定)ごとの
辞退人数、分母の人数、辞退率
- 分母は「そのステップを案内した時点で結果が出ている人」とし、
status が選考中の人は除外して、除外した人数を併記する
- 各ステップの辞退者について、reason_code ごとの件数
- 辞退者の days_in_process の平均
分母が0のときは0%ではなく「算出不可」と書いてください。分子と分母を並べさせるのが肝心です。「30%」だけでは、10人中3人なのか100人中30人なのか区別がつきません。
手元で同じ集計を動かして突き合わせる
Claudeが返した数字は、採用会議に出す前に検算します。標準ライブラリだけで動く小さなスクリプトで足ります。
import csv
from collections import Counter, defaultdict
STEPS = ["面接案内", "最終案内", "内定"]
rank = {s: i for i, s in enumerate(STEPS)}
reached, declined = Counter(), Counter()
reasons = defaultdict(Counter)
pending = Counter()
for row in csv.DictReader(open("ats.csv", encoding="utf-8")):
r = rank[row["last_offer_step"]]
for s in STEPS[: r + 1]:
if s == row["last_offer_step"] and row["status"] == "選考中":
pending[s] += 1 # 結果が出ていない人は分母に入れない
else:
reached[s] += 1
if row["status"] == "辞退":
s = row["last_offer_step"]
declined[s] += 1
reasons[s][row["reason_code"] or "(空欄)"] += 1
for s in STEPS:
n, d = reached[s], declined[s]
rate = f"{d/n:.0%}" if n else "算出不可(分母0)"
print(f"{s}: 辞退 {d} / 到達 {n} = {rate}(選考中 {pending[s]} 人を除外)")
for code, c in reasons[s].most_common():
print(f" {code}: {c}")reason_code列には、Claudeの分類結果をCSVに戻した値を入れます。下の出力は、160人分の架空データにコードを付けて走らせた結果です。実在の採用データではありません。
python3 tally.py面接案内: 辞退 11 / 到達 155 = 7%(選考中 5 人を除外)
competing_offer: 4
response_speed: 3
motivation: 2
work_style: 1
unknown: 1
最終案内: 辞退 5 / 到達 89 = 6%(選考中 4 人を除外)
interview_impression: 2
work_style: 2
response_speed: 1
内定: 辞退 11 / 到達 37 = 30%(選考中 1 人を除外)
competing_offer: 5
work_style: 3
compensation: 2
unknown: 1Claudeの表の人数がこの形式の出力と一致すれば、集計の骨格は信頼できます。ずれたときは、除外した「選考中」の人数と、ステップ名のゆれを先に疑います。
数字の読み方
出力の例で、読み取れることと読み取れないことを分けます。
この出力から読めること
辞退は内定後に集中している
面接案内と最終案内の辞退率は6〜7%、内定後は30%です。打ち手を検討する優先度は、内定後のフォローが高くなります。
内定後の分母は小さい
内定後は11/37で、3人増減すれば率が8ポイント動きます。月ごとに比べるより、四半期や半期でまとめて見ます。
段階によって理由が違う
面接前は連絡の遅さが目立ち、内定後は他社内定と条件が中心です。段階別に理由を分けて見ると、対策の宛先が選考の運営か、オファーの条件かに分かれます。
件数が小さいぶん、差を断定しないための手当も必要です。差が偶然の範囲かどうかをClaudeに聞くこともできますが、使った手法と前提を答えさせてから受け取ります。
選考日数も辞退と関係しやすい列です。連絡の遅れを理由に挙げた辞退者が、日数の長い側に偏っているかは、days_in_processとの突き合わせで見られます。ただし日数が長いから辞退したのか、辞退を決めたから日数の記録が長引いたのかは、CSVだけでは区別がつきません。
理由の自由記述をそのまま信じない
辞退理由は、候補者が辞退を伝えるときに口にした理由です。「他社に決まったため」の裏に年収の差があることも、「一身上の都合」の裏に面接の印象があることもあります。
理由コードの件数は、辞退の本当の原因の順位ではなく、辞退時に何と説明されたかの分布として扱います。原因に近づくには、辞退者への短いヒアリングや、承諾者との条件比較が要ります。顧客の失注理由を同じ型で数える例はCoworkで営業の失注理由を分析するにあります。
対策案は仮説として出させ、人が選ぶ
分類と集計が済んだら、対策案もClaudeに出させられます。ただし、CSVから言えるのは「どの段階で、どう説明された辞退が多いか」までです。対策案は検証前の仮説として受け取ります。
集計結果を前提に、辞退を減らす対策案を、ステップごとに最大3つ出してください。
各案には次を付けてください。
- 根拠にしたステップ・理由コード・人数
- 実施した場合に、次の集計で見るべき指標
- CSVの範囲では分からず、追加で調べる必要のあること
件数が5人未満の理由コードは、根拠にしないでください。「根拠にした人数」を書かせると、少数の辞退から大きな施策を導いていないかをその場で確かめられます。「追加で調べること」の欄には、辞退者へのヒアリングや、承諾者との条件比較が挙がるはずです。出てきた案は、人事と現場の面接担当者が選び、実施後に同じCSVの形で再集計して効果を見ます。
添付できる量と、機能がオンかの確認
CSVの添付で押さえる数字は次のとおりです。
| 添付先 | 1ファイルの上限 | 補足 |
|---|---|---|
| 1回のチャット | 1ファイルの上限500MB | 補足1チャットに最大20ファイル |
| プロジェクトのファイル | 1ファイルの上限30MB | 補足本文の抽出のみ(マルチモーダルPDFを除く) |
採用データの4〜6列のCSVは、この上限に近づきません。PDF以外の文書は本文のテキストだけが抽出されるため、ATSの画面を貼り込んだ画像入りの資料は、画像の中身が読まれません。数字は必ずCSVかXLSXの表で渡します。プロジェクトの場合は、ファイル全体の内容がClaudeのコンテキストウィンドウに収まる必要があります。月次で同じ分析を回すなら、プロジェクトにコードブックと依頼文を置いておくと、毎回貼り直さずに済みます。
集計やファイル出力が動かないときは、依頼文より先に機能の有効化を確かめます。コード実行とファイル作成は、Free・Pro・Max・Team・Enterpriseの各プランで、Web・Claude Desktop・モバイルから使えます。TeamとEnterpriseでは、組織の管理者が設定で無効にできます。ネットワークアクセスを切った環境では、事前に入っているパッケージだけで実行されます。
採用データは機微な情報なので、会社のAI利用ルールで外部サービスへの添付が制限されていないかを、分析の前に確かめます。CSV分析そのものの基本はClaude CSV分析の使い方にまとめています。
まとめ
内定辞退の分析は、辞退率の分母を「企業が次へ進めた人数」で揃えること、理由を事前のコードブックで分類することの2点で、数字が比べられるものになります。選考中の人を除くことと、unknownを独立させることが、実態からずれにくくする仕掛けです。
出てきた数字は、辞退時に述べられた理由の分布です。内定後の分母は小さくなりがちなので、率だけでなく人数を並べ、期間をまとめて見ます。手元のスクリプトで人数を突き合わせてから、採用会議の資料に載せます。