出欠と課題の提出・連絡の記録から休みがちになりそうな生徒を毎週見込み、担任の声かけの順番と保護者への連絡の案を出す
出欠・遅刻・課題の提出・連絡の記録から、今後2週間に休みがちになりそうな生徒を毎週月曜に見込みます。担任ごとに声をかける順番を並べ、保護者への連絡の案を添えます。
- 生成AI
- ChatGPT/Claude/Gemini
- 連携・自動化
- Python
- 対象業界
- その他/教育
- 対象部門
- カスタマーサポート
- 対象業務
- 書類作成/集計・分析
- 主な課題
- データ分析に時間がかかる/属人化している/期限・対応漏れが起きる
- AIで行う処理
- 予測
- 主な効果
- 判断支援/工数削減/機会損失防止
- 導入難易度
- ★★★☆☆
- 実装レベル
- 本格構成
- 費用感
- API連携(中)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 月曜の朝、担任が入退室の記録システムを開き、受け持ちの生徒の先週の登校日と入室時刻を一覧で見る
- 学習管理システムを開き、先週締め切りの課題の提出状況を生徒ごとに見る
- 連絡帳アプリを開き、本人・保護者とのやり取りが最後にいつだったか、返信があったかを見る
- 3つを頭の中で組み合わせ、気になる生徒に印を付ける。印の基準は担任ごとに違う
- 印を付けた生徒について、声をかける順番を決め、保護者への連絡の文面を一から書く
- 教室長に気になる生徒の名前を伝え、面談を入れるかを相談する
- 声をかけた結果と連絡の内容を、面談記録の共有フォルダに書く
- 自動毎週日曜の夜、3つのシステムから先週分までの記録をCSVで書き出す
- 自動Python が生徒ごとに記録を結び付け、直近2週と前の4週の変化を表す特徴量を作る
- 自動ロジスティック回帰のモデルが、今後2週間に休みがちになるおそれを0〜1の点数で出す
- 自動点数を押し上げた特徴量の上位3つを、生徒ごとに日本語の理由として書き出す
- 自動担任ごとに、点数の高い順の一覧を作る。休学中・長期の欠席が担任と保護者で合意済みの生徒は別枠にする
- 自動一覧の上位の生徒について、Claude API が保護者への連絡の案と、声かけのときに確かめることのメモを作る
- 人月曜の朝、担任が一覧を開き、順番を確かめる。自分の見立てと違う生徒は順番を直し、理由を一言書く
- 人声をかけ、必要な生徒には連絡の案を直して保護者へ送る
- 人教室長が各担任の一覧の上位を見て、面談を入れる生徒を決める
- 自動2週間後に実際に休みがちになったかを記録と照らし、点数の当たり外れを残す
各工程の詳しい説明を読む
- 月曜の朝、担任が入退室の記録システムを開き、受け持ちの生徒の先週の登校日と入室時刻を一覧で見る
- 学習管理システムを開き、先週締め切りの課題の提出状況を生徒ごとに見る
- 連絡帳アプリを開き、本人・保護者とのやり取りが最後にいつだったか、返信があったかを見る
- 3つを頭の中で組み合わせ、気になる生徒に印を付ける。印の基準は担任ごとに違う
- 印を付けた生徒について、声をかける順番を決め、保護者への連絡の文面を一から書く
- 教室長に気になる生徒の名前を伝え、面談を入れるかを相談する
- 声をかけた結果と連絡の内容を、面談記録の共有フォルダに書く
(a)欠席が続いてから気づく。 1週分だけを見ると、遅刻が1回増えた、課題が1つ遅れた、という変化は目立ちません。4週分の変化を並べて見る時間は、月曜の朝にはありません。 気づくのは、休みが3日続いてからです。そこから声をかけても、生徒のほうはすでに教室に足が向かなくなっています。
(b)印の基準が担任ごとに違う。 ある担任は課題の遅れを重く見て、別の担任は入室時刻の遅れを重く見ます。どちらも間違いではありませんが、同じ生徒が担任によって印が付いたり付かなかったりします。 担任が替わると、それまで気にかけていた生徒の情報が途切れます。
(c)3つのシステムを開くだけで時間が終わる。 25名の生徒について3つの画面を行き来すると、組み合わせて考える前に時間がなくなります。結局、印を付ける判断は直近の印象で決まります。 先週たまたま話した生徒は印が外れ、話さなかった生徒に印が付きます。
(d)保護者への連絡の文面を毎回一から書く。 「最近どうですか」と書くか、提出の遅れた課題の名前を書くか、面談を提案するか。文面を考えるうちに送るのが翌日になり、翌日には次の欠席が始まっています。
- 【自動】 毎週日曜の夜、3つのシステムから先週分までの記録をCSVで書き出す
- 【自動】 Python が生徒ごとに記録を結び付け、直近2週と前の4週の変化を表す特徴量を作る
- 【自動】 ロジスティック回帰のモデルが、今後2週間に休みがちになるおそれを0〜1の点数で出す
- 【自動】 点数を押し上げた特徴量の上位3つを、生徒ごとに日本語の理由として書き出す
- 【自動】 担任ごとに、点数の高い順の一覧を作る。休学中・長期の欠席が担任と保護者で合意済みの生徒は別枠にする
- 【自動】 一覧の上位の生徒について、Claude API が保護者への連絡の案と、声かけのときに確かめることのメモを作る
- 【人】 月曜の朝、担任が一覧を開き、順番を確かめる。自分の見立てと違う生徒は順番を直し、理由を一言書く
- 【人】 声をかけ、必要な生徒には連絡の案を直して保護者へ送る
- 【人】 教室長が各担任の一覧の上位を見て、面談を入れる生徒を決める
- 【自動】 2週間後に実際に休みがちになったかを記録と照らし、点数の当たり外れを残す
7番目が、この設計の分かれ目です。 一覧は担任の判断を置き換えるものではなく、担任が25名ぶんの3つの画面を開かなくても、変化のあった生徒から見られるようにするものです。順番を直すことは失敗ではありません。直した理由が、モデルに足りない情報を教えてくれます。
10番目を最初から組み込むのも、意図してのことです。 点数0.3の生徒が本当に3割くらい休みがちになっているかを確かめないと、担任は点数を信用する理由がありません。 当たり外れの記録は、教室長が月に1回見ます。
02今回想定するシステム構成
入退室の記録(CSV) 学習管理システム(CSV) 連絡帳アプリ(CSV) │ │ │ ▼【トリガー】毎週日曜 22:00 の定時実行 Python(pandas で生徒ごとに結合・特徴量の作成) │ 直近2週と前の4週の欠席率/入室時刻の遅れ/課題の未提出 │ 最後の連絡からの日数/返信の有無 ▼ Python(scikit-learn のロジスティック回帰) │ 今後2週間に休みがちになるおそれの点数(0〜1) │ 点数を押し上げた特徴量の上位3つ ▼ 担任ごとの声かけの一覧(スプレッドシート) │ ├──▶ 上位の生徒だけ ── Claude API │ 保護者への連絡の案/声かけのときに確かめることのメモ ▼ 【担任が順番を確かめ、声をかけ、連絡の案を直して送る】 ▼ 2週間後の出欠 ── 当たり外れの記録 ── 翌月の学び直しへ
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| 実行環境 | Python(pandas・scikit-learn のロジスティック回帰) | R、BigQuery ML |
| 生成AI | Claude API(保護者への連絡の案と声かけのメモ) | OpenAI API、Gemini API |
| データの取得元 | 入退室の記録・学習管理システム・連絡帳アプリのCSV出力 | 各システムのAPI |
| 一覧の出力先 | Googleスプレッドシート(担任ごとのシート) | Microsoft 365 の共有ブック |
| 定時実行 | OSのタスクスケジューラ | クラウドのジョブ実行サービス |
3つのシステムには書き込みません。 この構成は、書き出されたCSVを読むだけです。出欠や課題の記録の項目はシステムごとに違うため、どの項目が取り出せるかは、実際の書き出しで確かめてから特徴量を決めます。
モデルにロジスティック回帰を選ぶのは、点数の理由を担任に説明できるからです。 scikit-learn の LogisticRegression は、既定のソルバーが lbfgs、正則化の強さの逆数 C の既定が1.0、既定の正則化が l2 とされています。学習後の coef_ には特徴量ごとの係数が入り、生徒ごとに「係数 × 特徴量の値」を並べれば、どの記録が点数を押し上げたかを書き出せます。 理由の読めない点数は、担任の勘に負けます。
休みがちになる生徒は少数なので、重みを付けます。 class_weight='balanced' は、クラスの出現頻度に反比例するように重みを自動で調整するとされ、式は n_samples / (n_classes * np.bincount(y)) です。少数の側を軽く扱うと、モデルは「全員休まない」と答えるのが最も楽になります。
点数は predict_proba で取り出します。 クラスごとの確率の推定値を返し、2クラスなら2列が返ります。scikit-learn のドキュメントでは、LogisticRegression は損失に対して標準的なリンク関数(logit)を持つため、それ自体で較正された予測を返しやすいとされています。ただし class_weight='balanced' で重みを付けると点数は実際の割合より高めに出るので、点数の目盛りは第7章の方法で確かめ直します。
03どうやって実装するのか
処理の起点を決める
毎週日曜の22時に、定時で動かします。 担任が一覧を見るのは月曜の朝の授業前です。日曜の夜に回せば、土曜の登校日の記録まで含められます。毎日回すことはしません。 毎日順番が入れ替わる一覧は、担任が読まなくなります。週に1回、同じ曜日に同じ形で出すことが、使われる一覧の条件です。
書き出しの順番は、入退室の記録 → 学習管理システム → 連絡帳アプリです。3つのCSVがそろったことを確かめてから学習済みのモデルで点数を出し、1つでも欠けていれば点数を出さずに止めます。 課題の記録が欠けたまま点数を出すと、全員の課題の未提出が0件になり、点数がそろって下がります。
モデルの学び直しは月に1回、第1日曜に行います。 毎週学び直すと、点数の目盛りが週ごとに動いて、先週の0.4と今週の0.4が比べられなくなります。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 入退室の記録 | 生徒ID、入室・退室の日時、教室 | 入退室の記録システムのCSV |
| 登校の予定 | 生徒ごとの登校予定日(週2〜5日)、時間割の有無 | 生徒の基本情報の表 |
| 課題の提出 | 課題ID、締め切り、提出日時、未提出の有無 | 学習管理システムのCSV |
| 連絡の記録 | 送受信の日時、相手(本人/保護者)、返信の有無。本文は使わない | 連絡帳アプリのCSV |
| 面談の記録 | 面談の日付と種類(定期/臨時)。本文は使わない | 面談記録の共有フォルダの一覧 |
| 別枠の印 | 休学中、担任と保護者で長期の欠席を合意済み | 教室長が持つ表 |
質を決めるのは、2行目の登校の予定です。 週2日登校の生徒が週2日来ていれば欠席はゼロで、週5日登校の生徒が週2日なら3日の欠席です。予定が無いと、入室の回数だけでは休んだかどうかが分かりません。 予定の無い生徒が多いなら、特徴量を作る前に予定の表を整えます。
連絡と面談の本文は、モデルにも生成AIにも渡しません。 本文には家庭の事情や体調のことが書かれています。モデルに使うのは、いつ連絡し、返信があったかという日時と有無だけです。
6行目の別枠の印は、一覧の上位を埋めないために要ります。 休学中の生徒は毎週点数が最も高くなり、担任が毎週同じ名前を飛ばすことになります。
データの取得方法を決める
3つのシステムとも、画面からCSVを書き出す機能を使う想定です。APIを持つシステムならAPIで取りますが、書き出しの項目と形式がAPIと画面で違うことがあるので、最初は画面の書き出しで項目を確かめます。
| 取るもの | どこから | 何に使うか |
|---|---|---|
| 入室・退室の日時 | 入退室の記録のCSV | 登校予定日ごとの出席・欠席・遅刻 |
| 課題の締め切りと提出日時 | 学習管理システムのCSV | 未提出の数、締め切りからの遅れの日数 |
| 連絡の日時と返信の有無 | 連絡帳アプリのCSV | 最後の連絡からの日数、返信の途切れ |
| 面談の日付 | 面談記録の一覧 | 最後の面談からの日数 |
特徴量は「直近2週」と「その前の4週」を分けて作ります。 休みがちになる前触れは、欠席率の高さよりも変化に出ます。いつも週1回遅刻する生徒と、先月まで遅刻ゼロだったのに直近2週で4回遅刻した生徒では、後者のほうが声をかける意味があります。
| 特徴量 | 作り方 |
|---|---|
| 直近2週の欠席率 | 登校予定日のうち入室の無かった日の割合 |
| 欠席率の変化 | 直近2週の欠席率 − 前の4週の欠席率 |
| 遅刻の回数の変化 | 予定の開始時刻から15分以上遅れた入室の回数の差 |
| 課題の未提出の数 | 直近2週に締め切りのあった課題のうち未提出の数 |
| 提出の遅れの変化 | 締め切りから提出までの日数の平均の差 |
| 最後の連絡からの日数 | 本人・保護者のどちらかと最後にやり取りした日から |
| 返信の途切れ | 直近2週に担任から送った連絡に返信の無かった数 |
| 長期休み明けの印 | 夏・冬・春の休みの明けから4週以内か |
正解のラベルは「今後2週間の登校予定日の半分以上に入室が無い」とします。 この定義は教室長と担任で決めます。半分を3分の1にすると対象が増え、一覧の上位が長くなります。 定義を変えたら、モデルを学び直します。
AIへ渡す前に整形する
- 生徒IDのそろえ … 3つのシステムで生徒IDの形式が違うことがあります。生徒の基本情報の表を正として、IDの対応表を作ります
- 登校予定日との照合 … 入室の記録を、生徒ごとの登校予定日に当てはめます。予定日以外の入室は、出席として数えず「自主登校」として別に数えます
- 祝日・休校日の除外 … 教室の休校日は予定日から外します。外さないと、全員の欠席率が同じ日に上がります
- 転入・入学直後の生徒の扱い … 前の4週の記録がない生徒は、変化の特徴量を作れません。入学から6週未満の生徒は点数を出さず、別枠に入れます
- 欠けた値の確認 … 課題が1件も配信されていない生徒は、未提出の数を0とせず「配信なし」の印を付けます
- 別枠の生徒を外す … 休学中と合意済みの長期欠席の生徒は、点数の計算から外します
- 値のそろえ … 特徴量の単位が違う(割合、回数、日数)ので、標準化してからモデルに入れます。係数を比べられるようにするためです
7番目を飛ばすと、理由の上位3つが壊れます。 標準化しないと、日数のように値の大きい特徴量が係数の上で小さく見え、「最後の連絡からの日数」が理由に出てこなくなります。 標準化に使った平均と標準偏差は、学習のときの値を保存して、毎週の点数づけでも同じ値を使います。
学習と検証の分け方は、時間の順にします。 scikit-learn の TimeSeriesSplit は、時間順に並んだデータの学習用と検証用の分け方を作るもので、ほかの分け方は未来のデータで学習して過去のデータで評価することになるため不適切とされています。分割数の既定は5、gap で学習用の末尾から検証用の手前までを空けられます。特徴量に直近2週を使うので、gap を2週分空けます。 空けないと、検証の答えを学習のときに見てしまいます。
AIに処理させる
この構成の「AI」は2段に分かれます。 点数を出すのは Python のロジスティック回帰で、生成AIは点数を出しません。生成AIにさせるのは、点数と理由が決まった後の、連絡の案と声かけのメモだけです。
| 段 | させること | させないこと |
|---|---|---|
| ロジスティック回帰 | 今後2週間に休みがちになるおそれの点数と、押し上げた特徴量の上位3つ | 休む理由の推定 |
| Claude API | 保護者への連絡の案、声かけのときに確かめることのメモ | 点数の付け直し、順番の入れ替え |
生成AIに渡すのは、生徒の呼び名(名字のみ)、点数を押し上げた理由の上位3つ、遅れている課題の名前、次の面談の候補日、最後の連絡の日付だけです。
| 生成AIにさせないこと | 理由 |
|---|---|
| 休む理由の推測(体調、家庭、友人関係など) | 記録に無いことを書く。保護者に誤解される |
| 点数や「休みがちになるおそれ」の言葉を文面に入れる | 保護者と生徒には見せない数字 |
| 欠席を責める、急がせる言い回し | 声かけの目的は、教室に来やすくすること |
| 医療機関や相談機関を勧める | 担任と教室長が決めること |
| 送信 | 送るのは担任 |
1行目がいちばん起きやすい失敗です。 「遅刻が増えている」と渡すと、生成AIは「朝起きるのがつらい時期かもしれません」と書きます。記録に無い理由を書いた連絡は、保護者にとって「見られている」と感じる文面になります。
指示内容を固定する
あなたは通信制高校のサポート校で、生徒を受け持つ担任の補助をする立場です。
渡された記録の事実だけを使って、2つのものを作ってください。
(1) 保護者への連絡の案(担任が直してから送る下書き)
(2) 担任が本人に声をかけるときに確かめることのメモ(担任だけが読む)
【使ってよい情報】
- 生徒の呼び名(名字)
- 記録から分かった事実(下の「理由」と「遅れている課題」)
- 次の面談の候補日
- 最後に連絡した日付
【厳守事項】
- 休む理由、体調、家庭の事情、友人関係を推測して書かないでください。
記録に書かれていないことは、連絡の案にもメモにも書かないでください。
- 点数、順位、「休みがちになるおそれ」「リスク」という言葉を、
連絡の案に入れないでください。
- 欠席や遅刻を責める言い回し、「至急」「必ず」など急がせる言い回しを
使わないでください。
- 医療機関・相談機関・転校などを勧めないでください。
- 連絡の案は、近況をたずね、教室で手伝えることを伝え、
面談の候補日を示す、の3つで構成してください。200字以内にしてください。
- 遅れている課題の名前は、連絡の案に1つだけ書いてかまいません。
2つ以上ある場合はメモの側に書いてください。
- メモには、理由の3つそれぞれについて「本人に確かめること」を1つずつ、
問いかけの形で書いてください。決めつけの形にしないでください。
- 渡された情報が足りないときは、足りない項目名を missing_info に入れ、
推測で補わないでください。
【生徒】{student_name}
【理由(上位3つ)】{reasons}
【遅れている課題】{overdue_assignments}
【次の面談の候補日】{meeting_slots}
【最後の連絡】{last_contact}
「記録に書かれていないことは書かない」を、連絡の案とメモの両方に効かせています。 メモは担任しか読まないから推測してよい、とすると、メモに書かれた推測を担任がそのまま保護者に話します。
メモを問いかけの形にするのは、担任の見立てを先回りしないためです。 「課題が遅れている理由は何か」と書かれたメモは、担任が本人と話す入口になります。「課題が負担になっている」と書かれたメモは、担任の見立てを1つに決めてしまいます。
出力形式を固定する
次の形のJSONで受け取ります。 Claude API の構造化出力(output_config.format に type: "json_schema" を指定)で、この形に固定します。
{
"student_id": "S-0123",
"week": "2026-10-05",
"score": 0.41,
"rank_in_tutor": 2,
"reasons": [
{ "feature": "late_count_change", "text": "遅刻が直近2週で4回(前の4週は1回)" },
{ "feature": "overdue_assignments", "text": "直近2週の課題のうち2件が未提出" },
{ "feature": "no_reply_count", "text": "担任からの連絡2件に返信なし" }
],
"parent_message_draft": "",
"tutor_memo": [
{ "reason_feature": "late_count_change", "question": "" }
],
"missing_info": [],
"tutor_override": { "new_rank": null, "note": "" }
}
score rank_in_tutor reasons は Python が埋め、parent_message_draft tutor_memo missing_info は生成AIが埋めます。tutor_override は担任が順番を直したときに書きます。
1つ目の理由は、点数と文面を別の層に置けることです。 生成AIの出力に score を含めないので、生成AIが点数を書き換える経路がありません。 構造化出力のスキーマでは、数値の範囲(minimum/maximum)や文字数の制約が使えないとされているため、200字以内の確認は受け取った後に Python で行います。
2つ目は、担任の直しを記録できることです。 tutor_override に新しい順番と一言の理由が残るので、どの理由のときに担任が順番を下げたかを後から数えられます。
3つ目は、当たり外れの照合が機械でできることです。 student_id と week で2週間後の出欠と結び付け、点数ごとに実際の割合を出します。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 入退室の記録システム | CSVの書き出し(読み取りのみ) | 入室・退室の日時 |
| 学習管理システム | CSVの書き出し(読み取りのみ) | 課題の締め切りと提出 |
| 連絡帳アプリ | CSVの書き出し(読み取りのみ) | 連絡の日時と返信の有無 |
| Claude API | API呼び出し | 上位の生徒の連絡の案とメモ |
| 担任ごとの一覧 | スプレッドシートへの書き込み | 点数の順・理由・連絡の案 |
連絡帳アプリから保護者へ自動で送ることはしません。 送るのは担任で、連絡の案は一覧のセルからコピーして連絡帳アプリに貼ります。送信のAPIをつなぐと、担任が直す前の文面が届く経路ができます。
生成AIに回すのは、担任ごとの上位5名までにします。 25名全員の連絡の案を作っても、担任が直して送れるのは毎週数名です。読まれない下書きは、費用と、生徒の情報を外へ渡す回数を増やすだけです。
人が確認する
担任は毎週、一覧の上位を必ず見ます。 点数の順番は提案で、確定するのは担任です。
- 上位5名の理由を読む … 理由の3つが自分の知っている様子と合うかを見ます。合わないときは順番を直し、一言書きます
- 一覧の下位も流し見る … 点数が低くても、担任が気になっている生徒がいれば上げます。モデルが見ていない情報(教室での表情、友人との様子)は担任しか持っていません
- 連絡の案を直す … 事実と違う箇所、その家庭に合わない言い回しを直します。送る・送らないは担任が決めます
- 教室長への共有 … 上位の生徒と、担任が順番を上げた生徒を伝えます
2番目を省かないでください。 モデルは記録に残る変化しか見ません。記録に出ない不調を拾うのは担任の役目で、一覧はその時間を作るためのものです。
目標は、1人の生徒をならして1.5分です。 上位5名には数分かけ、残りの20名は理由と点数を流し見て数秒で終わります。上位5名に時間を使えているかを、教室長が月に1回確かめます。
例外に対処する
| 起きること | 対応 |
|---|---|
| CSVが1つ欠けている | 点数を出さずに止め、教室長に知らせる。欠けたまま出さない |
| 生徒IDが対応表に無い | その生徒を一覧の末尾の「照合できない」欄に入れる |
| 登校予定日が未登録 | 欠席率を作れない。点数を出さず別枠にし、予定の登録を担任に頼む |
| 入学から6週未満 | 変化の特徴量が作れないので別枠。担任が自分の見立てで見る |
| 教室の休校日の登録漏れ | 全員の欠席率が同じ日に上がる。拠点ごとの欠席率の急な上昇を検知して止める |
| 入退室のカードの忘れ | 入室が無くても授業に出ていることがある。担任が出席に直せる欄を用意する |
| 生成AIが記録に無い理由を書いた | 受け取った後に、渡していない語(体調、家庭など)を検知し、案を出さずにメモだけ渡す |
| 連絡の案が200字を超えた | 作り直しを1回だけ行い、それでも超えたら案を出さない |
| Claude API が応答しない | 一覧は点数と理由だけで出す。連絡の案の欄は空にする |
5行目は、最初の数か月で必ず起きます。 拠点ごとに休校日が違い、登録が漏れやすいからです。ある拠点の全員の欠席率が同じ週に上がったら、生徒ではなく予定の表を疑います。
6行目のカードの忘れは、点数を押し上げる誤りです。 担任が出席に直した記録は、翌週からの特徴量に反映されます。
記録を残す
- 毎週の3つのCSVの元のファイルと、書き出した日時
- 作った特徴量の表と、そのとき使った標準化の平均・標準偏差とモデルの版
- 生徒ごとの点数、理由の上位3つ、一覧での順番
- 生成AIに渡した内容と、返ってきた連絡の案・メモ
- 担任が順番を直した記録(
tutor_override)と、送った連絡の最終の文面 - 2週間後の出欠と、点数の当たり外れ
2つ目でモデルの版を残すのは、月に1回学び直すためです。 学び直すと同じ生徒でも点数が変わり、先月の一覧がどのモデルで作られたかが残っていないと、当たり外れの比較ができません。
5つ目の担任の直しは、モデルを直す材料になります。 担任が繰り返し順番を下げる理由(たとえば「課題の未提出」が、課題の配信の遅れによるもの)が分かれば、特徴量の作り方を直します。
04実装レベルの3段階
半自動化だけでも、1件4分のうち①の2分はほぼ消えます。 3つの画面を開く代わりに、1枚の一覧で直近2週と前の4週の変化が並ぶからです。順番は担任が一覧を見て決めます。 本格構成で1.5分になり、この段階が本記事の想定です。 違いは、順番が先に並んでいることと、連絡の案が最初から付いていることです。 段階を飛ばさないでください。 半自動化の一覧を2か月使うと、担任がどの変化を見て声をかけているかが分かります。それを特徴量に足してから点数を出すほうが、担任に受け入れられる順番になります。
05工数削減シミュレーション
導入後 1,200件 × 1.5分 ÷ 60 = 30 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 生徒が数百名いて、担任やチューターが1人で数十名を受け持っている学習塾・通信制高校のサポート校・個別指導の教室。入退室や出欠の記録、課題の提出状況、保護者とのやり取りが、それぞれ別のシステムや表に残っている場合。欠席が続いてから気づくことが多く、声をかける順番が担任ごとの勘になっている場合。過去1年以上の出欠の記録が残っている場合。
- 生徒が数十名で、担任が全員の様子を毎日見ている教室。出欠を紙の名簿だけで取っていて、データとして残っていない場合。過去に長く休んだ生徒の例が数件しかなく、学ばせる材料が無い場合。なお、生徒が休む理由の見立てや、学校・医療機関につなぐかどうかの判断は、この構成では代替できません。
07最小構成で試す方法
- 過去1年分の入退室の記録と課題の提出のCSVを書き出す
- 1年のうち、後から振り返って「休みがちになった」と分かっている生徒を10〜20名、担任に挙げてもらう
- その生徒たちの、休みがちになる前の6週間の記録を表にする。遅刻の回数、課題の未提出、最後の連絡からの日数を週ごとに並べる
- 同じ時期に休みがちにならなかった生徒を同じ人数選び、同じ表を作る
- 手元のAIサービスに2つの表を貼り、「どの項目の変化に差があるか」を聞き、担任の見立てと比べる
この段階ではモデルを作りません。 確かめたいのは、記録の変化に、休みがちになる前触れが出ているかどうかです。
| 出てきた内容 | 判断 |
|---|---|
| 遅刻や課題の遅れの変化に、はっきり差がある | モデルを作る段階に進む |
| 差はあるが、担任がすでに気づいていた生徒ばかり | 早く気づける余地は小さい。一覧の時間短縮だけを狙う |
| 記録に差が出ていない | 記録の取り方が先。登校予定日の登録から見直す |
3行目が出ることは珍しくありません。 失敗ではなく、登校予定日が無いと欠席を数えられないことが分かったということです。その場合は、予定の表を3か月整えてから同じ表を作り直してください。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 全員の点数が低く出て、上位がいない | 少数の側に重みが無い。class_weight='balanced' を付ける |
| 重みを付けたら点数が全体に高くなった | 重みで目盛りがずれる。点数は順番として使い、目盛りは当たり外れで確かめる |
| 検証では当たるのに、本番で外れる | 時間の順を無視して分けた。TimeSeriesSplit と gap で未来を見ない |
| 理由に「最後の連絡からの日数」が出ない | 標準化していない。学習時の平均・標準偏差で毎週そろえる |
| 休学中の生徒が毎週上位を埋める | 別枠の印を持たせ、点数の計算から外す |
| ある拠点だけ全員の点数が上がった | 休校日の登録漏れ。拠点ごとの急な上昇を検知して止める |
| 登校予定の無い生徒の欠席が数えられない | 予定の表を先に整える。整うまで点数を出さない |
| 連絡の案に記録に無い理由が入る | 指示で禁じたうえで、渡していない語を受け取り後に検知する |
| 連絡の案に「リスク」と入る | 指示で禁じ、受け取り後にも語を検知する |
| 担任が一覧を見なくなった | 毎日回していないか、上位が長すぎないか。週1回・上位5名に絞る |
| 担任が順番を直しても記録されない | tutor_override の欄を一覧に置き、一言の理由を必須にする |
| 学び直したら先月と点数が比べられない | モデルの版を残し、学び直しは月1回に固定する |
上の3行が、予測の部分の失敗のほとんどです。 どれも、点数が出ているので動いているように見えます。当たり外れを2週間後に照らす仕組みが無いと、ずれに気づけません。
下の3行は、使われ続けるかを決めます。 一覧は、担任が毎週月曜に開いて初めて意味を持ちます。出し方を絞ることのほうが、点数の精度を上げるより効きます。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 生徒の氏名と生徒ID、出欠と遅刻の記録、課題の提出状況、保護者とのやり取りの日時。生徒の多くは未成年で、休みがちだった経験そのものが慎重に扱うべき情報です。
- 点数を生徒と保護者に見せない … 点数は担任が声をかける順番を決めるための道具です。「あなたは休みがちになるおそれがある」と伝わる形で外に出さないでください。 一覧を見られるのは担任と教室長に限ります
- 点数を処遇に使わない … 点数を、クラス分け、進級、在籍の継続の判断に使わないでください。声をかける順番以外の用途に広げると、生徒にとって不利な使われ方になります
- 生成AIへ渡す範囲を絞る … 渡すのは名字、理由の3つ、課題の名前、面談の候補日だけです。連絡と面談の本文、生年月日、住所、学校名は渡しません
- 送信を自動にしない … 連絡の案は担任が直して送ります。家庭ごとの事情を知っているのは担任だけです
- 偏りを定期的に見る … 拠点、学年、登校の日数で、上位に入る割合が偏っていないかを教室長が月に1回見ます。週2日登校の生徒ばかりが上位に入るなら、欠席率の作り方を疑います
- 保存の期間を決める … 点数と理由の記録は、当たり外れの確認と学び直しに必要な期間だけ残します。卒業・退塾した生徒の点数は消します
誤りが起きた場合のリスクは、声をかけるべき生徒を見落とすことと、声をかけ方を誤って生徒を遠ざけることの2つです。 前者は担任が一覧の下位を流し見ることで補い、後者は連絡の案を担任が直すことで防ぎます。どちらも、最後に担任が見る設計で守ります。
10まず何から始めるか
1週目:「休みがち」の定義と登校予定の表を決める
教室長と担任で、今後2週間の登校予定日の何割に来なかったら「休みがち」とするかを決めます。あわせて、生徒ごとの登校予定日が入退室の記録と照合できる形で残っているかを確かめます。予定の無い生徒が多ければ、ここから整えます。
2週目:過去の記録で前触れを確かめる
担任に、過去1年で休みがちになった生徒を10〜20名挙げてもらい、その前の6週間の記録を表にします。遅刻・課題・連絡のどの変化に差が出ているかを、担任の見立てと比べます。
3週目:変化の一覧を出す
Python で3つのCSVを結び付け、直近2週と前の4週の変化を担任ごとの一覧にします。この時点では点数を出しません。 担任に1か月使ってもらい、一覧のどの列を見て声をかけたかを聞きます。
4週目:別枠の印と生徒IDの対応表を整える
休学中・合意済みの長期欠席の生徒に印を付け、3つのシステムの生徒IDの対応表を作ります。照合できない生徒の数がゼロに近づくまで続けます。
2か月目: ロジスティック回帰で点数と理由の上位3つを出し、TimeSeriesSplit で時間順に検証します。担任ごとの上位5名に連絡の案を添えます。3か月目以降: 2週間後の当たり外れを毎週記録し、点数の目盛りと担任の直しを教室長が月に1回見ます。担任が直した理由を特徴量に反映し、月曜の朝の100分が何分になったかを実測した時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
LogisticRegression の既定のソルバーが lbfgs、C の既定が1.0、既定の正則化が l2 であること。class_weight='balanced' がクラスの頻度に反比例する重みを n_samples / (n_classes * np.bincount(y)) で付けること。coef_ が決定関数の特徴量ごとの係数であること。predict_proba がクラスごとの確率の推定値を返すこと | scikit-learn: LogisticRegression | 2026-10-06 |
TimeSeriesSplit が時間順のデータの分け方を作り、ほかの分け方は未来のデータで学習して過去を評価することになるため不適切とされること。n_splits の既定が5、gap で学習用の末尾を空けられること | scikit-learn: TimeSeriesSplit | 2026-10-06 |
較正曲線が予測確率と実際の陽性の割合を比べるものであること。LogisticRegression が logit のリンク関数を持つため、それ自体で較正された予測を返しやすいとされること | scikit-learn: Probability calibration | 2026-10-06 |
構造化出力で output_config.format に type: "json_schema" を指定して応答をJSONスキーマに沿わせられること。数値の範囲(minimum/maximum)や文字数の制約がスキーマで使えないこと | Claude Docs: Structured outputs | 2026-10-06 |
「休みがち」の定義と、点数を誰が見てよいかは、教室長と担任で決めてください。 本記事は製品の公開ドキュメントで確認できた範囲だけを扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-0498)についてのご相談はこちらから。
