Claude Media
Claudeで廃棄ロスを日別に分析し、惣菜の発注量を見直す手順

Claudeで廃棄ロスを日別に分析し、惣菜の発注量を見直す手順

惣菜の廃棄記録とPOSの販売実績をClaudeで突き合わせ、曜日・天候別の廃棄率から発注量の候補を出す手順です。売り切れ日の扱いと、粗利と廃棄損の釣り合いで量を決める考え方を、検算つきで示します。

惣菜の廃棄ロスは、廃棄記録と販売実績を日別に突き合わせると、発注量のどこが多すぎるかが見えてきます。この突合と、曜日・天候別の集計は、CSVを渡せばClaudeが得意とする作業です。ただし「廃棄を減らす量」をそのまま発注量にすると、今度は売り切れで粗利を逃します。

この記事では、製造数・販売数・廃棄数の3つを合わせる手順から、曜日・天候別の廃棄率、粗利と廃棄損の釣り合いで決める発注量の候補、検算までを順に示します。

廃棄を減らすだけでは発注量は決まらない

発注量を決める基準は、廃棄率の低さではありません。多く作って捨てる損と、少なく作って売り逃す損の釣り合いです。

売価400円・原価240円の惣菜パックで考えます。1パック売り逃すと粗利160円を失います。1パック捨てると原価240円を失います。この2つの比で、どの水準まで売り切りを狙うかが決まります。

粗利 ÷ (粗利 + 廃棄損) = 160 ÷ (160 + 240) = 0.4

この0.4は、需要がこの量を超えない確率を0.4に置く、という意味です。需要の分布でいえば、40パーセンタイルの量を作る計算になります。中央値より少ない量です。夕方に半額で売れて損が小さくなる品目は、比が上がって多めの量が妥当になります。

売れ残りの扱い1パックあたりの廃棄損比目安の位置
全量廃棄1パックあたりの廃棄損240円比0.40目安の位置需要の40パーセンタイル
半額(200円)で7割売れる1パックあたりの廃棄損約100円比約0.62目安の位置62パーセンタイル付近
半額で全量売れる1パックあたりの廃棄損40円比0.80目安の位置80パーセンタイル

半額で7割売れる場合の廃棄損は、0.3×240円+0.7×(240円−200円)=100円で求めています。売れ残りの行き先が違うだけで、同じ品目でも妥当な発注量が変わります。

廃棄ロス分析の目的は、この比を使って「今の発注量が、釣り合いの位置からどれだけずれているか」を数字で出すことです。同じ在庫まわりでも、発注点の計算は安全在庫と発注点をClaudeにExcelで計算させる手順が扱う別の作業で、こちらは廃棄の実績から量を見直す流れです。

渡すデータは3種類

突合に使う列は、品目・日付ごとの次の3つです。

データ主な列出どころの例
製造(仕入)数主な列日付、品目コード、製造数、製造時刻出どころの例製造指示書、発注データ
販売実績主な列日付、品目コード、定価販売数、値引き販売数、売り切れ時刻出どころの例POS
廃棄記録主な列日付、品目コード、廃棄数、廃棄理由出どころの例廃棄記録票、ハンディ端末

このほかに、分析軸になる列を日付単位で足します。最高気温、降水の有無、チラシや特売の有無、近隣の行事などです。天候は自店の日報のメモか、別に用意した日別の天気CSVを同じ形で渡します。

品目マスタ(売価・原価・製造ロットの単位)は、毎回貼らずにProjectsのファイルに置いておくと、会話をまたいで参照できます。Projectsのファイルは1つ30MBまでで、テキストの抽出だけが使われます。

使える環境とファイルの扱い

CSVとTXTはそのまま渡せます。Excelブック(XLSX)を渡すには、アカウントでコード実行とファイル作成を有効にしておく必要があります。Free・Pro・Maxでは既定で有効です。オフになっているときは、Settings > Capabilitiesでコード実行とファイル作成をオンにします。Team・Enterpriseでは組織のオーナーが無効にできるため、アップロードが弾かれる場合はオーナーの設定を確かめます。

ファイルのサイズ上限は、公式の2つのページで書き方が違います。

  • ファイルのアップロードの案内: チャットへの添付は1ファイル500MB・1チャット20ファイルまで
  • コード実行とファイル作成の案内: アップロードもダウンロードも1ファイル30MBまで

店舗1か月分のPOS CSVなら、どちらの上限にも届きません。年間の全品目明細を一度に渡す場合だけ、30MBを目安に品目や期間で分けておくと安全です。上限の一覧はClaudeファイル上限の一覧に整理があります。

天候データをClaudeに取りに行かせる使い方は、ネットワークの許可設定に左右されます。外部データに触れるには、ネットワークアクセス(Allow network egress)を許可する必要があります。Team・Enterpriseでは既定で制限があるため、天気のCSVは自分で用意して添付するほうが確実です。

落とし穴

Excelブックの中の写真や図は読まれない

CSV・TXT・XLSXなど画像以外の文書では、Claudeはテキストだけを取り出します。廃棄記録のブックに貼り付けた写真や画像は、読み取られません。紙の帳票は、ブックに貼るのではなく画像ファイルとして単体で渡します。

ステップ1: 3つの数字が合うか突合する

最初にやるのは、分析ではなく突合です。品目・日付ごとに次の式が成り立つかを確かめます。

製造数 = 定価販売数 + 値引き販売数 + 廃棄数 + 差異

差異が0でない行は、どれかの記録漏れか、試食・社内消費・陳列中の破損などの記録されない出口です。差異が大きい日の廃棄率をそのまま信じると、分析全体がずれます。

Claudeへの依頼は、列の意味と、差異の許容範囲を書きます。

添付の3ファイルは、製造数(production.csv)、POS販売
(pos.csv)、廃棄記録(waste.csv)です。キーは日付と品目コードです。
次を実行してください。
1. 3つを日付×品目で結合する
2. 差異 = 製造数 - 定価販売数 - 値引き販売数 - 廃棄数 を計算する
3. 差異の絶対値が製造数の3%を超えた行を、日付・品目・差異つきで
   一覧にする
4. 結合できなかった行(片方にしか無いキー)も別に一覧にする

3%という閾値は例です。自店の記録精度に合わせて変えます。Claudeが書く処理の中身は、おおよそ次のような形になります(公式の機能説明に沿った例示で、実際の出力そのものではありません)。

import pandas as pd
 
prod = pd.read_csv("production.csv", parse_dates=["date"])
pos = pd.read_csv("pos.csv", parse_dates=["date"])
waste = pd.read_csv("waste.csv", parse_dates=["date"])
 
key = ["date", "item_code"]
df = prod.merge(pos, on=key, how="outer", indicator=True)
df = df.merge(waste, on=key, how="outer")
df = df.fillna({"waste_qty": 0, "markdown_qty": 0})
 
df["gap"] = (df["produced"] - df["regular_qty"]
             - df["markdown_qty"] - df["waste_qty"])
bad = df[df["gap"].abs() > df["produced"] * 0.03]

廃棄記録に載っていない日を欠損のまま残すと、「廃棄がなかった日」と「記録を忘れた日」が区別できません。上の例は0で埋めていますが、これは「記録のない日は廃棄なし」と決めたことになります。運用として本当にそうかを、先に店舗に確かめてから埋めます。

ステップ2: 売り切れた日の販売数は需要ではない

廃棄ロスの分析で見落としやすいのが、売り切れた日の扱いです。16時に売り切れた日の販売数は、その日の需要より小さい値です。売り切れ日を含めて平均を取ると、需要を低く見積もり、発注量を下げすぎます。

POSに売り切れ時刻がなければ、廃棄数が0で、販売数が製造数とほぼ同じ日を「売り切れの疑い」として印を付けます。

定価販売数 + 値引き販売数 が製造数と同じ(または1個差以内)で、
廃棄数が0の日を「売り切れ候補」として列を追加してください。
売り切れ候補の日は、需要の集計から外した版と、含めた版の
両方で曜日別の平均を出してください。

2つの版を並べると、売り切れの影響の大きさが分かります。差が小さい品目は集計の方法を気にしなくてよく、差が大きい品目は、実際の需要がもっとあるはずです。その分は、時間帯別の売れ行きがあるなら補正し、なければ人が見積もります。補正の値をClaudeに決めさせず、前提として依頼文に書く形にします。

ステップ3: 曜日・天候別に廃棄率を出す

突合が済んだら、日別の廃棄率を軸別に集計します。廃棄率は「廃棄数 ÷ 製造数」で、数量ベースと原価ベースの両方を出します。数量が少なくても高単価の品目は、金額への影響が大きいからです。

突合済みのデータで、品目別に次の集計表を作ってください。
- 曜日別: 製造数の平均、定価販売数の平均、廃棄数の平均、廃棄率
- 最高気温を5度刻みで区切った別の表(同じ項目)
- 雨の日と雨でない日の比較
- 各セルの日数(n)を必ず併記する
売り切れ候補の日は集計から外し、外した日数も書いてください。

nの併記は必須の指定です。直近8週では、曜日別の日数はそれぞれ8日しかありません。気温帯や雨の日で切ると、1つのセルが2〜3日分になることもあります。数日分の平均から「雨の日は廃棄が多い」と言い切るのは危険なので、nが5日に満たないセルは傾向として扱わず、参考にとどめます。

複数の要因が重なる点にも注意します。金曜は特売があり、しかも気温が高かった、という日の廃棄率は、曜日の効果なのか気温の効果なのか切り分けられません。Claudeに「特売の日を除いた版も出してください」と頼むと、要因を1つずつ外した比較ができます。ここで見えるのは相関で、原因の断定には使えません。

結果は表だけでなくグラフにもできます。Claudeはデータの可視化をPNG画像として作成できるので、曜日別の廃棄率を棒グラフにして店内の会議に使えます。CSV分析全般の進め方はClaude CSV分析の使い方にあります。

ステップ4: 発注量の候補を出す

曜日別の需要のばらつきが分かったら、冒頭の比を使って候補量を出します。

月曜の唐揚げパックで、直近8週の需要(売り切れなしの日)が次の並びだったとします。数値は例示です。

38, 41, 42, 43, 44, 45, 47, 50   (昇順に並べた8日分)
現在の発注量: 50パック

売れ残りは全量廃棄、粗利160円・廃棄損240円として、発注量ごとに8日分の損を数えます。

発注量売れ残りの平均売り逃しの平均損の平均(1日)
50パック売れ残りの平均6.25パック売り逃しの平均0パック損の平均(1日)1,500円
44パック売れ残りの平均1.5パック売り逃しの平均1.25パック損の平均(1日)560円
43パック売れ残りの平均1パック売り逃しの平均1.75パック損の平均(1日)520円
42パック売れ残りの平均0.625パック売り逃しの平均2.375パック損の平均(1日)530円

損が最も小さいのは43パックです。比0.4で求めた40パーセンタイル(約42.8)と一致します。現在の50パックと比べて、この8日では1日あたり980円の差になります。

Claudeには、この数え方を表にさせます。

製造数の候補を、現在の量から5パック下まで1パック刻みで動かし、
8日分の実績需要に当てはめて、売れ残り・売り逃しの平均と損の
合計を出してください。売れ残りの単価は240円(全量廃棄)、
売り逃しの単価は160円です。結果は表で、最小の行を示してください。

ここで求めているのは、手元の8日分に当てはめた結果です。8日分だけで決めた量は、次の月曜に外れることがあります。直近8週で出た候補量を、まず2〜3週だけ試し、売り切れ時刻と廃棄数の変化を見てから定着させる運用が現実的です。

この計算が前提にしていない点も押さえておきます。

  • 同じ売場の別商品への乗り換え(欠品時に別の惣菜が売れる)
  • 昼と夕方の追加製造。1回で作り切る前提を崩せば、廃棄と売り逃しの両方を減らせる
  • 値引きの開始時刻による、売れ残りの回収額の違い

3つ目は先の表のとおり、廃棄損の大きさを動かします。2つ目の追加製造は、数字からは出ません。調理場の人員と設備で決まる範囲なので、人が判断します。

検算と、人が決める範囲

Claudeが出した集計は、そのまま使わず、次の3点を手で確かめます。

  1. 突合後の製造数の合計が、元の製造指示書の合計と一致するか
  2. 1品目・1曜日を電卓で再計算し、廃棄率が表と合うか
  3. 損の表の1行を、売れ残り×240円+売り逃し×160円で再計算できるか

計算の精度についてはClaude数式・計算の精度と検算が必要な理由で扱っています。

次の判断は、Claudeの出力ではなく人が決めます。

  • 売価・原価・値引き後の回収額(品目マスタの値。Claudeに推測させない)
  • 売り切れ日の需要の補正量
  • 発注量の変更を何週間試すか
  • 試食や社内消費など、記録されない出口の扱い

依頼文には、マスタの値を明記し、「記載のない値は仮定せず、質問してください」と添えておきます。仮に置かれた原価で作られた表は、整って見えるぶん、そのまま通りやすくなります。

紙の廃棄記録を写真で渡すとき

廃棄記録が紙の帳票なら、写真で渡してデータ化を頼めます。対応する画像形式はJPEG・PNG・GIF・WebPで、解像度は1000×1000ピクセル以上が推奨です。小さい画像や低解像度の画像は避けます。

手書きの数字は読み違いが出やすいので、読み取った表を、元の帳票と1枚ずつ見比べます。見比べる手間を減らすには、日別の廃棄数の合計欄を帳票の下に書いておき、読み取った合計と照合します。

複数ページのPDFなら、100ページ以下は文字と図の両方が分析されます。101〜1000ページは文字のみで、1000ページを超えると「Uploaded file is too large」のエラーになります。ページを指定するときは、帳票に印刷されたページ番号ではなく、PDFビューアに表示されるページ番号を使います。

毎週同じ手順で回す

月次の分析で終わらせず、毎週の見直しにするなら、品目マスタと依頼文の型をProjectsに置いておきます。毎週変わるのは、製造・POS・廃棄の3ファイルと、天候の列だけです。週次のCSVを振り返りメモにまとめる流れは、POS売上CSVをClaudeで分析して店長の週次メモにする手順が参考になります。

棚卸しの差異と廃棄を混同しないことも大切です。廃棄は記録された出口で、棚卸差異は記録されなかった出口です。帳簿と実地の差の側は、実地棚卸と帳簿在庫の棚卸差異をClaudeで分析する手順に分析の流れがあります。

つまずきやすい点

  • 廃棄記録がない日を0で埋めたら、記録忘れの日が「廃棄ゼロの優秀な日」に見えた。ステップ1で、記録のない日の数を必ず数えます。
  • 気温を細かく刻みすぎて、1セルが1〜2日分になった。nを併記させ、5日未満は参考扱いにします。
  • 売り切れ日を含めて平均したため、需要を低く見積もり、発注量を下げすぎた。ステップ2の2つの版で比べます。
  • 廃棄率だけを見て、廃棄の少ない品目を「良い発注」と評価した。売り逃しの損を同じ表に並べます。
  • 原価や売価をClaudeが推測して置いた。マスタの値は依頼文かProjectsに明記します。

まとめ

廃棄ロスの見直しは、廃棄率の低さを目指すと売り逃しに転じます。粗利と廃棄損の比から、どの水準で作るかを決め、廃棄記録・販売実績・製造数が合っていることを確かめたうえで、Claudeに曜日・天候別の集計と候補量の比較表を作らせるのが、安全な順序です。候補量は小さく試し、売り切れ時刻と廃棄数の変化で確かめてから定着させます。

この記事を共有:XはてブLinkedIn