• #data-generation
  • #sqlite
  • #troubleshooting
未分類

財務データ生成スクリプトの企業数差異分析

概要

3つのデータ生成スクリプトで出力される企業数に差異があることが判明した。本ドキュメントでは、差異の原因を分析し対処方法を記載する。

現状の企業数

スクリプト出力ファイルサイズ企業数
generate-eac-light-data.mjseac-light-data.ts3.09MB154社
generate-scatter-data.mjsscatter-data.ts81.1KB152社
generate-financial-data.mjsfinancial-data.ts3.32MB152社

companiesテーブル全体は156社

データソースの関係

companies テーブル (156社)
    │
    ├─→ eac_annual テーブル (154社) ─→ eac-light-data.ts
    │       │
    │       └─→ + 2026-2029 Estimate条件 (152社) ─→ scatter-data.ts
    │
    └─→ v_annual_data ビュー (152社) ─→ financial-data.ts

差異の原因(7社)

一覧表

企業eac-lightscatterfinancial欠損理由
BRKSN×××全データ未取得
WOLF××EACデータなし
AZN×財務諸表なし
MPWR×財務諸表なし
QRVO×財務諸表なし
HUT×2026-2029のEPS/PER予測なし
MARA×2026-2029のEPS/PERが全てnull

詳細分析

BRKSN(Berkshire Grey)

  • companiesテーブルには存在
  • eac_annualテーブルにデータなし
  • v_annual_dataビューにデータなし
  • 原因: Koyfinからのデータ取得が未完了

WOLF(Wolfspeed)

  • companiesテーブルには存在
  • eac_annualテーブルにデータなし
  • v_annual_dataビューにはデータあり
  • 原因: EACデータのみ未取得

AZN, MPWR, QRVO

  • companiesテーブルには存在
  • eac_annualテーブルにはデータあり
  • v_annual_dataビューにデータなし
  • 原因: 財務諸表データが未取得

HUT, MARA(ビットコインマイニング企業)

  • 全テーブルにデータ存在
  • ただし2026-2029年のEPS成長率・PERがnullまたは欠損
  • 原因: アナリストによる長期予測が存在しない(ビットコイン関連企業の特性)
MARA 2026 EPS-Adjusted_YoY-%-Chg      → null
MARA 2026 Price-/-Earnings-(Adjusted) → null
MARA 2027 EPS-Adjusted_YoY-%-Chg      → null
MARA 2027 Price-/-Earnings-(Adjusted) → null
MARA 2028 EPS-Adjusted_YoY-%-Chg      → null
MARA 2028 Price-/-Earnings-(Adjusted) → null

対処方法

方法A:データ追加取得(推奨)

Koyfinから不足データを追加取得し、全スクリプトで同一企業を出力できるようにする。

優先度高

  1. AZN, MPWR, QRVO: 財務諸表データを取得
  2. WOLF: EACデータを取得

優先度中

  1. BRKSN: 財務諸表 + EACデータを取得

対応不要

  1. HUT, MARA: ビットコイン関連企業のため長期予測が存在しない可能性が高い。scatter-dataからの除外は仕様として許容。

実施手順

# 1. Koyfinで対象企業のデータをエクスポート
# 2. SQLiteにインポート
# 3. スクリプトを再実行

cd apps/web
node scripts/generate-eac-light-data.mjs
node scripts/generate-scatter-data.mjs
node scripts/generate-financial-data.mjs

方法B:欠損許容(現状維持)

各ページで使用するデータが異なるため、現状のまま欠損を許容する。

ページ使用データ企業数
actual-consensus.vueeac-light-data.ts154社
eps-per-scatter.vuescatter-data.ts152社
proportional-animation-qqq.vuefinancial-data.ts152社

メリット:

  • 追加作業不要
  • 各ページの目的に合ったデータセットを維持

デメリット:

  • ページ間で対象企業が異なり、ユーザーが混乱する可能性

方法C:共通企業のみに統一

3つ全てに存在する企業のみを出力する(最も厳格なアプローチ)。

// 各スクリプトで共通フィルタを適用
const commonTickers = getCommonTickers() // 約149社

メリット:

  • 全ページで同一企業セットを保証

デメリット:

  • 一部ページで本来表示可能な企業が除外される
  • スクリプト修正が必要

採用方針:方法C(共通企業のみに統一)

決定理由

  1. Koyfinの無料利用期間が終了 - 追加データ取得には再ログインや有料プランが必要
  2. 欠損企業は重要度が低い - BRKSN、WOLF、AZN、MPWR、QRVOはポートフォリオの主要銘柄ではない
  3. HUT、MARAはビットコイン関連 - 長期予測が存在しないのは業界特性であり、対応不要

対応内容(2025-12-20 実施完了)

3つのスクリプトすべてに除外企業リストを追加し、共通企業のみを出力するように修正した。

修正内容

各スクリプトに以下の除外リストを追加:

const EXCLUDED_TICKERS = new Set([
  'BRKSN',  // 全データ未取得
  'WOLF',   // EACデータなし
  'AZN',    // 財務諸表なし
  'MPWR',   // 財務諸表なし
  'QRVO',   // 財務諸表なし
  'HUT',    // 2026-2029のEPS/PER予測なし
  'MARA',   // 2026-2029のEPS/PERが全てnull
])

結果

ページ使用データ企業数(変更前)企業数(変更後)
actual-consensus.vueeac-light-data.ts154社149社
eps-per-scatter.vuescatter-data.ts152社149社
proportional-animation-qqq.vuefinancial-data.ts152社149社

全ページで同一の149社を使用するようになり、ページ間での企業セットの不整合が解消された。

今後の運用

  • 新規企業追加時は3つのデータソースすべてにデータを取得する
  • 除外企業リストは各スクリプトで共通化されているため、必要に応じて一括更新が可能

関連ファイル

  • scripts/generate-eac-light-data.mjs
  • scripts/generate-scatter-data.mjs
  • scripts/generate-financial-data.mjs
  • data/koyfin.db(SQLiteデータベース)
  • .claude/rules/data-generation.md(スクリプト運用ルール)