Azit Inc.

to Developer

AIを活用した需給予測モデル開発で学んだこと

    2025.11.13

    Iwase Takeshi

    はじめに

    株式会社Azitでエンジニアリングマネージャーをしている岩瀬です。
    私たちは物流・SCM領域に特化したAIソリューションを提供しており、2025年9月に需給予測プラットフォーム「ForecastX」をリリースしました。プラットフォームの開発と並行して、ForecastXに搭載する個社別の予測モデルについて、開発手法の確立に取り組んでいます。
    今回は、ECサイトの需給予測モデル開発プロジェクトについて振り返ってみたいと思います。
    このプロジェクトでは、Claude Codeを中心としたAIツールを活用して開発を進めました。結果として目標は達成できたものの、途中で大きな失敗を経験し、多くの学びを得ることができました。特に、開発における落とし穴や、より良い開発手法について考える良い機会となりました。
    需給予測やデータサイエンス領域でのAI活用開発を検討されている方に、実際の体験談として参考にしていただければと思います。

    プロジェクト概要

    お客様の課題

    今回のお客様はECサイトを運営されており、自社商品の需給予測に課題を抱えていました。
    既存の予測方法:

    • 1週間ごとに、過去7日間の平均販売数×30日間で需要を予測
    • その結果を人が確認して手作業で補正

    抱えている問題:

    • 毎週5名の担当者が各3時間、合計15-20時間を予測作業に費やしている
    • 過剰在庫や欠品が頻繁に発生している

    開発目標と条件

    私たちの開発目標は、毎週の予測にかかる工数を大幅に削減し、既存の予測よりも精度を向上させることで、間接的に過剰在庫や欠品の発生を抑制することでした。
    開発条件:

    • 予測期間:30日間
    • 予測単位:SKU単位(商品よりも細かい単位)
    • 出力:販売数上位500SKUの予測
    • 重視する需要変動要因:季節性イベント、販促期間
    • 開発手法:Claude Codeを用いたバイブコーディング

    このプロジェクトは社内検証も兼ねており、ジュニアや非エンジニアでもAIを活用した開発ができるかを検証する目的もありました。

    Phase1での試行錯誤と失敗

    初期のアプローチ

    Phase1では、以下の前提で開発をスタートしました。
    技術的前提:

    • 予測手法はProphet(Meta社製)を使用
    • イベントの影響はパラメータで指定
    • 予測精度を測る指標はRMSEを採用

    開発手法:

    • Claude Codeを使ったバイブコーディング
    • その場その場で思いついた指示を口語で出す
    • 明確な開発計画なし

    一見良好だった結果

    Phase1の結果は、表面的には非常に良好でした。販売数上位500SKUのうち大多数でRMSEの値が5以下という指標上の精度を示し、予測処理も数分で完了するようになりました。当初は「うまくいった」と感じていました。

    問題の発覚と衝撃

    しかし、問題が明らかになったのは、お客様からの指摘でした。
    「実際の販売数と予測数に大きな乖離があるのですが...」
    この言葉を聞いた時の衝撃は今でも忘れられません。改めて結果を確認すると、確かに予測と販売実績の誤差は、私たちのスクリプトによる予測とお客様による予測で、それほど差がありませんでした。RMSEの数値は良いのに、実際のビジネス要求には応えられていなかったのです。

    根本原因の分析

    お客様の指摘を受けて原因を深掘りした結果、複数の根本的な問題が明らかになりました。
    1. 予測手法の選択ミス
    Prophetは毎日安定して売れている商品で、1〜2年程度の販売実績がある場合に威力を発揮します。しかし、お客様の商品は間欠需要(販売実績が0の日が続く)が主体でした。つまり、商品の販売パターンがProphetの前提条件に合っていなかったのです。
    2. 指標選択の問題
    RMSEは販売数量が少ないと数値が低く出やすく、「精度が良い」と誤認しやすい構造的な問題を抱えています。私たちは技術的な指標に満足してしまい、実際のビジネス要求との乖離に気づけませんでした。
    3. データの理解不足
    カテゴリ情報が不完全で、販売終了した商品のデータも正確ではない可能性があり、1SKUあたりのデータ履歴も想定より少なかったのです。
    4. 開発手法の問題
    バイブコーディングによる計画性のない開発により、全体設計が欠如し、不要な機能や使われない関数が大量に生成されました。スクリプトの品質も悪く、調整による変動なのかバグによる変動なのか判断できない状況でした。

    バイブコーディングの限界

    この失敗を通じて、バイブコーディングの限界も明確になりました。
    お客様の指摘を受けてから修正を試みましたが、バイブコーディングで作られたコードでは適切な修正ができませんでした。パラメータ調整を試みても思ったように予測値が変化せず、全体で予測値が狂っていくような状況でした。また、予測値について抑制や補正の機能を追加しようとしたところ、使われていない関数を修正したことで動作しなくなるなど、適切に調整できない、修正箇所がわからないといった状態に陥りました。
    実装方針の一貫性がなく、デバッグやメンテナンスが困難になっていたのです。何より問題だったのは、「動くものができた」という達成感に満足してしまい、本質的な問題への気づきが遅れたことです。

    Phase2での改善と学び

    アプローチの根本的見直し

    Phase2では、Phase1の失敗を踏まえて抜本的に改善しました。
    技術的改善:

    • 予測手法をProphetに固定しない
    • 予測精度はCVRMSEと予測と実績の絶対誤差で評価
    • 販売実績データの特徴から4つのグループに分類し、それぞれに最適な予測手法を適用

    使用手法:

    • MSTL+ETS
    • Croston法
    • Prophet

    販売パターンを解析し、間欠需要、新商品、在庫制約、多重季節性などの特徴に応じて手法を使い分けるアプローチに変更しました。

    計画的な開発プロセスの導入

    開発手法においても大きな改善を行いました。バイブコーディングから脱却し、計画的な開発プロセスを導入しました。
    計画的な開発プロセス:

    1. 事前の開発計画策定
    2. 簡易設計書の作成
    3. 実装前の認識合わせ
    4. コードレビューの実施
    5. リファクタリングの組み込み

    AIツールの効果的な活用:

    • Claude Code:実装作業
    • ChatGPT:コードレビュー

    レビューフローの確立

    効率的なレビューフローも確立しました。
    レビューフロー:

    1. ChatGPTにコードや出力を渡してレビューを実施
    2. レビュー内容をマークダウンファイルに出力
    3. Claude Codeで読み込み、レビュー内容について質問を生成
    4. 質問をChatGPTに渡して質疑応答
    5. Claude Codeで実装方法を検討
    6. 開発計画にタスクを追加
    7. 修正や調整の実施

    このフローにより、AIツール間での知識共有と品質向上を実現できました。

    データドリブンな改善

    技術面では、様々な補正機能を追加しました。
    補正機能の追加:

    • カテゴリ情報による傾向補正
    • イベント影響度の期間とカテゴリ別調整
    • 異常値の抑制機能
    • イベント専用品の期間外除外

    データ品質の向上:

    • 学習対象を販売数上位1000SKUに拡大
    • 直近販売実績による対象絞り込み
    • 終売データと販売実績の整合性確認
    • 出力を予測数上位500SKUに変更

    開発結果と成果

    Phase2での改善により、大きな成果を得ることができました。
    精度面での成果:

    • CVRMSEと絶対誤差ともに、お客様の予測手法を上回る結果
    • 5つの重要イベント全期間で、お客様の予測より誤差を削減
    • 予測の当たり外れとSKUの特徴に相関が見られるように

    運用面での成果:

    • 販売数上位1000SKUの学習と予測数上位500SKUの出力を約6分で完了
    • パラメータ調整で期待通りに結果が変わるように
    • 大きな外れを抑制しつつ予測精度を底上げ

    開発プロセスの改善:

    • 再現可能で保守しやすいコード
    • 明確な設計思想と実装方針
    • 効率的なレビューサイクル

    需給予測モデル開発で学んだ教訓


    このプロジェクトを通じて得た教訓をまとめます。

    1. データ理解の重要性

    最も重要な学びは、モデル開発前にデータを十分に精査するフェーズが必要だということです。データの物量だけでなく、質(完全性)と予測単位での状態把握が重要であることを痛感しました。
    今回のプロジェクトでは、履歴が長くても安定した販売実績のないデータの予測は難しいということも学びました。間欠需要に対する要因分析(偶然売れたのか、セールによるものか)や、外部要因(賞味期限、セール情報)の整備が必要です。

    2. 指標選択の重要性

    技術的な指標と業務要求の乖離に注意が必要であることも大きな学びでした。「精度が良い」という状態について、顧客との共通認識を持つことが重要です。
    RMSEのような技術的な指標だけでなく、ビジネス要求に直結する指標を選択することの重要性を学びました。顧客の解決したい問題から逆算した指標設定、現行手法との比較による目標値設定、見切り条件の事前合意が必要です。

    3. 計画的開発手法の必要性

    バイブコーディングでは品質確保が困難であることも明確になりました。一般的なプロジェクト管理手法を導入することで、開発効率と品質が大幅に向上することを実感しました。
    特に、販売実績データの状態から逆算して予測手法を選択することや、予測手法だけではなく傾向から係数で補正をかけることは、調整がしやすく非常に有効でした。

    4. AIツールの適切な活用

    AIツールは非常に強力ですが、適切な制御と組み合わせが重要であることも学びました。複数AIツールの役割分担、構造化されたレビューフロー、開発記録の体系化により、AIの能力を最大限に活用できることがわかりました。
    特に、開発の記録をテキストで残すことは、AIとの継続的な協働において非常に重要です。AIには人のような記憶がないため、人がやる以上にドキュメントを残すことが必要であることを実感しました。

    おわりに

    今回のプロジェクトは、技術的な成果だけでなく、AI開発の新しい可能性と課題を見出す貴重な経験となりました。失敗から学んだ教訓を活かし、より効率的で質の高いAIを活用した開発手法を確立していきたいと考えています。
    AIを活用した開発は、従来の開発手法とは異なる新しいスキルセットや考え方が求められる一方で、適切にアプローチすれば従来では困難だった速度と質での開発が可能になります。
    私たちAzitでは、この経験を踏まえてForecastXをはじめとする製品開発を進めており、AI活用開発の手法をさらに洗練させていく予定です。AIを活用した開発に興味のある方、一緒に新しい開発手法を模索していきたい方は、ぜひお気軽にお声がけください。
    最後まで読んでいただき、ありがとうございました。

    この記事をシェアSHARE

    この記事に関連する求人情報

    • AIデータサイエンティスト

    この記事をシェアSHARE

    Related Article

    MORE ARTICLES