Media > AI活用ユースケース > 人事 > 採用の選考歩留まりを毎月集計して、どこで候補者が離脱しているかを洗い出す

採用の選考歩留まりを毎月集計して、どこで候補者が離脱しているかを洗い出す

実装ステータス:構成例 技術的に実現可能な構成として設計したもの。自社未検証

採用管理システムから書き出した選考ステータスを入力に、ポジションごとの応募から内定承諾までの通過率を集計し、前月との差が大きい箇所と、辞退コメントから読み取れる論点を整理します。

サマリー
利用ツール
ChatGPT/Claude/Gemini/Google Apps Script/Python
対象業界
IT・SaaS/その他/人材/小売/製造
対象部門
人事/採用
対象業務
要約/集計・分析
主な課題
データ分析に時間がかかる/人手が足りない/判断に時間がかかる
AIで行う処理
要約
主な効果
判断支援/品質標準化/工数削減
導入難易度
★★☆☆☆
実装レベル
半自動化
費用感
SaaS追加(小)
人間の確認
必須
現在工数
20h/月
AI導入後
6h/月
想定削減
70%
年間削減
168h
モデル条件による試算値です。実在企業の実績ではありません。

01導入前 / 導入後の業務フロー

導入前(Before)
  1. 月初にATSから選考ステータスの一覧をCSVで書き出す
  2. スプレッドシートに貼り、ポジション名の表記ゆれを手で直す
  3. 段階ごとの人数を数え、通過率の数式を組む
  4. 前月のシートを開き、数字を横に並べて比べる
  5. 落ち込んでいるポジションを目で探す
  6. そのポジションの辞退コメントをATSで1件ずつ開いて読む
  7. 「求人媒体Aからの応募の質が落ちている」のような所見をコメント欄に書く
  8. 30ポジションぶんを1枚にまとめ、採用会議の資料にする
導入後(After)
  1. 自動毎月1日の朝、ATSから選考ステータスと辞退コメントを取得する
  2. 自動ポジション名を正規のマスタに寄せる(表記ゆれの名寄せ)
  3. 自動段階ごとの人数と通過率を、ポジション別・流入経路別に集計する
  4. 自動直近12か月の推移と比べ、落ち込みが大きい箇所を抽出する
  5. 自動該当ポジションの辞退コメントを読み、辞退の理由を区分ごとにまとめる
  6. 自動「どこが落ちているか」「何が起きていそうか」「確かめるべきこと」を論点として出す
  7. 採用担当が論点を読み、事実関係を確かめて打ち手を決める
  8. 採用会議でポジションごとの方針を決める
各工程の詳しい説明を読む
  1. 月初にATSから選考ステータスの一覧をCSVで書き出す
  2. スプレッドシートに貼り、ポジション名の表記ゆれを手で直す
  3. 段階ごとの人数を数え、通過率の数式を組む
  4. 前月のシートを開き、数字を横に並べて比べる
  5. 落ち込んでいるポジションを目で探す
  6. そのポジションの辞退コメントをATSで1件ずつ開いて読む
  7. 「求人媒体Aからの応募の質が落ちている」のような所見をコメント欄に書く
  8. 30ポジションぶんを1枚にまとめ、採用会議の資料にする

問題は4つあります。

(a)データの整形に時間がかかる。 ATSのCSVはポジション名が自由入力のため、「エンジニア(バックエンド)」と「バックエンドエンジニア」が別物として出てきます。毎月同じ直しをしています。

(b)比較が前月との2点比較で止まる。 本当は「3か月続けて落ちている」を見たいのですが、シートを3枚開いて見比べる手間がかかるため、やっていません。

(c)辞退コメントが読まれない。 月に60件前後の辞退コメントがATSに入りますが、全部開いて読むと1時間かかるため、印象に残ったものだけを拾っています。いちばん情報がある場所が読まれていません。

(d)担当者が変わると再現できない。 集計のシートは作った本人しか直せません。数式が壊れると、その月の会議資料が出ません。

  1. 【自動】 毎月1日の朝、ATSから選考ステータスと辞退コメントを取得する
  2. 【自動】 ポジション名を正規のマスタに寄せる(表記ゆれの名寄せ)
  3. 【自動】 段階ごとの人数と通過率を、ポジション別・流入経路別に集計する
  4. 【自動】 直近12か月の推移と比べ、落ち込みが大きい箇所を抽出する
  5. 【自動】 該当ポジションの辞退コメントを読み、辞退の理由を区分ごとにまとめる
  6. 【自動】 「どこが落ちているか」「何が起きていそうか」「確かめるべきこと」を論点として出す
  7. 【人】 採用担当が論点を読み、事実関係を確かめて打ち手を決める
  8. 【人】 採用会議でポジションごとの方針を決める

自動化されるのは「集める」「揃える」「数える」「比べる」「読む」です。何をするかを決めるのは人です。

02今回想定するシステム構成

構成図
ATS(採用管理システム)
   │ CSV書き出し / API
   ▼
Google スプレッドシート(選考ステータス・辞退コメント)
   │
   ▼【トリガー】毎月1日の時間主導型トリガー
Google Apps Script
   │
   ├──▶ ポジション名の名寄せ(マスタ照合)
   │
   ├──▶ 通過率の集計(段階別 / 流入経路別 / 12か月推移)
   │
   ├──▶ Gemini API ── 辞退コメントの区分けと、論点の作成
   │
   └──▶ 月次シートへ書き込み
   │
   ▼
採用会議用のシート ──【人が確認して打ち手を決める】
役割想定する製品代替候補
生成AIGemini APIClaude API、OpenAI API
実行環境Google Apps ScriptPython
集計Google スプレッドシート表計算ソフト
連携ATS(採用管理システム)各社の採用管理システム

ATSに歩留まりのレポート機能があるなら、まずそちらを見てください。 主要なATSは段階別の通過率を標準で出します。自前で組む価値があるのは、流入経路別の通過率と辞退コメントの中身を、同じ画面で突き合わせたい場合です。この2つを並べて出せる製品は多くありません。

03どうやって実装するのか

Step1

処理の起点を決める

毎月1日の時間主導型トリガーで動かします。Apps Script のインストール型トリガーは、分単位・時間単位・日単位・週単位・月単位で実行を設定できます。

ただし実行時刻は正確ではありません。公式ドキュメントには、午前9時のトリガーを作った場合、実際には午前9時から午前10時の間のいずれかの時刻に実行されると書かれています。採用会議の直前に走らせる設計にしないでください。 会議が10時なら、トリガーは前日の夜に置きます。

Step2

入力データを集める

データ中身取得元
選考ステータス候補者ID、ポジション、流入経路、現在の段階、日付ATS
段階の遷移履歴いつどの段階に進んだか、いつ落ちたかATS
辞退コメント候補者からの辞退理由、社内の見送り理由ATS
ポジションマスタ正規のポジション名、部署、募集人数、優先度社内で作る
過去12か月の集計結果前月までの通過率自分で作った月次シート
Step3

データの取得方法を決める

ATSから: APIがあればAPIで、なければ月初のCSV書き出しを人が1回行い、スプレッドシートに取り込みます。この1回の手作業は残してかまいません。 月1回2分の作業を自動化するために、ATSのAPI認証を組むのは割に合わないことが多いためです。

Apps Script から外部のAPIを呼ぶには UrlFetchApp を使います。ATSのAPIも生成AIのAPIも、同じ方法で呼べます。

過去の集計結果: 同じスプレッドシートに月次のシートを積んでいきます。12か月ぶんの推移を見るために、毎月の集計結果を必ず残してください。 ここを消すと、翌月から「3か月続けて落ちている」が見えなくなります。

Step4

AIへ渡す前に整形する

  1. ポジション名の名寄せ … 自由入力のポジション名をマスタに寄せます。完全一致で当たらないものは生成AIに候補を出させ、人が1回確認してマスタに登録します。 自動でマスタに追加しないでください
  2. 重複候補者の除去 … 同じ人が複数ポジションに応募していることがあります。候補者IDで数え、人数と応募件数を分けて集計します
  3. 選考中の除外 … まだ選考中の候補者を「落ちた」に数えると通過率が下がります。当月末時点で選考中の人は母数から外します
  4. 少人数ポジションの扱い … 応募が3件以下のポジションは通過率を出しません。1人落ちただけで33%動くため、傾向として読めません
Step5

AIに処理させる

集計と生成AIで役割を分けます。

集計(スプレッドシートの計算)にさせること: 段階ごとの人数、通過率、前月差、12か月の推移。数字の計算は生成AIにさせません。 数え違いが起きたときに追えなくなります。

生成AIにさせること:

処理内容
辞退コメントの区分け「年収」「勤務地」「他社決定」「選考スピード」などの区分に分ける
落ち込みの言語化数字の変化を、読んで分かる文にする
論点の作成「何が起きていそうか」「確かめるべきこと」を並べる
ポジション名の名寄せ候補マスタに当たらない表記の、寄せ先の候補を出す
Step6

指示内容を固定する

あなたは採用担当を支援する分析担当者です。
渡された集計結果と辞退コメントから、今月の論点を作ってください。

【厳守事項】
- 数字は渡された集計結果のものをそのまま使ってください。
  自分で計算し直したり、丸めたりしないでください。
- 母数が5人未満の通過率については、傾向を述べないでください。
  「母数が少なく判断できない」と書いてください。
- 辞退コメントに書かれていない理由を推測しないでください。
  コメントが少ないときは「コメントが3件しかない」と件数を書いてください。
- 候補者の氏名、年齢、性別、国籍、家族構成には触れないでください。
  これらは採用の可否と関係しません。
- 打ち手は断定せず、「確かめるべきこと」として書いてください。

【今月の集計結果】
{funnel_stats}

【直近12か月の推移】
{trend_12m}

【辞退コメント(当月分)】
{decline_comments}

【ポジションマスタ】
{position_master}

「母数が5人未満なら傾向を述べない」の1行が重要です。 これを入れないと、応募3人で1人が辞退したポジションについて、もっともらしい原因が書かれます。数字が小さいほど、生成AIは断定的に書きます。

Step7

出力形式を固定する

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%」のように記号つきで返り、後段のグラフで壊れます。

Step8

システムへ連携する

出力先は3通りあります。

方式内容
スプレッドシート月次シートに書き込む。いちばん簡単で、会議でそのまま開ける
通知落ち込みが3か月続いたポジションだけを、採用担当のチャットへ流す
ATSへ書き戻しポジションのメモ欄に論点を書く。ATSのAPI次第

まずは1つめだけで十分です。 月次の会議資料が自動で埋まるのが、いちばん分かりやすい効果です。

Step9

人が確認する

全件、人が確認してから会議に出します。

理由は、この出力が採用の打ち手を決める材料になるためです。母数の小さいポジションについてもっともらしい原因が書かれていると、そのまま媒体を切り替える判断につながります。

確認を速くするための設計が重要です。

  • 集計結果(数字)と論点(文章)を、同じ行に横並びで出す
  • judgeable: false のポジションは、論点欄をグレーにして目立たなくする
  • 辞退コメントの原文を、区分ごとに折りたたんで置く(引用元をすぐ開けるようにする
  • 3か月続けて落ちている段階だけ、色を変える
Step10

例外に対処する

起きること対応
ポジション名がマスタに当たらない候補を出して人に選ばせる。自動でマスタに追加しない
応募が0件のポジション通過率を計算せず、「応募なし」とだけ出す
辞退コメントが空「コメントなし」と出す。理由を推測させない
ATSのCSVの列が増減した列名で読む。列番号で読むと、無言で全件がずれる
同じ候補者が複数ポジションに応募候補者IDで重複を数え、人数と件数を分ける
月の途中でポジションが締め切られた締切日を持たせ、締切後の月は集計対象から外す
数字と論点が食い違う集計結果を正とする。生成AIが計算し直していないかを検査する
前月のシートが消えている推移の計算を止め、「比較不能」と出す。0として扱わない
Step11

記録を残す

  • 月次の集計結果(12か月以上)
  • 生成AIへ渡した入力と、返ってきたJSON
  • 人が修正した論点と、修正前後の文
  • ポジションマスタの変更履歴

辞退コメントには候補者本人の言葉が入ります。個人が特定できる形で長期保存しないでください。 集計に必要なのは区分と件数であり、原文は社内規程で定めた期間が過ぎたら削除する運用にします。

04実装レベルの3段階

最小構成:CSVを手で書き出し、生成AIの画面に貼って論点を作る / 論点の作成のみ
半自動化:スプレッドシートに貼るだけで、名寄せ・集計・論点の作成まで走る / 整形・集計・論点
本格構成:上記+ATSからの自動取得+月次トリガー+落ち込みの通知 / 打ち手の決定以外

半自動化の時点で、40分が18分程度になります。 整形と集計が消えるためです。本格構成にすると12分程度になりますが、ATSのAPI連携が必要になります。

05工数削減シミュレーション

前提値(モデル条件)
対象人数
2 名
月間件数
30 件
1件あたり現在時間
40 分
1件あたり導入後時間
12 分
現在  30件 × 40分 ÷ 60 = 20 時間/月
導入後 30件 × 12分 ÷ 60 = 6 時間/月
月間削減時間
14h
削減率
70%
年間削減時間
168h
年間金額換算(時間単価3,000円)
50万円
モデル条件による試算であり、実際の効果は業務内容・運用方法によって異なります。

自社条件で導入効果を整理したい方へ

このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。

AI活用について相談する

06向いている企業・向いていない企業

向いている
  1. 同時に10以上のポジションを募集しており、採用管理システム(ATS)から選考ステータスをCSVで書き出せること。媒体や紹介会社を複数使い分けていること。
向いていない
  1. 募集ポジションが3つ以下で、担当者が全候補者の顔と状況を覚えている場合。ATSを使わずメールと表計算だけで選考を管理している場合。

07最小構成で試す方法

  1. 先月ぶんのATSのCSVを1枚、手で書き出す
  2. 通過率の表を手で作る(ポジション5件だけでよい)
  3. その表と、該当ポジションの辞退コメントを生成AIの画面に貼る
  4. 上のプロンプトを貼り、出てきた論点を読む
  5. 採用担当が「知っていたこと」と「知らなかったこと」を分ける

5つめが検証の本体です。 全部が既に知っていることなら、自動化しても会議は変わりません。1つでも知らなかったことが出るなら、続ける価値があります。

判断の目安は次のとおりです。

5ポジションで出た「知らなかったこと」判断
3つ以上自動化する価値がある。すぐ半自動化へ進む
1〜2つ辞退コメントの粒度を上げてから測り直す
0集計の自動化だけにとどめる。論点の生成は入れない

08実装時につまずきやすいポイント

問題対策
ポジション名の表記ゆれで集計が割れるマスタを作り、当たらないものは人が寄せ先を決める。自動登録しない
選考中の候補者を落ちたと数えて通過率が下がる当月末時点で選考中の人を母数から外す
母数3人のポジションにもっともらしい原因が書かれるプロンプトで母数5人未満は判断させない。出力にも judgeable を持たせる
生成AIが数字を計算し直して食い違う集計値を渡し、「そのまま使う」と明示する。突合の検査を入れる
CSVの列が増えて読み込みがずれる列番号ではなく列名で読む
前月のシートを消してしまい推移が出ない月次シートは消さない運用にする。比較不能は0にしない
トリガーが会議の直前に走って間に合わない前日の夜に実行する。実行時刻には1時間程度の幅がある
辞退理由の区分が毎月変わって集計できないenum で区分を固定する
候補者の属性に触れた文章が出るプロンプトで明示的に禁止する。必須

09セキュリティ・AIガバナンス上の注意点

この構成で扱うデータ: 候補者の選考ステータス、辞退理由、流入経路。採用の可否に関わる個人情報です。

  1. 氏名を渡さない … 集計に氏名は要りません。候補者IDに置き換えてから生成AIへ渡します。これだけで扱いがかなり楽になります
  2. 属性に基づく判断をさせない … 年齢・性別・国籍・家族構成は入力から外します。プロンプトでも触れることを禁じます。採用における差別的な取り扱いにつながる出力を、構成の段階で作れないようにしてください
  3. 外部AIへの入力可否 … 辞退コメントは候補者本人の言葉です。自社の個人情報保護方針と、応募時に示した利用目的の範囲に収まるかを確認してください
  4. 学習利用 … 入力を学習に使わないことが契約で保証されるサービスを選びます
  5. 自動実行してよい範囲 … 集計と論点の作成までです。個々の候補者の合否に関わる判断を、この仕組みにさせないでください
  6. アクセス権限 … 月次シートの共有範囲を、採用グループと人事責任者に限定します

誤りが起きた場合のリスクは、誤った分析に基づく媒体の切り替えと、候補者情報の取り扱いに関する問題です。入出力のログを残し、後から追跡できる状態にしてください。

10まず何から始めるか

1週目:ポジションマスタを作る

ATSに入っているポジション名を全部書き出し、正規の名前に寄せた表を作ります。この作業はAIを入れても消えません。 先にやっておくと、あとの工程がすべて軽くなります。

2週目:先月ぶんで論点を作らせる

5ポジションだけを対象に、手作業の集計結果と辞退コメントを生成AIに渡します。採用担当が「知らなかったこと」が出るかを見ます。この結果で導入可否が決まります。

3〜4週目:半自動化を作る

スプレッドシートに貼るだけで名寄せ・集計・論点作成まで走る状態を作り、翌月の会議で使います。40分が何分になるかを実測します。ATS連携はまだ作りません。

2か月目以降: 削減効果が確認できたら、月次トリガーと落ち込みの通知を入れます。並行して、過去12か月ぶんの集計結果を遡って作ってください。 推移が見えるようになるのは、12か月ぶんが揃ってからです。


11関連ユースケース

12この仕組みを理解するための記事

13技術仕様の確認日・参考情報

技術仕様確認日:2026-09-17/最終更新:2026-09-17
確認した内容情報源確認日
Gemini API の構造化出力が、JSON Schema のサブセットに沿った出力を返せること。string / number / integer / boolean / object / array / null の基本型に対応し、enum で値を決まった集合に限定できること。大きすぎるスキーマや深くネストしたスキーマは拒否されることがあることGoogle AI for Developers: Structured outputs2026-09-17
Apps Script のインストール型トリガーが分単位・時間単位・日単位・週単位・月単位で設定できること。時間主導型トリガーの実行時刻には幅があり、午前9時に設定した場合は午前9時から午前10時の間に実行されることGoogle: Installable triggers2026-09-17
Apps Script から外部のHTTP APIを呼ぶのに UrlFetchApp を使うことGoogle: UrlFetchApp2026-09-17

ATSからのデータ取得方式(API / CSV書き出し)は製品によって異なります。この部分は利用環境に応じた個別確認が必要です。 候補者情報の取り扱いについては、応募時に示した利用目的の範囲に収まるかを、自社の個人情報保護の担当部門に確認してください。

実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。

自社の業務に使えるAI活用候補を整理します

このユースケース(UC-0107)についてのご相談はこちらから。

AI活用について相談する
目次