GPI開発日誌 Vol.8|NAND価格はSSD価格ではない。ストレージ価格ベンチマークCollectorを実装

目次

はじめに

こんにちは。

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

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

を開発しています。

最初の構想では、GPIを次の5項目で構成する計画を立てました。

構成要素暫定的な重み
ドル円30%
DRAM価格25%
NAND価格20%
GPU需給15%
海上運賃10%

Vol.1ではDocker、PostgreSQL、FastAPIなどの開発基盤を構築し、Vol.2〜Vol.5ではUSD/JPY Collectorの設計・実装・運用基盤を整えました。公開済みの記事でも、USD/JPYの次にDRAM、NAND、GPU需給、海上運賃へ進むロードマップを示しています。

Vol.6ではDRAM専用データの候補を調査し、Vol.7ではBLSの半導体輸入価格指数を取得するCollectorを実装しました。

今回から取り組むのは、GPIの三つ目の構成要素、

NAND価格

です。

しかし、DRAMの調査と同じく、最初に大きな問題へ直面しました。

GPIで使う「NAND価格」とは、具体的に何の価格なのでしょうか。


NANDはどこで使われているのか

NANDフラッシュメモリは、データを保存するための半導体です。

身近な製品では、

  • SSD
  • スマートフォン
  • タブレット
  • USBメモリ
  • SDカード
  • ゲーム機
  • 組み込みストレージ

などに使われています。

PC向けSSDだけでなく、スマートフォンやゲーム機のストレージ価格にも関係するため、NANDはガジェット市場全体を見るうえで重要な部品です。

GPI Ver.0.1では、この影響を考慮してNANDへ暫定20%の重みを設定しています。

しかし、NANDの価格変動と、店頭で売られているSSDの価格変動は同じではありません。


NAND価格は一つではない

「NAND価格」と呼ばれるものには、複数の段階があります。

NAND Wafer
    ↓
NANDチップ
    ↓
コントローラー・基板・筐体
    ↓
SSDなどの完成ストレージ製品
    ↓
卸売価格
    ↓
小売価格

上流には、NAND WaferやNANDチップの価格があります。

下流には、SSD、USBメモリ、メモリーカードなどの完成品価格があります。

完成品の価格には、NAND以外にも、

  • SSDコントローラー
  • DRAMキャッシュ
  • 基板
  • ファームウェア
  • 放熱部品
  • 製造費
  • ブランド
  • 輸送費
  • 販売店の在庫
  • セールやポイント還元

などが影響します。

つまり、

NANDが値上がりした
=SSDが同じ割合ですぐ値上がりする

とは限りません。


本当に測りたいのは上流のNAND価格

GPIが目指しているのは、現在のSSD販売価格をそのまま表示することではありません。

これからガジェット価格へ上昇圧力がかかる可能性を観測すること

が目的です。

そのため、正式なNAND構成要素では、完成SSDより上流にある、

  • NAND Wafer Spot Price
  • NAND契約価格
  • 容量・世代別のNAND価格

などを使う方が、GPIの目的には合っています。

開発では、DRAMと同じくTrendForceが公開するNAND Wafer Spot Priceを正式候補として調査し、専用のData Source Review、ADR、Collector仕様を作成しました。


しかし、NAND専用データもすぐには使えなかった

TrendForceのNAND価格は、NAND市場との意味の一致という点では有力です。

しかし、公開ページで数字を閲覧できることと、

  • 自動取得
  • PostgreSQLへの保存
  • 過去データの保持
  • 派生指数への利用
  • 商用サイトでの公開

が許可されていることは別です。

DRAMと同様に、利用権と継続費用を確保できていない状態でスクレイピングすることは採用しませんでした。

現在の判断は次のとおりです。

TrendForce NAND Wafer Spot Price

データ適合性:高い
NANDとの意味の一致:高い
自動取得権:未確保
保存・派生利用権:未確保
現段階の判断:正式候補として保留

「データが悪いから不採用」ではありません。

正式に利用できる条件が整うまで、Production Collectorを作らない

という判断です。


無料で利用できる代替候補を探す

NAND専用価格をすぐに利用できないからといって、主観で点数を付けるわけにはいきません。

そこで、公式APIから取得でき、過去データもあり、継続運用できる公的データを調査しました。

候補となったのが、米国労働統計局BLSのProducer Price Indexです。

使用する系列IDは、

PCU334112334112P

です。

この系列の正式名称は、

Producer Price Index by Industry: Computer Storage Device Manufacturing: Primary Products

です。

月次、季節調整なし、基準は2004年12月=100として公開されています。


Producer Price Indexとは何か

BLSのProducer Price Index、PPIは、生産者が国内で生産した商品やサービスについて受け取る価格が、時間とともにどのように変化したかを測る指数です。

消費者が支払う価格ではなく、売り手・生産者側から見た価格変化を捉えます。

今回の系列は、NAICSコード334112に対応するComputer Storage Device Manufacturingを対象としています。BLSの資料でも334112はComputer storage device manufacturingとして分類されています。


ただし、これはNAND価格ではない

ここが今回の記事で最も重要な部分です。

PCU334112334112P

は、NAND WaferやNANDチップの価格指数ではありません。

対象は、Computer Storage Device ManufacturingのPrimary Productsです。

つまり、NANDそのものより下流にある、

コンピューター向けストレージ機器の生産者価格

を表す、より広い指数です。

系列名とBLSのPPI定義から判断すると、これはNANDの原材料価格ではなく、ストレージ機器を製造・出荷する側の価格変化を捉えるものです。これは系列の公表範囲から行う推論であり、NAND Wafer Spot Priceと同一視することはできません。

そのため、GadgetStreem Intelligenceでは内部名称を、

computer_storage_device_price_benchmark

としました。

nand_price

とは呼びません。


今回のデータの役割

このBLS系列は、正式なNAND価格の代わりではありません。

役割は、

ストレージ機器分野で生産者側の価格圧力がどのように変化しているかを確認するベンチマーク

です。

例えば、NAND価格の上昇がストレージ製品の生産者価格へ伝わっているなら、一定の時間差を伴ってBLS指数にも変化が現れる可能性があります。

一方で、

  • NAND以外の部材価格
  • 製造コスト
  • 製品構成の変化
  • 高性能製品への移行
  • 企業間取引価格

などにも影響されます。

したがって、

BLSストレージ機器価格指数
=NAND価格

とは扱いません。


Collectorを実装

データの意味と制約を明確にしたうえで、BLS公式データを取得するCollectorを実装しました。

今回追加した主な内容は次のとおりです。

  • BLSストレージ機器Collector
  • データ取得サービス
  • CLIコマンド
  • APIレスポンスの固定テストデータ
  • Unit Test
  • PostgreSQL Integration Test
  • TrendForce NAND Data Source Review
  • BLSストレージ価格Data Source Review
  • NANDデータソース戦略ADR
  • NAND Collector仕様書

実装では21ファイルが変更され、Collector、サービス、テスト、ADR、データソース文書が追加されました。


Collectorの処理フロー

Collectorは次の順序で動作します。

BLS Public Data API
        ↓
PCU334112334112Pを取得
        ↓
系列ID・年・月・値を検証
        ↓
M01〜M12だけを採用
        ↓
月次観測値へ正規化
        ↓
重複・訂正を確認
        ↓
PostgreSQLへ保存

BLS Public Data APIは、BLS各プログラムの公開済み時系列データを取得するための公式APIです。Version 1は登録なしで利用でき、GETまたはPOSTを使ってJSON形式の時系列データを取得できます。

今回のCollectorでは、次のコマンドを使用します。

gsi collect-bls-storage-devices --limit 24

--limit 24は、最新24か月分を取得対象とする指定です。


最初の実行ではタイムアウトが発生

最初のCollector実行では、BLS APIからの応答を待っている途中でタイムアウトが発生しました。

Unable to download BLS API data:
The read operation timed out

この時点では、処理を成功扱いにせず、エラーとして終了しました。

重要なのは、タイムアウトした状態で中途半端な観測値を保存しなかったことです。

通信失敗
    ↓
Collectorを失敗として終了
    ↓
部分的な成功として扱わない
    ↓
安全に再実行

Vol.4とVol.5で設計した、

一時的な通信障害と、データ構造の問題を区別する

という運用方針が、実際のCollectorでも機能しました。


再実行で24か月分の保存に成功

再実行した結果、最新24か月分の取得と保存に成功しました。

indicator:computer_storage_device_price_benchmark
series_id:PCU334112334112P
selected:24
inserted:24
revised:0
unchanged:0
status:success

24か月分すべてが新規データとしてPostgreSQLへ保存されています。


2回目以降は24件すべて変更なし

同じ条件で再びCollectorを実行したところ、結果は次のようになりました。

selected:24
inserted:0
revised:0
unchanged:24
status:success

新しい行は追加されず、既存の24観測がすべてunchangedとして判定されました。さらにもう一度実行しても、同じく24件すべてが変更なしとなっています。

これによって、

1回目:24件を保存
2回目:24件すべて変更なし
3回目:24件すべて変更なし

という冪等性を確認できました。


PostgreSQLの保存状態も確認

データベースを確認した結果は次のとおりです。

total_rows:24
distinct_months:24
max_revision:0

同じ月が重複しておらず、すべて最初のRevisionとして保存されています。

BLSが将来、過去の値を訂正した場合は、古い値を上書きせず、

Revision 0:最初に取得した値
Revision 1:後から訂正された値

として履歴を残します。


実装はmainへマージ済み

NANDデータソースレビューとBLSストレージ機器価格Collectorは、Pull Requestを経てmainへ取り込まれました。

GitHub履歴では、

127f7a7
feat: add BLS storage device benchmark and NAND source review (#12)

として記録されています。

つまり、今回のCollectorは設計案やローカル実験ではなく、GadgetStreem Intelligenceの正式なコードベースへ追加済みです。


過去66観測まで拡張

初回確認では最新24か月分を保存しました。

その後、GPIの過去検証に必要な履歴を追加取得しています。

BLSストレージ機器ベンチマークでは、

保存前:24観測
新規追加:42観測
保存後:66観測
変換後サンプル:54

となりました。

内部のスコアリング準備判定はREADYです。

ただし、このREADYは、

NAND構成要素として公開できる

という意味ではありません。

あくまで、

履歴データが、内部検証用の計算を実行できる量へ達した

という状態です。


GPIでは引き続き「benchmark_only」

BLSストレージ機器価格系列の現在の適格性は、

benchmark_only

です。

実際の市場データ検証では、

  • 完全性:PASS
  • 連続性:PASS
  • 鮮度:PASS
  • Revision整合性:PASS
  • 数値妥当性:PASS
  • Governance Readiness:WARN

となっています。

データ品質自体は検証を通過しているものの、NAND価格として正式利用するためのガバナンス承認は完了していません。

したがって、

gpi_eligible:false

です。


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

GPIは週次で更新する予定ですが、BLSのPPIは月次です。

月次の観測値しかないにもかかわらず、2点の間を直線で結び、

第1週:60.1
第2週:60.2
第3週:60.3
第4週:60.4

という架空の市場変動を作ることはしません。

現在の無料プロキシ戦略では、

  • 最新の月次観測値を次回公表まで持ち越す
  • 線形補間は禁止
  • 一定期間更新がなければStale
  • 公式Revisionを追跡する
  • 固定ウェイトの自動再配分は禁止
  • NAND枠への自動代入は禁止

というルールを採用しています。DRAM候補とNAND候補は選定されましたが、両方ともProduction Readyではなく、Methodology変更も未承認です。


NANDの20%はまだ割り当てていない

GPI Ver.0.1では、NAND価格へ暫定20%を設定しています。

しかし、BLS Collectorが完成したからといって、この20%をBLS系列へ割り当てたわけではありません。

現在の状態は次のとおりです。

NAND専用データ候補:TrendForce
正式ライセンス:未確保
BLS Collector:実装済み
BLSデータ取得:成功
履歴保存:成功
冪等性:確認済み
履歴データ量:READY
BLSの役割:benchmark_only
NANDとの意味の一致:未証明
NAND 20%の割り当て:なし
Methodology変更:未承認
公開:未承認

欠けている20%を、ドル円やDRAMへ自動的に振り分けることもありません。

そうすると、当初決定したGPIの意味が変わってしまうためです。


内部ではスコアを計算できる段階へ

蓄積した66観測を使い、BLSストレージ機器ベンチマークを0〜100へ変換する内部計算も実行できる段階へ進みました。

しかし、これはあくまでShadow検証です。

  • スコアを計算できる
  • データ量が十分にある
  • Collectorが安定している

という条件だけでは、公開構成要素にはなりません。

正式公開には、

  • NAND価格との方向性比較
  • 時間差の検証
  • 日本のSSD小売価格との比較
  • Methodologyレビュー
  • データ利用レビュー
  • 公開承認

が必要です。

そのため、内部計算で得られた具体的な数値は、現段階では公開GPIとして表示しません。


Shadow運用へ組み込み

今回のストレージ機器ベンチマークは、後続の無料ソースShadow運用へ組み込まれています。

Shadow運用では、実際の公的データを使いながら、

  • 過去データを継続取得できるか
  • 欠損が発生しないか
  • 月次値を週次計算へ安全に揃えられるか
  • Revisionを追跡できるか
  • スコアが不自然に変動しないか
  • 他の構成要素と同時に処理できるか

を非公開で検証します。

現在の無料ソースShadowプロファイルでは、BLS公的系列をDRAM、NAND、海上運賃の候補プロキシとして使用しますが、補間、ウェイト再配分、公開数値への自動採用は禁止されています。


Collectorが動いても公開判定はNO_GO

今回の開発で、

  • データソースを選定できた
  • Collectorを実装できた
  • PostgreSQLへ保存できた
  • 再実行時の重複を防げた
  • 過去履歴を取得できた
  • 内部スコアを計算できた

ところまで進みました。

それでも、公開判定は

NO_GO

です。

これは開発失敗を意味しません。

必要な根拠が揃うまでは公開しない

というルールが正しく機能している状態です。


NANDとの関係をどう検証するのか

今後は、BLSストレージ機器価格とNAND市場の関係を検証します。

上昇・下落方向の一致

NAND Wafer価格が上昇した期間に、BLS系列も同じ方向へ動いているか確認します。

時間差

上流のNAND価格が変化してから、ストレージ機器の生産者価格へ反映されるまでの時間を調べます。

日本のSSD小売価格との比較

GadgetStreemで追跡しているSSDやメモリの小売価格と比較します。

NAND以外の影響

コントローラー、基板、物流、製品構成など、NAND以外の要因に引っ張られていないか確認します。

大きな市場変化を捉えられるか

NANDが急騰・急落した際に、BLS系列が変化を捉えられるかを調べます。

この検証に通らなければ、Collectorが安定して動いていてもNANDの20%へは採用しません。


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

今回の開発によって、次のデータパイプラインが完成しました。

BLS Public Data API
        ↓
PCU334112334112P
        ↓
Storage Benchmark Collector
        ↓
データ検証
        ↓
PostgreSQL
        ↓
Revision管理
        ↓
過去データ拡張
        ↓
Shadow検証

USD/JPY、BLS半導体ベンチマークに続いて、三つ目の公的データCollectorが動き始めました。

ただし、ここでも、

取得できることと、NAND価格として使えることは別

という原則を守っています。


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

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

世界の供給網圧力を示すGSCPI Collector

を取り上げます。

ニューヨーク連銀が公開するGSCPIは、輸送コストや製造業の供給制約などを組み合わせて、世界のサプライチェーン圧力を表す指標です。

しかし、

GSCPI=海上運賃

ではありません。

GPIの海上運賃10%へそのまま入れることはできないため、

  • GSCPIが何を測っているのか
  • 海上輸送費とどこが違うのか
  • 公式データをどう取得するのか
  • ベンチマークとしてどこまで使えるのか

を整理します。

実際の開発では、GSCPI Collectorもすでに実装・保存・履歴拡張まで進んでいるため、次回はその結果を紹介します。


まとめ

Vol.7では、BLS半導体輸入価格指数のCollectorを実装し、DRAM関連の検証用プロキシとしてShadow運用を始めました。

今回のVol.8では、NAND価格について調査し、

  • NAND Wafer価格とSSD価格は異なる
  • 完成ストレージ機器価格にはNAND以外の要因も含まれる
  • TrendForceのNANDデータは正式候補として保留
  • BLSのストレージ機器生産者物価指数を検証用に採用
  • Collectorを実装
  • 24か月分をPostgreSQLへ保存
  • 再実行時の重複防止を確認
  • 過去66観測まで履歴を拡張
  • Shadow運用へ組み込み

という段階まで進みました。

BLS Collectorは正常に動いています。

しかし、現在の役割は、

benchmark_only

です。

NANDの暫定20%はまだ割り当てておらず、GPIの公開判定もNO_GOのままです。

GadgetStreem Intelligenceでは、

数字が取得できたから採用する

のではなく、

その数字が本当に測りたい市場を表しているか確認してから採用する

という方針を守ります。

次回は、世界のサプライチェーン圧力を表すGSCPIと、海上運賃の違いを整理します。

引き続き、GPIが実際の公開指数として完成するまでの開発過程をお伝えしていきます。

ぜひ一緒に見守っていただけるとうれしいです。


※GPIは現在開発中の実験的な市場分析指標です。
BLSのComputer Storage Device Manufacturing PPIは、NAND Wafer価格やNAND Spot Priceそのものではありません。
現時点では検証用ベンチマークとして扱い、GPIのNAND構成要素へウェイトは割り当てていません。
個別製品の将来価格、値上げ、値下げ、在庫状況、購入利益を保証するものではなく、投資判断を目的とした金融指標でもありません。

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

コメント

コメントする

目次