GPI開発日誌 Vol.12|まだ公開できないGPIを、なぜ裏側で動かすのか―Free-source Shadow Operation開始

GPI開発日誌 Vol.12:Free-source Shadow Operation
目次

はじめに

こんにちは。

GadgetStreemでは現在、ガジェット価格の上昇圧力を一つの数字で確認できる独自指数、

GPI(Gadget Pressure Index/ガジェット価格圧力指数)

を開発しています。

ここまでの開発では、GPIを構成する5つの領域について、それぞれ実際のデータを調査してきました。

構成要素暫定ウェイトこれまでの開発
USD/JPY30%Federal Reserve H.10
DRAM25%BLS等の関連ベンチマークを検証
NAND20%BLS Storage関連ベンチマークを検証
GPU需給15%SEC・Steam・国内小売を分離して検証
海上運賃10%GSCPI・BLS Deep Sea Freightを検証

Vol.11では、その中でも特に難しいGPU需給について、

  • SEC EDGAR
  • Steam Hardware Survey
  • 日本のGPU小売価格
  • Availability

を別々のシグナルとして扱う設計を紹介しました。

ここまで来ると、

「候補データはかなり揃ってきた。それなら一度GPIを計算してみればいいのでは?」

と思いますよね。

実際、私たちも次の段階へ進みました。

ただし、

公開はしません。

代わりに始めたのが、

Free-source Shadow Operation

です。


Shadow Operationとは?

Shadow Operationを簡単に言うと、

本番と同じようにデータを流して計算・検証するが、その結果を正式なGPIとして公開しない運用

です。

例えば、

公式・利用可能なデータ
        ↓
Collector
        ↓
PostgreSQL
        ↓
Validation
        ↓
Scoring
        ↓
GPI候補計算
        ↓
Shadow Evidence

という処理を実際に動かします。

しかし最後に、

公開

へは進みません。

内部でだけ動かします。


なぜ公開せずに動かすのか

理由は単純です。

設計書だけでは分からない問題が、実データを流すと必ず出てくるからです。

これまでの開発でも、

  • BLS取得時のHTTP 403
  • APIタイムアウト
  • GSCPIの小数精度による偽Revision
  • 月次データと週次GPIのFrequency差
  • GPUデータの意味の違い
  • データ利用権

など、実際に動かして初めて見つかった問題がありました。

つまり、

Unit Testが通った
Collectorが動いた
DBへ保存できた

だけでは不十分です。

GPIとして必要なのは、

5つのデータを同時に運用しても破綻しないか

です。


Free-source Shadow Profileを作成

そこでGadgetStreem Intelligenceでは、

gpi-free-proxy-shadow-v0.1

という専用プロファイルを作成しました。

このプロファイルは、

無料または利用可能な公的データだけを使って、GPI全体の動作を検証するための非公開構成

です。

実際のIssue #44では、このShadow Profile、実行Engine、Evidence Template、Policy、CI、Runbookなど26ファイル・2,141行規模の機能を追加しました。


Shadowで使うデータ

初期Shadow Profileでは、次の構成を採用しました。

USD/JPY

Federal Reserve H.10。

ここはこれまでの開発どおりです。

Federal ReserveはH.10で、米ドルに対する各国通貨の為替レートを公開しています。日本円についても日次観測値が掲載され、通常は前営業週分が米国東部時間の月曜日16時15分に公開されます。


DRAM候補

BLSの公的価格系列を、DRAMそのものではなく、

Proxy / Benchmark

として利用します。

BLSは公式Public Data APIを提供しており、HTTPSのGET/POSTを通じて公開済み統計をJSONなどで取得できます。


NAND候補

こちらもBLSのStorage Device関連系列を、

NANDそのものではないBenchmark

として利用します。


Freight候補

BLS Deep Sea Freight系列を使用します。

ただし、

Global Container Spot Rateそのものではない

という意味上の制約を残します。


GPU

GPUだけは少し特殊です。

初期Shadow Operationでは、

  • Manual Steam
  • 将来のSEC signal

という経路を用意しました。

Steam Hardware Surveyは毎月、Steam利用者のハードウェア構成を調査しており、参加は任意・匿名です。

またSEC EDGARについては、data.sec.govのREST APIから企業提出履歴やXBRL財務データを認証・APIキーなしで取得できます。

ただし、どちらもGPU需給そのものではないため、Production Sourceとしては扱いません。


「無料版GPI」を作るわけではない

ここはかなり重要です。

gpi-free-proxy-shadow-v0.1

という名前だけを見ると、

「有料データが使えないから、無料データ版GPIを作った」

ように見えるかもしれません。

そうではありません。

これは、

無料データを正式版へ代用するためのプロファイルではなく、GPIのシステム全体を検証するための実験環境

です。

そのため、DRAMやNANDなどについて、

Proxy
↓
そのままProduction Sourceへ昇格

とはしません。


固定ウェイトは変えない

GPIの初期ウェイトは、

USD/JPY   30%
DRAM      25%
NAND      20%
GPU       15%
Freight   10%

です。

Shadow Operationでも、この構成を維持します。

Issue #44の設計でも、

fixed weightsを維持し、interpolationとrenormalizationを禁止

することを明確にしました。

例えばGPUが使えないからといって、

GPU 15%を削除

残り85%を
100%になるよう再計算

とはしません。


なぜ85%を100%にしないのか

例えば、

USD/JPY:30%
DRAM:25%
NAND:20%
GPU:未準備
Freight:10%

なら、利用可能なのは

30 + 25 + 20 + 10
= 85%

です。

ここで、

85点満点を100点満点に換算すればいい

と考えることもできます。

しかし、それを行うと、

本来15%あるはずのGPUが存在しない指数

になります。

例えばUSD/JPYの実質的な影響度は、

30 / 85
≈ 35.3%

へ勝手に増えてしまいます。

それでは、

USD/JPY 30%

という最初のMethodologyと違います。

だから、

不足ウェイトは不足したまま表示する

というルールにしています。


月次データを週次へ補間しない

もう一つ禁止しているのが、

存在しない週次値を作ること

です。

DRAM候補、NAND候補、Freight候補には月次データがあります。

例えば、

6月:100
7月:104

だったとしても、

6月第2週:101
6月第3週:102
6月第4週:103

とはしません。

それは実際に観測された市場価格ではないからです。

GSIのMethodology Candidateでも、線形補間、silent substitution、missing-weight renormalization、将来データの利用を禁止しています。


過去データを使って実際に流す

Shadow Operationでは、最新データだけではなく、過去の期間も実際に処理します。

Issue #44では最初のHistory Windowを、

2022-01-01
    ↓
2026-07-18

に固定しました。

これは約4年半の期間です。

なぜ過去データが必要なのかというと、

0〜100へ変換するためには「今が過去と比べてどれくらい異常なのか」を知る必要がある

からです。


実際のネットワークへ接続して実行

Shadow Operationは、Fixtureだけのテストでは終わらせませんでした。

実際のBatch Cでは、

  • New York Fed
  • BLS Public Data API

などへネットワークアクセスしています。

実行ログでは、

New York Fed GSCPI
HTTP 200 OK

BLS Public Data API
HTTP 200

を確認しています。

そして実データを使ってShadow InputとShadow Packageを生成しました。


最初のReal Shadow Cycleが成功

そして、

最初の実Shadow Cycle

を実行しました。

結果は、

BATCH C PASSED

Historical window:
2022-01-01 ~ 2026-07-18

Decision:
NO_GO

でした。

「PASSEDなのにNO_GO?」

と思うかもしれません。

ここが今回の記事で最も重要なポイントです。


PASSEDとGOは違う

BATCH C PASSED

は、

予定していたShadow Operationを正しく実行できた

という意味です。

一方、

NO_GO

は、

公開版GPIとして出してよい条件はまだ満たしていない

という意味です。

つまり、

システムとして正常
= PASS

公開準備
= NO_GO

は両立します。

むしろ、これが期待した結果です。


最初のCycleでは85%が利用可能

実行後、Shadow Cycle #1を正式にレビューしました。

チェックポイントは、

2026-07-18

です。

結果は、

Cycle count:1
必要Cycle数:8

Automated slots fresh:true

Ready weight:0.85

GPU data ready:false

Coverage:
PARTIAL_GPU_PENDING

Lag:
PASS

Revision:
BASELINE_ONLY

Overlap:
INSUFFICIENT_CYCLES

Effective decision:
NO_GO

でした。

かなり意味のある結果です。


85%は「GPI=85点」という意味ではない

ready weight = 0.85

を、

GPIが85点

と読んではいけません。

これは、

固定100%の構成のうち、85%分についてShadow計算に必要なデータ状態が整っていた

という意味です。

このときGPU15%はまだReadyではありませんでした。

したがって、

GPI:85

とは公開しません。


なぜGPUだけPendingなのか

GPUについてはVol.11で紹介したとおり、

  • SEC EDGAR
  • Steam Hardware Survey
  • 国内GPU小売

という複数経路を検証しています。

しかし最初のShadow Cycle時点では、

GPUをGPIの15%として扱える状態

には達していませんでした。

そのため、

PARTIAL_GPU_PENDING

と判定しました。


8回のCycleを要求

1回成功しただけでは、Methodologyを評価できません。

そこでShadow Operationでは、

最低8回のWeekly Cycle

を評価する設計にしました。

初回は、

Cycle 1 / 8

です。

Issue #45では、これを改ざんしにくいAppend-only Ledgerとして記録し、

  • Coverage
  • Lag
  • Revision
  • Overlap
  • Fixed Weight

などをCycleごとにレビューする仕組みを追加しました。


なぜ8週間必要なのか

一度正常に動くだけなら、

たまたま全データが揃った週だった可能性があります。

しかし実運用では、

Cycle 1
正常

Cycle 2
BLS更新なし

Cycle 3
GPU一部欠損

Cycle 4
Revision発生

Cycle 5
Provider遅延

といったことが起きます。

だから、

複数回連続で回したときに、どのように壊れるのか

を見る必要があります。

指数は、

一度計算できることより、継続して計算できること

の方が重要です。


Evidenceも残す

Shadow Cycleでは結果だけでなく、

Evidence

も保存します。

実際のCycle #1では、

  • Audit ZIP
  • Execution Log
  • JSON
  • SHA-256 Manifest
  • Package Digest

を使って、実行結果を後から検証できるようにしました。

レビューでは、ZIP内の6つのJSONすべてについて内部SHA-256 Manifestとの一致を確認し、Cycle Recordを再生成してもコミット済みRecordとbyte-for-byteで一致しました。

つまり、

「そのとき何が起きたのか」

を後から再確認できます。


なぜSHA-256まで使うのか

例えば数か月後に、

「2026年7月18日のShadow結果は、本当に当時の結果なのか?」

を確認したくなるかもしれません。

Evidenceを書き換えられる状態では、検証できません。

そこでファイルの内容から、

SHA-256

というDigestを計算します。

一文字でも変われば別のDigestになります。

これにより、

当時レビューしたArtifactと、今見ているArtifactが同じか

を確認できます。


生データをそのままGitへ保存しない

一方で、すべてのデータをGitHubへ保存するわけでもありません。

データによっては、

  • 再配布条件
  • ライセンス
  • 個別商品情報
  • Provider制約

があります。

そこでShadow Evidenceでは、

Sanitized Metadata

を保存します。

Issue #44でも、

sanitized PostgreSQL metadata export

を採用しています。

つまり、

何を取得したか
いつ取得したか
何件あったか
どのRevisionか
どのDigestか

は残しつつ、

不必要なRaw Dataは残さない設計です。


GitHub Actionsでも契約を検証

Free-source Shadow Operationには、専用CIも追加しました。

初期実装時には、

Repository Health:PASS

Ruff format:PASS

Ruff lint:PASS

Shadow Operation Contract:
14 passed

Targeted Shadow + CLI:
48 passed

API tests collected:
412

まで確認しています。

ここでも重要なのは、

テストが通れば自動的に公開されるわけではない

ことです。


Shadow OperationからProductionへ直結させない

Shadow環境ではProxyが動いています。

しかし、

Shadowで安定
↓
自動でProductionへ昇格

という仕組みにはしていません。

Productionに進むには、

  • Source Rights
  • Semantic Fit
  • Historical Coverage
  • Methodology Review
  • Weight Approval
  • Legal / Data-use Review
  • Release Approval

など、別のGateが必要です。


将来、有料データへ移行できる設計を残す

今回のShadow Profileは無料データを使っています。

しかし、将来、

  • 正式なDRAM Spot Price
  • NAND Wafer Price
  • Global Container Spot Rate
  • より直接的なGPUデータ

などの商用利用権を取得できる可能性があります。

そこでIssue #44では、

future commercial adapter / parallel-run / Methodology migration path

を残しました。

例えば将来、

Free Proxy
      +
Commercial Source

を同時にShadowで走らせ、

方向性
変化率
Lag
異常検出

を比較できます。

いきなりデータソースを切り替える必要はありません。


「無料データで妥協する」のではない

GPI開発では、

高額なライセンスが払えないなら完成しないのでは?

という問題に何度も直面しました。

しかし今回のShadow Operationによって、

正式データが揃うまで何もできない

という状態から抜けることができました。

今できることは、

無料・公的データ
↓
Collector
↓
履歴蓄積
↓
Validation
↓
Scoring
↓
Composite Simulation
↓
Shadow Cycle
↓
Evidence

です。

つまり、

Production Dataをまだ採用できなくても、システムとMethodologyの問題は先に潰せます。


Shadow CalculationはGO、Public PublicationはNO_GO

この考え方は、現在のGSI Governanceでも明確に分離しています。

Free Official Source Re-entry Policyでは、

Shadow Calculation:GO

Internal Validation:GO

Public Publication:NO_GO

Paid Data Acquisition:
CLOSED_FOR_INITIAL_PHASE

Fixed weights preserved:true

という状態です。

非常に分かりやすく言えば、

裏側ではどんどん試してよい。表にはまだ出さない。

ということです。


開発はこの後もさらに進んでいる

ここで、時系列について補足しておきます。

今回紹介しているのは、

Free-source Shadow Operationを初めて実運用へ移した段階

です。

GadgetStreem Intelligenceの実際の開発は、その後も継続しており、

  • 各構成要素のSource再評価
  • Production Qualification
  • Historical Evidence
  • Methodology Candidate
  • GPU Shadow Cycle
  • SEC EDGAR Reviewed Signal
  • Freight Qualification

など、さらに先のGateへ進んでいます。

したがって、本記事中の

ready weight 0.85

や

Cycle 1 / 8

は、

現在のGPI完成度を示す最新値ではなく、最初のReal Shadow Cycleで得られた実績値

です。

この点は誤解のないよう明記しておきます。


今回できるようになったこと

Vol.12までで、

Federal Reserve
BLS
New York Fed
SEC
Steam
国内小売Shadow
        ↓
各Collector / Import
        ↓
PostgreSQL
        ↓
Validation
        ↓
Shadow Scoring
        ↓
固定ウェイト評価
        ↓
Evidence Package
        ↓
Cycle Review

というところまで進みました。

ついに、

GPIの各部品を個別に作る段階から、全体を一緒に動かす段階

へ入ったことになります。


次のVol.13で紹介すること

ここまで何度も、

0〜100へ変換する

という言葉を使ってきました。

しかし、

USD/JPY:162円

BLS Semiconductor:○○

Storage PPI:○○

GSCPI:○○

GPU Retail:○○

という、単位も変動幅も更新頻度も違うデータを、

どうやって同じ

0〜100

へ変換するのでしょうか。

次回のGPI開発日誌 Vol.13では、

異なる市場データを同じ0〜100スケールへ変換する「Component Scoring」

を取り上げます。

  • なぜ単純な前週比だけではダメなのか
  • Z-scoreとは何か
  • なぜRobustな手法を使うのか
  • 0と100は何を意味するのか
  • 異常値をどう扱うのか
  • 月次データをどう週次Checkpointへ合わせるのか
  • Scoreが100になったら何を意味するのか

を、できるだけ分かりやすく紹介します。

ここから、いよいよ

「市場データ」が「GPIの数字」へ変わり始めます。


まとめ

Vol.11までで、GPIを構成する5つの領域について、実際のデータ取得経路が少しずつ揃ってきました。

今回のVol.12では、それらを個別にテストするだけではなく、

Free-source Shadow Operation

として、実際に一つのPipelineへ流し始めました。

最初のReal Shadow Cycleでは、

Historical Window:
2022-01-01 ~ 2026-07-18

Automated Slots Fresh:
true

Ready Weight:
85%

GPU:
PARTIAL_GPU_PENDING

Cycle:
1 / 8

Decision:
NO_GO

という結果になりました。

85%のデータが使えるからといって、85%を100%へ拡大してGPIを公開することはしません。

不足ウェイトを他の項目へ再配分もしません。

月次データから架空の週次値も作りません。

そして、

BATCH C PASSED

でも、

Public Release = NO_GO

です。

これが今回作ったShadow Operationの役割です。

公開する前に、本物のデータで壊す。

壊れ方を確認し、直し、それでも説明できる状態になってから公開する。

GadgetStreem Intelligenceは、ようやく各Collectorを作る段階から、

「指数全体を実際に運用して検証する段階」

へ進みました。

まだGPIの数字を一般公開する段階ではありません。

しかし裏側では、すでに実データが流れ、複数の市場データを組み合わせる検証が始まっています。

次回はいよいよ、

この異なるデータをどうやって0〜100へ変換するのか

という、GPIの計算部分へ進みます。


※GPIは現在開発中の実験的な市場分析指標です。
本記事で紹介したgpi-free-proxy-shadow-v0.1は内部検証用の非公開Shadow Profileであり、無料Proxyを正式なDRAM、NAND、GPU、海上運賃のProduction Sourceとして採用したことを意味しません。
また、初回Shadow Cycleのready weight 0.85はGPIスコア85を意味するものではなく、当該CheckpointでShadow評価可能だった固定ウェイトの割合です。
個別製品の将来価格や購入利益を保証するものではなく、投資判断を目的とした金融指標でもありません。

GPI開発日誌 Vol.12:Free-source Shadow Operation

この記事が気に入ったら
フォローしてね!

コメント

コメントする

目次