人材紹介会社で、キャリアアドバイザーごとに選考中の候補者の段階と過去の通過率から今月の成約数を見込み、目標に足りない担当と動かすべき候補者を出す
人材紹介の管理システムにある選考中の候補者の段階と滞留日数から、キャリアアドバイザーごとの今月の成約数を、過去の通過率に基づいて幅付きで見込みます。目標に届かない担当には、今週動かせば今月に間に合う候補者と、止まっている理由の候補を付けてチームリーダーに出します。
- 生成AI
- ChatGPT/Claude/Gemini
- 連携・自動化
- Google Apps Script/Make/Power Automate/Python
- 対象業界
- 人材/介護/医療
- 対象部門
- 営業
- 対象業務
- 比較検討/集計・分析
- 主な課題
- 判断に時間がかかる/営業フォローが追いつかない/属人化している
- AIで行う処理
- 予測
- 主な効果
- 判断支援/工数削減/機会損失防止
- 導入難易度
- ★★★☆☆
- 実装レベル
- 半自動化
- 費用感
- API連携(中)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 月曜日の朝、リーダーが管理システムで担当5名分の選考中の一覧を出す
- 担当ごとに、書類選考・一次面接・二次面接・最終面接・内定(回答待ち)の数を数える
- 自分の経験で、今月あと何件の承諾が出そうかを見積もり、目標と比べる
- 目標に届かなそうな担当について、選考を1件ずつ開き、最後に動いた日と次の予定を見る
- 止まっていそうな選考を拾い、面談で聞くことをメモする
- アドバイザーと面談し、今週動かす候補者を決める
- 事業部長に、チームの今月の見込みをメールで報告する
- 自動毎晩、管理システムが選考の一覧と段階の変更の履歴を共有ドライブのフォルダにCSVで出す
- 自動スクリプトがCSVを読み、蓄積のシートの選考と段階の履歴を更新する
- 自動毎月1日に、過去18か月の履歴から段階ごとの通過率と承諾までの日数の分布を計算し直す
- 自動毎週月曜日の朝、選考中の1件ごとに「今月中に承諾に至る確率」を式で計算する
- 自動アドバイザーごとに確率を集め、今月の成約数の分布と、目標に届く確率を計算する
- 自動届く確率が低い担当について、今週動けば今月に間に合う選考を式で選ぶ
- 自動選んだ選考の段階・滞留日数・次の予定・アドバイザーのメモを Gemini API に渡す
- 自動止まっている理由の候補と、リーダーがアドバイザーに確かめる点が返る
- 自動担当ごとの見込みの一覧をシートに書き出し、リーダーの Google Chat のスペースに知らせる
- 人リーダーが一覧を読み、確かめる点を面談用に直してアドバイザーと面談する
- 自動月末に、各週の見込みと実際の承諾の件数を並べて記録する
各工程の詳しい説明を読む
- 月曜日の朝、リーダーが管理システムで担当5名分の選考中の一覧を出す
- 担当ごとに、書類選考・一次面接・二次面接・最終面接・内定(回答待ち)の数を数える
- 自分の経験で、今月あと何件の承諾が出そうかを見積もり、目標と比べる
- 目標に届かなそうな担当について、選考を1件ずつ開き、最後に動いた日と次の予定を見る
- 止まっていそうな選考を拾い、面談で聞くことをメモする
- アドバイザーと面談し、今週動かす候補者を決める
- 事業部長に、チームの今月の見込みをメールで報告する
(a)見込みがリーダーの数え方で変わる。 同じ選考の束でも、数え方によって見込みが1件以上違います。チームを合計した事業部の見込みは、リーダー6人の数え方の足し算で、毎月の着地と数件ずれます。 どのリーダーの数え方が当たっているかを確かめた人はいません。
(b)時期を見ていない。 25日に最終面接がある選考も、5日に最終面接がある選考も、同じ「最終面接1件」として数えています。承諾までに平均で2週間ほどかかる企業なら、25日の最終面接は今月の成約にはまず入りません。 月末になって「来月にずれました」が続きます。
(c)止まっている選考に気づくのが遅い。 一次面接の結果待ちのまま3週間動いていない選考は、一覧の上では「一次面接」のまま他と並んでいます。1件ずつ開いて最後に動いた日を見ないと、止まっていることが分かりません。 担当5名で選考が100件を超えると、全部は開けません。
(d)面談が数字の確認で終わる。 見積もりと申告の突き合わせで時間が過ぎ、どの候補者に何をするかを決める時間が残りません。
- 【自動】 毎晩、管理システムが選考の一覧と段階の変更の履歴を共有ドライブのフォルダにCSVで出す
- 【自動】 スクリプトがCSVを読み、蓄積のシートの選考と段階の履歴を更新する
- 【自動】 毎月1日に、過去18か月の履歴から段階ごとの通過率と承諾までの日数の分布を計算し直す
- 【自動】 毎週月曜日の朝、選考中の1件ごとに「今月中に承諾に至る確率」を式で計算する
- 【自動】 アドバイザーごとに確率を集め、今月の成約数の分布と、目標に届く確率を計算する
- 【自動】 届く確率が低い担当について、今週動けば今月に間に合う選考を式で選ぶ
- 【自動】 選んだ選考の段階・滞留日数・次の予定・アドバイザーのメモを Gemini API に渡す
- 【自動】 止まっている理由の候補と、リーダーがアドバイザーに確かめる点が返る
- 【自動】 担当ごとの見込みの一覧をシートに書き出し、リーダーの Google Chat のスペースに知らせる
- 【人】 リーダーが一覧を読み、確かめる点を面談用に直してアドバイザーと面談する
- 【自動】 月末に、各週の見込みと実際の承諾の件数を並べて記録する
4番目から6番目をスクリプトの式で行うのが、この設計の土台です。 見込みの数字が毎週同じ式で出るので、リーダーが替わっても数え方は変わりません。 事業部の見込みも、30名分の分布を足し合わせて同じ式で出ます。
10番目でリーダーが使う時間は、数字の確認から、どの候補者に何をするかの相談に移ります。
02今回想定するシステム構成
人材紹介の管理システム(毎晩、選考の一覧と段階の履歴をCSVで出力) ▼ 共有ドライブのフォルダ 【トリガー】時間主導型(毎朝6時台・毎週月曜7時台・毎月1日) Google Apps Script ├──▶ CSVを読み、選考と段階の履歴を蓄積のシートに足す ├──▶(毎月1日)段階ごとの通過率と承諾までの日数の分布を計算 ├──▶(毎週月曜)選考ごとの今月の承諾の確率、担当ごとの成約数の分布 ├──▶ 届く確率が低い担当の、今週動けば間に合う選考を選ぶ ▼ Gemini API(構造化出力) │ 止まっている理由の候補と、リーダーが確かめる点 ▼ Google Apps Script ── 担当ごとの見込みの一覧のシートへ書き出す └──▶ Google Chat のリーダーのスペースへ知らせる(Webhook) ▼ 【リーダーが一覧を読み、アドバイザーと面談】
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| 実行環境 | Google Apps Script | Power Automate、Make、Python |
| 生成AI | Gemini API(有料の枠、構造化出力) | Claude API、OpenAI API |
| シート | Google スプレッドシート(選考の蓄積・段階の履歴・通過率の表・目標・見込みの一覧) | Microsoft 365 のブック |
| 通知 | Google Chat(リーダーのスペースへの Webhook) | Gmail |
新しく足すのは、スクリプトと Gemini API の契約だけです。 管理システムにはこの構成からは書き込みません。 段階を進める、メモを書くといった操作は、これまでどおりアドバイザーが行います。
土台になるのは、Google Apps Script の時間主導型のトリガーです。 毎分から毎月までの間隔で関数を動かせ、インストール型トリガーは作成した人のアカウントで実行されます。 候補者の情報が入るため、トリガーを作るアカウントは事業部の管理用に決めます。
スクリプトの実行時間には上限があります。 1回の実行は6分まで、トリガーの合計の実行時間は Google Workspace のアカウントで1日6時間まで、外部の API の呼び出しは1日100,000回までとされています。通過率の計算し直しは重いため、毎月1日の別の実行に分けます。
知らせには、Google Chat の受信 Webhook を使います。 外部からスペースへ一方向に投稿する仕組みで、投稿はスペースあたり毎秒1回までの上限を、そのスペースのすべての Webhook で分け合います。知らせは1回の処理で1件にまとめます。
03どうやって実装するのか
処理の起点を決める
時間主導型のトリガーを3つ置きます。 毎朝6時台の取り込み、毎週月曜7時台の見込み、毎月1日の通過率の計算し直しです。時間主導型のトリガーは、指定した時間帯の中で動く時刻が少しずれ、一度決まるとその時刻で動き続けます。
月曜の見込みは、取り込みが終わったことを確かめてから動きます。 取り込みが終わると日付をスクリプト プロパティに書き、見込みの実行はこの日付が当日でなければ止まります。 古い状態で出すと、週末の承諾が数えられません。
承諾を今月に数える締めの日付は、目標のシートに月ごとに持たせます。 月末の営業日か暦の末日かで残りの日数が変わるため、式はそこから数えます。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 選考の一覧 | 選考ID、候補者ID、担当アドバイザー、求人企業、職種区分、現在の段階、段階に入った日、次の予定日(面接日など)、最後に連絡した日 | 管理システムのCSV |
| 段階の履歴 | 選考ID、変更前の段階、変更後の段階、変更した日 | 管理システムのCSV |
| アドバイザーのメモ | 選考ごとの最新のメモ(候補者の意向、企業からの連絡の要旨) | 管理システムのCSV |
| 目標 | アドバイザーごとの月の承諾の目標、月の締めの日付 | 目標のシート |
| 企業の区分 | 求人企業ごとの選考の速さの区分(過去の承諾までの日数の中央値) | 通過率の表(毎月計算) |
AIに渡すのは、選ばれた選考の段階・日数・予定と、メモの要旨だけです。 候補者の氏名・連絡先・現職の会社名は、取り込みの段階で落とします。候補者IDは、AIに渡す前にハッシュ値に置き換えます。 一覧の側では、元の候補者IDに戻して表示します。
メモが、理由の候補の質を決めます。 「現職から引き止めがあると話していた」と書いてあれば、AIはそれを候補に挙げられます。メモが無ければ、日数と段階の動きしか言えません。
データの取得方法を決める
管理システムのCSVは、共有ドライブのフォルダから読みます。フォルダの中の未処理のファイルを開き、中身を文字列として取り出して、CSVを2次元の配列にする関数(Utilities.parseCsv)で表の形にします。管理システムが出すCSVの文字コードがUTF-8でなければ、文字コードを指定して取り出します。
| 取るもの | どこから | 何に使うか |
|---|---|---|
| 選考中の選考の現在の段階と日付 | 選考の一覧のCSV | 今週の見込みの対象 |
| 過去18か月の段階の変更 | 段階の履歴の蓄積 | 段階ごとの通過率と日数の分布 |
| 今月すでに承諾に至った選考 | 段階の履歴の蓄積 | 見込みに足す確定分 |
| 目標と締めの日付 | 目標のシート | 届く確率の計算 |
| メモの要旨 | 選考の一覧のCSV | AIへの文脈 |
段階の履歴は、上書きせずに足していきます。 管理システムが履歴を出せないなら、毎晩のCSVを前の晩と比べて、変わった選考を履歴に書き足します。
候補者IDのハッシュ値は、Utilities.computeDigest で作ります。 指定したアルゴリズムで要約を計算する関数で、スクリプト プロパティに置いた秘密の文字列を足してから要約します。 桁数の少ないIDを割り出されないためです。
AIへ渡す前に整形する
- 取り込みの確認 … CSVの行数が前の晩から大きく減っていないかを見ます。半分以下になっていれば、出力の失敗として取り込みません
- 段階のそろえ方 … 管理システムの段階の名前を、書類選考・一次面接・二次面接・最終面接・内定・承諾・不合格・辞退の8つにそろえます。企業によって面接の回数が違うため、「最終面接」は企業の選考の最後の面接として扱います
- 通過率の計算(毎月1日) … 過去18か月に各段階に入った選考のうち、承諾に至った割合を、職種区分と企業の速さの区分ごとに計算します。件数が30件に満たない組み合わせは、職種区分だけの値を使います
- 日数の分布の計算(毎月1日) … 各段階に入った日から承諾した日までの日数を、同じ区分ごとに並べます
- 滞留の区分 … 選考ごとに、いまの段階に入ってからの日数が、その段階の過去の日数の中央値以内か、9割の値以内か、それを超えているかに分けます。9割の値を超えた選考の通過率は、過去に同じだけ滞留した選考の実績で置き換えます
- 今月中の確率 … 選考ごとに「承諾に至る確率 × 締めの日までの残りの日数で承諾に届く割合」を計算します。後者は、日数の分布のうち、すでに経った日数を超えたものの中で、残りの日数以内に収まる割合です
- 成約数の分布 … アドバイザーごとに、今月すでに承諾した件数に、選考中の各選考の確率を合わせた件数の分布を計算します。選考ごとに「承諾する/しない」の二択として、全部の組み合わせの確率を順に足し合わせます
- 届く確率と区分 … 分布から目標の件数以上になる確率を出し、7割以上を「届く見込み」、3割未満を「届かない見込み」、その間を「五分」とします
- 今週動かす選考の選び方 … 「届かない見込み」と「五分」の担当について、承諾までの日数の中央値が残りの日数より短く、かつ次の予定日が空いているか最後の連絡から7日を超えている選考を選び、確率の高い順に最大5件とします
3番目から9番目は、すべてスクリプトの式です。 この記事が「予測」と呼ぶのは、この式で出す確率と成約数の分布です。毎週同じ答えが出て、過去の外れ方で確かさを示せることが、経験による読みとの違いです。
7番目は、確率を足しただけで終わらせないための手順です。 足すと「3.2件」という平均は出ますが、目標の3件に届く確率は分かりません。組み合わせを順に足し合わせると、「2件以下が35%、3件が30%、4件以上が35%」の形で出ます。
6番目の「すでに経った日数を超えたものの中で」を落とすと、滞留している選考の確率が高く出ます。 最終面接から20日止まっている選考を、入ったばかりの選考と同じ分布で数えると、「中央値は14日だから今月に入る」と読んでしまいます。
AIに処理させる
させるのは、9番目で選ばれた選考について、止まっている理由の候補を記録から読み、リーダーがアドバイザーに確かめる点を書くことです。
| させること | 中身 | 判断できないときの扱い |
|---|---|---|
| 止まっている側の読み取り | 候補者の返事待ちか、企業の結果待ちか、日程の調整待ちか | メモと日付から分からなければ unclear |
| 理由の候補 | メモに書かれた事情から、止まっている理由の候補を最大2つ | メモに手がかりが無ければ「日数のみ」 |
| 今週の動きの種類 | 企業への結果の確認/候補者への意向の確認/日程の調整/条件のすり合わせ | 決められなければ「アドバイザーに確認」 |
| 確かめる点 | リーダーが面談でアドバイザーに聞くことを1〜2個 | — |
| 担当全体のひとこと | 動かす選考の傾向(企業の結果待ちが多い、など) | 傾向が無ければ書かない |
理由の候補には、必ず根拠にした記録の項目を付けさせます。 「最終面接から18日、企業からの結果の連絡の記録が無い(days_in_stage、last_company_contact)」のように、入力のどの項目から言っているかを書かせます。 根拠の項目が入力に無い候補は、スクリプトの側で一覧から外します。
| させないこと | 理由 |
|---|---|
| 確率・成約数・届く確率の計算や修正 | 式で出した数字を変えさせない |
| 候補者の意向や性格の推測 | メモに無い事情が、事実のように一覧に並ぶ |
| 承諾をうながす候補者への文面 | 候補者の意思決定をせかす使い方をしない |
| アドバイザーの評価 | 見込みの一覧の目的と違う |
| 推薦を取り下げる・別の求人に替える判断 | アドバイザーと候補者が決める |
2行目がいちばん起きやすい失敗です。 内定の回答が止まっている候補者について、AIは「他社の選考と迷っている可能性がある」と書きがちです。メモに他社の選考の記載が無ければ、それは確かめようのない推測で、リーダーが面談でそのまま口にすると決めつけになります。 メモに無い事情は、「確かめる点」の側に質問として書かせます。
3行目は、この構成の線引きです。 目標に届かない月ほど承諾をうながしたくなりますが、候補者の転職の判断は、紹介会社の月の目標とは関係がありません。
指示内容を固定する
あなたは人材紹介会社のチームリーダーを補佐する立場です。
今月の成約の見込みは、すでに決まった式で計算されています。
あなたの役割は、今週動かす候補として選ばれた選考について、
止まっている理由の候補と、リーダーがアドバイザーに確かめる点を出すことです。
【入力(選考ごと)】
- 選考ID(ハッシュ値)、職種区分、現在の段階、段階に入ってからの日数
- その段階の過去の日数の中央値と9割の値、今月中に承諾に至る確率
- 次の予定日(無ければ空)、候補者への最後の連絡からの日数、企業からの最後の連絡からの日数
- アドバイザーのメモの要旨(最新のもの)
【してほしいこと】
1. 選考ごとに、候補者の返事待ち/企業の結果待ち/日程の調整待ち/不明 のどれかを選んでください。
2. 止まっている理由の候補を最大2つ、根拠にした入力の項目名を付けて書いてください。
3. 今週の動きの種類を1つ選んでください。
4. リーダーがアドバイザーに確かめる点を1〜2個、質問の形で書いてください。
【厳守事項】
- 確率、成約数、日数を計算し直したり、修正したりしないでください。
- メモに書かれていない候補者の事情(他社の選考、家族の意見、年収への不満など)を、
理由の候補として書かないでください。必要なら「確かめる点」に質問として書いてください。
- 理由の候補には、必ず evidence に入力の項目名を書いてください。
evidence を書けない候補は出さないでください。
- 候補者に承諾をうながす文面や、候補者への連絡文を作らないでください。
- アドバイザーの仕事ぶりの良し悪しを書かないでください。
- 推薦の取り下げや、別の求人への切り替えを提案しないでください。
- 手がかりが少なく理由を絞れないときは "no_clear_reason" を true にしてください。
【担当の目標と見込み】{advisor_summary}
【選考ごとの入力】{applications}
「メモに無い事情を書かない」と「確かめる点に質問として書く」を対にしているのが要点です。 禁じるだけだと、AIは他社の選考の話を言い換えて別の欄に入れてきます。出口を用意すると、推測は質問の形に落ち着きます。 アドバイザーが「実は他社の最終面接が来週です」と答えれば、それが確かめられた事情になり、メモに書き足されます。
出力形式を固定する
次の形のJSONで受け取ります。 Gemini API の構造化出力を使い、/v1beta/interactions への要求の response_format に、mime_type を application/json、schema に下の形のスキーマを入れて渡します。
{
"advisor_code": "CA-17",
"applications": [
{
"application_hash": "",
"waiting_on": "candidate | company | scheduling | unclear",
"reason_candidates": [
{ "text": "", "evidence": ["days_in_stage", "last_company_contact_days"] }
],
"action_type": "confirm_company | confirm_candidate | schedule | align_terms | ask_advisor",
"questions_for_advisor": [""],
"no_clear_reason": false
}
],
"advisor_note": ""
}
1つ目の理由は、evidence をスクリプトで照合できることです。 evidence に書かれた項目名が入力に本当にあるかをスクリプトが確かめ、無い項目名を挙げた候補は一覧から外して「根拠不一致」として記録します。 構造化出力は JSON の形を守りますが、値の正しさはアプリケーションで確かめるよう、公式の説明にもあります。
2つ目は、waiting_on で誰の番かを分けられることです。 企業の結果待ちが多い担当と、候補者の返事待ちが多い担当では、リーダーが面談で話すことが違います。 前者は企業の担当の営業との連携、後者は候補者との面談の持ち方の話になります。一覧では waiting_on ごとに件数を数えて担当の行に出します。
3つ目は、no_clear_reason で「分からない」を正式な答えにできることです。 メモが空で手がかりが無い選考は、無理に理由を作らせず、アドバイザーへの質問だけを残します。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 共有ドライブのフォルダ | フォルダのファイルを一覧にして読む | 管理システムのCSV |
| 蓄積・履歴・通過率・目標のシート | 読み書き(蓄積・履歴・通過率の表だけ書く) | 選考の蓄積と、計算の材料 |
| Gemini API | UrlFetchApp.fetch() で POST | 理由の候補と確かめる点 |
| 見込みの一覧のシート | 書き込み | 担当ごとの見込み・幅・届く確率・動かす選考 |
| Google Chat | 受信 Webhook に POST | 「一覧ができた」と区分ごとの人数の知らせ |
UrlFetchApp.fetch() は、method に post、contentType に JSON、headers に API キー、payload に要求の本文を入れて呼びます。muteHttpExceptions を true にすると、失敗の応答でも例外を投げずに応答を返します。 状態コードを見て、その担当の分を次の実行で再試行するかを決めます。
API キーと Webhook の URL、ハッシュ用の秘密の文字列は、コードに書かずスクリプト プロパティに置きます。 スクリプト プロパティはスクリプトのすべての利用者で共有されるため、スクリプトの編集権限は事業部の管理担当に限ります。 Webhook の URL は公開の場所に貼らないよう公式も注意しています。
Chat に送るのは、区分ごとの人数と一覧へのリンクだけです。 「届く見込み 14名、五分 9名、届かない見込み 7名、取り込み未了 0」のように書き、アドバイザーの名前と候補者の情報は載せません。 スペースにはリーダー6名と事業部長だけを入れます。
人が確認する
リーダーが見るのは、自分のチームの「届かない見込み」と「五分」の担当の行です。 「届く見込み」の担当は、見込みの件数と幅を確かめるだけにします。
- 取り込みの状態を見る … 取り込み未了の印や、選考の件数が急に減った担当がないか。ここがおかしければ、その週の見込みを面談で使いません
- 動かす選考の理由の候補を読む … 根拠の項目が選考の記録と合っているか、候補がメモと矛盾していないかを見ます
- 確かめる点を面談用に直す … AIの質問を、自分の言葉に直します。候補者の事情を決めつける言い方になっていないかを見ます
- 面談で今週の動きを決める … 動きを決めるのはアドバイザーとリーダーです
- 確かめた事情をメモに残すよう頼む … アドバイザーが管理システムのメモに書き足します
理由の候補は「候補」のまま使い、確かめた結果が管理システムのメモに入れば、翌週の入力に入ります。
目標は、30名をならして1名4分です。 届かない見込みの担当が毎週10名を超えるなら、目標の置き方か通過率の表を先に疑います。
例外に対処する
| 起きること | 対応 |
|---|---|
| CSVが届いていない | 見込みを出さず、Chat に「取り込み未了」と知らせる |
| 行数が前の晩の半分以下 | 出力の失敗として取り込まず、管理担当へ知らせる |
| 管理システムに無い段階の名前が出る | 「未分類」とし、その選考は見込みから外して一覧に印を付ける |
| 通過率の区分の件数が30件未満 | 職種区分だけの値を使い、「件数少」の印を付ける |
| 担当が月の途中で替わった選考 | 承諾した時点の担当に数える |
| 処理が6分で終わらない | どこまで終わったかをプロパティに残し、次の実行で続きから |
| Gemini API がエラーを返す | 見込みと区分は先に一覧へ出し、理由の候補は「未取得」とする |
evidence が入力に無い項目名 | 候補を一覧から外し、「根拠不一致」として記録 |
| Chat への投稿が失敗する | 管理担当へメールで知らせる |
7行目の扱いが大事です。 Gemini API が止まった朝でも、見込みの数字と届く確率は式で出ているので、一覧は予定どおり出せます。 理由の候補が無くても、リーダーは届かない見込みの担当と動かす選考を知ることができます。
記録を残す
- 取り込んだCSVのファイル名と取り込んだ日時、選考の件数
- 毎月1日に計算した通過率と日数の分布の表と、計算に使った期間と区分の決め方の版
- 毎週の担当ごとの見込みの平均・分布・届く確率・区分
- 月末の実際の承諾の件数と、各週の見込みとのずれ
- AIに渡した入力(ハッシュ値に置き換えたもの)と、返ってきたJSONの全文
- 根拠不一致で外した候補と、リーダーが直した・消した候補
4つ目が、式の確かさの記録になります。 「届く確率7割」の担当が実際に5割しか届いていなければ、通過率の表が甘いということです。
最後の行は、理由の候補の当たり外れを振り返る材料です。 「企業の結果待ち」ばかりが外れるなら、企業からの最後の連絡の日付が入力されていない可能性があります。
04実装レベルの3段階
本記事の想定は半自動化です。 1名15分が4分になる計算は、この段階で置いています。リーダーが一覧を読んで面談で使う作業は残します。 本格構成で足すのは、waiting_on が company の選考を企業ごとにまとめ、企業の担当の営業へ回す流れです。 営業との運用が絡むので、半自動化で数か月回してから作ります。
05工数削減シミュレーション
導入後 120件 × 4分 ÷ 60 = 8 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- キャリアアドバイザーが20〜50名ほどいる人材紹介会社(IT・営業職・医療・介護などの職種別の紹介を含む)で、チームリーダーが毎週、担当ごとの今月の成約の見込みを作ってアドバイザーと面談している場合。人材紹介の管理システムから、選考ごとの段階と段階が変わった日付をCSVで出せる場合。見込みがアドバイザー本人の申告と、リーダーの経験による読みに頼っている場合。
- アドバイザーが数名で、所長が全候補者の状況を毎日把握できている場合。選考の段階が管理システムに入っておらず、段階が変わった日付をさかのぼれない場合。過去の成約が月に数件しかなく、段階ごとの通過率を数字で出せない場合。AIにアドバイザーの評価や候補者への推薦の可否を決めさせたい場合(この構成が出すのは見込みの数字と、動かす候補者の候補までです)。
07最小構成で試す方法
- 先月のアドバイザーから5名を選ぶ(目標に届いた担当と、届かなかった担当を混ぜる)
- 先月の第2月曜日の時点の、5名の選考中の一覧を管理システムから出す
- 過去12か月の段階の変更から、段階ごとに承諾に至った割合をスプレッドシートで数える
- 2の一覧の選考ごとに3の割合を当て、担当ごとに足して、実際の承諾の件数と比べる
- 届かなかった担当の、止まっていた選考の段階・日数・メモを、会社が契約しているAIサービスに氏名を消して貼る
- 「止まっている理由の候補を、根拠にした項目付きで最大2つ出してください。メモに無い候補者の事情は書かず、アドバイザーに確かめる質問にしてください」と指示する
3番目と4番目は、AIを使わずにまず式だけを確かめる手順です。 段階の割合を足しただけの見込みが、当時のリーダーの見積もりより実際の件数に近いかを先に見ます。
| 出てきた内容 | 判断 |
|---|---|
| 割合を足した見込みが当時の見積もりより実際に近く、理由の候補が当時の事情と重なった | スクリプトとの連携に進む |
| 見込みは良いが、理由の候補に他社の選考などの推測が混ざった | 指示の書き方で直る。構成は有効 |
| 割合を足した見込みが実際より大きく上振れした | 承諾までの日数と滞留の扱いが先。 AIの前に式を直す |
3行目が出ても、構成をやめる理由にはなりません。 多くは、月の後半の最終面接や止まっている選考を、そのままの割合で数えたためです。第7章の前処理の6番目を入れると、上振れは小さくなります。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 月の後半の最終面接まで今月に数える | 承諾までの日数の分布で、残りの日数に届く割合を掛ける |
| 止まっている選考の確率が高く出る | すでに経った日数を超えた分の中で割合を取り、9割の値を超えたら実績で置き換える |
| 確率を足しただけで目標と比べる | 成約数の分布を計算し、目標に届く確率で出す |
| 段階を進める時期がアドバイザーごとに違う | 段階を進める約束(面接日が決まったら、など)を事業部で決める |
| AIが候補者の事情を推測する | メモに無い事情は質問の形にさせる |
| AIが確率を計算し直してくる | 指示で禁じ、スキーマに確率の欄を作らない |
| 理由の候補の根拠の項目が入力に無い | evidence をスクリプトで照合し、無い候補を外す |
| 候補者の氏名がAIの入力に入る | 取り込みの段階で落とし、IDはハッシュ値にする |
| Webhook の URL が外に出る | スクリプト プロパティに置き、編集権限を限る |
| 見込みの一覧がアドバイザーの評価に使われる | 一覧は面談の材料とし、評価の資料にしないと事業部で決める |
上の3行が、見込みの数字の失敗のほとんどです。 どれもAIとは関係がなく、時期と滞留を見ずに段階の数を数えていることから起きます。
最後の行は、運用の約束で防ぎます。 届く確率が担当ごとに数字で並ぶと、それがそのまま担当の評価に見えます。評価に使うと、アドバイザーが段階を進める時期を見込みに合わせて動かすようになり、通過率そのものが崩れます。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 候補者ID、選考の段階と日付、求人企業、アドバイザーのメモの要旨、アドバイザーごとの目標と見込みです。メモには候補者の転職の事情が書かれることがあり、取り扱いに注意が要る個人の情報を含みます。
- 有料の枠で使う … Gemini API の追加の利用規約では、無料の枠に送った内容は製品の改善に使われ、人が読むことがあるとされ、機密の情報や個人の情報を送らないよう求められています。 有料の枠では、プロンプトと応答を製品の改善に使わないとされています。候補者の情報を扱う以上、有料の枠で使います
- 渡す範囲を絞る … 氏名・連絡先・現職の会社名は取り込みの段階で落とし、候補者IDはハッシュ値にします。メモの要旨にも氏名や病歴・家族の事情の詳細を書かない約束をアドバイザーと結びます。 AIの入力に入るためです
- 候補者の利用目的の範囲で使う … 見込みのための集計が、候補者に示した利用目的の範囲に入るかを先に確かめてください
- 候補者への連絡をAIに作らせない … 承諾をうながす文面は作らせません。候補者の判断に紹介会社の月の都合を持ち込まないためです
- 知らせに個人の情報を載せない … Chat には区分ごとの人数とリンクだけを送ります
- AIに判断させない … 目標の修正、アドバイザーの評価、推薦の取り下げは、リーダーと事業部長が行います。 この構成が出すのは、見込みの数字と、動かす選考の候補までです
誤りが起きた場合のリスクは、見込みが甘くて手を打つのが遅れることと、根拠の無い理由の候補でアドバイザーや候補者に的外れな働きかけが出ることの2つです。 前者は滞留の扱いと届く確率の振り返りで、後者は evidence の照合と「候補」の扱いで防ぎます。
10まず何から始めるか
1週目:段階と承諾の数え方をそろえる
段階の名前を8つにそろえる対応表を作り、承諾の締めの日付と、段階を進める時期の約束を事業部で決めます。
2週目:5名で式を確かめる
先月の5名について、段階の割合を足した見込みを手で計算し、実際の承諾の件数と当時のリーダーの見積もりと比べます。滞留と残りの日数の扱いを入れた場合と入れない場合の両方を出し、どちらが実際に近いかを見ます。
3週目:取り込みと見込みの計算を作る
CSVの取り込みから、通過率の表、担当ごとの見込みと届く確率の一覧までを作ります。この時点ではAIを呼びません。 届かない見込みの担当が毎週何名になるかを数えます。
4週目:理由の候補を足す
動かす選考について Gemini API を呼び、理由の候補と確かめる点を一覧に出します。最初の1か月は、リーダーが自分で選んだ止まっている選考と並べて比べます。
2か月目: 一覧を月曜の面談で使う運用に切り替え、確かめた事情を管理システムのメモに書いてもらいます。3か月目以降: 届く確率と実際に届いた割合を月ごとに見て、通過率の区分と滞留の扱いを調整します。1名15分が何分になったかと、届く確率7割の担当のうち実際に届いた割合を実測した時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
| 時間主導型のトリガーが毎分から毎月の間隔で動き、時刻が少しずれること。作成した人のアカウントで実行されること | Google for Developers: Installable triggers | 2026-10-07 |
| 1回の実行が6分まで。トリガーの合計実行時間が Google Workspace で1日6時間。URL の取得が Google Workspace で1日100,000回 | Google for Developers: Quotas for Google Services | 2026-10-07 |
Utilities.parseCsv() が CSV の文字列を2次元の配列にすること。computeDigest が指定したアルゴリズムで要約を計算すること | Google for Developers: Utilities | 2026-10-07 |
UrlFetchApp.fetch() の method・contentType・payload・headers・muteHttpExceptions | Google for Developers: UrlFetchApp | 2026-10-07 |
| スクリプト プロパティがスクリプトのすべての利用者で共有されること | Google for Developers: Properties Service | 2026-10-07 |
| 受信 Webhook が一方向の知らせで、スペースあたり毎秒1回の上限を共有すること。URL を公開の場所に貼らないこと | Google for Developers: Send Google Chat messages with incoming webhooks | 2026-10-07 |
Gemini API の構造化出力が /v1beta/interactions の response_format(mime_type と schema)で指定でき、値の正しさはアプリケーションで確かめるべきこと | Google AI for Developers: Structured output | 2026-10-07 |
| 無料の枠の内容は製品の改善に使われ人が読むことがあり、機密・個人の情報を送らないよう求められること。有料の枠では改善に使わないこと | Google AI for Developers: Gemini API Additional Terms of Service | 2026-10-07 |
段階のそろえ方、通過率の区分、承諾の締めの日付は、自社の実情に合わせて決めてください。 本記事は Google for Developers と Google AI for Developers で確認できた範囲だけを扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-0814)についてのご相談はこちらから。
