AIで在庫管理を自動化
約5分で読めます
AIで在庫管理を自動化
在庫の過不足は直接的な損失につながる。過剰在庫は保管コストと廃棄リスクを生み、在庫切れは販売機会の損失を招く。AIを活用することで、需要予測に基づいた最適な在庫水準を自動維持できる。
システム構成
データソース(POS/EC/倉庫API)
-> データ取得レイヤー(定期スクレイピング)
-> AI分析エンジン(需要予測・発注点判定)
-> アラート通知(Slack/メール)
-> 自動発注(承認フロー付き)
在庫データの自動取得
import requests
from datetime import datetime
class InventoryFetcher:
def __init__(self, api_base: str, api_key: str):
self.api_base = api_base
self.headers = {"Authorization": f"Bearer {api_key}"}
def fetch_current_stock(self) -> list[dict]:
"""現在の在庫数を全SKUについて取得"""
resp = requests.get(
f"{self.api_base}/inventory/levels",
headers=self.headers
)
resp.raise_for_status()
return resp.json()["items"]
def fetch_sales_history(self, sku: str, days: int = 90) -> list[dict]:
"""過去N日間の販売履歴を取得"""
resp = requests.get(
f"{self.api_base}/sales/history",
headers=self.headers,
params={"sku": sku, "days": days}
)
resp.raise_for_status()
return resp.json()["sales"]
AI発注点判定
従来の固定閾値(在庫が10個以下で発注)ではなく、販売速度と季節性を考慮した動的な発注点を算出する。
from anthropic import Anthropic
import json
client = Anthropic()
def calculate_reorder_point(sku: str, stock: int, sales_history: list) -> dict:
"""AIで発注点と推奨発注量を判定"""
prompt = f"""
以下の在庫・販売データから発注点と推奨発注量を算出してください。
SKU: {sku}
現在在庫: {stock}個
過去90日の日次販売数: {sales_history}
以下を考慮して判定:
1. 平均日次販売数と標準偏差
2. 直近7日のトレンド(増加/安定/減少)
3. リードタイム(発注から入荷まで7日と仮定)
4. 安全在庫(サービスレベル95%)
JSON形式で回答:
{{"reorder_point": 数値, "reorder_quantity": 数値,
"daily_avg": 数値, "trend": "up/stable/down",
"urgency": "high/medium/low", "reason": "理由"}}
"""
response = client.messages.create(
model="claude-haiku-4-5-20250901",
max_tokens=300,
messages=[{"role": "user", "content": prompt}]
)
return json.loads(response.content[0].text)
アラート通知の実装
def check_and_alert(fetcher: InventoryFetcher):
"""全SKUの在庫をチェックし、必要に応じてアラート送信"""
items = fetcher.fetch_current_stock()
alerts = []
for item in items:
sku = item["sku"]
stock = item["quantity"]
history = fetcher.fetch_sales_history(sku)
daily_sales = [h["quantity"] for h in history]
result = calculate_reorder_point(sku, stock, daily_sales)
if stock <= result["reorder_point"]:
alerts.append({
"sku": sku,
"current_stock": stock,
"reorder_point": result["reorder_point"],
"recommended_order": result["reorder_quantity"],
"urgency": result["urgency"],
"reason": result["reason"]
})
if alerts:
send_slack_alert(format_alert_message(alerts))
save_to_log(alerts)
def format_alert_message(alerts: list) -> str:
"""Slack通知用メッセージを生成"""
lines = ["*在庫アラート*\n"]
for a in sorted(alerts, key=lambda x: x["urgency"]):
lines.append(
f"*{a['sku']}*: 残{a['current_stock']}個 "
f"(発注点: {a['reorder_point']}) -> {a['recommended_order']}個発注推奨"
)
return "\n".join(lines)
運用スケジュール
| 頻度 | 処理 |
|---|---|
| 毎時 | 在庫数の取得・キャッシュ更新 |
| 日次(朝9時) | 全SKU発注点チェック・アラート送信 |
| 週次 | 需要予測モデルの精度検証 |
| 月次 | 閾値パラメータの調整・廃棄リスク商品の特定 |
導入効果の目安
- 在庫切れ率: 15% -> 3%以下
- 過剰在庫: 20-30%削減
- 発注業務の工数: 80%削減(確認作業のみ残る)
まとめ
AI在庫管理は「自動取得 + 動的発注点 + 通知」の3要素で構成する。固定閾値からAI判定に移行することで、販売トレンドの変化に自動で追従できる。
関連記事
A
Agentive 編集部
AIエージェントを実際に使い倒す個人開発者。サイト制作の自動化を実践しながら、その知見を発信しています。