物流倉庫の翌週の荷主別・工程別の出荷作業量を、入っている受注の積み上がりと販促の予定・曜日の傾向から見込み、ピッキングと梱包の人員配置案を出す
複数の荷主の出荷を請け負う倉庫で、翌週の日別・荷主別のピッキング行数と梱包件数を、予測の時点ですでに入っている受注の積み上がりと販促の予定・曜日の傾向から幅付きで見込み、荷主のエリアごと・時間帯ごとの人員配置案と派遣の依頼数の案を出します。
- 連携・自動化
- Python
- 対象業界
- EC/小売/物流
- 対象部門
- 物流
- 対象業務
- 書類作成/集計・分析
- 主な課題
- 人手が足りない/判断に時間がかかる/属人化している
- AIで行う処理
- 予測
- 主な効果
- 判断支援/属人化解消/工数削減
- 導入難易度
- ★★★★★
- 実装レベル
- 本格構成
- 費用感
- 個別開発(大)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 管理者が倉庫管理システムから、担当する荷主の前週と前年の同じ週の出荷実績を書き出す
- 荷主から届いた販促の連絡(セールの期間、チラシ、新商品)を読み、どの日にどれくらい増えるかを考える
- 倉庫管理システムで、翌週の日付ですでに入っている受注の件数を見る
- 日ごとの件数を置き、過去の生産性の目安で、ピッキングと梱包の人数に直す
- 配置案をセンター長に出す
- センター長が10社分を並べ、余るエリアから足りないエリアへの応援を決め、残りを派遣の依頼数にする
- 人荷主のエリアの管理者が、荷主から届いた販促の連絡を、販促の表に決まった列で入れる(水曜まで)
- 自動木曜の朝6時に、倉庫管理システムから出荷と作業の実績、翌週の日付で入っている受注を書き出す
- 自動Python のプログラムが、荷主別・日別・工程別に、翌週の作業量の中央の見込み(P50)と多めの見込み(P80)を出す
- 自動工程別の生産性で人時に直し、集荷便の時刻から午前と午後に分けて、荷主のエリアごとの必要人数を出す
- 自動シフトに入っている作業者の人数と並べ、エリアごとの過不足、応援の候補、派遣の依頼数の案を出す
- 人管理者が自分の荷主の見込みと配置案を確かめ、理由があれば数字を直す
- 人センター長が応援と派遣の依頼数を決め、17時までに派遣会社へ依頼する
各工程の詳しい説明を読む
- 管理者が倉庫管理システムから、担当する荷主の前週と前年の同じ週の出荷実績を書き出す
- 荷主から届いた販促の連絡(セールの期間、チラシ、新商品)を読み、どの日にどれくらい増えるかを考える
- 倉庫管理システムで、翌週の日付ですでに入っている受注の件数を見る
- 日ごとの件数を置き、過去の生産性の目安で、ピッキングと梱包の人数に直す
- 配置案をセンター長に出す
- センター長が10社分を並べ、余るエリアから足りないエリアへの応援を決め、残りを派遣の依頼数にする
(a)件数の置き方が管理者ごとに違う。 ある管理者は前週に合わせ、別の管理者は前年に合わせます。販促の連絡を何倍と読むかも、その人の経験です。 担当が替わると、同じ荷主の配置案の当たり方が変わります。
(b)入っている受注を使いきれていない。 3番目で受注の件数を見ても、それが締めまでに何倍になるかの目安が無いので、結局は前週の実績に戻ります。 予約の多い荷主ほど、木曜の時点の受注は大事な手がかりなのに使われていません。
(c)行数と件数を区別していない。 人数に直すとき、件数に1人あたりの件数を掛けて済ませています。同じ荷主でも、店舗配送の週は1件の行数が増え、ピッキングだけが足りなくなります。
(d)外れた理由が残らない。 翌週に実績が出ても、置いた数字と実績を並べて見る人はいません。販促を多めに読みすぎたのか、受注の伸びを見落としたのかが分からないまま、次の週の数字を置きます。
(e)応援が木曜の夕方に決まる。 センター長が10社分を並べるのは派遣の締めの直前で、エリアのあいだの応援を考える時間がありません。 余っているエリアがあるのに、足りないエリアの分を派遣で埋めることがあります。
- 【人】 荷主のエリアの管理者が、荷主から届いた販促の連絡を、販促の表に決まった列で入れる(水曜まで)
- 【自動】 木曜の朝6時に、倉庫管理システムから出荷と作業の実績、翌週の日付で入っている受注を書き出す
- 【自動】 Python のプログラムが、荷主別・日別・工程別に、翌週の作業量の中央の見込み(P50)と多めの見込み(P80)を出す
- 【自動】 工程別の生産性で人時に直し、集荷便の時刻から午前と午後に分けて、荷主のエリアごとの必要人数を出す
- 【自動】 シフトに入っている作業者の人数と並べ、エリアごとの過不足、応援の候補、派遣の依頼数の案を出す
- 【人】 管理者が自分の荷主の見込みと配置案を確かめ、理由があれば数字を直す
- 【人】 センター長が応援と派遣の依頼数を決め、17時までに派遣会社へ依頼する
6番目で人が直すのは、プログラムが知らない事情があるときだけです。 たとえば荷主から「来週の水曜に大口の店舗の改装が終わる」と電話で聞いていれば、それは販促の表にも受注にもまだありません。直した数字と理由は記録に残し、次の学習で使います。
1番目の販促の表が、人に残る唯一の入力です。 荷主からの連絡を決まった列に置き直す作業で、ここを省くと販促の週の見込みが前週の延長になります。 入力が終わっていない荷主は、木曜の朝の配置案に印が付きます。
7番目の派遣の依頼数を自動で確定させないのは、幅のどこで決めるかが判断だからです。 P50で頼めば人件費は抑えられますが、半分の日は足りません。P80で頼めば足りない日は減りますが、余る日の人件費がかかります。どちらを重く見るかは、荷主との出荷の約束と、その週の事情で決まります。
02今回想定するシステム構成
倉庫管理システム(出荷・作業の実績、翌週の受注) 販促の表(荷主ごと)/祝日のCSV/シフト │ ▼【トリガー】毎週木曜 6:00 Python(pandas)── 荷主別・日別・工程別の表にそろえる │ 受注の積み上がり(D-4 時点の入っている量)を特徴量に ▼ LightGBM(分位点回帰)── P50 と P80 の作業量 ▼ Python ── 工程別の生産性で人時に、集荷便の時刻で午前・午後に ▼ Python ── シフトと並べて過不足、応援の候補、派遣の依頼数の案 ▼ 配置案(共有フォルダ)──▶ 管理者の確認 ──▶ センター長が依頼数を決める
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| 実行環境 | Python(pandas・LightGBM・scikit-learn) | R |
| 処理エンジン | LightGBM(分位点回帰。P50とP80) | scikit-learn の HistGradientBoostingRegressor |
| 集計 | Python(人時への換算、午前・午後への按分、過不足の計算) | ― |
| データの取得元 | 倉庫管理システムの書き出し(出荷・作業の実績と受注) | 倉庫管理システムのAPI |
| 販促の入力 | 荷主ごとの販促の表(共有の表) | ― |
| 結果の出力先 | 配置案のファイル(共有フォルダ) | シフトの仕組みへの取り込み |
倉庫管理システムとシフトの仕組みには、書き込みません。 配置案は共有フォルダに置き、作業者の配置は管理者がこれまでどおりシフトの仕組みで行います。予測が外れても、現場の作業は止まりません。
予測には LightGBM の分位点回帰を使います。 LightGBM の公式のドキュメントでは、objective に quantile(Quantile regression)を選べ、alpha は Huber 損失と分位点回帰で使うパラメータで既定は0.9です。P50 は alpha=0.5、P80 は alpha=0.8 で、2つのモデルを別に学習します。
荷主は、カテゴリの特徴量として1つのモデルに入れます。 公式のドキュメントでは categorical_feature でカテゴリの列を指定でき、Python パッケージでは pandas のカテゴリから整数の符号を取り出すとされています。荷主ごとに別のモデルを作ると、販促の少ない荷主のモデルが販促の週を学べません。 1つのモデルにすると、ほかの荷主の販促の週から学べます。
03どうやって実装するのか
処理の起点を決める
毎週木曜の朝6時に動かします。 派遣会社への依頼の締めが木曜の17時で、管理者の確認とセンター長の判断に半日以上を残すためです。倉庫管理システムの前日分の締め処理が終わった後の時刻にします。
販促の表の締めは、前日の水曜の18時です。 木曜の朝に販促が入っていない荷主は、「販促なし」として予測します。入力が遅れた販促は、6番目の管理者の確認で数字を直して記録に残します。
動かす場所は、倉庫管理システムの書き出しを置く社内のサーバーで足ります。 予測のプログラムは定時の実行の仕組みから呼び、終わったら配置案のファイルの置き場所を管理者に知らせます。 失敗したときの知らせも同じ経路で送り、木曜の朝に誰も気づかないまま締めを迎えることを防ぎます。
月曜の朝にも、同じ予測をもう一度動かします。 木曜から月曜までに入った受注で見込みが変わったかを見て、今週の残りの日の応援を組み直す材料にします。 派遣の依頼は木曜に済んでいるので、月曜の予測は応援の組み直しだけに使います。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 出荷の実績 | 出荷日、荷主、出荷件数、ピッキング行数、ピース数、締め時刻ごとの件数 | 倉庫管理システム(過去3年) |
| 受注の積み上がり | 出荷予定日ごとに、各日の時点で入っていた件数と行数(D-7〜D-1 の日次の記録) | 倉庫管理システムの受注の取り込み記録 |
| 作業の実績 | 作業者、工程(ピッキング・梱包)、荷主、処理した行数・件数、作業時間 | 倉庫管理システム |
| 販促の表 | 荷主、期間、種類(セール・チラシ・テレビ・新商品・店舗の改装)、対象の商品数、荷主が見込む規模(大・中・小) | 荷主のエリアの管理者が入力 |
| 祝日 | 国民の祝日と休日 | 内閣府の祝日のCSV |
| 集荷便の時刻 | 荷主ごとの運送会社の集荷時刻と、締め時刻ごとの件数の割合 | 荷主との取り決め |
| シフト | 翌週の作業者ごとの出勤予定、担当の荷主、応援に出られる工程 | シフトの仕組み |
質を決めるのは、受注の積み上がりの記録です。 倉庫管理システムは、出荷が終わった後の件数は残しますが、「出荷の4日前の時点で何件入っていたか」は、日々の記録を取っておかないと残りません。 この記録が無ければ、構成の中心が使えません。最初の作業は、毎朝、出荷予定日ごとの受注の件数と行数を書き出して貯めることです。
販促の表は、列を決めて自由記述を減らします。 荷主からの連絡は「来週から秋の大感謝祭」「チラシは水曜の朝刊」のような文で届きます。管理者はそれを、期間・種類・対象の商品数・規模(大・中・小)の4つの列に置き直して入れます。規模は荷主の見込みをそのまま写すのではなく、前回の同じ種類の販促で作業量が何倍になったかの実績から、大・中・小の区切りを決めておきます。 区切りが決まっていれば、管理者が替わっても同じ販促が同じ規模で入ります。
祝日は内閣府のCSVから取ります。 内閣府のページでは、昭和30年(1955年)から令和9年(2027年)までの国民の祝日をCSV形式で公開しており、令和10年(2028年)の分は前年の2月に掲載するとされています。毎年2月に取り直す予定を、運用の手順に書きます。
データの取得方法を決める
| 取るもの | どこから | 何に使うか |
|---|---|---|
| 出荷と作業の実績(前日分) | 倉庫管理システムの定時の書き出し(CSV) | 学習のデータ、生産性の計算 |
| 出荷予定日ごとの受注の件数と行数 | 毎朝の書き出しを日付ごとに保存 | 受注の積み上がりの特徴量 |
| 販促の表 | 共有の表の読み取り | 販促の特徴量 |
| 祝日 | 内閣府のCSV(年に1回) | 祝日と連休の特徴量 |
| シフト | シフトの仕組みの書き出し | 過不足の計算 |
受注の積み上がりは、毎朝同じ時刻に書き出します。 荷主からの受注の取り込みは1日に何度も行われるので、書き出す時刻がずれると、同じ「D-4」でも入っている量が変わります。 学習のデータと本番の予測で同じ時刻の値を使うため、木曜の予測を動かす6時の直前に、毎日書き出すようにします。
午前・午後の割合は、締め時刻ごとの出荷件数から出します。 集荷便が11時と15時の荷主なら、11時の締めまでに出した件数の割合が午前の作業量の割合になります。割合は直近8週の同じ曜日で取ります。 月曜は週末の受注がまとまって午前に偏るなど、曜日で割合が違うためです。
生産性は、作業の実績から荷主別・工程別に計算します。 ピッキングは「行数 ÷ 作業時間」、梱包は「件数 ÷ 作業時間」で、直近8週の中央値を使います。 平均にすると、新人の多い週や機器が止まった日に引っ張られます。
AIへ渡す前に整形する
- 予測の単位にそろえる … 荷主 × 出荷日 × 工程の表にします。ピッキングは行数、梱包は件数を目的の値にします
- 受注の積み上がりを取り出す … 出荷日ごとに、4日前(D-4)の時点で入っていた行数と件数を特徴量にします。木曜の朝に翌週の月曜〜土曜を予測するとき、月曜はD-4、土曜はD-9になるので、出荷日ごとに予測の時点の積み上がりを使います
- 曜日と祝日を付ける … 曜日、祝日、祝日の前後、連休の何日目か、月末かを付けます
- 販促を付ける … 販促の期間に入る日に、種類と規模の印を付けます。期間の初日と2日目を分けます。 通販の販促は初日に集中するためです
- 過去の水準を付ける … 前週の同じ曜日の実績と、前年の同じ週の同じ曜日の実績を付けます。前週の値は、予測の時点で分かっている値だけを使います
- 異常な日を印にする … 倉庫の停電、システムの障害、台風で集荷が止まった日は、印を付けて学習から外します
2番目と5番目が、いちばん間違えやすい工程です。 学習のときに、予測の時点ではまだ分かっていない値(たとえば出荷日の前日の受注)を特徴量に入れると、学習では当たるのに、本番では外れるモデルができます。特徴量はすべて「予測を動かす木曜の朝の時点で分かっている値」だけにします。
AIに処理させる
させるのは、荷主別・日別・工程別の作業量の P50 と P80 を出すことだけです。 人時への換算、午前・午後への按分、過不足の計算は、プログラムの式で行います。
| 予測すること | 単位 | 主な手がかり |
|---|---|---|
| ピッキングの作業量 | 荷主 × 出荷日の行数 | 受注の積み上がりの行数、販促、曜日、前年の同じ週 |
| 梱包の作業量 | 荷主 × 出荷日の件数 | 受注の積み上がりの件数、販促、曜日、前年の同じ週 |
予測の後の計算は、すべて式で書きます。
| 計算 | 式 |
|---|---|
| 必要な人時 | 予測の作業量 ÷ 荷主別・工程別の生産性 |
| 午前・午後の人時 | 必要な人時 × 締め時刻ごとの件数の割合(直近8週) |
| 必要な人数 | 午前・午後の人時 ÷ 1人あたりの実働時間 |
| 過不足 | 必要な人数 - シフトに入っている人数 |
| 応援の候補 | 過不足がプラスのエリアの、応援に出られる工程の作業者 |
| 派遣の依頼数の案 | 応援で埋まらない不足を、P50 と P80 の両方で出す |
| させないこと | 理由 |
|---|---|
| 派遣の依頼数の確定 | P50 と P80 のどちらで頼むかは、荷主との約束とその週の事情で人が決める |
| 作業者の配置の決定 | 作業者の得手不得手と体調は、管理者が知っている |
| 生産性の推定 | 実績の中央値を式で使う。モデルに混ぜない |
| 販促の規模の読み替え | 荷主の連絡を何倍と読むかは、管理者が表に入れた区分で扱う |
受注の積み上がりには、増える向きの制約を付けます。 LightGBM の公式のドキュメントでは、monotone_constraints で特徴量ごとに単調の制約を付けられ、1は増加、-1は減少、0は制約なしで、すべての特徴量について順に指定するとされています。入っている受注が多いほど最終の作業量も多い、という当たり前の関係を制約にしておくと、データの少ない荷主で、入っている受注が増えたのに見込みが下がる、という逆転を防げます。
3行目を分けているのは、直す場所を分けるためです。 作業量の予測と生産性を1つのモデルに入れると、人数が外れたときに、予測が外れたのか、生産性が変わったのかが分からなくなります。 新しい作業者が多い週は生産性が下がりますが、それは作業量の予測の誤りではありません。
指示内容を固定する
この構成では生成AIを使いません。AIへの指示に当たるのは、学習と予測のパラメータの設定です。 次はその骨組みの例です。
【予測の対象】
荷主 × 出荷日 × 工程(picking: 行数 / packing: 件数)
【モデル】
LightGBM(LGBMRegressor)を工程ごとに2本ずつ
objective = "quantile", alpha = 0.5 … P50(中央の見込み)
objective = "quantile", alpha = 0.8 … P80(多めの見込み)
categorical_feature = 荷主, 曜日, 販促の種類, 販促の規模
【特徴量(すべて予測の時点で分かっている値)】
受注の積み上がり:出荷日ごとの予測時点の行数・件数、予測時点から出荷日までの日数
暦:曜日、祝日、祝日の前後、連休の何日目か、月末
販促:種類、規模、期間の何日目か
過去の水準:前週の同じ曜日、前年の同じ週の同じ曜日
【検証】
時系列の分割(TimeSeriesSplit, n_splits=5, gap=7)
評価:mean_pinball_loss(alpha=0.5 と 0.8)と、
前週の同じ曜日をそのまま使った場合との比較
【出したあとの決まり】
P80 が P50 を下回る日は、P80 = P50 に直して印を付ける
P50 が受注の積み上がりを下回る日は、P50 = 積み上がりに直して印を付ける
検証に gap=7 を入れるのは、予測の時点と出荷日のあいだの空白をまねるためです。 scikit-learn の公式のドキュメントでは、TimeSeriesSplit の gap は各学習の集合の末尾から、テストの集合の前に除くサンプルの数で、バージョン0.24で加わったとされています。空白を入れずに検証すると、翌日の値で当てたことになり、本番より甘い評価になります。
最後の2行は、分位点回帰の性質への備えです。 P50 と P80 は別々に学習するので、まれに P80 が P50 を下回る日が出ます。 また、入っている受注より少ない見込みは、事実と食い違います。どちらも直してから使い、直した日は管理者に見えるよう印を付けます。
出力形式を固定する
配置案は、荷主のエリアごとに次の形の表で出します。
| 列 | 中身 |
|---|---|
| 出荷日・荷主・工程 | 1行の単位 |
| 入っている受注 | 予測の時点の行数または件数 |
| P50・P80 の作業量 | 予測の値と、直した印 |
| 必要な人数(午前・午後) | P50 と P80 の両方 |
| シフトの人数 | 翌週の出勤予定 |
| 過不足 | P50 と P80 の両方 |
| 応援の候補 | 余っているエリアと工程、人数 |
| 派遣の依頼数の案 | P50 と P80 の両方 |
| 管理者の修正と理由 | 空欄で出し、管理者が書く |
例として、ある通販の荷主の梱包の工程は次のように並びます(数字は説明のための例です)。
出荷日 荷主 工程 入っている受注 P50 P80 必要人数(午前/午後 P50) シフト 過不足(P50/P80)
10/19 A社 梱包 1,420件 2,050 2,380 9 / 6 14 +1 / -1
10/20 A社 梱包 1,180件 2,210 2,890 10 / 6 14 +2 / -3 ※販促初日
1つ目の理由は、P50 と P80 を並べて見せることです。 1つの数字だけを出すと、管理者はその数字が確かなものとして読みます。2つ並べると、その日がどれだけぶれうるかが見えます。 差が大きい日は、販促の初日や連休明けで、管理者が気をつける日です。
2つ目は、入っている受注を並べることです。 「入っている受注が P50 の8割」の日と「3割」の日では、見込みの確からしさが違います。管理者は、この列を見て直すかどうかを決めます。
3つ目は、修正の列を最初から用意しておくことです。 管理者が直した数字と理由は、翌週の学習の後で、直した日の方が当たっていたかを確かめる材料になります。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 倉庫管理システム | 定時の書き出し(CSV) | 出荷と作業の実績、受注の積み上がり |
| 販促の表 | 共有の表の読み取り | 荷主の販促の予定 |
| 内閣府の祝日のCSV | 年に1回の取得 | 祝日と休日 |
| シフトの仕組み | 書き出しの読み取り | 翌週の出勤予定 |
| 共有フォルダ | 配置案のファイルの保存 | 管理者とセンター長が確かめる |
| 派遣会社 | これまでの依頼の様式 | センター長が決めた数を人が依頼する |
派遣会社への依頼は、自動で送りません。 依頼の数は人件費と荷主への約束に直結します。配置案の「派遣の依頼数の案」は、センター長が決めるための材料です。
人が確認する
- 管理者が自分の荷主を見る … P50 と P80 の差が大きい日、直した印のある日、入っている受注の割合が小さい日を先に見ます
- プログラムが知らない事情を足す … 荷主から電話で聞いた予定や、販促の表に入れ忘れた販促があれば、数字を直して理由を書きます
- センター長が応援を決める … 応援の候補から、作業者の得手不得手を踏まえて決めます
- センター長が派遣の依頼数を決める … P50 と P80 のあいだのどこで頼むかを、荷主ごとの出荷の約束で決めます
直すときは、作業量の側を直します。 人数の列を直接書き換えると、直した理由が「作業量が増えるから」なのか「新人が多いから」なのかが記録に残りません。作業量を直せば人数は式で付いてくるので、理由の区別が残ります。
目標は、1件30分です。 1つの荷主について、予測の表を読んで数日分を直し、配置案を確かめる時間です。販促の週や連休の前後は30分を超えます。
例外に対処する
| 起きること | 対応 |
|---|---|
| 倉庫管理システムの書き出しが遅れた | 6時の時点で前日分が無ければ1時間後に再実行。9時までに無ければ前週の配置案を出して印を付ける |
| 新しい荷主で実績が8週に満たない | 予測を出さず「実績不足」とし、管理者が置く。荷主の見込みを販促の表に入れてもらう |
| 販促の表が空の荷主 | 「販促なし」として予測し、表の未入力を管理者に知らせる |
| 過去に無い規模の販促 | 学習の範囲の外。P80 の印を付け、管理者が直す |
| 祝日のCSVに翌年が無い | 毎年2月に取り直す。取り直していなければ予測を止める |
| 台風などで集荷が止まる予報 | 予測は変えず、管理者が判断して直す |
| 生産性の計算に使う実績が少ない工程 | 倉庫全体の同じ工程の中央値で代える |
| 荷主が出荷の締め時刻を変えた | 午前・午後の割合を直近8週で取り直せないので、新しい時刻の分だけ管理者が割合を置く |
| 予測のプログラムが失敗した | 失敗の知らせを管理者に送り、前週の配置案に印を付けて出す |
2行目の新しい荷主は、毎年必ず出てきます。 実績が無いうちに予測を出すと、似た荷主の傾向を当てはめた数字になります。8週分の実績がたまるまでは、管理者が置いた数字を配置案に入れ、予測は参考として並べます。
記録を残す
- 予測を動かした日時、使ったデータの範囲、モデルの版とパラメータ
- 荷主別・日別・工程別の P50・P80 と、直した印
- 管理者の修正と理由、センター長が決めた応援と派遣の依頼数
- 翌週の実績と、P50・P80・管理者の修正のそれぞれとの差
- 検証の評価(pinball 損失)と、前週の同じ曜日をそのまま使った場合との比較
4つ目が、この構成を育てる記録です。 毎週、実績が出たところで、予測と管理者の修正のどちらが近かったかを荷主ごとに数えます。 管理者の修正の方がいつも近い荷主は、プログラムが知らない事情があるので、販促の表の列を足す材料になります。
04実装レベルの3段階
段階を飛ばさないでください。 半自動化の予測を1か月出して実績と並べると、予測が当たる荷主と当たらない荷主が先に分かります。 当たらない荷主は、販促の表の入れ方か、受注の取り込みの時刻に問題があることが多く、そこを直してから人数への換算に進むと配置案の空振りが減ります。 最小構成は、手がかりを確かめるための段階です。 10社分の工程別の予測は、画面への貼り付けでは回りません。 半自動化で、1件105分が50分程度になります。 件数を置くまでの80分は短くなりますが、人数への換算と、センター長の応援と派遣の判断の材料作りが残ります。本格構成で30分になり、この段階が本記事の想定です。
05工数削減シミュレーション
導入後 40件 × 30分 ÷ 60 = 20 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 1つの倉庫で複数の荷主(EC・通販・小売の店舗配送)の出荷を請け負い、荷主ごとにエリアと作業者を分けている物流会社。翌週の人員配置を荷主ごとの管理者が前週の実績と勘で決めていて、販促の週に人が足りなくなったり、空いた週に派遣を断りきれなかったりしている場合。倉庫管理システムから出荷と作業の実績を日別・荷主別・工程別に書き出せ、予約の受注が前もって入る荷主がいる場合。
- 荷主が1社で、出荷の量が季節以外でほとんど動かない場合。倉庫管理システムに作業の実績(誰が何行をピッキングしたか)が残っておらず、工程別の生産性が出せない場合(まず作業の実績を取るのが先です)。なお、派遣の依頼数の確定、作業者の配置の決定、荷主との出荷の締め時刻や料金の取り決めは、この構成では代替できません。
07最小構成で試す方法
- 予約の受注が多い荷主を1社選び、過去1年の日別の出荷実績を書き出す
- 毎朝、翌週の出荷予定日ごとの受注の件数を書き出して、4週間貯める
- 社内で認められた生成AIの画面に、過去の実績と販促の予定と入っている受注を貼り、「翌週の日別の出荷件数の中央の見込みと多めの見込みを、入っている受注を下回らないように出してください」と指示する
- 翌週の実績と、生成AIの見込みと、管理者が置いた数字を並べる
この段階は、見込みを当てるためではありません。 確かめるのは、入っている受注の積み上がりが、最終の件数の手がかりになるかです。
| 出てきた内容 | 判断 |
|---|---|
| 入っている受注を使った見込みが管理者の数字より近い | 学習のデータを整えて本格的な予測に進む |
| 管理者の数字と同じくらい | 荷主を替えて試す。予約の少ない荷主には向かない |
| 受注の積み上がりの記録が貯まらない | 書き出しの仕組みを先に作る |
1社で試すときも、管理者の数字は先に書いておいてもらいます。 生成AIの見込みを見てから数字を置くと、どちらが近かったかを比べられません。
3行目は珍しくありません。 倉庫管理システムが受注を出荷予定日で上書きし、途中の件数を残さない作りのことがあります。その場合は、毎朝の書き出しを保存する仕組みを先に作ります。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 検証では当たるのに本番で外れる | 特徴量を予測の時点で分かる値だけにする。 検証に gap を入れる |
| 受注の積み上がりの記録が無い | 毎朝の書き出しを貯める仕組みを先に作る |
| P80 が P50 を下回る日がある | 別々に学習するため。直して印を付ける |
| 見込みが入っている受注を下回る | 受注の値まで引き上げて印を付ける |
| 件数で人数を出してピッキングが足りない | ピッキングは行数、梱包は件数で予測する |
| 生産性が新人の多い週に引っ張られる | 直近8週の中央値を使う |
| 予測と生産性の誤りが区別できない | 生産性はモデルに混ぜず、式で使う |
| 新しい荷主の予測が出せない | 8週分の実績がたまるまでは管理者が置く |
| 販促の表が入らない | 水曜の締めを決め、未入力を知らせる |
| 祝日のCSVに翌年が無い | 毎年2月に取り直す |
| 派遣の依頼を自動で送りたくなる | 依頼数はセンター長が決める |
| データの少ない荷主で見込みが逆転する | 受注の積み上がりに増加の単調の制約を付ける |
| 受注の書き出しの時刻が日によってずれる | 毎朝同じ時刻に書き出し、学習と本番で同じ時刻の値を使う |
上の2行が、この構成の失敗のほとんどです。 どちらも、予測の時点で何が分かっているかを正しく扱えていないことから起きます。木曜の朝6時に何が分かっているかを、データの1列ずつについて確かめてください。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 荷主ごとの出荷の件数と商品の行数、販促の予定、作業者ごとの作業の実績と出勤予定です。販促の予定は、荷主にとって公表前の営業の情報です。
- 荷主の情報を荷主の外に出さない … 1つのモデルに10社のデータを入れますが、配置案のファイルは荷主のエリアの管理者が自分の荷主の分だけを読める形にします。 他の荷主の販促の予定が見えないようにします
- 荷主との契約を確かめる … 出荷の実績と販促の予定を予測に使うことが、荷主との秘密保持の取り決めの範囲かを確かめてから始めます
- 作業者を評価する道具にしない … 生産性は荷主別・工程別の中央値だけを使い、作業者ごとの生産性を配置案に出しません
- 最小構成で外部の生成AIに貼るデータを絞る … 試すときは、荷主の名前を記号に置き換え、販促の内容は種類と規模だけにします
- 派遣の依頼と配置を自動にしない … 人件費と荷主への約束に直結します。決めるのはセンター長と管理者です
- 配置案と記録の保存先を絞る … 予測と修正の記録は、センター長と管理者だけが読める場所に置きます
- 荷主との契約が終わったときの扱いを決める … 契約を終えた荷主の実績を学習に残すかを、契約の取り決めに合わせて決めます。残さない場合は、その荷主の行を学習のデータから消して学習し直します
誤りが起きた場合のリスクは、人が足りずに出荷が遅れることと、人が余って人件費がかかることの2つです。 どちらも、P50 と P80 を並べて人が決めること、外れ方を毎週数えて直すことで小さくします。
10まず何から始めるか
1週目:受注の積み上がりを貯め始める
毎朝、出荷予定日ごとに入っている受注の件数と行数を書き出して保存する仕組みを作ります。これが無いと構成の中心が使えないので、何より先に始めます。 あわせて、荷主ごとの集荷便の時刻と締め時刻の一覧を作ります。
2週目:販促の表と生産性の集計を作る
荷主のエリアの管理者3名で、販促の表の列(期間・種類・対象の商品数・規模)を決めます。倉庫管理システムの作業の実績から、荷主別・工程別の生産性の直近8週の中央値を出します。
3週目:1社で試す
予約の受注が多い荷主を1社選び、最小構成で見込みを出して、管理者の数字と並べます。入っている受注が手がかりになるかを確かめます。
4週目:Python で P50 と P80 を出す
過去3年の実績で LightGBM の分位点回帰を学習し、gap を入れた時系列の分割で検証します。前週の同じ曜日をそのまま使った場合より pinball 損失が小さいかを、荷主ごとに確かめます。
2か月目: 人数への換算、午前・午後、過不足、応援の候補を足し、配置案として管理者に見てもらいます。3か月目以降: 派遣の依頼数の案を足し、1件105分が何分になったかを実測します。毎週の実績で予測と管理者の修正のどちらが近かったかを数え、修正の理由が販促の表の列に吸い上げられた時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
objective に quantile(Quantile regression)を選べること。alpha が Huber 損失と分位点回帰で使うパラメータで既定が0.9であること。categorical_feature でカテゴリの列を指定でき、Python パッケージでは pandas のカテゴリから整数の符号を取り出すこと。monotone_constraints で1が増加・-1が減少・0が制約なしの単調の制約を付けられること | LightGBM: Parameters | 2026-10-13 |
TimeSeriesSplit が時系列の順のデータを分割すること。gap が各学習の集合の末尾からテストの集合の前に除くサンプルの数で、バージョン0.24で加わったこと | scikit-learn: TimeSeriesSplit | 2026-10-13 |
mean_pinball_loss の alpha が pinball 損失の傾きで、既定が0.5(平均絶対誤差と同じ)であること | scikit-learn: mean_pinball_loss | 2026-10-13 |
| 昭和30年(1955年)から令和9年(2027年)までの国民の祝日がCSV形式で公開され、令和10年(2028年)の分は前年の2月に掲載されること | 内閣府: 国民の祝日について | 2026-10-13 |
派遣の依頼数と作業者の配置は、センター長と管理者が荷主との約束を踏まえて決めてください。 本記事は、各ライブラリの公式のドキュメントと内閣府のページで確認できた範囲だけを扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-1365)についてのご相談はこちらから。
