主要な原材料の購買実績と市況の指標から来月以降の調達単価を幅で見込み、まとめ買いと分割発注の判断材料を購買担当に出す
主要な原材料30品目について、過去の調達単価と市況の指標から、1〜3か月先の調達単価を幅で見込みます。まとめ買いと分割発注で調達額がどう変わるかを並べ、購買担当の判断材料にします。
- 生成AI
- ChatGPT/Claude/Gemini
- 連携・自動化
- Python
- 対象業界
- 商社/建設/製造
- 対象部門
- 購買
- 対象業務
- 比較検討/集計・分析
- 主な課題
- データ分析に時間がかかる/判断に時間がかかる/属人化している
- AIで行う処理
- 予測
- 主な効果
- 判断支援/工数削減/機会損失防止
- 導入難易度
- ★★★★☆
- 実装レベル
- 本格構成
- 費用感
- API連携(中)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 月初に、担当者が購買システムから品目ごとの先月までの発注と単価の実績を書き出す
- 日本銀行や業界団体のサイトから、関係する市況の指標と為替相場を探して表に貼る
- 品目ごとに、単価と指標を同じグラフに並べ、来月以降の値動きを見込む
- 算定式で決まる品目は、指数から次の四半期の単価を手で計算する
- 生産計画の表から来月以降の使用量を見て、まとめ買いした場合と分けた場合の調達額を計算する
- 品目ごとの判断のメモを書き、購買会議の資料にまとめる
- 購買会議で、品目ごとに発注の仕方を決める
- 自動毎月第2営業日の朝、購買システムから先月までの発注と単価の実績をCSVで書き出す
- 自動Python が日本銀行の時系列統計データ検索サイトのAPIから、企業物価指数の関係する系列と為替相場を取る
- 自動算定式で決まる品目は、指数の見込みと算定式から次の四半期の単価を計算する
- 自動交渉で決まる品目は、分位点回帰のモデルで1〜3か月先の単価を下限(10%点)・中央(50%点)・上限(90%点)で見込む
- 自動生産計画の使用量から、まとめ買いと分割発注の調達額を、幅の下限・中央・上限のそれぞれで計算する
- 自動過去の見込みの幅に、実際の単価が収まったかの割合を品目ごとに出す
- 自動Claude API が、表の数字から品目ごとの判断メモの下書きを作る
- 人担当者が、品目ごとの幅と調達額の差を見て、仕入先から聞いている話と照らし、判断メモを直す
- 人購買会議で、品目ごとに発注の仕方を決める
各工程の詳しい説明を読む
- 月初に、担当者が購買システムから品目ごとの先月までの発注と単価の実績を書き出す
- 日本銀行や業界団体のサイトから、関係する市況の指標と為替相場を探して表に貼る
- 品目ごとに、単価と指標を同じグラフに並べ、来月以降の値動きを見込む
- 算定式で決まる品目は、指数から次の四半期の単価を手で計算する
- 生産計画の表から来月以降の使用量を見て、まとめ買いした場合と分けた場合の調達額を計算する
- 品目ごとの判断のメモを書き、購買会議の資料にまとめる
- 購買会議で、品目ごとに発注の仕方を決める
(a)材料作りが毎月重い。 30品目それぞれに、実績の書き出し、指標の貼り付け、グラフ、計算が要ります。1品目90分で、月45時間になります。 会議の直前まで材料作りが続き、判断を考える時間が残りません。
(b)見込みの根拠を説明できない。 グラフを見て「上がりそう」と判断していても、どの指標がどれくらい効いているのかは、数字になっていません。 担当者が替わると、見込みのやり方も変わります。
(c)1つの数字で見込んで、外れたときに何も残らない。 「来月は3%上がる」と書いて実際は1%だったとき、外れが大きかったのか、そもそもそれくらいは上下するものだったのかが分かりません。 次の月の見込みに、外れの経験が生かされていません。
(d)指標を探す時間がかかる。 サイトを開いて該当の系列を探し、期間を合わせて貼るだけで、品目ごとに時間がかかります。探す系列は毎月同じなのに、毎月手で探しています。
- 【自動】 毎月第2営業日の朝、購買システムから先月までの発注と単価の実績をCSVで書き出す
- 【自動】 Python が日本銀行の時系列統計データ検索サイトのAPIから、企業物価指数の関係する系列と為替相場を取る
- 【自動】 算定式で決まる品目は、指数の見込みと算定式から次の四半期の単価を計算する
- 【自動】 交渉で決まる品目は、分位点回帰のモデルで1〜3か月先の単価を下限(10%点)・中央(50%点)・上限(90%点)で見込む
- 【自動】 生産計画の使用量から、まとめ買いと分割発注の調達額を、幅の下限・中央・上限のそれぞれで計算する
- 【自動】 過去の見込みの幅に、実際の単価が収まったかの割合を品目ごとに出す
- 【自動】 Claude API が、表の数字から品目ごとの判断メモの下書きを作る
- 【人】 担当者が、品目ごとの幅と調達額の差を見て、仕入先から聞いている話と照らし、判断メモを直す
- 【人】 購買会議で、品目ごとに発注の仕方を決める
8番目が、この設計の分かれ目です。 幅と調達額の差は機械が出しますが、仕入先から聞いている値上げの予告、工場の定期修理による使用量の変化は、担当者しか知りません。 担当者はそれを判断メモに書き足し、機械の見込みと違う判断をした理由を残します。
6番目を最初から組み込むのも、意図してのことです。 10%点から90%点の幅なら、10回に8回くらいは実際の単価が幅に収まるはずです。収まった割合が5割しかなければ、幅が狭すぎて信用できません。 その割合を毎月、品目ごとに出します。
02今回想定するシステム構成
購買システム(発注・単価の実績 CSV) 生産計画の表(使用量)
│ │
▼【トリガー】毎月第2営業日 9:30 の定時実行
Python
├──▶ 日本銀行 時系列統計データ検索サイトの API
│ 企業物価指数(関係する品目・類別の系列)/為替相場
▼
品目の区分で分ける
├── 算定式で決まる品目 ── 指数の見込み × 算定式 ── 次の四半期の単価
└── 交渉で決まる品目 ── 分位点回帰(10%・50%・90%点)── 1〜3か月先の単価の幅
▼
Python ── まとめ買いと分割発注の調達額(幅の下限・中央・上限で)
過去の見込みの幅に実績が収まった割合
▼
Claude API ── 品目ごとの判断メモの下書き(表の数字だけを使う)
▼
【担当者が仕入先の情報を書き足し、判断メモを直す】
▼
購買会議の資料| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| 実行環境 | Python(pandas・scikit-learn の QuantileRegressor と TimeSeriesSplit) | R、BigQuery ML |
| 連携 | 日本銀行 時系列統計データ検索サイトの API(企業物価指数・為替相場) | 同サイトの画面からのCSVの書き出し |
| 生成AI | Claude API(判断メモの下書き) | OpenAI API、Gemini API |
| データの取得元 | 購買システムの発注・単価の実績のCSV出力、生産計画の表 | 購買システムのAPI |
| 結果の出力先 | 購買部の共有フォルダの表 | 購買システムの帳票 |
購買システムには書き込みません。 この構成が出すのは見込みの幅と調達額の差、判断メモの下書きまでです。発注を出すのは、購買会議で決めた後の担当者です。
市況の指標は、日本銀行の時系列統計データ検索サイトのAPIから取ります。 日本銀行は2026年2月18日に、このサイトでJSON形式やCSV形式の機械判読可能な形式で時系列統計データを取得できるAPI機能の提供を始めました。利用マニュアルによると、系列のコードを指定してデータを取る /getDataCode、階層の情報で取る /getDataLayer、系列の一覧などのメタデータを取る /getMetadata の3種類があります。企業物価指数は DB名 PR01、為替相場は FM08 です。
API は誰でも使えますが、留意点があります。 留意点の文書では、予告なく止まったり遅くなったりすることがある、負荷の状況でアクセスが制限されることがある、過度な頻度のアクセスは禁止とされています。毎月1回、必要な系列だけを取る使い方にします。
03どうやって実装するのか
処理の起点を決める
毎月第2営業日の9時30分に、定時で動かします。 購買システムの先月分の単価は、月末の締めのあと第1営業日中に確定します。日本銀行の時系列統計データ検索サイトでは、データが午前8時50分ごろに掲載されると利用マニュアルに書かれています。第2営業日の朝なら、両方がそろっています。
企業物価指数の先月分は、毎月の公表日まで載りません。 公表日より前に動かすと、指標の最新の月が1か月古いまま見込むことになります。そのため、取れた指標の最新の月を結果の表に必ず書き、購買会議の前に公表日を過ぎていれば、その日に一度だけ動かし直します。 動かし直しは担当者がボタンで行い、毎日自動で取り直すことはしません。
モデルの学び直しは、半年に1回にします。 毎月学び直すと、同じ品目の幅が月ごとに広がったり狭まったりして、先月の幅と今月の幅が比べられなくなります。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 調達単価の実績 | 品目コード、仕入先、発注日、数量、単価(月ごとに数量で重み付けした平均) | 購買システムのCSV |
| 品目の区分 | 算定式の品目か交渉の品目か。算定式の品目は、連動する指数の系列、参照する期間、計算の式 | 購買部が持つ品目の台帳 |
| 市況の指標 | 企業物価指数のうち品目に関係する系列(樹脂、鉄鋼、非鉄金属など)の月次の値 | 日本銀行のAPI(PR01) |
| 為替相場 | 米ドルの対円相場の月中平均 | 日本銀行のAPI(FM08) |
| 使用量の見込み | 品目ごとの来月から3か月先の使用量 | 生産計画の表 |
| 保管の条件 | 品目ごとの倉庫の空き、保管できる期間、最小の発注の単位 | 購買部が持つ品目の台帳 |
質を決めるのは、2行目の品目の区分です。 算定式の品目を交渉の品目として扱うと、算定式で決まっている値上げを、モデルが推測で外すことになります。逆に、算定式を取り決めていても実際は交渉で決まっている品目もあります。品目ごとに、実際にどう決まっているかを担当者が確かめて台帳に書きます。
関係する指標の系列は、品目ごとに担当者が選びます。 機械に全系列から選ばせると、たまたま値動きが似ている関係の無い系列を拾います。選ぶのは、その原材料の値段に効くと担当者が説明できる系列だけです。 1品目あたり2〜3系列に絞ります。
データの取得方法を決める
日本銀行の API は、URLに条件を付けて呼びます。利用マニュアルの例では https://www.stat-search.boj.or.jp/api/v1/getDataCode?format=json&lang=en&db=CO&startDate=202401&endDate=202504&code=... の形で、format(JSON か CSV)、lang(日本語か英語)、db(DB名)、startDate と endDate(月次なら YYYYMM)、code(系列のコード) を指定します。
| 取るもの | どの API | 何に使うか |
|---|---|---|
| 系列のコードと名前の一覧 | /getMetadata(db=PR01 など) | 品目に関係する系列を担当者が選ぶ |
| 選んだ系列の月次の値 | /getDataCode | 特徴量と算定式の入力 |
| 為替相場の月次の値 | /getDataCode(db=FM08) | 輸入の原材料の特徴量 |
1回の呼び出しで指定できる系列のコードは同じ頻度のものだけで、上限は250系列、データの点数は6万点とされています。30品目で選ぶ系列は多くても90系列ほどなので、月次の系列を1回か2回の呼び出しでまとめて取れます。 取った値は手元に保存し、次の月は不足の月だけを取ります。
系列の選び方は /getMetadata で確かめてから決めます。 企業物価指数には、品目・類別などの階層ごとに多くの系列があり、名前の似た系列を取り違えやすいからです。選んだ系列のコードと名前を品目の台帳に書きます。
購買システムの単価は、月ごとに数量で重み付けした平均にします。 同じ月に小口の発注が高い単価で入ると、単純な平均では値動きに見えます。
AIへ渡す前に整形する
- 品目コードのそろえ … 規格の変更で品目コードが変わった原材料は、新旧のコードを対応させて1つの系列にします
- 月ごとの単価の作成 … 数量で重み付けした平均単価を月ごとに出します。発注の無い月は空のままにし、前の月の値で埋めません
- 指標の月をそろえる … 単価の月と、指標の月を同じ月に並べます。指標の最新の月が単価より古いときは、その差を特徴量の作り方に反映します
- 遅れの特徴量を作る … 指標の1〜3か月前の値と、前の年の同じ月からの変化率を特徴量にします。原材料の値段は、市況から数か月遅れて動くことが多いためです
- 単価の変化率にする … 予測するのは単価そのものではなく、今月の単価からの変化率にします。品目ごとに単価の桁が違うためです
- 特殊な月の印 … 仕入先の切り替え、規格の変更、災害などで単価が飛んだ月に印を付け、学習から外します
2番目の「前の月の値で埋めない」を軽く見ないでください。 埋めると値動きが無かったことになり、モデルは実際より値動きの小さい品目だと学びます。 幅が狭く出て、実績が幅から外れる割合が増えます。
学習と検証は、時間の順で分けます。 scikit-learn の TimeSeriesSplit は時間順のデータの分け方を作るもので、ほかの分け方は未来のデータで学習して過去のデータで評価することになるため不適切とされています。分割数の既定は5で、gap で学習用の末尾から検証用の手前までを空けられます。3か月先を見込むモデルでは、gap を2か月にします。 空けないと、検証の答えに近い月を学習で見てしまいます。
AIに処理させる
この構成の「AI」は2段に分かれます。 幅を出すのは Python の分位点回帰で、調達額の差も Python が計算します。生成AIは数字を出しません。 生成AIにさせるのは、出そろった表から判断メモの下書きを作ることだけです。
| 段 | させること | させないこと |
|---|---|---|
| 算定式の計算 | 指数の見込みと算定式から次の四半期の単価 | 算定式の変更 |
| 分位点回帰 | 1〜3か月先の単価の変化率の10%点・50%点・90%点 | 市況の先行きの見立て |
| 調達額の計算 | まとめ買いと分割発注の調達額を、幅の下限・中央・上限で | 発注の判断 |
| Claude API | 品目ごとの判断メモの下書き(表の数字の写しと、確かめることの一覧) | 数字の計算、買うか待つかの結論 |
分位点回帰には、scikit-learn の QuantileRegressor を使います。 条件付きの分位点を予測する線形の回帰で、ピンボール損失を最小にし、外れ値に強いとされています。quantile の既定は0.5(中央値)、L1 の正則化の強さ alpha の既定は1.0、ソルバーの既定は highs です。10%点・50%点・90%点のそれぞれで、quantile を変えたモデルを3つ作ります。 線形のモデルなので、係数を見ればどの指標がどれだけ効いているかを担当者に説明できます。
alpha の既定の1.0は、変化率の桁によっては強すぎて、係数がすべて0になることがあります。 特徴量を標準化したうえで、TimeSeriesSplit の検証で品目ごとに選びます。
| 生成AIにさせないこと | 理由 |
|---|---|
| 単価や調達額の計算・言い換え | 数字は Python の表が正。生成AIに計算させると食い違う |
| 「買うべき」「待つべき」の結論 | 倉庫・資金・仕入先との関係を知らない |
| 市況のニュースからの見立ての追加 | 根拠の確かめられない情報が混ざる |
| 幅の外側の可能性を大きく書く | 幅の意味(10回に8回)を変えてしまう |
1行目がいちばん起きやすい失敗です。 表を渡して「まとめて」と頼むと、生成AIは変化率を円に直したり、合計を出し直したりします。判断メモの数字が表と違えば、会議で誰も表を信じなくなります。
指示内容を固定する
あなたは製造業の購買部で、毎月の購買会議の資料を準備する立場です。
渡された表だけを使って、品目ごとの判断メモの下書きを作ってください。
このメモは担当者が直してから会議に出します。
【作るもの】
1. 来月から3か月先の単価の見込みの幅(下限・中央・上限)を、表の値のまま写す
2. まとめ買いと分割発注の調達額の差を、下限・中央・上限の3通りで写す
3. 過去12か月で、実際の単価が見込みの幅に収まった割合を写す
4. 担当者が会議の前に確かめること(仕入先の予告、使用量の変化、倉庫の空き)を
箇条書きで3つまで
【厳守事項】
- 数字は表にある値だけを使い、計算し直したり、円や%に換算し直したりしないでください。
- 「買うべき」「待つべき」「おすすめ」など、発注の判断を書かないでください。
- 市況の先行き、為替の見通し、ニュースの内容を書き足さないでください。
- 幅に収まった割合が 0.6 を下回る品目は、冒頭に「見込みの幅の信頼性が低い」と
書いてください。
- 算定式の品目では、単価が算定式で決まることと、参照した指数の最新の月を書いてください。
- 表に無い品目や数字を足さないでください。
- 情報が足りないときは missing_info に項目名を入れ、推測で補わないでください。
【品目】{item_code}({item_name})/区分:{pricing_type}
【単価の見込みの幅】{forecast_table}
【調達額の比較】{purchase_scenarios}
【幅に収まった割合(過去12か月)】{coverage}
【指標の最新の月】{latest_index_month}
「発注の判断を書かない」を明記しないと、生成AIは結論を書きます。 上限で計算した調達額の差が大きければ「前倒しでの購入をおすすめします」と書き、会議の議論が、そのおすすめに賛成か反対かから始まってしまいます。
「幅に収まった割合が低い品目は冒頭に書く」は、幅を信じすぎないための仕掛けです。 割合の低い品目の幅をそのまま会議に出すと、狭い幅が確かな見込みに見えます。
出力形式を固定する
次の形のJSONで受け取ります。 Claude API の構造化出力(output_config.format に type: "json_schema" を指定)で、この形に固定します。
{
"item_code": "RM-PP-01",
"month": "2026-10",
"pricing_type": "negotiated | formula",
"latest_index_month": "2026-08",
"forecast": [
{ "horizon": 1, "p10": 0.0, "p50": 0.0, "p90": 0.0 }
],
"scenarios": [
{ "plan": "bulk | split", "cost_p10": 0, "cost_p50": 0, "cost_p90": 0 }
],
"coverage_12m": 0.0,
"memo_draft": "",
"checks_before_meeting": [],
"missing_info": [],
"buyer_decision": { "plan": "", "reason": "" }
}
forecast scenarios coverage_12m latest_index_month は Python が埋め、memo_draft checks_before_meeting missing_info を生成AIが埋めます。buyer_decision は会議の後に担当者が書きます。
1つ目の理由は、数字と文章を別の層に置けることです。 生成AIの出力に数字の欄を持たせないので、生成AIが数字を書き換える経路がありません。 受け取った後に、memo_draft に出てくる数字が表の値と一致するかを Python で照らします。構造化出力では数値の範囲(minimum/maximum)や文字数の制約が使えず、additionalProperties は false にする必要があるとされているため、checks_before_meeting が3つ以内かの確認も受け取った後に行います。
2つ目は、会議の判断を見込みと並べて残せることです。 buyer_decision に決めた発注の仕方と理由を書けば、数か月後に、幅と判断と実際の単価を並べて振り返れます。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 購買システム | CSVの書き出し(読み取りのみ) | 発注と単価の実績 |
| 日本銀行の API | HTTP の呼び出し(月1回、必要な系列だけ) | 企業物価指数と為替相場 |
| 生産計画の表 | 読み取りのみ | 品目ごとの使用量の見込み |
| Claude API | API呼び出し | 判断メモの下書き(表の数字だけを渡す) |
| 購買会議の資料 | 共有フォルダへの書き込み | 品目ごとの表と判断メモ |
日本銀行の API の呼び出しは、毎月1回の定時実行と、担当者の動かし直しだけにします。 留意点の文書には、API を使ったサービスを公開する場合の届け出とクレジットの表示の求めがありますが。この構成は社内の会議の資料に使うだけで、サービスとして公開するものではありません。 社外に出す資料に載せる場合は、留意点の文書を読み直します。
仕入先の名前と単価は、生成AIに渡す表から外すこともできます。 判断メモに必要なのは品目と変化率と調達額の差で、仕入先ごとの単価は要りません。
人が確認する
担当者は、毎月、受け持ちの品目の表と判断メモを必ず見ます。
- 幅に収まった割合を見る … 0.6を下回る品目は、幅を参考程度にとどめます
- 仕入先から聞いている話と照らす … 値上げの予告、供給の不安、算定式の見直しの申し入れを書き足します
- 使用量の見込みを確かめる … 工場の定期修理や新しい製品の立ち上げで、生産計画の表より使用量が変わることがあります
- 判断メモを直し、会議の後に決めたことを書く … 機械の幅と違う判断をした場合は、理由を一言残します
2番目を省かないでください。 仕入先からの値上げの予告は、指標にはまだ表れていない情報です。予告が届いている品目で機械の幅だけを見ると、上限より上で単価が決まることがあります。
目標は、1品目をならして20分です。 幅が狭く調達額の差も小さい品目は表を見て数分、差の大きい品目は仕入先への確認を含めて30分以上かかります。
例外に対処する
| 起きること | 対応 |
|---|---|
| 日本銀行の API が応答しない・制限される | 前の月に保存した値で見込み、指標の最新の月が古いことを表に書く |
| 指標の先月分がまだ公表されていない | 最新の月を表に書き、公表日の後に担当者が動かし直す |
| 品目の発注が数か月ない | その品目は見込みを出さず、「実績不足」とする |
| 規格の変更で品目コードが変わった | 新旧の対応が無ければ見込みを出さず、台帳の整備を担当者に頼む |
| 単価が急に飛んだ月がある | 仕入先の切り替えなどを担当者に確かめ、学習から外す印を付ける |
| 係数がすべて0になった | alpha が強すぎる。検証で選び直す |
| 10%点が90%点を上回った | 3つのモデルを別々に作ると起きることがある。並べ替えたうえで、その品目に印を付ける |
| Claude API が応答しない | 表だけで会議の資料を出す。判断メモの欄は空にする |
上の2行は、毎月の運用で必ず起きます。 どちらも見込みを止める理由にはしませんが、どの月の指標で見込んだかを表に書かないと、古い指標の見込みが新しいものに見えます。
記録を残す
- 毎月の購買の実績のCSVと、日本銀行の API から取った系列の値(取った日時と最新の月)
- 品目の台帳のそのときの版(区分、選んだ系列、算定式)
- モデルの版、選んだ
alpha、係数 - 品目ごとの幅、調達額の比較、幅に収まった割合
- 生成AIに渡した表と、返ってきた判断メモの下書き
- 会議で決めた発注の仕方と理由(
buyer_decision)と、その後の実際の単価
最後の行は、半年ごとの振り返りに使います。 幅の外れが多かった品目、機械の幅と違う判断が当たった品目が分かれば、系列の選び方と特徴量を直す材料になります。
04実装レベルの3段階
半自動化だけでも、①の35分はほぼ消えます。 同じ系列を毎月探して貼る作業が無くなるからです。算定式の品目は、この段階で計算まで終わります。 本格構成で1品目20分になり、この段階が本記事の想定です。 違いは、交渉の品目にも幅が付き、調達額の差が3通りで最初から並んでいることです。 段階を飛ばさないでください。 半自動化で半年分の指標と単価を並べると、どの品目にどの系列が効くかが担当者の間でそろいます。それを台帳に書いてから幅を出すほうが、会議で幅が受け入れられます。
05工数削減シミュレーション
導入後 30件 × 20分 ÷ 60 = 10 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 樹脂・鋼材・非鉄金属など、市況で値動きする原材料を毎月まとまった量で買っている製造業。購買担当が品目ごとに過去の単価と市況の指標を表計算で並べ、来月以降の値動きを勘で見込んでいる場合。仕入先との単価が、市況の指数に連動する算定式で決まる品目と、交渉で決まる品目が混在している場合。購買システムから過去5年以上の発注と単価の実績を書き出せる場合。
- 原材料の大半が固定単価の長期契約で、毎月の値動きが無い会社。品目ごとの購買の量が少なく、まとめ買いの余地が無い場合。保管の場所や資金の都合で、発注の時期を動かせない場合。なお、実際にいつどれだけ買うかの決定、仕入先との交渉の方針、為替や市況の先行きの見立ては、この構成では代替できません。
07最小構成で試す方法
- 値動きの大きい原材料を3品目選び、過去5年分の月ごとの単価を購買システムから書き出す
- 日本銀行の時系列統計データ検索サイトの画面から、各品目に関係する企業物価指数の系列と為替相場をCSVで書き出す
- 単価と指標を同じ表に並べ、指標の何か月前の値が単価と一緒に動いているかを見る
- 手元のAIサービスに表を貼り、「単価の変化率と、指標の1〜3か月前の変化率の関係を見てください」と聞く
- 出てきた関係を、担当者の経験と比べる
この段階ではモデルを作りません。 確かめたいのは、選んだ指標の動きが、自社の単価に数か月遅れて表れているかです。
| 出てきた内容 | 判断 |
|---|---|
| 指標の数か月前の動きと単価の動きが合っている | 分位点回帰で幅を出す段階に進む |
| 単価が指標と関係なく、決まった月にだけ動く | 算定式か交渉の時期で決まっている。区分の整理が先 |
| 単価の動きがほとんど無い | 見込む意味が小さい。その品目は対象から外す |
2行目が出ることは珍しくありません。 失敗ではなく、その品目の単価が、市況よりも仕入先との取り決めの時期で決まっていることが分かったということです。その品目は、取り決めの時期と内容を台帳に書き、算定式の品目と同じく計算で扱えるかを確かめてください。手元のAIサービスに貼るのは単価の変化率だけにし、仕入先の名前は貼りません。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 算定式の品目の見込みが外れる | 単価をモデルで推測している。指数を見込み、単価は算定式で計算する |
| 幅が狭すぎて、実績がよく外れる | 発注の無い月を前の月の値で埋めていないかを見る |
| 検証ではよく当たるのに本番で外れる | 時間の順を無視して分けた。TimeSeriesSplit と gap で未来を見ない |
| 係数がすべて0になる | alpha の既定の1.0が強すぎる。標準化して選び直す |
| 10%点が90%点を上回る | 3つのモデルを別々に作ると起きる。並べ替えて印を付ける |
| 関係の無い系列が効いているように見える | 系列は担当者が説明できるものに絞る |
| 指標の取り違え | /getMetadata で系列の名前を確かめ、台帳にコードと名前を書く |
| 古い指標で見込んだことに気づかない | 指標の最新の月を必ず表に書く |
| 判断メモの数字が表と違う | 生成AIに計算させない。受け取り後に数字を照らす |
| 判断メモに「買うべき」と入る | 指示で禁じ、受け取り後にも語を検知する |
上の3行が、見込みの失敗のほとんどです。 どれも幅が出ているので動いているように見えます。幅に収まった割合を毎月出す仕組みが無いと、ずれに気づけません。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 原材料の品目、仕入先、発注の数量と単価、生産計画の使用量。仕入先との単価は、仕入先との間で外に出さない約束になっていることが多い情報です。
- 生成AIへ渡す範囲を絞る … 渡すのは品目、変化率、調達額の差、幅に収まった割合です。仕入先の名前と仕入先ごとの単価は渡しません
- 幅を確かな見込みとして扱わない … 幅は過去の関係から出したもので、過去に無かった出来事(災害、制度の変更)は入っていません
- 判断を自動にしない … 発注の仕方を決めるのは購買会議です。機械の幅を理由に、発注を自動で前倒しする仕組みは作りません
- 日本銀行の API の留意点を守る … 過度な頻度のアクセスをしない、社外に出す資料に使うときは留意点の文書を読み直す
- 見込みと判断の記録を残す … 幅、判断、実際の単価を並べて残し、後から判断の理由を説明できるようにします
誤りが起きた場合のリスクは、幅を確かなものと信じて大きくまとめ買いすることと、古い指標で見込んで判断を誤ることの2つです。 前者は幅に収まった割合を冒頭に書くことで、後者は指標の最新の月を必ず表に書くことで防ぎます。
10まず何から始めるか
1週目:品目の台帳を作る
購買額の上位30品目について、算定式で決まるか交渉で決まるか、算定式ならどの指数のどの期間を参照するかを書き出します。担当者ごとに受け持ちの品目を確かめます。
2週目:3品目で試す
値動きの大きい3品目で、過去5年の単価と関係する指標を並べ、何か月遅れで動いているかを見ます。担当者の経験と比べます。
3週目:系列を選ぶ
日本銀行の API の /getMetadata で企業物価指数の系列の一覧を取り、品目ごとに2〜3系列を選んで台帳に書きます。
4週目:実績と指標をそろえる
Python で購買の実績と日本銀行の API の指標を毎月そろえ、算定式の品目の単価を計算するところまで作ります。この時点では交渉の品目の幅を出しません。
2か月目: 分位点回帰で交渉の品目の幅を出し、TimeSeriesSplit で検証します。調達額の3通りの比較と判断メモの下書きを付けます。3か月目以降: 幅に収まった割合を毎月出し、会議の判断と並べて残します。全30品目で幅に収まった割合が安定し、会議の資料が第2営業日中にそろうようになった時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
| 日本銀行が2026年2月18日に、時系列統計データ検索サイトでJSON形式やCSV形式で時系列統計データを取得できるAPI機能の提供を始めたこと | 日本銀行: 時系列統計データ検索サイトにおけるAPI機能の提供開始 | 2026-10-07 |
API が /getDataCode・/getDataLayer・/getMetadata の3種類であること。format・lang・db・startDate・endDate(月次は YYYYMM)・code のパラメータ。企業物価指数の DB名が PR01、為替相場が FM08 であること。1回の呼び出しで同じ頻度の系列だけを指定でき、上限が250系列・6万点であること。データが午前8時50分ごろに掲載されること | 日本銀行: API User Manual for BOJ Time-Series Data Search | 2026-10-07 |
| API が予告なく停止・性能低下することがあり、負荷によりアクセスが制限されうること。過度な頻度のアクセスが禁止されていること。API を使ったサービスを公開する場合の届け出とクレジットの表示の求め | 日本銀行: Notice Regarding the Use of the API Service | 2026-10-07 |
QuantileRegressor が条件付きの分位点を予測する線形の回帰で、ピンボール損失を最小にし外れ値に強いこと。quantile の既定が0.5、alpha の既定が1.0(L1 の正則化)、ソルバーの既定が highs であること(版 1.9.1) | scikit-learn: QuantileRegressor | 2026-10-07 |
TimeSeriesSplit が時間順のデータの分け方を作り、ほかの分け方は未来のデータで学習して過去を評価することになるため不適切とされること。n_splits の既定が5、gap で学習用の末尾を空けられること | scikit-learn: TimeSeriesSplit | 2026-10-07 |
構造化出力で output_config.format に type: "json_schema" を指定できること。数値の範囲(minimum/maximum)や文字数の制約が使えず、additionalProperties は false にする必要があること | Claude Docs: Structured outputs | 2026-10-07 |
実際にいつどれだけ買うかは、購買会議で決めてください。 本記事は製品と公的な統計の公開ドキュメントで確認できた範囲だけを扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-0641)についてのご相談はこちらから。
