大学の履修・出席・成績・面談の記録から退学や休学のおそれを毎月見込み、学生支援の担当が声をかける順番と理由の候補を出す
履修・出席・成績・学費の納入・面談の記録から、次の学期の始まりまでに退学や休学の届けが出るおそれを、全学生について毎月見込みます。学生支援の担当が声をかける順番と、どの窓口がかけるかの候補を、理由と一緒に出します。
- 連携・自動化
- Python
- 対象業界
- 医療/教育
- 対象部門
- 総務
- 対象業務
- 分類・仕分け/集計・分析
- 主な課題
- データ分析に時間がかかる/人手が足りない/期限・対応漏れが起きる
- AIで行う処理
- 予測
- 主な効果
- 判断支援/工数削減/機会損失防止
- 導入難易度
- ★★★★☆
- 実装レベル
- 本格構成
- 費用感
- 個別開発(大)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 月初に、教務から出席不良と成績不振の一覧、経理から学費の未納・分納の一覧を受け取る
- 3つの一覧を学籍番号で突き合わせ、重なっている学生に印を付ける
- 1名ずつ、教務システムで修得単位・履修の取り消し・前の学期の成績を見る
- 学生支援課の面談の記録と、アドバイザーの教員のメモを読む
- 声をかけるか、誰がかけるか(学生支援課/教務/奨学金の窓口/アドバイザーの教員)を決める
- 決めた結果を学生支援課の表に書き、各窓口へメールで依頼する
- 翌月、声をかけた結果(会えた/会えない/届けが出た)を表に書き足す
- 自動毎月第1営業日の朝、Python のプログラムが動き、教務・出席・学費・面談の記録の書き出しを読み込む
- 自動学籍番号で記録をそろえ、学生ごとの特徴(修得単位の遅れ、出席の推移、学費の動き、面談の間隔など)を作る
- 自動全学生について、次の学期の始まりまでに退学・休学の届けが出るおそれを確率で見込む
- 自動点数を押し上げた記録を学業・出席・経済・つながりの4区分に足し上げ、いちばん大きい区分から窓口の候補を決める
- 自動おそれの高い順に並べ、理由の候補(上位3つの記録)と窓口の候補を付けた一覧を作る
- 自動前月から順位が大きく上がった学生と、どの一覧にも載っていなかった学生に印を付ける
- 人学生支援課の担当が一覧の上位から理由を読み、声をかけるか・窓口をどこにするかを決める
- 人各窓口へ依頼し、声をかけた結果を一覧に書き込む
- 自動学期の終わりに、届けが出た学生と見込みを突き合わせ、外れ方を記録する
各工程の詳しい説明を読む
- 月初に、教務から出席不良と成績不振の一覧、経理から学費の未納・分納の一覧を受け取る
- 3つの一覧を学籍番号で突き合わせ、重なっている学生に印を付ける
- 1名ずつ、教務システムで修得単位・履修の取り消し・前の学期の成績を見る
- 学生支援課の面談の記録と、アドバイザーの教員のメモを読む
- 声をかけるか、誰がかけるか(学生支援課/教務/奨学金の窓口/アドバイザーの教員)を決める
- 決めた結果を学生支援課の表に書き、各窓口へメールで依頼する
- 翌月、声をかけた結果(会えた/会えない/届けが出た)を表に書き足す
(a)一覧に載らない学生がいる。 3つの一覧は、それぞれの部署の基準で作られています。出席率が基準をわずかに上回り、GPAも基準をわずかに上回り、学費は分納で払えている学生は、どの一覧にも載りません。 その学生が、次の学期の初めに休学の届けを出します。
(b)突き合わせに時間が消える。 3つの一覧は書式が違い、学籍番号の桁や学部の表記もそろっていません。600名を1名ずつ教務システムで引き直す作業が、毎月の半分を占めます。 声をかける時間がその分だけ削られます。
(c)誰が声をかけるかが担当者ごとに違う。 同じ「修得単位が遅れていて学費を分納している学生」でも、ある担当者は奨学金の窓口へ、別の担当者は教務へ回します。窓口の側から見ると、同じような学生が別の経路で来ます。 どちらに回すべきだったかを、後から振り返る材料もありません。
- 【自動】 毎月第1営業日の朝、Python のプログラムが動き、教務・出席・学費・面談の記録の書き出しを読み込む
- 【自動】 学籍番号で記録をそろえ、学生ごとの特徴(修得単位の遅れ、出席の推移、学費の動き、面談の間隔など)を作る
- 【自動】 全学生について、次の学期の始まりまでに退学・休学の届けが出るおそれを確率で見込む
- 【自動】 点数を押し上げた記録を学業・出席・経済・つながりの4区分に足し上げ、いちばん大きい区分から窓口の候補を決める
- 【自動】 おそれの高い順に並べ、理由の候補(上位3つの記録)と窓口の候補を付けた一覧を作る
- 【自動】 前月から順位が大きく上がった学生と、どの一覧にも載っていなかった学生に印を付ける
- 【人】 学生支援課の担当が一覧の上位から理由を読み、声をかけるか・窓口をどこにするかを決める
- 【人】 各窓口へ依頼し、声をかけた結果を一覧に書き込む
- 【自動】 学期の終わりに、届けが出た学生と見込みを突き合わせ、外れ方を記録する
7番目が、この設計の分かれ目です。 モデルが出すのは順番と理由の候補までで、声をかけるかどうかは担当が決めます。 理由を読んで「この学生は前の学期に留学から戻ったばかりで、単位の遅れは予定どおり」と分かれば、声をかけずに済みます。
4番目で窓口の候補を出すのは、第3章の(c)をそろえるためです。 同じ記録の組み合わせなら、同じ窓口の候補が出ます。担当が候補を変えたときは理由を書くので、どちらが良かったかを後から比べられます。
02今回想定するシステム構成
教務システム(履修・成績・修得単位) 授業の出席の仕組み(ICカード・学修支援システム) 学費の納入の記録(経理) 学生支援課の面談の記録 │ 毎月第1営業日の朝、CSVで書き出し ▼【トリガー】定時実行 Python(pandas) ├──▶ 学籍番号でそろえる/対象外の学籍区分を外す ├──▶ 学生ごとの特徴を作る ▼ scikit-learn(ロジスティック回帰+確率の較正) │ 次の学期の始まりまでに届けが出るおそれ(確率) ▼ Python ── 記録ごとの寄与を4区分に足し上げ、窓口の候補を決める ▼ 学生支援課だけが見られる共有フォルダの一覧 ▼ 【担当が上位から理由を読み、声をかける・窓口を決める】 ▼ 各窓口への依頼(担当が送る)
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| 実行環境 | Python(pandas・scikit-learn のロジスティック回帰) | R、BigQuery ML |
| データの取得元 | 教務・出席・学費・面談の記録のCSVの書き出し | 各システムのAPI |
| 一覧の出力先 | 学生支援課だけが見られる共有フォルダの表 | 教務システムの帳票の機能 |
| 定時実行 | OSのタスクスケジューラ | クラウドのジョブ実行サービス |
生成AIは使いません。 この構成で行うのは、記録から確率を見込むことと、その確率を押し上げた記録を区分ごとに足し上げることだけです。どちらも同じ入力から毎回同じ答えが出るので、担当や窓口に「なぜこの学生か」を説明できます。 学生への声かけの文面は、担当が自分で書きます。
4つのシステムには書き込みません。 書き出されたCSVを読むだけです。教務システムや学費の記録に印を書き戻すと、教員や経理の画面に「退学のおそれ」が見えてしまいます。 一覧は学生支援課の中だけに置きます。
モデルにロジスティック回帰を選ぶのは、寄与を足し上げられるからです。 scikit-learn の LogisticRegression は、2値の問題では coef_ が特徴の数だけの係数を1行で持ちます。係数と、標準化した特徴の値を掛ければ、その学生の点数をどの記録がどれだけ押し上げたかが出ます。 足し算で分けられるので、4区分への足し上げも素直にできます。
確率は較正してから使います。 退学・休学は全学生の中では少ない出来事で、そのままでは学ばせる例が偏ります。偏りを補うために class_weight="balanced" を使うと、出てくる確率は実際の届けの割合より高めになります。そこで、scikit-learn の CalibratedClassifierCV で確率を較正し直します。 較正の方法は sigmoid と isotonic があり、公式の説明では isotonic は少ないデータでは学びすぎやすく、目安として1,000件程度を超えるデータがあるときに sigmoid と同等以上になるとされています。
03どうやって実装するのか
処理の起点を決める
毎月第1営業日の朝6時に動かします。 教務の出席の集計と経理の納入の締めが前月末に終わり、その書き出しがそろった後の時刻にします。担当4名が朝から一覧を読み始められるよう、始業前に終えます。
見込む先は「次の学期の始まりまで」です。 2学期制なら、4月から9月の月は後期の始まりまで、10月から3月の月は翌年度の前期の始まりまでです。月ごとに見込む先の長さが変わるので、「残りの日数」を特徴に入れます。 3月の見込みと10月の見込みでは、同じ点数でも意味が違います。
学期の境目の月は、もう一度動かします。 4月と10月は、履修登録の締めの直後にも動かします。履修登録をしなかった学生、登録した単位が極端に少ない学生は、学期の初めにしか見えない変化です。 ここを月初の1回に任せると、1か月遅れます。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 学籍の記録 | 学籍番号、学部・学科、入学年度、学年、学籍の区分、在籍の状態(在学・休学・退学・除籍)とその日付 | 教務システム |
| 履修と成績 | 学期ごとの履修登録単位、修得単位、GPA、履修の取り消し、不可の科目数 | 教務システム |
| 卒業要件 | 学科・入学年度ごとの卒業に要る単位数と、学年ごとの進級の要件 | 教務の要項(表にしたもの) |
| 出席 | 授業ごと・週ごとの出席・欠席・遅刻 | 授業の出席の仕組み |
| 学修支援システムの利用 | 週ごとのログインの有無、課題の提出・未提出 | 学修支援システムの書き出し |
| 学費の納入 | 期ごとの納入の状況、分納・延納の申請、奨学金の停止・休止の有無 | 経理と奨学金の窓口の記録 |
| 面談の記録 | 面談の日付、面談した部署、面談の区分(定例・呼び出し・本人から)、来なかった呼び出しの回数 | 学生支援課の面談の記録 |
質を決めるのは、在籍の状態の「日付」です。 退学・休学の届けが出た日が分からないと、「その月の時点で、次の学期の始まりまでに届けが出たか」という答えが作れません。教務システムの書き出しに、届けの受付日が入っているかを最初に確かめます。 学期の終わりの日付にまとめて記録している大学もあり、その場合は答えの粒度が粗くなります。
面談の記録は、区分と日付と回数だけを使います。 面談の中身(学生が話したこと)は使いません。中身には、家庭の事情や体調のことが書かれていることがあり、第13章のとおり、要配慮個人情報にあたる記述が混ざりうるからです。
学生相談室と保健管理センターの記録は、入力に含めません。 ここは第1章で書いたとおりで、データの取得元の一覧にも最初から載せません。
データの取得方法を決める
各システムの帳票の機能で、前月末時点の記録をCSVで書き出します。システムによって書き出しの方法と列の名前が違います。 API を持つものは定時に取りに行き、持たないものは書き出しを定時の設定にして、学生支援課だけが読める共有フォルダに置かれたファイルを読みます。
| 取るもの | どこから | 何に使うか |
|---|---|---|
| いまの学期の学生の記録 | 学籍・履修・出席・学費・面談 | 今月の見込み |
| 過去3年分の、月末時点の記録 | 同じ書き出しの保管分 | 「その月の時点の記録」と「その後に届けが出たか」の組を作る |
| 過去3年分の在籍の状態の変化 | 学籍の記録 | 答え(届けが出たか) |
| 卒業要件の表 | 教務の要項 | 修得単位の遅れの計算 |
過去の分は「その月の時点で見えていた記録」で作ります。 いまの教務システムから過去の学期の成績を取ると、後から入った追試の結果や成績の訂正まで含まれます。 その月の時点では見えていなかった値で学ばせると、当たりすぎるモデルになり、本番では外れます。月末の書き出しを毎月保管しておき、それを過去の分に使います。 保管が無い期間は、学期の確定値で代え、その期間を記録に残します。
AIへ渡す前に整形する
- 学籍番号でそろえる … 3つの部署の書き出しで桁と書式が違うので、教務システムの書式に直します。そろわなかった行は捨てず、件数を記録します
- 対象外の学生を外す … 学籍の区分で、飛び入学の学生、科目等履修生、交換留学で受け入れている学生を外します。休学中の学生も、その期間は見込みの対象から外します
- 修得単位の遅れを作る … 卒業要件の表から「この学年のこの時点で、標準なら修得している単位数」を出し、実際の修得単位との差を作ります。単位数そのものではなく、差を特徴にします
- 出席の推移を作る … 直近4週の出席率と、その前の4週の出席率の差を作ります。下がり方を見ます。 出席率そのものは学部や授業の形式で大きく違うからです
- 学費の動きを作る … 分納・延納の申請があったか、奨学金が止まったか、前の期から変わったかを0と1で作ります。金額は使いません
- つながりの記録を作る … 前回の面談からの日数、来なかった呼び出しの回数、学修支援システムに直近2週ログインしていないかを作ります
- 標準化する … 数値の特徴を、学部ごとの平均とばらつきで標準化します。係数と値を掛けた寄与を、記録どうしで比べられるようにするためです
- 学ばせる組を作る … 過去の各月末の時点の特徴と、「次の学期の始まりまでに退学・休学・除籍の届けが出たか」を組にします
3番目で単位数そのものを使わないでください。 4年生の修得単位は1年生より必ず多く、そのまま入れると学年を見ているだけのモデルになります。卒業要件に対する遅れにすると、学年をまたいで比べられます。
8番目で、検証の分け方を年度で切ります。 同じ学生の別の月の組が、学ばせる側と確かめる側の両方に入ると、その学生を覚えているだけで当たります。 古い2年度で学ばせ、直近の1年度で確かめます。
AIに処理させる
させるのは、学生ごとに、次の学期の始まりまでに届けが出る確率を見込むことと、その確率を押し上げた記録を区分ごとに足し上げることだけです。 窓口の候補は、決めた規則で選びます。
| 見込むもの・出すもの | 使うもの | 判断できないときの扱い |
|---|---|---|
| 届けが出る確率 | 第7章の前処理で作った特徴 | 入学して最初の学期で記録が足りなければ new_student |
| 区分ごとの寄与 | 係数 × 標準化した値を、学業・出席・経済・つながりに足し上げる | 区分の寄与が小さく差がつかなければ mixed |
| 理由の候補(上位3つ) | 寄与の大きい記録の名前と、その学生の実際の値 | 上位の記録が欠損の補完値なら missing_data |
| 窓口の候補 | 寄与のいちばん大きい区分 | mixed なら学生支援課 |
右端の列が、担当が先に見る学生を決めます。 missing_data は、点数を押し上げたのが「出席の記録が無い」ことだった学生です。授業に出ていないのか、出席の仕組みの書き出しが漏れたのかは、記録だけでは区別できません。
| させないこと | 理由 |
|---|---|
| 声をかけるかどうかの決定 | 学生の事情を知っている担当が決める |
| 退学・休学の理由の見立て | 記録から言えるのは「どの記録が動いたか」まで |
| 学費の減免や奨学金の判断 | 窓口がそれぞれの基準で決める |
| 学生相談室・医療へつなぐかの判断 | 本人と話したうえで、担当と専門の職員が決める |
| 学生本人や教員への点数の通知 | 点数は学生支援課の中だけで使う |
4行目がいちばん大事です。 出席が急に落ちた学生の一部は、体調を崩しているかもしれません。しかし、それを記録から推し量って相談室へ回すのは、この構成の仕事ではありません。 担当が会って話を聞き、本人が望めばつなぎます。
指示内容を固定する
この構成は生成AIを使わないので、プロンプトの代わりに、モデルの設定と、寄与の足し上げ・窓口の選び方の規則を書いておきます。
【モデル】
- LogisticRegression(C=0.5, l1_ratio=0, class_weight="balanced", max_iter=2000)
(l1_ratio=0 は L2 の正則化。penalty 引数は使わない)
- CalibratedClassifierCV(estimator=上記, method="sigmoid", cv=5)
- 学ばせる組:古い2年度の各月末の時点
- 確かめる組:直近1年度の各月末の時点
- 目的変数:次の学期の始まりまでに 退学・休学・除籍 の届けが受け付けられたか(1/0)
【特徴と区分】
- 学業:修得単位の遅れ、前の学期のGPA、GPAの前の学期からの差、
履修の取り消しの数、不可の科目数、今学期の登録単位の少なさ
- 出席:直近4週の出席率の下がり方、欠席が続いた最長の週数、遅刻の増え方
- 経済:分納・延納の申請、奨学金の停止・休止、前の期からの変化
- つながり:前回の面談からの日数、来なかった呼び出しの回数、
学修支援システムに直近2週ログインしていない
- 共通:次の学期の始まりまでの残りの日数、学部、学年
【寄与の足し上げ】
- 寄与 = 較正前のロジスティック回帰の係数 × 標準化した特徴の値
- 区分ごとに、正の寄与だけを足し上げる
- 共通の特徴は、どの区分にも足さない
【窓口の候補】
- 学業がいちばん大きい → 教務(アドバイザーの教員へのつなぎを含む)
- 経済がいちばん大きい → 奨学金・学費の窓口
- 出席・つながりがいちばん大きい → 学生支援課
- 1位と2位の差が 1位の2割未満 → mixed、学生支援課
【印を付ける条件】
- jump:前月から順位が 200位以上上がった
- unlisted:出席不良・成績不振・学費の未納の3つの一覧のどれにも載っていない
- new_student:入学して最初の学期で、成績の記録が無い
- missing_data:上位3つの理由に、欠損を埋めた値が入っている
「正の寄与だけを足し上げる」を書いておかないと、区分の合計が打ち消し合います。 出席は落ちているが成績は良い学生では、出席の区分の正の寄与と、学業の区分の負の寄与が並びます。学業の区分に負の寄与があっても、出席の区分の理由は消えません。 区分ごとに、押し上げた側だけを数えます。
寄与を較正前の係数で出すのは、較正が確率の目盛りを直すだけだからです。 較正の後の確率は順位を変えずに目盛りを直したもので、どの記録が押し上げたかは、較正前のロジスティック回帰の係数で読むのが素直です。 sigmoid の較正は確率の大小の並びを保つので、順位と寄与の説明が食い違いません。
出力形式を固定する
学生ごとに、次の形のJSONを作り、表にして共有フォルダへ置きます。
{
"student_id": "",
"faculty": "",
"year": 0,
"as_of": "",
"horizon_end": "",
"probability": 0.0,
"rank": 0,
"rank_prev": 0,
"contrib_by_group": {
"academic": 0.0, "attendance": 0.0, "financial": 0.0, "connection": 0.0
},
"top_reasons": [
{ "feature": "", "value": "", "contribution": 0.0 }
],
"suggested_desk": "academic_affairs | financial_aid | student_support",
"flags": ["jump | unlisted | new_student | missing_data | mixed"],
"model_version": "",
"staff_decision": { "contact": null, "desk": "", "reason": "" }
}
top_reasons には寄与の大きい順に3つの要素を並べます。value には、その学生の実際の値(「修得単位が標準より14単位少ない」「直近4週の出席率が前の4週より31ポイント低い」)を入れます。
1つ目の理由は、top_reasons に実際の値を入れられることです。 「修得単位の遅れ」と書くだけでは、担当は教務システムを開き直します。値まで書かれていれば、一覧を読むだけで判断できます。 第4章の①の3分が消えるのはここです。
2つ目は、suggested_desk と staff_decision.desk を分けて持てることです。 モデルの候補と、担当が決めた窓口が両方残ります。担当が候補を変えた学生を集めると、窓口の選び方の規則のどこが実態と合っていないかが見えます。
3つ目は、rank と rank_prev を並べられることです。 確率そのものより、前月から急に上がった学生のほうが声をかける意味が大きいことがあります。jump の印はこの2つから作ります。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 教務システム | 帳票の定時の書き出し | 学籍・履修・成績・在籍の状態 |
| 授業の出席の仕組み・学修支援システム | 書き出しの読み取り | 週ごとの出席、ログイン、課題の提出 |
| 学費の納入の記録 | 経理の書き出しの読み取り | 分納・延納、奨学金の停止 |
| 学生支援課の面談の記録 | 表の読み取り | 面談の日付・区分・来なかった回数 |
| 学生支援課の共有フォルダ | 表の書き出しと読み取り | 一覧と、担当の判断の書き込み |
| 各窓口 | 担当が送る依頼 | 学生の氏名・学籍番号と、伝えてよい理由 |
各窓口への依頼は、担当が送ります。 依頼に書くのは、学生の氏名と学籍番号、そして窓口が対応するのに要る事実(「後期の学費を延納している」「修得単位が卒業要件に対して遅れている」)だけです。確率や順位は書きません。 窓口の職員が「退学のおそれの高い学生」という先入観で学生に会うと、話の入り方が変わります。
人が確認する
人が見るのは、一覧の上位と印の付いた学生だけです。 8,000名すべてを見る設計にはしません。
unlistedとjumpを先に見る … どの一覧にも載っていなかった学生と、前月から急に上がった学生です。これまでの運用で見落としていた層なので、ここに時間を使います- 上位から理由を読む …
top_reasonsの値を読み、事情を知っていれば(留学から戻った、教育実習の期間だった)声をかけないと決めます missing_dataを確かめる … 出席の記録が無い学生は、出席の仕組みの側の漏れでないかを教務に確かめます- 窓口を決める … 候補のとおりでよければそのまま、変えたら
staff_decision.reasonに理由を書きます - 翌月、結果を書く … 会えた/会えない/届けが出た、を書き込みます
確認の量の目安は、600件をならして1件2分です。 上位と印の付いた学生は理由を読んで窓口を決めるので数分、それ以外の一覧の学生は流し見るので数十秒です。印の付く学生が多すぎる月は、出席の仕組みの書き出しが漏れているか、学期の境目で特徴の作り方がずれています。
例外に対処する
| 起きること | 対応 |
|---|---|
| どれかの書き出しが届いていない | その月の一覧を出さず、何が欠けたかを担当へ知らせる。 前月の書き出しで代えない |
| 学籍番号がそろわない行がある | 捨てずに件数を記録する。多い月は、書き出しの書式が変わっていないかを確かめる |
| 出席の記録が全部欠けている学生 | 欠損を学部の中央値で埋め、missing_data を付ける |
| 入学して最初の学期の学生 | 成績が無いので、出席・つながりだけで見込み、new_student を付ける |
| 休学から戻ったばかりの学生 | 休学の前の記録を使わず、戻った学期からの記録で見込む |
| 学期の途中で学科を変えた学生 | 卒業要件の表を新しい学科で引き直す |
| 卒業要件の表に無い学科・入学年度 | 修得単位の遅れを出さず、missing_data で人へ |
| 学ばせ直したモデルの外れ方が前の版より悪い | 新しい版を使わず、前の版で見込みを出す。 比べた結果を記録する |
| 教務システムの入れ替え | 入れ替えの前後で列の意味が変わる。学ばせ直すまで見込みを止める |
上から1行目を軽く見ないでください。 学費の記録の書き出しだけが届かなかった月に、前月の書き出しで代えると、今月に分納を申請した学生が見えません。 欠けた月は欠けたと知らせ、届いてから出し直します。
記録を残す
- 実行ごとに、読み込んだ書き出しのファイル名と書き出し日時、行数、そろわなかった行の数
- 学ばせたモデルの版(学ばせた年度、特徴の一覧、係数、
Cの値、較正の方法) - 確かめる年度での外れ方(較正の曲線と、上位の何名に届けの出た学生が何名入っていたか)
- 学生ごとの出力のJSON(
probability、contrib_by_group、top_reasons、flags) - 担当の判断の記録(声をかけたか、窓口、変えた理由)
- 学期の終わりの、届けが出た学生と見込みの突き合わせ
外れ方は、較正の曲線で見ます。 scikit-learn の説明では、予測した確率を区間に分け、区間ごとに実際に届けが出た割合を並べる図で、確率が目盛りどおりかを確かめられます。「確率0.3と出た学生のうち、実際に3割前後に届けが出たか」を学期ごとに見ます。 目盛りがずれ始めたら、学ばせ直す時期です。
担当の判断の記録は、モデルより大事な資産になります。 声をかけた学生のうち、どの窓口につないだ学生が翌学期も在籍していたかは、この記録が無いと誰にも分かりません。 ただし、声をかけた結果で次のモデルを学ばせると、声かけが効いた学生を「届けが出なかった例」として覚えます。声をかけたかどうかを特徴の列に入れ、その影響を分けて見ます。
04実装レベルの3段階
最小構成では、毎月の運用には使えません。 60名の表を手で作るので、8,000名には届きません。確かめるための段階です。 半自動化で、1件6分が3分程度になります。 第4章の①の突き合わせと引き直しが消え、一覧を読めば理由の値が分かります。残るのは、誰が声をかけるかを1名ずつ考える時間です。 本格構成で窓口の候補が付き、2分になります。この段階が本記事の想定です。 段階を飛ばさないでください。 半自動化の一覧を1学期分使うと、担当がどの理由を見て窓口を決めているかが分かり、それが窓口の規則になります。
05工数削減シミュレーション
導入後 600件 × 2分 ÷ 60 = 20 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 学生が数千名いて、学生支援の担当が数名で全学の学生を見ている私立大学・短期大学。履修と成績は教務システム、出席は授業の出席の仕組み、学費の納入は経理、面談は学生支援の記録と、記録が部署ごとに分かれている場合。出席不良・成績不振・学費の未納の一覧が別々に届き、毎月それを突き合わせて声をかける学生を決めている場合。過去3年以上の退学・休学の届けの記録が残っている場合。
- 学生が数百名で、担任やアドバイザーの教員が全員の様子を把握できている学校。出席を紙で取っていて、データとして残っていない場合。退学・休学の記録が少なく、学ばせる材料が無い場合。なお、退学や休学の理由の見立て、学生相談室や医療につなぐかどうか、学費の減免や奨学金の判断は、この構成では代替できません。
07最小構成で試す方法
- 前の学年度に退学・休学の届けを出した学生から30名、出さなかった学生から30名を選ぶ(後者には、3つの一覧のどれかに載っていた学生を半分入れる)
- 60名について、届けが出る3か月前の月末の時点の記録を、教務・出席・学費・面談の書き出しから1つの表にまとめる
- 第7章の前処理の3番から6番(修得単位の遅れ、出席の下がり方、学費の動き、面談の間隔)を表計算で作る
- Python で LogisticRegression を学ばせ、係数を区分ごとに並べる
- 「届けが出た学生」の点数が上に来ているか、上位の理由が担当の記憶と合うかを、担当4名で読む
60名は必ずやってください。 書き出しを定時にする前に、「3か月前の記録に、届けの兆しが出ていたか」を確かめます。
| 出てきた内容 | 判断 |
|---|---|
| 届けの出た学生の多くが上位に来て、理由が記憶と合う | 書き出しの定時化と全学生への拡大に進む |
| 上位には来るが、理由が「学部」や「学年」ばかり | 特徴の作り方の問題。単位数を遅れに直したかを確かめる |
| 3か月前の記録が、月末時点では残っていない | 書き出しの保管が先。 モデルの問題ではない |
3行目が出ることは珍しくありません。 教務システムは、いまの値しか持たないことが多いからです。その場合は、今月から月末の書き出しを保管し始めることが、最初の一歩になります。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 当たりすぎるモデルができる | 後から入った成績や訂正を含んだ値で学ばせている。 月末の書き出しを保管して使う |
| 学年を見ているだけのモデルになる | 修得単位を、卒業要件に対する遅れに直す |
| 同じ学生が学ばせる側と確かめる側の両方に入る | 年度で切る。 月で切らない |
| 確率が実際の届けの割合より高く出る | class_weight="balanced" の影響。sigmoid で較正する |
| 区分の合計が打ち消し合う | 正の寄与だけを足し上げる |
| 理由が「学部」ばかりになる | 学部・学年は共通の特徴にし、区分に足さない |
| 出席の記録の漏れが「欠席」として効く | missing_data で人へ。書き出しの漏れを先に疑う |
| 学費の書き出しが届かない月に前月で代える | その月の一覧を出さない |
| 声をかけた効果がモデルに混ざる | 声をかけたかを特徴の列に入れ、分けて見る |
| 窓口の職員に確率が伝わる | 依頼には事実だけを書く |
| 面談の中身を特徴にしたくなる | 入れない。 区分・日付・回数だけ |
古い penalty の書き方を写す | 現行の版では非推奨。l1_ratio で書く |
上の3行が、この構成の失敗のほとんどです。 どれも確かめる期間では良い成績が出て、本番の最初の学期で外れます。 「その月の時点で見えていた記録で学ばせたか」を、学ばせる前に必ず確かめてください。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 学生の学籍・成績・出席・学費の納入の状況・奨学金の停止の有無と、学生支援課の面談の日付と区分です。どれも学生の在学の続け方に直接かかわる記録です。
- 要配慮個人情報を入力に入れない … 個人情報保護委員会のガイドラインでは、病歴、心身の機能の障害(発達障害を含む精神障害など)、健康診断等の結果(ストレスチェックの結果を含む)などが要配慮個人情報にあたるとされ、取得には原則としてあらかじめ本人の同意が要るとされています。 学生相談室と保健管理センターの記録、面談の記録の中身は、この構成の入力に入れません
- 利用目的の範囲を確かめる … 同じガイドラインでは、利用目的はできる限り具体的に特定し、その達成に必要な範囲を超えて扱う場合は原則として本人の同意が要るとされています。学費の記録や出席の記録を「学生への支援の声かけのために」使うことが、学生に示している利用目的に含まれるかを、学内の個人情報の担当と確かめます
- 点数を学生支援課の外へ出さない … 確率と順位は、学生支援課だけが見られる場所に置きます。教員や窓口への依頼には、対応に要る事実だけを書きます
- 点数で不利な扱いをしない … この一覧は、声をかける順番を決めるためのものです。奨学金の選考、学費の扱い、成績の評価、進級の判断に使わないことを、学内の決まりとして書きます
- 18歳以上の学生だけを対象にする … 学籍の区分で対象を決め、18歳未満が入りうる区分は最初から外します。 保護者への連絡を前提にしない設計は、この前提の上に立っています
- 学生が自分の記録について聞いてきたときの答え方を決めておく … 「なぜ自分に声がかかったのか」と聞かれたときに、どの記録を見て声をかけたかを答えられるようにしておきます。 ロジスティック回帰を選んだのは、ここに答えるためでもあります
誤りが起きた場合のリスクは、声をかけるべき学生を見落とすことと、声をかけ方を誤って学生を傷つけることの2つです。 前者は第12章の上の3行で起き、後者は点数が外へ漏れると起きます。どちらも、学ばせ方と一覧の置き場所という設計の段階で防げます。
10まず何から始めるか
1週目:入れないものと置き場所を決める
学生支援課・教務・経理・学内の個人情報の担当で集まり、入力に入れない記録(学生相談室・保健管理センター・面談の中身)と、一覧の置き場所を決めます。あわせて、学費の記録を学生支援課が読むことを、学生に示している利用目的と照らして確かめます。
2週目:月末の書き出しの保管を始める
教務・出席・学費・面談の4つの書き出しを、今月末の分から保管し始めます。 過去の分が残っていないかも、各部署に確かめます。
3週目:60名で試す
前の学年度の60名で、3か月前の記録を表にまとめ、ロジスティック回帰を学ばせます。担当4名で、上位の学生と理由が記憶と合うかを読みます。
4週目:窓口の選び方を決める
教務と奨学金の窓口に、どの理由の学生なら自分たちが声をかけるかを聞き、第7章の窓口の規則に書きます。
2か月目: 書き出しの定時化と全学生の一覧を作り、半自動化の段階で動かします。担当の判断を毎月記録します。3か月目以降: 区分への足し上げと窓口の候補を足し、1件6分が何分になったかを実測します。学期の終わりに見込みと届けを突き合わせ、較正の曲線が目盛りどおりに戻っていることを確かめた時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
LogisticRegression の class_weight="balanced" がクラスの頻度に反比例する重みを付けること。2値の問題で coef_ が1行・特徴の数の列を持つこと。predict_proba が確率を返すこと。penalty の引数が非推奨になり、L2 は l1_ratio=0 で指定する形に変わったこと。C が正則化の強さの逆数であること | scikit-learn: LogisticRegression | 2026-10-09 |
| 確率の較正の考え方。CalibratedClassifierCV の方法に sigmoid と isotonic があること。isotonic は少ないデータで学びすぎやすく、目安として1,000件程度を超えるときに sigmoid と同等以上になるとされること。sigmoid が順位を保つこと。較正の曲線で確率の目盛りを確かめられること。LogisticRegression はもともと較正されていることが多いが、曲線で確かめるべきとされること | scikit-learn: Probability calibration | 2026-10-09 |
| 要配慮個人情報に病歴、心身の機能の障害(発達障害を含む精神障害など)、健康診断等の結果(ストレスチェックの結果を含む)が含まれること。取得には原則としてあらかじめ本人の同意が要ること(法第20条第2項)。利用目的をできる限り具体的に特定し、その範囲を超える取扱いには原則として本人の同意が要ること | 個人情報保護委員会: 個人情報の保護に関する法律についてのガイドライン(通則編) | 2026-10-09 |
学生の記録をどの目的でどこまで使えるかは、学内の個人情報の担当と決めてください。 本記事は上記の公開情報で確認できた範囲だけを扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-1250)についてのご相談はこちらから。
