人材派遣会社で、新しく登録したスタッフが就業につながるかを登録内容・希望条件・連絡への反応から見込み、コーディネーターが先に連絡する順番を毎週出す
新しく登録した派遣スタッフについて、登録から45日以内に初回の就業につながる見込みを、登録内容・希望条件と受注の合い方・連絡への反応から出します。毎週月曜に、コーディネーターが先に連絡する順番の一覧にします。
- 連携・自動化
- Python
- 対象業界
- IT・SaaS/人材/物流
- 対象部門
- 営業/採用
- 対象業務
- 分類・仕分け/集計・分析
- 主な課題
- 人手が足りない/判断に時間がかかる/属人化している
- AIで行う処理
- 予測
- 主な効果
- 判断支援/工数削減/機会損失防止
- 導入難易度
- ★★★★☆
- 実装レベル
- 本格構成
- 費用感
- RAG・個別開発(大)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 毎週月曜の朝、各コーディネーターが自分の担当の支店の新規登録者一覧を派遣管理システムから開く
- 1人ずつ登録内容を開き、希望職種・勤務地・時給・開始可能日・経験を読む
- いま出ている受注の一覧と見比べ、紹介できそうな仕事があるかを探す
- SMSやメールの返信、前回の電話に出たかどうかを、配信サービスと対応メモで確かめる
- 「今週先に電話する人」「SMSで様子を見る人」「後回しにする人」を手元のメモに分ける
- メモの順に電話をかけ、結果を派遣管理システムの対応履歴に書く
- 自動毎週月曜の朝6時に、派遣管理システムと配信サービスの書き出しを取り込む
- 自動登録者ごとに、希望条件に合う受注の件数、返信までの時間、登録項目の埋まり方などの特徴を作る
- 自動学習済みのモデルで、45日以内に初回就業する見込みを出す
- 自動見込みを押し上げた要因と下げた要因を、決めておいた言い回しの文にする
- 自動見込みと登録からの日数で、A・B・Cの3つの帯に分ける
- 自動Cの帯から無作為に1割を選び、「抽出確認」の印を付けてAと同じ扱いにする
- 自動担当の支店ごとに一覧を作り、Teams のチャネルに置き場所を知らせる
- 人コーディネーターが一覧を上から見て、今週電話する人を決める
- 人電話・SMSの結果を、これまでどおり対応履歴に書く
- 自動月に1回、45日を過ぎた登録者の結果でモデルを学び直す
各工程の詳しい説明を読む
- 毎週月曜の朝、各コーディネーターが自分の担当の支店の新規登録者一覧を派遣管理システムから開く
- 1人ずつ登録内容を開き、希望職種・勤務地・時給・開始可能日・経験を読む
- いま出ている受注の一覧と見比べ、紹介できそうな仕事があるかを探す
- SMSやメールの返信、前回の電話に出たかどうかを、配信サービスと対応メモで確かめる
- 「今週先に電話する人」「SMSで様子を見る人」「後回しにする人」を手元のメモに分ける
- メモの順に電話をかけ、結果を派遣管理システムの対応履歴に書く
(a)見る項目は同じでも、決め方が人によって違う。 あるコーディネーターは経験年数を重く見て、別の人は返信の速さを重く見ます。どちらが当たっているかを、誰も確かめたことがありません。 担当が替わると、同じ登録者でも電話の順番が変わります。
(b)受注との見比べに時間がかかる。 希望の勤務地と時給に合う受注があるかを、受注の一覧を絞り込みながら1人ずつ探します。1人6分のうち、いちばん長いのがこの見比べです。
(c)連絡の反応が別の場所にある。 SMSの返信は配信サービスの画面、電話の結果は対応履歴、メールの開封は別の画面です。全部を開いてから決めるのは、週の初めの忙しい時間には続きません。 結果として、返信のあった人だけが先に拾われ、返信の手段を持たない人が後ろに回ります。
(d)後回しにした人が、そのまま埋もれる。 「後回し」にした人は翌週の一覧で新しい登録者の下に入ります。登録から2週間たつと、誰も見ない層ができます。
(e)決め方が当たっていたかを振り返れない。 メモに分けた順番は残らず、誰を先に電話して誰が就業したかを後から突き合わせられません。勘を磨く材料が、記録の側にありません。
- 【自動】 毎週月曜の朝6時に、派遣管理システムと配信サービスの書き出しを取り込む
- 【自動】 登録者ごとに、希望条件に合う受注の件数、返信までの時間、登録項目の埋まり方などの特徴を作る
- 【自動】 学習済みのモデルで、45日以内に初回就業する見込みを出す
- 【自動】 見込みを押し上げた要因と下げた要因を、決めておいた言い回しの文にする
- 【自動】 見込みと登録からの日数で、A・B・Cの3つの帯に分ける
- 【自動】 Cの帯から無作為に1割を選び、「抽出確認」の印を付けてAと同じ扱いにする
- 【自動】 担当の支店ごとに一覧を作り、Teams のチャネルに置き場所を知らせる
- 【人】 コーディネーターが一覧を上から見て、今週電話する人を決める
- 【人】 電話・SMSの結果を、これまでどおり対応履歴に書く
- 【自動】 月に1回、45日を過ぎた登録者の結果でモデルを学び直す
8番目が、この設計の分かれ目です。 一覧の順番は提案で、決めるのはコーディネーターです。一覧に無い事情(前回の電話で「来週なら話せる」と言われた、など)を知っているのは人です。 順番を入れ替えたら、その理由を一言だけ対応履歴に残します。
6番目は、精度を上げるためではなく、精度を確かめ続けるための工程です。 第1章で書いたとおり、低い帯に連絡しなければ、低い帯の結果は「就業せず」で埋まります。抽出した1割の結果だけが、低い帯が本当に低いかを教えてくれます。
02今回想定するシステム構成
派遣管理システム / SMS・メール配信サービス │ 登録者・受注・就業・対応履歴・送受信の書き出し ▼【トリガー】毎週月曜6時の定時実行 Python(pandas で登録者ごとの特徴量の作成) │ 希望条件に合う受注の件数/返信までの時間/不在の回数 │ 登録からの日数/登録項目の埋まり方/登録経路/過去の就業 ▼ Python(LightGBM の LGBMClassifier + scikit-learn で確率の較正) │ 45日以内の初回就業の見込み + pred_contrib で要因ごとの寄与 ▼ 理由文への置き換え(決めておいた言い回しの表) │ ├──▶ A・B・C の帯と、抽出確認の印(Cから無作為に1割) ▼ 支店ごとの一覧 ──▶ Teams のチャネルに置き場所を通知 ▼ 【コーディネーターが電話の順番を決める】 ▼ 対応履歴と就業の記録 ── 月1回の学び直し
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| 実行環境 | Python(pandas・LightGBM の LGBMClassifier・scikit-learn) | R、Amazon SageMaker |
| データの取得元 | 派遣管理システムと配信サービスの書き出し | 各システムのデータベースの参照用の複製 |
| 保存 | 社内のファイルサーバー(一覧と学習の記録) | 社内のデータベース |
| 通知 | Microsoft Teams のチャネル | 社内のメール |
どのシステムにも書き込みません。 一覧は読むためのもので、派遣管理システムの登録者の画面に見込みの数字を表示する経路は作りません。担当者が数字を先に目にすると、電話口の話し方そのものが変わるからです。 一覧を開くのは、順番を決めるときだけにします。
生成AIは使いません。 理由の文は、要因ごとに決めておいた言い回しに値を差し込んで作ります。登録者の氏名・連絡先・経歴を外部のサービスに渡す必要もありません。 予測は社内で動く Python の中で閉じます。
動かす場所は、社内のサーバーの定時実行で足ります。 Windows のタスク スケジューラや Linux の cron から Python のスクリプトを呼び、書き出しのファイルを読んで一覧を書き出すだけです。クラウドの機械学習の基盤は、登録が月数千人を超えて学び直しが重くなってから検討します。
モデルに LightGBM を選ぶ理由は2つあります。 1つ目は、predict に pred_contrib=True を渡すと、登録者ごと・要因ごとの寄与が返ることです。返り値は要因の数に1を足した列を持ち、最後の列が期待値です。見込みを押し上げた要因と下げた要因を、寄与の大きい順に取り出せます。
2つ目は、登録経路や希望職種のような区分の値をそのまま扱えることです。categorical_feature を 'auto' にすると、pandas の順序のない区分の列が区分として使われます。
もう1つ、あえて使わない設定があります。 就業につながる人は全体の一部なので、2値の分類で少ないほうを重くする is_unbalance や scale_pos_weight を使いたくなります。しかし公式の説明では、これらを使うと個々のクラスの確率の推定が悪くなるとされています。この構成は確率の値を帯の境目に使うので、重み付けはせず、確率を較正するほうを選びます。
03どうやって実装するのか
処理の起点を決める
毎週月曜の朝6時に動かします。 コーディネーターが週の連絡の段取りを決めるのが月曜の朝なので、それより前に一覧ができていればよく、登録のたびに動かす必要はありません。
ただし、週の途中の登録者を1週間待たせないための仕組みを1つ足します。 木曜の朝6時にも同じ処理を動かし、月曜以降に登録した人だけの短い一覧を出します。登録から数日で連絡がつかなくなる人がいるため、ここは週1回にしません。
学び直しは月の第1月曜に、予測の前に行います。学習と予測を同じ日に回すことで、一覧のモデルの版と学習の日付が必ずそろいます。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 登録者 | 登録者番号、登録日、登録経路、希望職種、希望の勤務地(通勤圏の区分)、希望時給、開始可能日、希望の曜日と時間帯、経験職種と年数、資格 | 派遣管理システム |
| 受注 | 受注番号、職種、勤務地の区分、時給、開始日、募集人数、充足の状況 | 派遣管理システム |
| 就業 | 登録者番号、初回就業の開始日 | 派遣管理システム |
| 対応履歴 | 電話の日時と結果(話せた/不在/折り返し待ち)、面談の予約と実施 | 派遣管理システム |
| 送受信 | SMSとメールの送信日時、返信日時、配信停止の希望 | 配信サービス |
質を決めるのは、いちばん下の2つです。 返信までの時間と、電話に出たかどうかは、登録内容よりもずっと強く就業に効く、と現場のコーディネーターは感じています。それを確かめるのが、この構成で最初にやることです。
入れないものも先に決めます。 生年月日・年齢、性別、国籍、住所の番地、家族、健康の記載は特徴量に入れません。勤務地は「通勤圏の区分」まで丸めて使います。 精度のためにこれらを足すと、属性で連絡の順番が決まる仕組みになります。
データの取得方法を決める
派遣管理システムと配信サービスから、前の週の日曜までの記録を CSV で書き出し、共有フォルダに置きます。多くの派遣管理システムには書き出しの機能があり、定時の書き出しを設定できない場合は、月曜の朝に担当者が書き出す運用でも始められます。
| 取るもの | どこから | 何に使うか |
|---|---|---|
| 直近30日に登録し、まだ就業していない人 | 登録者と就業 | 今週の予測の対象 |
| 登録から45日を過ぎた人の全員 | 登録者と就業 | 学習の材料(就業したか) |
| 募集中の受注 | 受注 | 希望条件に合う受注の件数 |
| 送受信と電話の記録 | 配信サービスと対応履歴 | 連絡への反応 |
予測の対象を「直近30日」に絞るのは、それより古い登録者には別の連絡のしかたが合うからです。 30日を過ぎて就業していない人は、月1回の近況確認のSMSに回し、この一覧には載せません。
学習の材料は、登録から45日を過ぎた人だけにします。 45日たっていない人は「まだ就業していない」だけで、就業しなかったと決まったわけではありません。 ここを混ぜると、最近の登録者がすべて「就業せず」として学ばれ、見込みが一様に低く出ます。
AIへ渡す前に整形する
- 登録者の重複をまとめる … 同じ人が別の経路で登録し直していることがあります。電話番号とメールアドレスで照合し、古いほうの番号に寄せます
- 受注との合い方を数える … 職種の区分が同じで、勤務地の区分が通勤圏に入り、時給が希望を下回らない受注を数えます
- 反応の時間をそろえる … 初回のSMSから返信までの時間を時間単位にします。返信が無い人は、欠けたままにします
- 区分の値を category 型にする … 登録経路、希望職種、通勤圏の区分
- 時点をそろえる … 学習の材料では、特徴をすべて「登録から7日目の時点」で作ります
- 配信停止の人を外す … 連絡を断った人は予測の対象にしません
- 受注の時点もそろえる … 学習の材料の「合う受注の件数」は、登録7日目の時点で募集中だった受注で数えます
5番目がいちばん間違えやすいところです。 学習の材料を「いまの時点」の記録で作ると、就業した人には面談の記録や返信が必ずあり、就業の結果そのものを特徴として学んでしまいます。 評価では驚くほど当たり、実際の一覧ではまったく当たりません。
7番目も同じ問題の別の形です。 いま募集中の受注で過去の登録者の件数を数えると、その人が就業した仕事がすでに充足になっていて、就業した人ほど「合う受注が少ない」と出ます。 受注の募集開始日と充足日を使い、当時の一覧を作り直してから数えます。
3番目で返信の無い人を0時間にしないのも同じ考えです。 0時間は「すぐ返信した」と区別がつきません。LightGBM は欠けた値をそのまま扱えるので、埋めずに渡します。
AIに処理させる
させるのは、登録者ごとに「45日以内に初回就業する確率」を出すことと、その確率を押し上げた要因・下げた要因を寄与の大きい順に返すことだけです。
| 使う特徴 | 中身 |
|---|---|
| 希望条件に合う受注の件数 | 前処理の2番目で数えた件数 |
| 希望時給と合う受注の時給の差 | いちばん近い受注との差 |
| 開始可能日までの日数 | 今日から開始可能日まで |
| 初回のSMSから返信までの時間 | 返信が無ければ欠けたまま |
| 電話の不在の回数 | 登録から7日目まで |
| 面談の予約の有無 | 登録から7日目まで |
| 登録項目の埋まり方 | 任意の項目のうち入力された割合 |
| 登録経路 | 求人サイト名/自社サイト/紹介 |
| 過去の就業の回数 | 自社での就業歴 |
特徴は10個前後に抑えます。 増やすほど評価の数字は上がりやすくなりますが、コーディネーターが理由の文を読んで納得できる要因でなければ、一覧は使われません。 足すときは、入れ替えの記録に何度も出てくる要因から足します。
帯の分け方は規則で決めます。 モデルに帯を決めさせず、確率と登録からの日数から次のように決めます。
| 帯 | 条件 | 今週の連絡 |
|---|---|---|
| A | 確率が上位3割、または登録から3日以内で未接触 | 電話 |
| B | 確率が中位4割 | 電話(Aの後) |
| C | 確率が下位3割 | 近況確認のSMS。うち1割は抽出確認として電話 |
Aに「登録から3日以内で未接触」を入れているのは、まだ反応の記録が無い人を不利にしないためです。 登録した直後の人は返信の特徴が欠けているので、確率は控えめに出ます。最初の電話の前に、この人を後ろへ回すことはしません。
| させないこと | 理由 |
|---|---|
| 連絡しない人を決める | 全員に連絡する。決めるのは順番だけ |
| 派遣先へ紹介する人を決める | 紹介は受注ごとにコーディネーターが決める |
| 確率を登録者に伝える | 電話の目的は仕事の紹介で、評価を伝えることではない |
| 属性を使った見込み | 年齢・性別・国籍は特徴に入れない |
指示内容を固定する
この構成でAIに与える指示は、文章のプロンプトではなく学習・較正・予測の設定です。
import lightgbm as lgb
from sklearn.calibration import CalibratedClassifierCV
from sklearn.frozen import FrozenEstimator
FEATURES = [
"matched_orders", "wage_gap_nearest", "days_to_available",
"hours_to_first_reply", # 返信が無ければ欠けたまま
"missed_calls_d7", "interview_booked_d7",
"profile_fill_rate", "channel", "job_category", # 区分は category 型
"past_assignments",
]
# 入れないもの:生年月日、年齢、性別、国籍、住所の番地、家族、健康
# 学習の材料:登録から45日を過ぎた人。特徴は登録7日目の時点で作る
hist = regs[regs["days_since_reg"] >= 45]
train = hist[hist["reg_month"] <= cutoff_train] # 古い期間で学習
calib = hist[(hist["reg_month"] > cutoff_train) & (hist["reg_month"] <= cutoff_calib)]
model = lgb.LGBMClassifier(
n_estimators=300, learning_rate=0.05, num_leaves=15,
random_state=0, # is_unbalance は使わない(確率が崩れる)
)
model.fit(train[FEATURES], train["placed_45d"], categorical_feature="auto")
# 較正は学習に使っていない期間で行う
cal = CalibratedClassifierCV(FrozenEstimator(model), method="sigmoid")
cal.fit(calib[FEATURES], calib["placed_45d"])
prob = cal.predict_proba(week[FEATURES])[:, 1]
contrib = model.predict(week[FEATURES], pred_contrib=True) # 最後の列は期待値
up, down = split_reasons(contrib[:, :-1], FEATURES, k=3)
較正に sigmoid を選ぶのは、件数が少ないためです。 scikit-learn の説明では、較正に使う件数が1,000を大きく下回るときは isotonic は過学習しやすく推奨されないとされています。月600人の登録で、45日を過ぎた2か月分を較正に使っても1,000人前後です。
FrozenEstimator で包むのは、学習済みのモデルを較正のときに学び直させないためです。 この場合は渡したデータがすべて較正に使われ、学習と較正のデータが重ならないようにするのは使う側の責任とされています。上のコードで期間を分けているのはそのためです。
評価も期間で分けます。 直近の登録月を検証用に取っておき、「Aの帯に入った人のうち、45日以内に就業した割合」が全体の割合をどれだけ上回るかを見ます。正解率は見ません。帯の中の順番が当たっているかが、コーディネーターにとっての価値だからです。
出力形式を固定する
登録者1人ごとに、次の形で一覧に書き出します。
{
"registrant_no": "",
"branch": "",
"registered_on": "2026-10-02",
"prob_placed_45d": 0.0,
"band": "A | B | C",
"random_check": false,
"reasons_up": [
{ "feature": "matched_orders", "value": 4, "text": "希望条件に合う募集中の仕事が 4 件ある" }
],
"reasons_down": [
{ "feature": "missed_calls_d7", "value": 2, "text": "電話に 2 回出ていない" }
],
"matched_order_nos": ["", ""],
"model_version": "2026-10"
}
1つ目の理由は、reasons_down を出すことです。 下げた要因は、そのまま電話の話題になります。「電話に出ていない」ならSMSで時間を聞く、「合う仕事が0件」なら希望の勤務地を広げられるかを聞く。下げた要因が、何を話せばよいかを教えてくれます。
2つ目は、matched_order_nos で受注の番号を並べることです。 電話の前に紹介できる仕事を開けるので、第4章の②の見比べがここで終わります。
3つ目は、random_check を帯と別に持つことです。 抽出確認の人はCの帯のまま印が付き、コーディネーターは「なぜこの人に電話するのか」を区別できます。 学び直しの担当は、この印の人だけを使ってCの帯の当たり方を確かめます。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 派遣管理システム | CSV の書き出し | 登録者・受注・就業・対応履歴を読む |
| 配信サービス | CSV の書き出し | SMSとメールの送受信を読む |
| 共有フォルダ | ファイルの保存 | 支店ごとの一覧と学習の記録を置く |
| Microsoft Teams | チャネルへの投稿 | 一覧ができたことと置き場所を知らせる |
派遣管理システムへは書き込みません。 帯の印を登録者の画面に入れたくなりますが、入れた時点で、派遣先への紹介を決める画面にも見込みが見えるようになります。 一覧は、連絡の順番を決める人だけが開く場所に置きます。
書き出しのファイルは、日付を名前に入れて残します。 一覧のどの行がどの日の書き出しから作られたかを、後から追えるようにするためです。同じ名前で上書きすると、先週の一覧の根拠が消えます。
Teams には一覧そのものを貼りません。 チャネルには「今週の一覧ができた」ことと置き場所だけを投稿します。登録者の名前と見込みが並んだ表を、支店をまたいで見える場所に流さないためです。
人が確認する
一覧の順番は提案です。電話の順番を決めるのはコーディネーターです。
- Aの帯の理由を読む …
reasons_upに「合う仕事がある」が無いのにAに入っている人は、登録直後の未接触でAに入った人です。最初の電話で希望を聞き直します - 入れ替えたら一言残す … 順番を変えた理由(「本人から来週と言われた」など)を対応履歴に書きます
- 抽出確認の人に電話する … 印の付いた人を後回しにしません。ここを省くと、翌月の学び直しが偏ります
- 見込みの数字を登録者に伝えない … 電話の目的は仕事の紹介です
3番目を毎週守れるかで、この構成が半年後も使えるかが決まります。 忙しい週ほど、Cの帯の電話は真っ先に省かれます。抽出確認の人数は支店ごとに週数人に収まるように、1割という割合を決めています。
月に1回、主任が帯ごとの結果を見ます。 Aの帯の就業の割合が全体と変わらなくなっていたら、受注の傾向が変わったか、登録経路の構成が変わったかを確かめてから学び直します。
例外に対処する
| 起きること | 対応 |
|---|---|
| 新しい登録経路が増えた | 学習に無い区分は「その他」にまとめ、一覧に「新しい経路」の印を付ける |
| 返信と電話の記録がまったく無い | 登録から3日以内ならAへ。それ以降は帯を付けず「記録なし」で一覧の末尾に置く |
| 同じ人が二重に登録している | 前処理で寄せる。寄せきれないものは両方に「重複の疑い」を付ける |
| 募集中の受注が極端に少ない週 | 合う受注の件数がほぼ全員0になる。その週は帯をBに寄せ、主任に知らせる |
| 配信停止の希望が出た | 予測の対象から外す。電話の対象からも外す |
| 書き出しのファイルが届いていない | 前の週の一覧を使わず、「今週は一覧なし」と通知する |
| 較正のデータが足りない | 学び直しを見送り、前の月のモデルを使い続ける |
4行目は、受注が少ない時期に起きます。 合う受注の件数が強い特徴なので、受注が減ると全員の確率が下がり、本来は電話すべき人までCに落ちます。 帯の境目を確率の値ではなく順位で決めているのは、このためでもあります。
6行目で前の週の一覧を使わないのは、古い一覧で電話すると、すでに就業した人に仕事を紹介してしまうからです。
記録を残す
- 毎週の一覧(登録者番号、確率、帯、理由、抽出確認の印、モデルの版)
- 予測に使った特徴量の表と、書き出しのファイルの日付
- 学習と較正に使った期間、件数、評価の結果(帯ごとの就業の割合)
- コーディネーターが順番を入れ替えた記録と理由
- 登録者ごとの、その後の就業の有無と開始日
- 特徴量から外した項目の一覧と、外した理由
- 抽出確認の印を付けた人と、実際に電話したかどうか
4つ目は、モデルの見直しの材料になります。 入れ替えの理由に同じ言葉が何度も出てくるなら(「夜しか電話に出ない」など)、それはまだ特徴量にしていない要因です。
最後から2行目は、抽出確認が守られているかを数えるために残します。 印を付けた人のうち電話した割合が下がっていれば、Cの帯の当たり方はもう確かめられていません。
外した項目の記録を残すのは、学び直しの担当が替わったときのためです。 「年齢を入れたら当たりがよくなった」という理由で項目が足されることを防ぎます。外した理由が書いてあれば、足す前に誰かが止められます。
04実装レベルの3段階
半自動化で、②と③はほぼ無くなります。 合う受注の件数と反応が一覧に並ぶので、1人6分が3分程度になります。本格構成で2分になり、この段階が本記事の想定です。 残る2分は、理由を読んで順番を確かめる時間です。 半自動化を飛ばさないでください。 規則で並べた一覧を1か月使うと、コーディネーターがどの順番に違和感を持つかが分かります。その違和感が、モデルで確かめるべき仮説になります。
05工数削減シミュレーション
導入後 600件 × 2分 ÷ 60 = 20 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 一般事務・軽作業・コールセンターなどの登録型派遣で、Webからの新規登録が月に数百人あり、コーディネーターが登録者一覧を見ながら誰に先に電話するかを毎週決めている人材派遣会社。登録から初回就業までの記録と、SMS・メール・電話の連絡の記録が、登録者の番号で1年分以上引ける場合。
- 新規登録が月に数十人で、コーディネーターが全員に登録当日のうちに電話できている場合。初回就業の日付や連絡の記録が派遣管理システムに残っておらず、誰が就業につながったかを後から特定できない場合。専門職の紹介予定派遣のように、1人ずつの面談に時間をかける運用の場合。なお、どの登録者を派遣先へ紹介するかの判断と、登録者を選別する判断は、この構成では代替できません。
07最小構成で試す方法
- 半年前に登録した人から、1か月分(約600人)の記録を書き出す
- 登録から7日目の時点での、合う受注の件数・返信までの時間・電話の不在の回数・登録経路を表にする
- 45日以内に就業したかを、その横の列に入れる
- 返信までの時間の区分(当日/3日以内/返信なし)ごとに、就業した割合を数える
- 合う受注の件数の区分(0件/1〜2件/3件以上)でも同じように数える
機械学習を使う前に、集計だけで差が出るかを確かめます。 区分ごとに就業の割合が大きく違えば、予測の材料があるということです。
| 出てきた内容 | 判断 |
|---|---|
| 返信や受注の区分で就業の割合が大きく違う | モデルを作る段階に進む |
| どの区分でも割合がほとんど同じ | 連絡の記録が足りない。記録の付け方を直すのが先 |
| 返信なしの人の記録がほとんど無い | 電話の結果が対応履歴に残っていない |
半年前の登録者を使うのは、45日の結果がすべて出ているからです。 先月の登録者では、まだ就業していないだけの人が混ざります。集計のときも、時点をそろえる考え方は同じです。
2行目が出ても失敗ではありません。 何が就業に効くかが記録から読めないということで、コーディネーターが勘で決めていた理由も、記録の側には残っていなかったということです。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 評価では当たるのに一覧が外れる | 学習の特徴が就業の後の記録を含んでいる。登録7日目の時点で作り直す |
| 最近の登録者の見込みが一様に低い | 45日たっていない人を「就業せず」として学んでいる。学習から外す |
| 確率の値が実際の割合とずれる | is_unbalance を使っていないか確かめ、期間を分けて較正する |
| Cの帯が毎月さらに低く出る | 抽出確認の電話が省かれている。印の人の電話を最優先で守る |
| 登録直後の人がCに落ちる | 反応の特徴が欠けているだけ。3日以内の未接触はAに入れる規則を外さない |
| 受注が少ない週に全員が低く出る | 帯は順位で決める。主任に知らせる |
| 理由の文が毎回違う言い方になる | 要因ごとの言い回しの表を固定する |
| 属性の項目が後から足される | 外した項目と理由を記録に残し、コードにも書く |
| 見込みが登録者の画面に表示される | 派遣管理システムへは書き込まない |
| 過去の登録者の「合う受注」が少なく出る | いまの受注で数えている。当時募集中だった受注で数え直す |
上の2行が、この構成の失敗のほとんどです。 どちらも「いつの時点の記録で学ばせたか」という同じ問題から出ています。評価の数字が良すぎるときほど、まず時点を疑ってください。
4行目は、運用が始まってから数か月後に効いてきます。 抽出確認を省いた月が続くと、Cの帯は「電話しなかったから就業しなかった人」で埋まり、モデルはそれを正しく学んで、さらに低く出します。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 登録者の希望条件・経験・資格、連絡への反応、就業の記録です。氏名・電話番号・メールアドレスは一覧に出しますが、特徴量には使いません。
- 個人情報は業務の目的の範囲で使う … 労働者派遣法の第24条の3は、派遣元事業主が労働者の個人情報を収集・保管・使用するときは、業務の目的の達成に必要な範囲内で行うこととし、適正に管理するための措置を講じることを求めています。連絡の順番を決めることが登録時に示した利用目的に入っているかを、先に確かめてください
- 属性で順番を決めない … 年齢・性別・国籍などは特徴量に入れません。入れていない項目が、別の項目を通じて効いていないか(通勤圏の区分が特定の地域と重なる、など)も、帯ごとの構成を年に数回見て確かめます
- 見込みで登録者を選別しない … 全員に連絡するという前提を崩しません。見込みが低い人への連絡をやめる運用にすると、この構成は選別の仕組みに変わります
- 見込みを派遣先への紹介に使わない … 紹介は受注ごとに本人の希望と経験で決めます
- 一覧の置き場所を限る … 支店のコーディネーターだけが開けるフォルダに置き、Teams には置き場所だけを流します
- 外部のサービスに渡さない … 予測は社内の Python で閉じ、生成AIも使いません
- 一覧と学習の材料の保存期間を決める … 登録を取り消した人の記録を学習の材料から外す手順と、一覧を何か月残すかを決めておきます
誤りが起きた場合のリスクは、電話すべき人に電話が遅れることと、属性に引きずられた順番が固定されることの2つです。 前者は抽出確認と主任の月次の確認で、後者は特徴量の選び方と記録で防ぎます。
10まず何から始めるか
1週目:記録を登録者の番号でつなぐ
派遣管理システムの登録者・就業・対応履歴と、配信サービスの送受信を、登録者の番号でつないだ表を1か月分作ります。つながらない記録がどれだけあるかを、最初に数えます。
2週目:区分ごとの就業の割合を見る
第8章の集計をします。返信までの時間と合う受注の件数で、就業の割合が違うかを確かめます。 あわせて、コーディネーターが順番を決めるときに何を見ているかを聞き取ります。
3週目:入れない項目と帯の規則を決める
特徴量から外す項目、A・B・Cの帯の境目、抽出確認の割合を、派遣事業部の責任者と個人情報の担当とで決めます。 登録時の利用目的の書き方も、このときに確かめます。
4週目:規則で並べた一覧を出す
半自動化の一覧を1つの支店で出し、コーディネーターに使ってもらいます。順番に違和感があったら、その理由を書き留めてもらいます。
2か月目: LightGBM のモデルと較正を足し、確率と理由と抽出確認の印を出します。3か月目以降: 学び直しを月1回回し、Aの帯の就業の割合と、登録から最初の電話までの日数を毎月数えます。抽出確認の電話が3か月続けて守られた時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
predict の pred_contrib で要因ごとの寄与が返り、要因の数に1を足した列を持ち、最後の列が期待値であること。categorical_feature='auto' で pandas の順序のない区分の列が使われること。2値の分類では is_unbalance か scale_pos_weight を使えるが、これらを使うと個々のクラスの確率の推定が悪くなるとされていること | LightGBM: LGBMClassifier | 2026-10-08 |
CalibratedClassifierCV で分類器の確率を較正でき、sigmoid(Platt の方法)と isotonic を選べること。較正の件数が1,000を大きく下回るときは isotonic が過学習しやすく推奨されないこと。学習済みの分類器は FrozenEstimator で包んで較正し、その場合は学習と較正のデータが重ならないようにするのは使う側の責任であること | scikit-learn: CalibratedClassifierCV | 2026-10-08 |
| 派遣元事業主は、労働者の個人情報を業務の目的の達成に必要な範囲内で収集・保管・使用し、適正に管理するための措置を講じなければならないこと(第24条の3) | e-Gov 法令API: 労働者派遣事業の適正な運営の確保及び派遣労働者の保護等に関する法律 | 2026-10-08 |
登録時に示した利用目的に連絡の順番づけが入るかは、自社の個人情報の担当と確かめてください。 本記事は公式の説明で確認できた範囲だけを扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-0942)についてのご相談はこちらから。
