受注ごとの品目・数量・工程の混み具合と過去の実績から生産のリードタイムを見込み、営業が顧客へ答える納期の候補と、遅れるおそれのある受注を出す
受注ごとの品目・数量・工程の並びと、その時点の工程の混み具合、過去の実績から、完成までの稼働日数を見込みます。営業が顧客へ答える納期の候補と、受注残のうち約束の納期に遅れるおそれのある受注を、生産管理の確認つきで出します。
- 連携・自動化
- Python
- 対象業界
- 建設/製造
- 対象部門
- 営業/生産
- 対象業務
- 問い合わせ対応/集計・分析
- 主な課題
- 判断に時間がかかる/属人化している/期限・対応漏れが起きる
- AIで行う処理
- 予測
- 主な効果
- 判断支援/対応スピード向上/属人化解消
- 導入難易度
- ★★★★★
- 実装レベル
- 本格構成
- 費用感
- 個別開発(大)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 営業が、顧客から聞いた品目・数量・希望の納期を、生産管理課へメールかチャットで問い合わせる
- 生産管理の担当が、図面と過去の似た品目から、通る工程と工程ごとの工数を拾う
- 負荷表を開き、該当する工程の向こう数週間の負荷と空きを見る
- 材料の在庫と発注残の一覧で、材料がすぐ使えるか、取り寄せが要るかを見る
- 経験から完成までの日数を決め、営業へ回答の日付を返す
- 営業が、その日付を見積書や受注の確認書に書いて顧客へ答える
- 週に一度、生産管理が受注残の一覧を見て、遅れそうな受注を営業へ知らせる
- 人営業が、品目(図面番号または品目区分)・数量・希望の納期を、問い合わせの画面に入れる
- 自動Python が生産管理システムから工程の並びと標準の工数を引き、似た品目が無ければ品目区分の標準の並びを使う
- 自動その時点の工程ごとの受注残の工数と、材料の在庫・発注残を取り込む
- 自動LightGBM のモデルで、受注から完成までの稼働日数を50%点と90%点の2本で見込む
- 自動稼働日のカレンダーで日付に直し、外注の工程と出荷の日数を足して、納期の候補(標準と最短)を出す
- 人生産管理の担当が候補を見て、特急の割り込みや残業の予定を加味して回答の日付を決める
- 人営業が、決まった日付を顧客へ答える
- 自動毎朝7時、受注残の全件について、進んでいる工程と先の工程の混み具合から残りの日数を見込み直す
- 自動90%点の完成日が約束の納期を超える受注を、遅れるおそれのある受注として生産管理と営業へ出す
各工程の詳しい説明を読む
- 営業が、顧客から聞いた品目・数量・希望の納期を、生産管理課へメールかチャットで問い合わせる
- 生産管理の担当が、図面と過去の似た品目から、通る工程と工程ごとの工数を拾う
- 負荷表を開き、該当する工程の向こう数週間の負荷と空きを見る
- 材料の在庫と発注残の一覧で、材料がすぐ使えるか、取り寄せが要るかを見る
- 経験から完成までの日数を決め、営業へ回答の日付を返す
- 営業が、その日付を見積書や受注の確認書に書いて顧客へ答える
- 週に一度、生産管理が受注残の一覧を見て、遅れそうな受注を営業へ知らせる
(a)答えるまで時間がかかる。 営業の問い合わせは生産管理の手が空くまで待たされ、半日から1日返事が来ないこともあります。 その間に、顧客は他社の納期を聞いています。
(b)答え方が人に頼っている。 「この形の溶接物は1台で2日」「塗装の外注は月末に詰まる」といった勘所は、2人の頭の中にあります。2人が同じ受注を見ても、答える日付が数日ずれることがあります。
(c)余裕の見方に基準が無い。 遅れを恐れて長めに答えれば受注を逃し、短めに答えれば後で遅れの連絡をすることになります。どれくらい余裕を見るかが、その日の忙しさと担当者の性格で決まっています。
(d)遅れに気づくのが遅い。 受注残の点検は週に一度で、工程の実績を目で追うだけです。前の工程で2日遅れた受注が、そのまま出荷の前日まで気づかれないことがあります。顧客への遅れの連絡が直前になり、建設の現場では据え付けの段取りが組み直しになります。
- 【人】 営業が、品目(図面番号または品目区分)・数量・希望の納期を、問い合わせの画面に入れる
- 【自動】 Python が生産管理システムから工程の並びと標準の工数を引き、似た品目が無ければ品目区分の標準の並びを使う
- 【自動】 その時点の工程ごとの受注残の工数と、材料の在庫・発注残を取り込む
- 【自動】 LightGBM のモデルで、受注から完成までの稼働日数を50%点と90%点の2本で見込む
- 【自動】 稼働日のカレンダーで日付に直し、外注の工程と出荷の日数を足して、納期の候補(標準と最短)を出す
- 【人】 生産管理の担当が候補を見て、特急の割り込みや残業の予定を加味して回答の日付を決める
- 【人】 営業が、決まった日付を顧客へ答える
- 【自動】 毎朝7時、受注残の全件について、進んでいる工程と先の工程の混み具合から残りの日数を見込み直す
- 【自動】 90%点の完成日が約束の納期を超える受注を、遅れるおそれのある受注として生産管理と営業へ出す
6番目が、この設計の分かれ目です。 見込みは過去の実績から出したもので、来週の溶接の職人の休み、今月だけの特急の割り込み、顧客との長い付き合いは知りません。生産管理の担当は候補を動かしてよく、動かした理由を残します。
9番目で90%点を使うのは、遅れの連絡は早いほど打てる手が多いからです。 真ん中の見込みで間に合っていても、遅めの見込みで超えるなら、工程の順番の入れ替えや外注の前倒しを検討する価値がある受注です。
02今回想定するシステム構成
営業の問い合わせ(品目・数量・希望の納期) 受注残(毎朝 7:00)
│ │
▼【トリガー】問い合わせの登録/定時
Python
├──▶ 生産管理システム(工程の並び・標準の工数・工程ごとの着手と完了の実績)
├──▶ 工程ごとの負荷(受注残の工数の合計)
└──▶ 材料の在庫・発注残
▼
特徴の作成 ── 品目区分/数量/工程数/標準の工数の合計/
工程ごとの負荷の日数/材料の手配の要否/外注の工程の有無
▼
LightGBM(objective="quantile")
├── 50%点(alpha=0.5)
└── 90%点(alpha=0.9)
▼
稼働日のカレンダー ── 日付に直し、外注と出荷の日数を足す
▼
納期の候補(標準=90%点/最短=50%点)・遅れるおそれのある受注の一覧
▼
【生産管理が確かめて回答の日付を決める】| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| 実行環境 | Python(pandas・LightGBM の分位点回帰・scikit-learn の評価の関数) | R、BigQuery ML |
| 集計 | Python(工程ごとの受注残の工数と負荷の日数) | 生産管理システムの負荷の集計 |
| データの取得元 | 生産管理システムのCSV出力、材料の在庫と発注残の一覧 | 生産管理システムのデータベースの読み取り専用の口 |
| 問い合わせの画面 | 社内のWebの入力画面 | 表計算の共有シート |
| 結果の出力先 | 生産管理課と営業の共有フォルダの一覧 | 社内チャットへの通知 |
生産管理システムには書き込みません。 工程の計画も、受注の納期の欄も、今のまま人が入れます。この構成は見込みを横に並べるだけで、計画を動かす権限を持ちません。
見込みには、LightGBM の分位点回帰を使います。 目的の関数(objective)に quantile を選び、alpha に0.5と0.9を指定した2つのモデルを作ります。alpha は分位点回帰とHuber損失にだけ使われる値で、既定は0.9です。数量と負荷の日数には、monotone_constraints で「増えれば日数も増える」向きの制約を付けます。 学習のデータの偏りで、数量が多いほど早く上がるような逆向きの見込みが出るのを防ぐためです。
生成AIは使いません。 見込みも候補も数字と表で出します。納期を文章で考えさせると、もっともらしい日付が根拠なく出てきます。
03どうやって実装するのか
処理の起点を決める
問い合わせの登録をきっかけに、1件ずつ動かします。 営業が品目と数量を入れて登録すると、数秒で候補が返り、同時に生産管理の確認待ちの一覧に入ります。営業が顧客と電話している間に、真ん中と遅めの日付が見えるようにするためです。
毎朝7時に、受注残の全件を見込み直します。 前日の工程の完了の実績は、夜のうちに生産管理システムへ入っています。朝礼の前に、遅れるおそれのある受注の一覧が生産管理の手元にあるようにします。
月に一度、前の月に完成した受注で答え合わせをします。 見込んだ日数と実際の日数を並べ、90%点を超えた受注の割合を工程の組み合わせごとに出します。モデルの学び直しは、四半期に一度と、設備や人の配置が大きく変わったときにします。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 問い合わせ | 図面番号または品目区分、数量、材質、希望の納期、特急かどうか | 営業の入力画面 |
| 工程の並びと標準の工数 | 品目ごとに通る工程の順番、工程ごとの段取りと1個あたりの標準の時間、外注の工程 | 生産管理システム |
| 工程ごとの実績 | 過去の受注ごとの工程の着手日と完了日、実際にかかった時間 | 生産管理システム |
| 受注残 | 受注ごとの約束の納期、今どの工程まで終わったか、残りの工程と標準の工数 | 生産管理システム |
| 工程の能力 | 工程ごとの1日の能力(人と設備の時間)、稼働日のカレンダー | 生産管理課が持つ表 |
| 材料 | 材料の在庫、発注残と入荷の予定日 | 材料の在庫と発注残の一覧 |
質を決めるのは、工程ごとの着手日と完了日です。 受注日と出荷日しか残っていなければ、どの工程で待っていたかが分かりません。工程の混み具合が日数にどう効くかを学ばせるには、工程ごとの実績が要ります。 現場の端末で着手と完了を入れていない工場は、まずそこから始めます。
工程の能力の表も外せません。 受注残の工数をそのまま特徴にすると、人が増えた月と減った月の違いが見えません。受注残の工数を1日の能力で割った「その工程があと何日分詰まっているか」を特徴にします。
データの取得方法を決める
生産管理システムからは、毎晩CSVで書き出したものを読みます。 読み取り専用のデータベースの口があればそちらでも構いませんが、本番のデータベースへ直接つなぐのは、問い合わせのたびに負荷をかけるので避けます。 夜の書き出しに加えて、受注残だけは問い合わせのたびに最新を取ります。
| 取るもの | どこから | 何に使うか |
|---|---|---|
| 過去2年分の受注と工程の実績 | 生産管理システムのCSV | 学習のデータ(受注から完成までの稼働日数) |
| 受注残と、工程ごとの残りの工数 | 生産管理システム(問い合わせのたびに最新) | 工程ごとの負荷の日数の特徴 |
| 工程の並びと標準の工数 | 生産管理システムの品目マスタ | 工程数・標準の工数の合計・外注の有無の特徴 |
| 材料の在庫と発注残 | 材料の一覧 | 材料の手配の要否と、入荷までの日数の特徴 |
| 稼働日のカレンダー | 生産管理課の表 | 稼働日数と日付の変換 |
学習のデータは、受注の時点に戻して作ります。 過去の受注について、その受注が入った日の受注残から工程ごとの負荷の日数を計算し直します。 今の受注残で過去の受注の負荷を作ると、見込むときには分からない情報で学習することになり、検証では当たるのに本番で外れます。
図面番号が初めての品目は、品目区分の標準の並びで代えます。 「架台・溶接・塗装あり」「機械加工のみ」のような区分ごとに、工程の並びと工数の目安を生産管理課が決めておきます。
AIへ渡す前に整形する
- 稼働日数に直す … 受注日から完成日までを、カレンダーの稼働日の数で数えます。暦の日数で学習すると、連休をまたいだ受注だけが長く見えます
- 負荷の日数を作る … 工程ごとに、受注の時点の受注残の工数を1日の能力で割ります
- 工程の特徴を作る … 工程数、標準の工数の合計、外注の工程の有無、塗装・溶接・機械加工を通るかの印
- 材料の特徴を作る … 在庫から出せるか、発注残があるか、新たに発注するか。発注残は入荷の予定日までの稼働日数
- 特殊な受注の印 … 顧客の都合で止めた受注、図面の変更でやり直した受注、棚卸や設備の故障で止まった期間に印を付けます
- 外注と出荷を分ける … 外注の工程の日数と出荷の日数は、モデルの外で過去の実績の中央値を足します
5番目の印を付けた受注は、学習から外さずに、印を特徴として残します。 外すと、止まった受注の多い品目区分だけが短く見えます。ただし見込むときには印を「無し」として出します。 顧客の都合で止まるかどうかは、受注の時点では分からないからです。
6番目で外注を分けるのは、外注先の混み具合が社内のデータに無いからです。 外注の日数まで1つのモデルで見込むと、社内の負荷で説明できない分が全部ばらつきに入り、90%点が広がりすぎます。
AIに処理させる
この構成の「AI」は、受注から完成までの社内の稼働日数の見込みだけです。 日付への変換、外注と出荷の足し算、遅れの判定は決まった規則で出します。
| 段 | させること | させないこと |
|---|---|---|
| 50%点の見込み | 社内の稼働日数の真ん中 | 顧客へ答える日付の決定 |
| 90%点の見込み | 社内の稼働日数の遅めの値 | 特急の割り込みの可否 |
| 納期の候補 | 90%点を標準、50%点を最短として日付に直す | 残業や外注の手配 |
| 遅れの判定 | 受注残の90%点の完成日と約束の納期の比べ | 生産計画の順番の入れ替え |
見込みには、LightGBM の objective="quantile" を使います。 alpha を0.5と0.9にした2つのモデルを作り、どちらも同じ特徴で学習します。欠けた値の扱いが組み込まれているので、初めての品目で過去の実績が無い列も、落とさずに見込めます。
評価には、scikit-learn の mean_pinball_loss を使います。 分位点回帰のための損失で、alpha を見込みと同じ0.5と0.9にして測ります。あわせて「実際の日数が90%点以下に収まった割合」を数えます。 90%点なら、9割前後に収まっていなければ、損失の値が小さくても使えません。
検証は時間の順で分けます。 scikit-learn の TimeSeriesSplit は、未来のデータで学習して過去を評価しないための分け方ですが、サンプルが等しい間隔で並んでいることを前提にしています。 受注は日によって件数がばらつくので、この構成では受注月で区切って、前の月までで学習し次の月で検証する分け方を自前で作ります。さらに、検証する月の直前1か月は学習から外します。検証する月の受注と完成が重なる期間の実績を、学習に混ぜないためです。
| 機械にさせないこと | 理由 |
|---|---|
| 顧客へ答える日付を決める | 顧客との関係と、特急の扱いを知らない |
| 生産計画の順番を入れ替える | 他の受注の納期と人の配置に関わる |
| 遅れの連絡を顧客へ送る | 連絡の言い方と代わりの案は営業が決める |
| 外注先の混み具合を推し量る | 社内のデータに無い |
1行目がいちばん起きやすい失敗です。 候補の日付が画面に出ると、営業はそのまま顧客へ答えたくなります。生産管理の確認を経ない日付で約束すると、特急が重なった月に、答えた納期がまとめて崩れます。
指示内容を固定する
この構成は生成AIを使わないため、指示は Python の設定ファイルに書きます。 何をどう見込み、どの規則で候補と遅れを出すかを、生産管理と営業が読める形で残すためです。
# 生産のリードタイムの見込みの設定(leadtime_forecast.yaml)
対象: 社内の工程(切断・曲げ・機械加工・溶接・塗装・組立・検査)
単位: 稼働日(生産管理課のカレンダー)
特徴:
- 品目区分, 数量, 材質
- 工程数, 標準の工数の合計, 外注の工程の有無
- 工程ごとの負荷の日数(受注の時点の受注残の工数 ÷ 1日の能力)
- 材料の手配(在庫/発注残/新規), 入荷の予定までの稼働日数
- 特急の印, 受注月
見込み:
50%点: {objective: quantile, alpha: 0.5}
90%点: {objective: quantile, alpha: 0.9}
向きの制約: {数量: +1, 標準の工数の合計: +1, 工程ごとの負荷の日数: +1}
学び直し: 四半期ごと(1月・4月・7月・10月)と、設備・人の配置の変更のあと
検証: 受注月で区切る。検証する月の直前1か月は学習から外す
評価: mean_pinball_loss(alpha=0.5, 0.9)と、90%点以下に収まった割合
納期の候補:
標準: 受注日 + 90%点 + 外注の日数(過去の中央値) + 出荷の日数
最短: 受注日 + 50%点 + 外注の日数 + 出荷の日数(「調整が要る」と必ず書く)
遅れるおそれ:
- 受注残ごとに、残りの工程で見込み直した90%点の完成日を出す
- 完成日 + 出荷の日数 が約束の納期を超えたら「おそれあり」
- 50%点でも超えたら「遅れの見込み」
守ること:
- 品目区分が未登録の問い合わせは見込まない。「区分の登録が必要」と返す
- 90%点が50%点を下回った行は、並べ替えずに印を付けて人に見せる
- 学習のデータに無い数量(過去の最大の2倍を超える)は印を付ける
- 結果を生産管理システムの納期の欄や工程の計画に書き込まない
「最短には必ず調整が要ると書く」が、営業の側の要です。 50%点は、半分の受注がそれより遅れる日数です。何の手当てもなしに答えれば、2件に1件は遅れの連絡をすることになります。 画面にも、最短の日付の横に同じ注意を出します。
「学習のデータに無い数量に印を付ける」は、木のモデルの性質への備えです。 木のモデルは学習した範囲の外へ伸びず、過去の最大の数倍の数量でも、最大の数量と同じくらいの日数を返します。 大口の受注ほど見込みが短く出るので、印で人に知らせます。
出力形式を固定する
問い合わせ1件ごとに、次の形のJSONと、それを一覧にした表で出します。
{
"inquiry_id": "Q-2026-1008-014",
"issued_at": "2026-10-08T10:12",
"model_version": "lt-2026Q4",
"item": { "drawing_no": "", "item_class": "架台・溶接・塗装あり", "qty": 0, "is_new_drawing": true },
"load_days": { "cutting": 0.0, "bending": 0.0, "machining": 0.0, "welding": 0.0, "painting": 0.0, "assembly": 0.0 },
"material": { "status": "in_stock | on_order | new_order", "days_to_arrival": 0 },
"forecast_workdays": { "p50": 0.0, "p90": 0.0 },
"outsourced_days": 0,
"shipping_days": 0,
"candidates": {
"standard_date": "2026-11-10",
"earliest_date": "2026-11-02",
"earliest_note": "調整が要る"
},
"flags": [],
"planner_decision": { "answer_date": "", "reason": "" }
}
load_days と forecast_workdays と candidates は Python が埋め、planner_decision は生産管理の担当が書きます。
1つ目の理由は、候補と決めた日付を同じ記録に並べられることです。 後で完成の実績が入ったときに、候補のままのほうが当たっていたのか、担当者が動かしたほうが当たっていたのかを比べられます。動かした理由が溜まれば、モデルに足すべき特徴が見えてきます。
2つ目は、load_days で、なぜその日数なのかを営業に説明できることです。 「溶接があと12日分詰まっている」と分かれば、営業は顧客に「溶接の少ない仕様なら早くできます」と別の案を出せます。
受注残の点検は、受注1件ごとに次の項目を一覧にします。
| 受注番号 | 約束の納期 | 今の工程 | 残りの工程 | 50%点の完成日 | 90%点の完成日 | 判定 |
|---|---|---|---|---|---|---|
| (例) | 11/14 | 溶接 | 塗装(外注)・組立・検査 | 11/10 | 11/17 | おそれあり |
判定の列は「遅れの見込み」「おそれあり」「間に合う見込み」の3つです。 一覧は判定の重い順、同じ判定の中では約束の納期の近い順に並べます。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 生産管理システム | 毎晩のCSVの書き出しと、受注残の読み取り(読み取りのみ) | 受注、工程の並び、工程ごとの実績、受注残 |
| 材料の一覧 | 読み取りのみ | 在庫、発注残、入荷の予定日 |
| 工程の能力の表・カレンダー | 読み取りのみ | 1日の能力、稼働日 |
| 営業の入力画面 | 社内のWebの画面 | 問い合わせの登録と、候補の表示 |
| 共有フォルダ・社内チャット | 書き込み | 確認待ちの一覧、毎朝の遅れるおそれのある受注の一覧 |
生産管理システムの納期の欄には書き込みません。 顧客へ答えた日付は、これまでどおり受注の登録のときに人が入れます。見込みの値が受注の納期の欄に入ると、見込みと約束の区別が無くなります。
社内チャットには、件数と一覧の置き場所だけを流します。 顧客名と納期の一覧そのものをチャットに貼ると、営業以外の人にも受注の状況が見えてしまうためです。
人が確認する
生産管理の担当は、問い合わせの候補を1件ずつ確かめてから営業へ返します。
- 印を先に見る … 未登録の品目区分、学習の範囲外の数量、90%点と50%点の逆転が無いかを見ます
- 負荷の日数を見る … 来週の休みや設備の保全の予定で、負荷の日数より詰まる工程が無いかを確かめます
- 特急と残業の予定を加える … 割り込ませる予定の特急、組んである残業や休日の稼働があれば、日付を動かします
- 回答の日付を決めて記録する …
planner_decisionに日付と理由を書き、営業の画面に返します
2番目を省かないでください。 モデルは受注残の工数と能力の表から負荷を見ますが、来週だけ溶接の職人が2人休む、といった予定は表に無い限り知りません。 その差を埋めるのが担当者の仕事です。
毎朝の遅れるおそれのある受注は、朝礼の前に生産管理が見て、営業に渡す受注を選びます。 工程の順番の入れ替えで間に合うものは生産管理の側で手を打ち、間に合わないと決めたものだけを営業に渡して、顧客への連絡を相談します。
目標は、ならして1件4分です。 印の無い問い合わせは負荷の日数を見て1〜2分で返し、特急が重なる問い合わせや遅れの見込みの受注は、工程の順番を考えるので10分前後かかります。
例外に対処する
| 起きること | 対応 |
|---|---|
| 品目区分が未登録の問い合わせ | 見込まずに「区分の登録が必要」と返し、生産管理が区分を付けてから出し直す |
| 過去の最大の2倍を超える数量 | 見込みは出すが印を付け、生産管理が工程ごとの工数から手で確かめる |
| 生産管理システムの書き出しが夜に失敗した | 前日の書き出しで見込み、一覧の冒頭に「受注残は前日の時点」と書く |
| 材料の入荷の予定日が空欄 | 「新規の発注」として扱い、購買に予定日を問い合わせる印を付ける |
| 外注先から遅れの連絡が来た | 外注の日数をその受注だけ手で上書きし、毎朝の見込み直しに反映する |
| 顧客の都合で止まった受注 | 受注残の点検から外し、再開の日から見込み直す |
| 90%点が50%点を下回った | 印を付けて人に見せる。並べ替えない |
| 図面の変更で工程がやり直しになった | やり直した工程から先を残りの工程として見込み直す |
上の2行は、運用の最初から起きます。 新しい形の品目と大口の受注は、営業がいちばん急いで答えを欲しがる問い合わせです。見込みが出ないことを隠さず、生産管理が手で確かめる流れに乗せます。
記録を残す
- 問い合わせの内容と登録の日時、見込みに使った受注残と材料の一覧のそのときの版
- 見込みの値(50%点と90%点)、工程ごとの負荷の日数、納期の候補、付いた印
- モデルの版、学習の期間、検証の結果(月ごとの
mean_pinball_lossと、90%点以下に収まった割合) - 生産管理が決めた回答の日付と理由(
planner_decision) - 毎朝の受注残の判定と、営業に渡した受注
- 完成の実績が入った後の、見込みと実際の日数の差
最後の行が、学び直しのいちばんの材料です。 90%点を超えた受注が特定の工程の組み合わせに偏っていれば、その工程の能力の表か、外注の日数の見積もりがずれているということです。
04実装レベルの3段階
半自動化だけでも、①と②の8分の大半が消えます。 3か所を見比べる作業が1枚にまとまるからです。ただし、何日と答えるかは、まだ担当者の勘所です。 本格構成で1件4分になり、この段階が本記事の想定です。 違いは、真ん中と遅めの2本の日数が出て、余裕の見方が数字でそろうことと、受注残の遅れが毎朝自動で拾われることです。 段階を飛ばさないでください。 半自動化の1枚を3か月使うと、負荷の日数と実際の待ちの長さが、担当者の目で結びつきます。 その感覚があるほうが、見込みの外れを正しく割り引けます。
05工数削減シミュレーション
導入後 300件 × 4分 ÷ 60 = 20 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 板金・機械加工・溶接・塗装などの工程を組み合わせる多品種少量の受注生産で、引き合いや受注のたびに営業が生産管理へ納期を問い合わせている工場。生産管理システムに受注・工程ごとの着手と完了の実績が2年分ほど残っている場合。工程の混み具合で納期が大きく動き、回答の基準が生産管理の担当者の経験に頼っている場合。鉄骨・建具・設備の部材など、現場の工程に合わせて製作の納期を答える建設向けの製作工場。
- 見込み生産で在庫から出荷する工場。品目が少なく工程が固定で、標準のリードタイム表で答えて外れない場合。工程ごとの着手と完了の実績が記録されておらず、受注日と出荷日しか残っていない場合(まず実績の記録から始める)。なお、顧客へ約束する納期の最終の判断、特急の割り込みの可否、残業や外注の手配の判断は、この構成では代替できません。
07最小構成で試す方法
- 過去1年に完成した受注から、品目区分の違うものを50件選ぶ
- 50件それぞれについて、受注日、完成日、通った工程、受注の時点で生産管理が答えた日付を書き出す
- 受注の時点の負荷表が残っていれば、工程ごとの詰まり具合も並べる
- 手元のAIサービスに表を貼り、「受注から完成までの日数が長かった受注に、どの工程と詰まり具合が共通しているかを見てください」と聞く
- 出てきた傾向を、生産管理の2人の勘所と比べる
この段階ではモデルを作りません。 確かめたいのは、完成までの日数の長短が、工程と受注の時点の詰まり具合で説明できるかです。
| 出てきた内容 | 判断 |
|---|---|
| 長かった受注に、溶接や塗装の詰まりが共通している | Python で工程ごとの負荷の日数を作り、見込みに進む |
| 長かった受注に、材料の取り寄せが共通している | 材料の発注残の取り込みを先に作る |
| 工程ごとの着手と完了の日付が残っていない | 見込むより、工程の実績の記録が先 |
3行目が出ることは珍しくありません。 失敗ではなく、どの工程で待っていたかを誰も記録していなかったことが分かったということです。現場の端末で着手と完了を入れる運用を3か月続けてから、同じ確かめをやり直してください。手元のAIサービスに貼るのは品目区分と日付と工程だけにし、顧客名や図面は貼りません。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 検証ではよく当たるのに本番で外れる | 今の受注残で過去の負荷を作っている。受注の時点に戻して作り直す |
| 連休をまたいだ受注だけ長く見込む | 暦の日数で学習している。稼働日数に直す |
| 大口の受注ほど短く見込む | 木のモデルは学習の範囲の外へ伸びない。範囲外の数量に印を付ける |
| 数量が多いほど早く上がる見込みが出る | monotone_constraints で増える向きの制約を付ける |
| 90%点の幅が広すぎて使えない | 外注の日数まで1つのモデルに入れている。外注と出荷はモデルの外で足す |
| 90%点を超える受注が1割を大きく超える | 能力の表が古い。人と設備の変更のたびに表を直し、学び直す |
| 営業が最短の日付で約束する | 最短の横に「調整が要る」を必ず出し、生産管理の確認を経てから返す |
| 毎朝の一覧を誰も見ていない | 件数だけをチャットに流し、判定の重い受注の数を朝礼で読み上げる |
| 初めての品目で見込みが出ない | 品目区分の標準の並びを先に作る |
| 見込みの値を受注の納期の欄に入れたくなる | 入れない。 約束の納期は人が入れる |
上の3行が、見込みの失敗のほとんどです。 どれも数字は出ているので動いているように見えます。月に一度の答え合わせで、90%点以下に収まった割合を出す仕組みが無いと、ずれに気づけません。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 受注の品目・数量・約束の納期、顧客ごとの受注の状況、工程の能力と稼働の予定。受注残の一覧からは、どの顧客からどれだけの仕事を受けているか、新しい製品の立ち上げの時期が読み取れます。
- 社外へ出さない … 学習も見込みも社内のパソコンかサーバーで終わります。外部のAPIへ受注や顧客の情報を送らない構成にします
- 生産管理システムに書き込まない … 見込みは回答の材料です。納期の欄と工程の計画は、これまでどおり人が入れます
- 顧客へ答える日付は人が決める … 候補の日付をそのまま顧客へ送る経路を作りません。生産管理の確認と、営業の判断を必ず通します
- 一覧の見せ方を分ける … 営業には担当の顧客の受注だけを見せ、工場全体の受注残の一覧は生産管理課の中に置きます
- 見込みと回答と実績の記録を残す … 遅れたときに、どの見込みでどう答え、どこで遅れたのかを説明できるようにします
誤りが起きた場合のリスクは、短すぎる見込みで約束して遅れることと、長すぎる見込みで受注を逃すことの2つです。 前者は90%点を標準にすることと生産管理の確認で、後者は最短の日付と負荷の日数を営業に見せることで防ぎます。
10まず何から始めるか
1週目:工程の実績がそろっているかを確かめる
生産管理システムから過去2年分の受注と工程の実績を書き出し、工程ごとの着手日と完了日がどれだけ埋まっているかを数えます。欠けの多い工程を一覧にします。
2週目:50件で長くなった理由を見る
品目区分の違う50件について、受注日・完成日・工程・答えた日付を並べ、生産管理の2人の勘所と照らします。
3週目:品目区分と工程の能力の表を作る
生産管理課で、品目区分ごとの標準の工程の並びと、工程ごとの1日の能力を表にします。稼働日のカレンダーも同じ表にそろえます。
4週目:問い合わせの1枚をそろえる
Python で、問い合わせのたびに工程の並び・工程ごとの負荷の日数・材料の状況を1枚にそろえるところまで作ります。この時点では日数を見込まず、生産管理の担当が1枚を見て答えます。
2か月目: 過去の受注の時点の負荷を作り直し、50%点と90%点の見込みを出して、受注月で区切って検証します。3か月目以降: 毎朝の受注残の見込み直しと遅れるおそれのある受注の一覧を足し、月に一度の答え合わせを始めます。90%点以下に収まった割合が3か月続けて9割前後に落ち着いた時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
目的の関数 objective の選択肢に quantile(分位点回帰)があること。alpha が Huber 損失と分位点回帰にだけ使われ、既定が0.9で0より大きい値であること。monotone_constraints で特徴ごとに増える向き(1)・減る向き(-1)・制約なし(0)を指定できること。欠けた値の扱い(use_missing・zero_as_missing)があること | LightGBM: Parameters | 2026-10-08 |
mean_pinball_loss が分位点回帰のための損失(pinball loss)であり、alpha で傾きを指定し既定が0.5であること。最良の値が0.0であること | scikit-learn: mean_pinball_loss | 2026-10-08 |
TimeSeriesSplit が時間順のデータの分け方で、未来のデータで学習して過去を評価しないようにすること。比べられる評価のためにサンプルが等しい間隔で並んでいることを前提にすること。gap で学習用の末尾と検証用の間を空けられること | scikit-learn: TimeSeriesSplit | 2026-10-08 |
顧客へ答える納期と、特急の割り込みや残業・外注の手配は、生産管理と営業の判断で決めてください。 本記事は製品の公開ドキュメントで確認できた範囲だけを扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-0938)についてのご相談はこちらから。
