自治体の清掃工場が過去のごみの搬入の記録・曜日・祝日・催しから Python で翌週の日ごとの搬入の量を区分ごとに予測し、ごみピットの貯留の見通しと計量棟の受付の体制の案を出す
清掃工場の計量棟の搬入の記録と、曜日・祝日・市の収集の暦・催しの予定から、Python で翌週の日ごとの搬入の量を区分ごとに予測します。焼却の計画と並べてごみピットの貯留の見通しを出し、受付の人数の案にします。
- 連携・自動化
- Python
- 対象業界
- その他/自治体
- 対象部門
- 生産/総務
- 対象業務
- 集計・分析
- 主な課題
- データ分析に時間がかかる/判断に時間がかかる/属人化している
- AIで行う処理
- 予測
- 主な効果
- 判断支援/属人化解消/工数削減
- 導入難易度
- ★★★★☆
- 実装レベル
- 本格構成
- 費用感
- 個別開発(大)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 毎週木曜に、担当が計量の仕組みから前の年の同じ週と、直近4週の日ごと・区分ごとの搬入の量を書き出す
- 市の収集の暦で、翌週に祝日の収集の休みや特別の収集があるかを確かめる
- 係長が、前の年の同じ週の量に直近の増減を掛け、日ごと・区分ごとの搬入の量を見立てる
- 見立てと焼却の計画から、ピットの貯留の量の推移を表計算で出す
- 直接搬入の見立てから、計量棟の受付の窓口の人数を決め、受付の担当に伝える
- 週が明けて見立てと違えば、焼却の量を変えて追いかける
- 自動毎週木曜の朝6時に、Python が計量の仕組みの書き出し、焼却の運転の記録、市の収集の暦、祝日の一覧、催しの予定を読み込む
- 自動日ごとに「日の種類」(平日・土曜・日曜・祝日の収集あり・祝日の収集なし・連休の明けの1日目・2日目・年末の特別の収集など)を付ける
- 自動学習済みのモデルで、翌週の月曜から日曜までの日ごとの搬入の量を、区分ごとに予測する
- 自動過去の同じ日の種類での外れ方から、日ごとの見込みに「多めの側」の幅を付ける
- 自動焼却の計画(炉ごとの1日の焼却の量)と並べ、ピットの貯留の量の推移を、真ん中と多めの側の2本で出す
- 自動直接搬入の見込みから、受付の窓口の人数の案を出す
- 人係長が見込みと貯留の推移を見て、焼却の計画と炉の点検の日を決める
- 人受付の担当が人数の案を見て、窓口の当番を決める
各工程の詳しい説明を読む
- 毎週木曜に、担当が計量の仕組みから前の年の同じ週と、直近4週の日ごと・区分ごとの搬入の量を書き出す
- 市の収集の暦で、翌週に祝日の収集の休みや特別の収集があるかを確かめる
- 係長が、前の年の同じ週の量に直近の増減を掛け、日ごと・区分ごとの搬入の量を見立てる
- 見立てと焼却の計画から、ピットの貯留の量の推移を表計算で出す
- 直接搬入の見立てから、計量棟の受付の窓口の人数を決め、受付の担当に伝える
- 週が明けて見立てと違えば、焼却の量を変えて追いかける
(a)前の年の同じ週と、暦がずれている。 3番の「前の年の同じ週」は、祝日の曜日が変われば別の週です。前の年は月曜が祝日で連休の明けが火曜、今年は祝日が水曜、ということが毎年起きます。 係長は暦を見比べて頭の中でずらしていますが、ずらし方は係長の経験です。
(b)連休の明けにピットが満ちそうになる。 祝日に収集を休む市では、休みの分が明けの2日間に集まります。明けの搬入を少なく見ていると、ピットの貯留が上限に近づいてから焼却の量を上げることになり、炉の負荷が急に変わります。
(c)区分ごとの動きを足し合わせて見ている。 前の年の量は区分の合計で見ることが多く、直接搬入が土曜に増え、許可業者が土曜に減るような逆向きの動きが打ち消し合って見えなくなります。受付の人数の決め方に、その動きが反映されません。
(d)書き出しと並べ替えに時間がかかる。 毎週の書き出し、暦の確かめ、表計算への貼り付けは、係長の見立ての時間より長くかかることがあります。
- 【自動】 毎週木曜の朝6時に、Python が計量の仕組みの書き出し、焼却の運転の記録、市の収集の暦、祝日の一覧、催しの予定を読み込む
- 【自動】 日ごとに「日の種類」(平日・土曜・日曜・祝日の収集あり・祝日の収集なし・連休の明けの1日目・2日目・年末の特別の収集など)を付ける
- 【自動】 学習済みのモデルで、翌週の月曜から日曜までの日ごとの搬入の量を、区分ごとに予測する
- 【自動】 過去の同じ日の種類での外れ方から、日ごとの見込みに「多めの側」の幅を付ける
- 【自動】 焼却の計画(炉ごとの1日の焼却の量)と並べ、ピットの貯留の量の推移を、真ん中と多めの側の2本で出す
- 【自動】 直接搬入の見込みから、受付の窓口の人数の案を出す
- 【人】 係長が見込みと貯留の推移を見て、焼却の計画と炉の点検の日を決める
- 【人】 受付の担当が人数の案を見て、窓口の当番を決める
7番目で決めるのは係長です。 見込みが出すのは過去の記録から見た搬入の量で、炉の調子、灰の搬出の予定、焼却の量の上げ下げの余地は、係長が知っています。 見込みは段取りの出発点です。
5番目で「多めの側」の推移を出すのは、ピットの危うさが多い側にあるからです。 搬入が見込みより少なければ焼却の量を下げれば済みますが、多ければピットが上限に近づきます。 多めの側でも上限に届かないかを先に見ます。
02今回想定するシステム構成
計量の仕組み(車両ごとの搬入の日時・区分・正味の重さ) + 焼却の運転の記録(炉ごとの焼却の量・ピットの貯留の量) + 市の収集の暦(地区ごとの収集の曜日、祝日の収集の有無、年末年始の特別の収集) + 国民の祝日の一覧(内閣府の CSV) + 市の行事・催しの予定 │ ▼【トリガー】毎週木曜の朝6時(庁内のサーバーの定時実行) Python(pandas) ├──▶ 日ごと・区分ごとに集計し、「日の種類」を付ける ▼ scikit-learn の HistGradientBoostingRegressor │ 区分ごとに1つのモデル。翌週の月〜日の搬入の量 ▼ Python ── 外れ方の幅を付け、焼却の計画と並べてピットの貯留の推移を出す ▼ Python ── 直接搬入の見込みから受付の人数の案 ▼ 【人】係長が焼却の計画と点検の日を決め、受付の担当が当番を決める
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| 実行環境 | Python(pandas・scikit-learn) | R |
| 処理エンジン | scikit-learn の HistGradientBoostingRegressor | LightGBM、statsmodels の季節の時系列のモデル |
| 集計 | Python(日の種類の付与、外れ方の幅、ピットの貯留の推移、受付の人数の案) | 表計算の計算式 |
| 保管 | 庁内のファイルサーバー(学習の記録、見込みの表、当たり方の記録) | - |
新しく足すのは、Python の処理と、市の収集の暦を日ごとの表にする作業です。 計量の仕組みと焼却の運転の記録には書き込みません。この構成が出すのは、日ごと・区分ごとの見込みと、貯留の推移、受付の人数の案までです。
予測のエンジンに HistGradientBoostingRegressor を選んだのは、「日の種類」のような区分の項目をそのまま扱えるからです。 公式のページでは、categorical_features の既定は from_dtype で、データフレームの Categorical の型の列が区分の項目として扱われるとされています。公式の自転車の貸し出しの需要の例でも、季節・祝日・営業日・天気の列を区分の項目として渡し、木のモデルは時間の項目を加工せずに渡しても、曜日や時刻と需要の単調でない関係を学べると説明されています。
生成AIは使いません。 出すのは重さの見込みと貯留の推移の表です。
03どうやって実装するのか
処理の起点を決める
毎週木曜の朝6時に1回動かします。 係長が翌週の焼却の計画を立てるのが木曜の午前なので、出勤してすぐに見込みを見られる時刻にします。庁内のサーバーの定時実行(Windows ならタスク スケジューラ)で Python のスクリプトを起動します。
予測するのは、翌週の月曜から日曜までの7日です。 木曜の朝の時点で、手元にある搬入の記録は水曜の分までです。翌週の月曜は5日先、日曜は11日先になります。この「何日先か」が、第7章の前処理で使える項目を決めます。
月曜の朝にも1回、見込みを出し直します。 木曜から日曜までの4日分の実績が入るので、その週の後半の見込みが締まります。 出し直しでも、見込みの対象の日から見て使える記録の範囲は同じ規則で決めます。
モデルの作り直しは3か月に1回にします。 作り直す前と後で、直近の3か月の当たり方を比べ、悪くなっていれば前のモデルのまま使います。見込みの表には、作った日時とモデルの作成日を必ず印字します。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 搬入の記録 | 車両ごとの搬入の日時、搬入の区分(委託の収集・許可業者・直接搬入・粗大ごみ)、正味の重さ | 計量の仕組みの書き出し(CSV) |
| 焼却の運転の記録 | 日ごとの炉ごとの焼却の量、ピットの貯留の量(クレーンの計量か推計の値) | 焼却の運転の記録 |
| 市の収集の暦 | 地区ごとの燃やすごみの収集の曜日、祝日に収集するか、年末年始の収集の休みと特別の収集の日 | 市の収集の暦(担当課の資料) |
| 国民の祝日 | 祝日と休日(振替の休日など)の日付と名前 | 内閣府の「国民の祝日」の CSV |
| 催しの予定 | 市の祭り・花火大会・大きな催しの日、市の一斉の清掃の日 | 市の行事の予定表 |
| 工場の受入れの予定 | 受入れを止める日、直接搬入の受付の時間を変える日 | 施設の運転の予定 |
質を決めるのは、市の収集の暦です。 国民の祝日の一覧だけでは、その日に収集したかどうかが分かりません。 収集の暦は紙のチラシや担当課の資料で毎年作られており、過去3年分を日ごとの表にそろえるのが、導入の最初の仕事です(第14章)。
国民の祝日は、内閣府の CSV を使います。 内閣府のページでは、昭和30年(1955年)から令和9年(2027年)までの国民の祝日の CSV が掲げられ、令和10年(2028年)の祝日は前の年の2月に載せるとされています。CSV には振替の休日のような「休日」の行も入っています。毎年2月に、翌年の分が載ったかを確かめる作業を年間の予定に入れます。
データの取得方法を決める
| 取るもの | どこから | 何に使うか |
|---|---|---|
| 搬入の記録 | 計量の仕組みから毎週水曜の夜に CSV を書き出し、決まったフォルダに置く | 日ごと・区分ごとの搬入の量 |
| 焼却の運転の記録 | 運転の記録の日報を CSV で保存する | ピットの貯留の量の起点 |
| 収集の暦 | 担当課の資料から日ごとの表を作り、CSV で保存する | 日の種類 |
| 祝日 | 内閣府の CSV を年に1回取り込む | 日の種類 |
| 催し・受入れの予定 | 予定表を CSV で保存する | 項目と、受入れを止める日の印 |
内閣府の CSV は、文字の符号が UTF-8 ではありません。 取り込んで化けた行があれば、Shift_JIS 系の符号で読み直します。取り込んだら、行の数と最後の日付を必ず確かめます。
搬入の区分は、計量の仕組みの車両の登録で決まっていることが多いです。 委託の収集の車が粗大ごみを運んだ日に区分が「委託の収集」のままになっていると、粗大ごみの見込みが少なく出ます。 区分の付け方の決まりを、計量棟の担当と最初に確かめます。
AIへ渡す前に整形する
- 日ごと・区分ごとに集める … 車両ごとの正味の重さを、搬入の日と区分ごとに足します
- 日の種類を付ける … 曜日、祝日(収集あり/収集なし)、連休の明けの何日目か、年末の特別の収集の日、年始の受入れの初日、受入れを止めた日
- 連休の長さを付ける … その日の直前に、収集の無い日が何日続いたか
- 催しの印を付ける … 催しの当日と翌日に印を付けます
- 使える過去の記録を項目にする … 予測を作る時点で分かっている記録だけを使い、「2週前の同じ曜日の量」「直近4週の同じ曜日の平均」のように、見込みの対象の日から少なくとも12日前までの記録で作ります
- 受入れを止めた日を外す … 炉の点検で受入れを絞った日、災害のごみを受け入れた日は、学習から外して印を残します
5番目が、この構成の肝です。 「前の日の搬入の量」や「1週前の同じ曜日の量」は、学習のときはどの日にもそろっています。けれども木曜に翌週の日曜を予測するとき、1週前の日曜(予測を作る日の4日後)はまだ来ていません。 予測のときに欠ける値で学習すると、学習の当たり方は良く見えるのに、本番で外れます。いちばん先の日曜に合わせて「12日以上前の記録」だけで項目を作ると、7日すべてに同じ項目をそろえられます。
2番目と3番目を分けているのは、明けの日の量が連休の長さで変わるからです。 1日の祝日の明けと、4日続いた休みの明けでは、積み上がった量がまるで違います。 「明けの1日目」という印に、直前に収集の無かった日の数を添えます。
4番目の催しは、当日より翌日に効くことがあります。 花火大会や祭りの片付けのごみは、翌朝の収集や許可業者の搬入で入ってきます。当日と翌日の両方に印を付け、どちらに効いているかは区分ごとのモデルに学ばせます。 催しの数が少ないうちは、印の効き方は弱く出ます。
6番目の災害のごみは、とくに外します。 大雨の後の片付けのごみが入った週を残すと、次の年の同じ時期の見込みが大きく出ます。
AIに処理させる
させるのは、翌週の日ごと・区分ごとの搬入の量を予測することだけです。 区分ごとに1つずつ、4つのモデルを学習します。
| 出すもの | 作り方 | 使いみち |
|---|---|---|
| 日ごと・区分ごとの見込み | 区分ごとのモデルで、7日分を予測 | 焼却の計画 |
| 多めの側の幅 | 過去の同じ日の種類での、実際と見込みの差の9割の点 | ピットの危うさの確かめ |
| ピットの貯留の推移 | 前の日の貯留 + 搬入の見込み - 焼却の計画の量 を日ごとに積み上げる | 焼却の量と点検の日の段取り |
| 受付の人数の案 | 直接搬入の見込みの重さを、過去の1台あたりの重さで台数に直し、時間帯の窓口1つあたりの台数で割る | 受付の当番 |
ピットの貯留の推移と受付の人数の案は、モデルではなく計算です。 モデルが出すのは搬入の量の見込みまでで、そこから先は決まった式で出します。 式の中身は係長と受付の担当が見て確かめられるようにしておきます。
| 貯留の印 | 決め方 | 係長の動き |
|---|---|---|
| 赤 | 多めの側の推移で、ピットの運用の上限を超える日がある | 焼却の量を前もって上げるか、点検の日をずらすかを検討 |
| 橙 | 真ん中の推移で、運用の上限の9割を超える日がある | 焼却の量の上げ下げの余地を確かめる |
| 青 | 真ん中の推移で、運用の下限を下回る日がある | 炉の点検の前倒しや、焼却の量の下げを検討 |
受付の人数の案の式も、受付の担当と一緒に決めます。 直接搬入の重さの見込みを、過去の同じ日の種類での「1台あたりの正味の重さ」の中央値で割って台数にし、時間帯ごとの過去の割合で配ります。窓口1つで1時間に受け付けられる台数は、計量と料金の受け取りにかかる時間から受付の担当が決めた値を使います。土曜の午前に台数が集中するような偏りは、時間帯ごとの割合に入っています。
運用の上限と下限は、施設ごとに係長が決めた値を使います。 ピットの設計の容量ではなく、クレーンの操作とごみの攪拌の余地を見た運用の線です。
| させないこと | 理由 |
|---|---|
| 炉の運転と停止の決定 | 炉の調子、点検の計画、灰の搬出で決まる |
| ピットの運用の安全の判断 | ピットの火災やクレーンの操作の安全は、運転の担当の判断 |
| 収集の計画の変更 | 収集の暦は担当課と委託の業者が決める |
| 直接搬入の受入れの制限の決定 | 住民への周知と市の方針で決める |
指示内容を固定する
生成AIを使わないので、プロンプトはありません。 かわりに、学習と予測の中身を示します。
from sklearn.ensemble import HistGradientBoostingRegressor
from sklearn.model_selection import TimeSeriesSplit
from sklearn.metrics import mean_absolute_error
import numpy as np
CAT = ["dow", "day_type", "month"]
NUM = ["closed_days_before", "event", "lag14_same_dow", "mean4w_same_dow_lag14"]
for c in CAT:
daily[c] = daily[c].astype("category")
models = {}
for kind in ["contract", "permit", "direct", "bulky"]:
d = daily[daily["kind"] == kind].sort_values("date")
X, y = d[CAT + NUM], d["tons"]
cv = TimeSeriesSplit(n_splits=5, gap=14, test_size=56) # 14日あけて8週ずつ確かめる
errs = []
for tr, te in cv.split(X):
m = HistGradientBoostingRegressor(max_iter=300, learning_rate=0.05)
m.fit(X.iloc[tr], y.iloc[tr])
errs.append(mean_absolute_error(y.iloc[te], m.predict(X.iloc[te])))
print(kind, np.round(errs, 1)) # 区分ごとの外れ方を、係長の見立てと比べる
models[kind] = HistGradientBoostingRegressor(
max_iter=300, learning_rate=0.05).fit(X, y)
TimeSeriesSplit で確かめるのは、未来の日で学習して過去の日を当てることを避けるためです。 公式のページでは、TimeSeriesSplit は時間の順に並んだ記録を分けるためのもので、ほかの分け方では未来の記録で学習して過去の記録で確かめることになるとされています。gap は学習の側の終わりから確かめの側の前に外す件数で、ここでは14日を外し、項目に使う「12日以上前の記録」と確かめの期間が重ならないようにしています。
外れ方は、平均絶対誤差(トン)で見ます。 公式の自転車の例でも、平均絶対誤差と二乗平均の平方根を使い、平均絶対誤差のほうが読み取りやすいとしています。係長には「区分ごとに、1日あたり何トンずれるか」として見せます。
多めの側の幅は、確かめの期間の外れ方から作ります。 日の種類ごとに「実際 − 見込み」の9割の点を出し、見込みに足します。連休の明けの日は外れ方が大きいので、日の種類ごとに分けて持つのが大事です。
出力形式を固定する
係長と受付の担当に渡すのは、次の見込みの表です。 印刷して木曜の段取りの打合せで使います。
【翌週(11/2〜11/8)の搬入の見込み(10/29 06:10 作成/モデル作成 2026-10-01)】
| 日 | 日の種類 | 委託の収集 | 許可業者 | 直接搬入 | 粗大ごみ | 合計(多めの側) | ピットの貯留(真ん中/多め) | 印 |
|---|---|---|---|---|---|---|---|---|
| 11/2 月 | 平日 | 182t | 61t | 9t | 6t | 258t(281t) | 72%/78% | - |
| 11/3 火 | 祝日・収集なし | 0t | 12t | 15t | 3t | 30t(41t) | 63%/70% | - |
| 11/4 水 | 明けの1日目(休み1日) | 236t | 68t | 11t | 8t | 323t(352t) | 78%/88% | 橙 |
「多めの側」の列と、貯留の右側の数字を先に見ます。 11/4 の水曜は、多めの側で貯留が88%まで上がる見込みで、前の週のうちに焼却の量を少し上げておくかを、炉の調子と照らして係長が決めます。
受付の担当には、直接搬入の時間帯ごとの台数の見込みと、窓口の数の案を出します。 土曜と連休の前の日は、窓口を1つ増やす案として出し、当番は受付の担当が決めます。
表の下には注意の印を並べます。 収集の暦が未入力の日には「暦なし」、催しの印の付いた日には「催しあり」、受入れを止める予定の日には「受入れ制限」を出します。機械で読む用には、同じ内容を CSV でも残します。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 計量の仕組み | 毎週水曜の夜に、車両ごとの搬入の記録を CSV で書き出す | 搬入の量 |
| 焼却の運転の記録 | 日報を CSV で保存して読む | ピットの貯留の起点 |
| 市の収集の暦 | 日ごとの表を CSV で保存して読む | 日の種類 |
| 内閣府の祝日の CSV | 年に1回取り込む | 日の種類 |
| 焼却の計画と受付の当番 | 書き込まない(係長と受付の担当が決めてから入れる) | - |
焼却の計画には書き込みません。 見込みの表の数字をそのまま計画にすると、炉の調子や灰の搬出の予定を見ないまま焼却の量が決まります。
ピットの貯留の起点は、木曜の朝の運転の記録の値を使います。 貯留の量はクレーンの計量やピットの中の高さからの推計で、日報の値そのものに誤差があります。 推移の表には起点の値と、その値をどう測ったかを印字し、月曜の出し直しで起点を新しい値に置き換えます。
人が確認する
- 作った日時とモデルの作成日を見る … 表の上の日付がその週の木曜であることを確かめます
- 注意の印を見る … 「暦なし」の日があれば、担当課に収集の予定を確かめます
- 赤・橙・青の日の段取りを決める … 焼却の量の上げ下げ、点検の日の入れ替えを決めます
- 受付の人数の案を確かめる … 催しや天気の予報を足して、窓口の当番を決めます
3番目で見込みと違う段取りにしたら、理由を一言残します。 「近くの工場の移転で事業のごみが一時的に増えた」のような事情は、次の作り直しで項目に足すか、学習から外すかを決める材料になります。
目標は、120件をならして1件1分です。 印の無い平日は流し見るだけで、時間を使うのは連休の前後と、年末の特別の収集の週です。
例外に対処する
| 起きること | 対応 |
|---|---|
| 翌年の祝日が内閣府の CSV にまだ無い | 祝日を手で入れた表で補い、「祝日仮」と印字する |
| 収集の暦が翌週の分まで無い | その日は「暦なし」と出し、前の年の同じ曜日の収集の有無で仮に置く |
| 災害のごみの受入れが始まった | その期間は見込みを止め、係長が手で見立てる。学習から外す |
| 炉の点検で受入れを絞る | 受入れの制限の日として印を付け、見込みとは別に表示する |
| 搬入の区分の付け方が変わった | 変わった日から別の扱いにし、作り直しまでは「区分変更」と印字する |
| 計量の記録の書き出しが欠けた日 | 欠けた日を空けたまま予測し、「記録欠け」と出す |
| 作り直したモデルが前より外れる | 前のモデルのまま使い、作り直しの記録を残す |
| 木曜の定時の実行が動かなかった | 担当が手で実行する。日付の古い表は使わない |
1行目と2行目は、毎年同じ時期に出ます。 祝日は前の年の2月に載り、収集の暦は年度の初めに決まることが多いので、年末年始の暦が固まる時期を担当課に聞いて、年間の予定に入れます。
記録を残す
- 実行の日時、使ったモデルの作成日、学習の期間と、外した日と理由
- 日ごと・区分ごとの見込み、多めの側の幅、貯留の推移、印、受付の人数の案
- 係長が見込みと違う段取りにした日と、その理由
- 実際の搬入の量と貯留の量
- 月ごとの当たり方(区分ごと・日の種類ごとの平均絶対誤差、実際が多めの側を超えた日の割合)
最後の行の「多めの側を超えた日の割合」が、1割前後なら幅は合っています。 大きく上回るなら幅が狭すぎ、ピットの赤の印が出るべき日に出ていません。 日の種類ごとに見ると、どこで幅が足りないかが分かります。
04実装レベルの3段階
本記事の想定は本格構成です。 半自動化では見込みの表は出ますが、係長はまだ表計算に見込みを貼り付けて、貯留の推移を手で出しています。 半自動化で1件4分が2分ほどに、本格構成で1分になります。 差が大きいのは、貯留の推移と受付の人数の案が、決まった式で出せる計算だからです。 段階を飛ばさないでください。 半自動化を3か月使うと、どの日の種類で外れるかが分かります。外れる日の種類の収集の暦を直してから、多めの側の幅を足します。 本格構成の先には、天気の予報を項目に足す形も考えられます。 ただし、天気の予報は予測を作る木曜の時点の予報を使う必要があり、過去の実際の天気で学習すると、ここでも時点がずれます。 予報を日ごとに保存する仕組みを先に作り、1年ほどたまってから足すかを決めます。
05工数削減シミュレーション
導入後 120件 × 1分 ÷ 60 = 2 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 1日に百トンから数百トンのごみを受け入れる市町村・一部事務組合の清掃工場(焼却施設)。計量棟のトラックスケールの記録が車両ごと・搬入の区分ごとに3年分以上残っている場合。焼却の計画とごみピットの貯留の見通しを、運転管理の係長が毎週、前の年の同じ時期の記録を見ながら手で立てていて、連休の明けや年末にピットが満ちそうになって慌てることがある場合。直接搬入の受付の窓口の人数を、経験で増やしたり減らしたりしている場合。
- 搬入の量が毎日ほぼ同じで、曜日の差も祝日の差も小さい施設。計量の記録が紙の伝票だけで、日ごと・区分ごとの重さをデータとして取り出せない場合。広域の処理の組合で、搬入の量を構成の市町村の側が決めて事前に知らせてくる場合。なお、炉の運転と停止の決定、ピットの運用の安全の判断、収集の計画の変更は、この構成では代替できません。
07最小構成で試す方法
- 計量の仕組みから、直近3年の委託の収集の搬入の量を日ごとに書き出す
- 市の収集の暦から、同じ3年の祝日の収集の有無と年末年始の特別の収集を、日ごとの表にする
- 第7章の前処理で日の種類と項目を作り、委託の収集だけのモデルを学習する
- 古い2年で学習し、新しい1年について、毎週木曜の時点で翌週を予測させる
- 予測を、当時の係長の見立てと、実際の搬入の量と並べる
最初は委託の収集だけで始めます。 委託の収集は量が多く、収集の暦との関係がはっきりしているので、日の種類の付け方が合っているかを確かめやすい区分です。
| 出てきた内容 | 判断 |
|---|---|
| 連休の明けの日で、係長の見立てより外れが小さい | 区分を広げ、ピットの貯留の推移を足す段階に進む |
| 平日は合うが、連休の明けで大きく外れる | 連休の長さの項目と、収集の暦の入力を確かめる |
| 学習の当たりが良すぎて、新しい1年で外れる | 予測の時点で無い記録を項目に使っていないかを確かめる |
2行目は、収集の暦の表の誤りであることが多いです。 紙のチラシから日ごとの表に写すとき、年末年始の特別の収集の日や、祝日に収集した年としなかった年の違いが抜けやすくなります。外れの大きい日を並べ、その日の暦の入力を担当課の資料と突き合わせます。
3行目は、ほとんどの場合、項目の時点のずれです。 前の日の搬入の量や1週前の同じ曜日の量が入っていないかを見ます。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 国民の祝日の一覧だけで日の種類を作る | 市の収集の暦で、祝日の収集の有無を付ける |
| 連休の明けを1つの印で済ませる | 明けの何日目かと、直前の収集の無い日の数を付ける |
| 前の日や1週前の量を項目に入れる | 見込みの対象の日から12日以上前の記録だけで項目を作る |
| 区分を合計して1つのモデルにする | 区分ごとにモデルを分ける |
| 記録を無作為に分けて確かめる | TimeSeriesSplit で時間の順に分け、gap を空ける |
| 災害のごみの週を学習に残す | 学習から外して印を残す |
| 翌年の祝日が CSV に無い | 毎年2月に翌年の分を確かめる |
| 見込みの数字をそのまま焼却の計画にする | 係長が炉の調子と照らして決める |
上の3行が、この構成の失敗のほとんどです。 どれも「その日がどんな日で、予測の時点で何が分かっていたか」から起きます。ここを押さえれば、残りは記録の整え方の注意で足ります。
4行目の「区分ごとに分ける」も、早いうちに効いてきます。 合計の1本で学習すると、土曜に増える直接搬入と減る許可業者が打ち消し合い、受付の人数の案に使える見込みが出ません。
下から2行目は、毎年くり返し出てくる問題です。 祝日と収集の暦の更新を忘れると、年末年始の最も大事な週に、日の種類が空のまま見込みが出ます。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 搬入の日時・区分・重さ、焼却の運転の記録、市の収集の暦です。車両ごとの記録には、許可業者の名前や直接搬入した住民・事業者の情報がひも付いていることがあります。
- 個人にひも付く記録を使わない … 予測に使うのは日ごと・区分ごとの重さの合計です。直接搬入の車両の番号や搬入した人の名前は、集計の前に落とします
- データを外に出さない … 予測は庁内のサーバーの中で動き、生成AIや外部のサービスに記録を送りません
- 許可業者ごとの量を一覧に出さない … 許可業者ごとの搬入の量は事業者の取引の中身です。見込みの表は区分の合計だけにします
- 炉とピットの安全の判断は人が行う … ピットの火災、クレーンの操作、炉の負荷は運転の安全に関わります。見込みの印が出ないことを、点検や監視を軽くする理由にしません
- 委託の事業者との取り決め … 運転管理を委託している場合は、計量の記録の書き出しと見込みの表の扱いを、委託の仕様に書いておきます
誤りが起きた場合のリスクは、連休の明けの量を少なく見てピットが満ちそうになることと、多く見て焼却の量を上げすぎることの2つです。 前者は日の種類の付け方を誤ると起き、後者は災害のごみの週を学習に残すと起きます。どちらも前処理から出ているので、そこだけは設計で守ります。
10まず何から始めるか
1週目:日の種類の決め方を決める
係長と担当課で、日の種類の一覧を決めます。祝日の収集あり/なし、明けの何日目まで分けるか、年末の特別の収集の日をどう呼ぶかを具体的に並べます。
2〜3週目:収集の暦を日ごとの表にする
担当課の資料から、過去3年分の収集の暦を日ごとの表にします。あわせて、内閣府の祝日の CSV を取り込み、災害のごみや受入れの制限の日に印を付けます。
4週目:委託の収集で試す
第8章のとおり、古い2年で学習し、新しい1年について毎週木曜の時点で翌週を予測させ、係長の見立てと並べます。連休の明けの日の外れ方を、係長と一緒に見ます。
2か月目: 4区分すべての見込みの表を毎週木曜に出す半自動化を始めます。係長はこれまでどおり自分で見立てながら、表と見比べます。3か月目以降: 多めの側の幅、ピットの貯留の推移、受付の人数の案を足します。連休の明けを含む月でも、多めの側を超えた日が1割前後に収まり、係長が表と炉の調子だけで焼却の計画を決められるようになった時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
HistGradientBoostingRegressor の categorical_features の既定が from_dtype で、データフレームの Categorical の型の列を区分の項目として扱うこと。欠けた値(NaN)を扱えること。loss の既定が squared_error であること。early_stopping の既定 auto は件数が1万を超えるか X_val・y_val を渡したときに有効になること(scikit-learn 1.9.1) | scikit-learn: HistGradientBoostingRegressor | 2026-10-29 |
自転車の貸し出しの需要の例で、季節・祝日・営業日・天気の列を区分の項目として渡すこと。木のモデルは時間の項目を加工せずに渡しても単調でない関係を学べること。TimeSeriesSplit を gap と test_size を指定して使うこと。平均絶対誤差と二乗平均の平方根で評価し、平均絶対誤差のほうが読み取りやすいとしていること | scikit-learn: Time-related feature engineering | 2026-10-29 |
TimeSeriesSplit が時間の順に並んだ記録を分けるためのもので、ほかの分け方では未来の記録で学習して過去で確かめることになること。gap が学習の側の終わりから確かめの側の前に外す件数であること。n_splits の既定が5であること | scikit-learn: TimeSeriesSplit | 2026-10-29 |
| 昭和30年(1955年)から令和9年(2027年)までの国民の祝日の CSV が掲げられていること。令和10年(2028年)の国民の祝日は前の年(2027年)の2月に載せるとされていること。振替の休日などの「休日」の扱い。CSV の文字の符号が UTF-8 でないこと(取り込んで確かめた) | 内閣府: 国民の祝日について | 2026-10-29 |
炉の運転と停止、ピットの運用の安全、収集の計画の変更は、施設と担当課の判断で決めてください。 本記事は上記の公開情報で確認できた範囲だけを扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-2383)についてのご相談はこちらから。
