Agentive
自動化ラボ

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エージェントを実際に使い倒す個人開発者。サイト制作の自動化を実践しながら、その知見を発信しています。