採用の選考歩留まりを毎月集計して、どこで候補者が離脱しているかを洗い出す
採用管理システムから書き出した選考ステータスを入力に、ポジションごとの応募から内定承諾までの通過率を集計し、前月との差が大きい箇所と、辞退コメントから読み取れる論点を整理します。
- 利用ツール
- ChatGPT/Claude/Gemini/Google Apps Script/Python
- 対象業界
- IT・SaaS/その他/人材/小売/製造
- 対象部門
- 人事/採用
- 対象業務
- 要約/集計・分析
- 主な課題
- データ分析に時間がかかる/人手が足りない/判断に時間がかかる
- AIで行う処理
- 要約
- 主な効果
- 判断支援/品質標準化/工数削減
- 導入難易度
- ★★☆☆☆
- 実装レベル
- 半自動化
- 費用感
- SaaS追加(小)
- 人間の確認
- 必須
01導入前 / 導入後の業務フロー
- 月初にATSから選考ステータスの一覧をCSVで書き出す
- スプレッドシートに貼り、ポジション名の表記ゆれを手で直す
- 段階ごとの人数を数え、通過率の数式を組む
- 前月のシートを開き、数字を横に並べて比べる
- 落ち込んでいるポジションを目で探す
- そのポジションの辞退コメントをATSで1件ずつ開いて読む
- 「求人媒体Aからの応募の質が落ちている」のような所見をコメント欄に書く
- 30ポジションぶんを1枚にまとめ、採用会議の資料にする
- 自動毎月1日の朝、ATSから選考ステータスと辞退コメントを取得する
- 自動ポジション名を正規のマスタに寄せる(表記ゆれの名寄せ)
- 自動段階ごとの人数と通過率を、ポジション別・流入経路別に集計する
- 自動直近12か月の推移と比べ、落ち込みが大きい箇所を抽出する
- 自動該当ポジションの辞退コメントを読み、辞退の理由を区分ごとにまとめる
- 自動「どこが落ちているか」「何が起きていそうか」「確かめるべきこと」を論点として出す
- 人採用担当が論点を読み、事実関係を確かめて打ち手を決める
- 人採用会議でポジションごとの方針を決める
各工程の詳しい説明を読む
- 月初にATSから選考ステータスの一覧をCSVで書き出す
- スプレッドシートに貼り、ポジション名の表記ゆれを手で直す
- 段階ごとの人数を数え、通過率の数式を組む
- 前月のシートを開き、数字を横に並べて比べる
- 落ち込んでいるポジションを目で探す
- そのポジションの辞退コメントをATSで1件ずつ開いて読む
- 「求人媒体Aからの応募の質が落ちている」のような所見をコメント欄に書く
- 30ポジションぶんを1枚にまとめ、採用会議の資料にする
問題は4つあります。
(a)データの整形に時間がかかる。 ATSのCSVはポジション名が自由入力のため、「エンジニア(バックエンド)」と「バックエンドエンジニア」が別物として出てきます。毎月同じ直しをしています。
(b)比較が前月との2点比較で止まる。 本当は「3か月続けて落ちている」を見たいのですが、シートを3枚開いて見比べる手間がかかるため、やっていません。
(c)辞退コメントが読まれない。 月に60件前後の辞退コメントがATSに入りますが、全部開いて読むと1時間かかるため、印象に残ったものだけを拾っています。いちばん情報がある場所が読まれていません。
(d)担当者が変わると再現できない。 集計のシートは作った本人しか直せません。数式が壊れると、その月の会議資料が出ません。
- 【自動】 毎月1日の朝、ATSから選考ステータスと辞退コメントを取得する
- 【自動】 ポジション名を正規のマスタに寄せる(表記ゆれの名寄せ)
- 【自動】 段階ごとの人数と通過率を、ポジション別・流入経路別に集計する
- 【自動】 直近12か月の推移と比べ、落ち込みが大きい箇所を抽出する
- 【自動】 該当ポジションの辞退コメントを読み、辞退の理由を区分ごとにまとめる
- 【自動】 「どこが落ちているか」「何が起きていそうか」「確かめるべきこと」を論点として出す
- 【人】 採用担当が論点を読み、事実関係を確かめて打ち手を決める
- 【人】 採用会議でポジションごとの方針を決める
自動化されるのは「集める」「揃える」「数える」「比べる」「読む」です。何をするかを決めるのは人です。
02今回想定するシステム構成
ATS(採用管理システム) │ CSV書き出し / API ▼ Google スプレッドシート(選考ステータス・辞退コメント) │ ▼【トリガー】毎月1日の時間主導型トリガー Google Apps Script │ ├──▶ ポジション名の名寄せ(マスタ照合) │ ├──▶ 通過率の集計(段階別 / 流入経路別 / 12か月推移) │ ├──▶ Gemini API ── 辞退コメントの区分けと、論点の作成 │ └──▶ 月次シートへ書き込み │ ▼ 採用会議用のシート ──【人が確認して打ち手を決める】
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| 生成AI | Gemini API | Claude API、OpenAI API |
| 実行環境 | Google Apps Script | Python |
| 集計 | Google スプレッドシート | 表計算ソフト |
| 連携 | ATS(採用管理システム) | 各社の採用管理システム |
ATSに歩留まりのレポート機能があるなら、まずそちらを見てください。 主要なATSは段階別の通過率を標準で出します。自前で組む価値があるのは、流入経路別の通過率と辞退コメントの中身を、同じ画面で突き合わせたい場合です。この2つを並べて出せる製品は多くありません。
03どうやって実装するのか
処理の起点を決める
毎月1日の時間主導型トリガーで動かします。Apps Script のインストール型トリガーは、分単位・時間単位・日単位・週単位・月単位で実行を設定できます。
ただし実行時刻は正確ではありません。公式ドキュメントには、午前9時のトリガーを作った場合、実際には午前9時から午前10時の間のいずれかの時刻に実行されると書かれています。採用会議の直前に走らせる設計にしないでください。 会議が10時なら、トリガーは前日の夜に置きます。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 選考ステータス | 候補者ID、ポジション、流入経路、現在の段階、日付 | ATS |
| 段階の遷移履歴 | いつどの段階に進んだか、いつ落ちたか | ATS |
| 辞退コメント | 候補者からの辞退理由、社内の見送り理由 | ATS |
| ポジションマスタ | 正規のポジション名、部署、募集人数、優先度 | 社内で作る |
| 過去12か月の集計結果 | 前月までの通過率 | 自分で作った月次シート |
データの取得方法を決める
ATSから: APIがあればAPIで、なければ月初のCSV書き出しを人が1回行い、スプレッドシートに取り込みます。この1回の手作業は残してかまいません。 月1回2分の作業を自動化するために、ATSのAPI認証を組むのは割に合わないことが多いためです。
Apps Script から外部のAPIを呼ぶには UrlFetchApp を使います。ATSのAPIも生成AIのAPIも、同じ方法で呼べます。
過去の集計結果: 同じスプレッドシートに月次のシートを積んでいきます。12か月ぶんの推移を見るために、毎月の集計結果を必ず残してください。 ここを消すと、翌月から「3か月続けて落ちている」が見えなくなります。
AIへ渡す前に整形する
- ポジション名の名寄せ … 自由入力のポジション名をマスタに寄せます。完全一致で当たらないものは生成AIに候補を出させ、人が1回確認してマスタに登録します。 自動でマスタに追加しないでください
- 重複候補者の除去 … 同じ人が複数ポジションに応募していることがあります。候補者IDで数え、人数と応募件数を分けて集計します
- 選考中の除外 … まだ選考中の候補者を「落ちた」に数えると通過率が下がります。当月末時点で選考中の人は母数から外します
- 少人数ポジションの扱い … 応募が3件以下のポジションは通過率を出しません。1人落ちただけで33%動くため、傾向として読めません
AIに処理させる
集計と生成AIで役割を分けます。
集計(スプレッドシートの計算)にさせること: 段階ごとの人数、通過率、前月差、12か月の推移。数字の計算は生成AIにさせません。 数え違いが起きたときに追えなくなります。
生成AIにさせること:
| 処理 | 内容 |
|---|---|
| 辞退コメントの区分け | 「年収」「勤務地」「他社決定」「選考スピード」などの区分に分ける |
| 落ち込みの言語化 | 数字の変化を、読んで分かる文にする |
| 論点の作成 | 「何が起きていそうか」「確かめるべきこと」を並べる |
| ポジション名の名寄せ候補 | マスタに当たらない表記の、寄せ先の候補を出す |
指示内容を固定する
あなたは採用担当を支援する分析担当者です。
渡された集計結果と辞退コメントから、今月の論点を作ってください。
【厳守事項】
- 数字は渡された集計結果のものをそのまま使ってください。
自分で計算し直したり、丸めたりしないでください。
- 母数が5人未満の通過率については、傾向を述べないでください。
「母数が少なく判断できない」と書いてください。
- 辞退コメントに書かれていない理由を推測しないでください。
コメントが少ないときは「コメントが3件しかない」と件数を書いてください。
- 候補者の氏名、年齢、性別、国籍、家族構成には触れないでください。
これらは採用の可否と関係しません。
- 打ち手は断定せず、「確かめるべきこと」として書いてください。
【今月の集計結果】
{funnel_stats}
【直近12か月の推移】
{trend_12m}
【辞退コメント(当月分)】
{decline_comments}
【ポジションマスタ】
{position_master}
「母数が5人未満なら傾向を述べない」の1行が重要です。 これを入れないと、応募3人で1人が辞退したポジションについて、もっともらしい原因が書かれます。数字が小さいほど、生成AIは断定的に書きます。
出力形式を固定する
Gemini API の構造化出力を使い、JSONスキーマを指定して受け取ります。オブジェクト・配列・文字列・数値などの基本型に加え、enum で値を決まった集合に限定できます。辞退理由の区分は enum で固定してください。 自由に書かせると、毎月違う言葉が出てきて集計できません。
{
"position_id": "",
"position_name": "",
"sample_size": 0,
"judgeable": true,
"stage_alerts": [
{
"stage": "書類選考 | 一次面接 | 二次面接 | 最終面接 | 内定承諾",
"rate_this_month": 0,
"rate_prev_month": 0,
"direction": "down | up | flat",
"months_in_a_row": 0
}
],
"decline_reasons": [
{
"category": "年収 | 勤務地 | 業務内容 | 選考スピード | 他社決定 | 社風 | その他",
"count": 0,
"quote": ""
}
],
"points": [],
"to_verify": [],
"note": ""
}
通過率は文字列でなく数値で返させます。文字列にすると「42%」のように記号つきで返り、後段のグラフで壊れます。
システムへ連携する
出力先は3通りあります。
| 方式 | 内容 |
|---|---|
| スプレッドシート | 月次シートに書き込む。いちばん簡単で、会議でそのまま開ける |
| 通知 | 落ち込みが3か月続いたポジションだけを、採用担当のチャットへ流す |
| ATSへ書き戻し | ポジションのメモ欄に論点を書く。ATSのAPI次第 |
まずは1つめだけで十分です。 月次の会議資料が自動で埋まるのが、いちばん分かりやすい効果です。
人が確認する
全件、人が確認してから会議に出します。
理由は、この出力が採用の打ち手を決める材料になるためです。母数の小さいポジションについてもっともらしい原因が書かれていると、そのまま媒体を切り替える判断につながります。
確認を速くするための設計が重要です。
- 集計結果(数字)と論点(文章)を、同じ行に横並びで出す
judgeable: falseのポジションは、論点欄をグレーにして目立たなくする- 辞退コメントの原文を、区分ごとに折りたたんで置く(引用元をすぐ開けるようにする)
- 3か月続けて落ちている段階だけ、色を変える
例外に対処する
| 起きること | 対応 |
|---|---|
| ポジション名がマスタに当たらない | 候補を出して人に選ばせる。自動でマスタに追加しない |
| 応募が0件のポジション | 通過率を計算せず、「応募なし」とだけ出す |
| 辞退コメントが空 | 「コメントなし」と出す。理由を推測させない |
| ATSのCSVの列が増減した | 列名で読む。列番号で読むと、無言で全件がずれる |
| 同じ候補者が複数ポジションに応募 | 候補者IDで重複を数え、人数と件数を分ける |
| 月の途中でポジションが締め切られた | 締切日を持たせ、締切後の月は集計対象から外す |
| 数字と論点が食い違う | 集計結果を正とする。生成AIが計算し直していないかを検査する |
| 前月のシートが消えている | 推移の計算を止め、「比較不能」と出す。0として扱わない |
記録を残す
- 月次の集計結果(12か月以上)
- 生成AIへ渡した入力と、返ってきたJSON
- 人が修正した論点と、修正前後の文
- ポジションマスタの変更履歴
辞退コメントには候補者本人の言葉が入ります。個人が特定できる形で長期保存しないでください。 集計に必要なのは区分と件数であり、原文は社内規程で定めた期間が過ぎたら削除する運用にします。
04実装レベルの3段階
半自動化の時点で、40分が18分程度になります。 整形と集計が消えるためです。本格構成にすると12分程度になりますが、ATSのAPI連携が必要になります。
05工数削減シミュレーション
導入後 30件 × 12分 ÷ 60 = 6 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 同時に10以上のポジションを募集しており、採用管理システム(ATS)から選考ステータスをCSVで書き出せること。媒体や紹介会社を複数使い分けていること。
- 募集ポジションが3つ以下で、担当者が全候補者の顔と状況を覚えている場合。ATSを使わずメールと表計算だけで選考を管理している場合。
07最小構成で試す方法
- 先月ぶんのATSのCSVを1枚、手で書き出す
- 通過率の表を手で作る(ポジション5件だけでよい)
- その表と、該当ポジションの辞退コメントを生成AIの画面に貼る
- 上のプロンプトを貼り、出てきた論点を読む
- 採用担当が「知っていたこと」と「知らなかったこと」を分ける
5つめが検証の本体です。 全部が既に知っていることなら、自動化しても会議は変わりません。1つでも知らなかったことが出るなら、続ける価値があります。
判断の目安は次のとおりです。
| 5ポジションで出た「知らなかったこと」 | 判断 |
|---|---|
| 3つ以上 | 自動化する価値がある。すぐ半自動化へ進む |
| 1〜2つ | 辞退コメントの粒度を上げてから測り直す |
| 0 | 集計の自動化だけにとどめる。論点の生成は入れない |
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| ポジション名の表記ゆれで集計が割れる | マスタを作り、当たらないものは人が寄せ先を決める。自動登録しない |
| 選考中の候補者を落ちたと数えて通過率が下がる | 当月末時点で選考中の人を母数から外す |
| 母数3人のポジションにもっともらしい原因が書かれる | プロンプトで母数5人未満は判断させない。出力にも judgeable を持たせる |
| 生成AIが数字を計算し直して食い違う | 集計値を渡し、「そのまま使う」と明示する。突合の検査を入れる |
| CSVの列が増えて読み込みがずれる | 列番号ではなく列名で読む |
| 前月のシートを消してしまい推移が出ない | 月次シートは消さない運用にする。比較不能は0にしない |
| トリガーが会議の直前に走って間に合わない | 前日の夜に実行する。実行時刻には1時間程度の幅がある |
| 辞退理由の区分が毎月変わって集計できない | enum で区分を固定する |
| 候補者の属性に触れた文章が出る | プロンプトで明示的に禁止する。必須 |
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 候補者の選考ステータス、辞退理由、流入経路。採用の可否に関わる個人情報です。
- 氏名を渡さない … 集計に氏名は要りません。候補者IDに置き換えてから生成AIへ渡します。これだけで扱いがかなり楽になります
- 属性に基づく判断をさせない … 年齢・性別・国籍・家族構成は入力から外します。プロンプトでも触れることを禁じます。採用における差別的な取り扱いにつながる出力を、構成の段階で作れないようにしてください
- 外部AIへの入力可否 … 辞退コメントは候補者本人の言葉です。自社の個人情報保護方針と、応募時に示した利用目的の範囲に収まるかを確認してください
- 学習利用 … 入力を学習に使わないことが契約で保証されるサービスを選びます
- 自動実行してよい範囲 … 集計と論点の作成までです。個々の候補者の合否に関わる判断を、この仕組みにさせないでください
- アクセス権限 … 月次シートの共有範囲を、採用グループと人事責任者に限定します
誤りが起きた場合のリスクは、誤った分析に基づく媒体の切り替えと、候補者情報の取り扱いに関する問題です。入出力のログを残し、後から追跡できる状態にしてください。
10まず何から始めるか
1週目:ポジションマスタを作る
ATSに入っているポジション名を全部書き出し、正規の名前に寄せた表を作ります。この作業はAIを入れても消えません。 先にやっておくと、あとの工程がすべて軽くなります。
2週目:先月ぶんで論点を作らせる
5ポジションだけを対象に、手作業の集計結果と辞退コメントを生成AIに渡します。採用担当が「知らなかったこと」が出るかを見ます。この結果で導入可否が決まります。
3〜4週目:半自動化を作る
スプレッドシートに貼るだけで名寄せ・集計・論点作成まで走る状態を作り、翌月の会議で使います。40分が何分になるかを実測します。ATS連携はまだ作りません。
2か月目以降: 削減効果が確認できたら、月次トリガーと落ち込みの通知を入れます。並行して、過去12か月ぶんの集計結果を遡って作ってください。 推移が見えるようになるのは、12か月ぶんが揃ってからです。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
Gemini API の構造化出力が、JSON Schema のサブセットに沿った出力を返せること。string / number / integer / boolean / object / array / null の基本型に対応し、enum で値を決まった集合に限定できること。大きすぎるスキーマや深くネストしたスキーマは拒否されることがあること | Google AI for Developers: Structured outputs | 2026-09-17 |
| Apps Script のインストール型トリガーが分単位・時間単位・日単位・週単位・月単位で設定できること。時間主導型トリガーの実行時刻には幅があり、午前9時に設定した場合は午前9時から午前10時の間に実行されること | Google: Installable triggers | 2026-09-17 |
Apps Script から外部のHTTP APIを呼ぶのに UrlFetchApp を使うこと | Google: UrlFetchApp | 2026-09-17 |
ATSからのデータ取得方式(API / CSV書き出し)は製品によって異なります。この部分は利用環境に応じた個別確認が必要です。 候補者情報の取り扱いについては、応募時に示した利用目的の範囲に収まるかを、自社の個人情報保護の担当部門に確認してください。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-0107)についてのご相談はこちらから。
