📊

全上場企業の財務健全性スコアを設計した。ロジック全部公開する

に公開

上場企業約3,800社の財務データから、0〜100点の健全性スコアを算出するロジックを作った。

格付機関のようなブラックボックスではなく、採点ルールを全て公開している。根拠のわからないスコアには意味がないと思ったからだ。

この記事では、スコアリングの設計思想と、15個の採点ルールの具体的な閾値を全部書く。

何のためのスコアか

EDINET DB(edinetdb.jp)は、金融庁EDINETの有報XBRLを名寄せして、APIとMCPで提供するサービスだ。財務データを返すだけならAPIのレスポンスに数字を並べればいいが、「この企業は財務的に健全なのか」を定量的に示す指標がほしかった。

投資判断に使うための精緻なモデルを作るつもりはなかった。有報の開示データだけで算出できる、シンプルで透明な評価軸。スクリーニングの一次フィルタや、企業間比較のざっくりした指標として使えるもの。

そういう設計意図で作った。

スコアの構造

基準点50からスタートし、財務指標の状態に応じて加減点する。結果は0〜100に収める。

3つのカテゴリで構成されている。

1. 財務安定性(最大 +20 / 最小 -55)

自己資本比率が最も大きなウェイトを占める。

条件 点数
自己資本比率 ≥ 50% +15
自己資本比率 30〜50% +5
自己資本比率 15〜30% -5
自己資本比率 < 15% -15
債務超過(純資産 < 0) -30
純資産が毎年増加 +5
純資産が毎年減少 -10

自己資本比率50%以上で+15、30%未満で-5以下。大きく傾斜させている。50%あれば資産の半分以上が自己資本で、外的ショックへの耐性が高い。15%未満はレバレッジが相当効いた状態で、業種によるが一般事業会社なら注意信号だ。

債務超過は-30の一発減点。基準点50からの-30なので、他が全部良くても20点台になる。実態として財務健全性が極めて低い状態を反映している。

純資産のトレンドは最大6年分のデータから判定する。毎年純増なら+5、毎年純減なら-10。一方向のトレンドだけを見ていて、ジグザグなら±0。

2. 収益力(最大 +18 / 最小 -15)

# 営業利益率
if operating_margin >= 0.15:
    score += 10    # 15%以上: 高収益
elif operating_margin >= 0.05:
    score += 3     # 5〜15%: 標準以上
elif operating_margin < 0:
    score -= 10    # 赤字

# 売上高トレンド
if revenue_trend == "increasing":
    score += 5
elif revenue_trend == "decreasing":
    score -= 5

営業利益率15%以上は明確な高収益企業。全上場企業の中央値はおよそ5〜7%なので、15%は上位層にあたる。5%以上で+3、赤字で-10。

0〜5%の区間をニュートラル(±0)にしたのは、低マージン業種(小売、卸売など)の多くがこのレンジに集まるため。薄利多売型のビジネスモデルを一律で減点するのは適切でないと判断した。

売上高トレンドは最大6年分のデータから増加/減少を判定。純資産と同じく一方向トレンドのみ評価。

3. キャッシュ創出力(最大 +15 / 最小 -10)

条件 点数
営業CF > 0 +5
営業CF < 0 -10
営業CF 安定(2年以上全年度プラス) +5
FCF > 0(営業CF + 投資CF > 0) +5

損益計算書の利益は会計方針で操作できるが、キャッシュフローは嘘をつきにくい。営業CFが継続的にプラスであることは、事業として成り立っているかの最も信頼性の高いシグナルだと考えている。

FCFは営業CF+投資CFで算出。設備投資を差し引いた後のフリーキャッシュが残っているかを見る。

スコアのレンジとランク

スコア ランク 意味
80〜100 S 極めて高い財務健全性
70〜79 A 非常に高い
60〜69 B 高い
40〜59 C 標準
20〜39 D 注意が必要
0〜19 E リスクが高い

理論上の最大値は100点(全加点項目でMAX)、最小値は0点(実装上0にクランプ。理論最小は-30点だが意味がないので切り捨て)。

50点の基準点は「平均」ではなく「何も特筆すべきことがない状態」を意味している。自己資本比率が中庸で、利益は出ているが突出せず、CFもプラス。C評価は「問題はないが強みもない」。

リスクフラグ

スコアとは別に、以下の条件で個別リスクフラグを付与する。

  • 自己資本比率 < 15%
  • 債務超過
  • 純資産の継続減少
  • 営業利益率がマイナス
  • 営業CFがマイナス
  • 純利益が前年比 50%以上の減少

リスクフラグはスコアへの加減点とは独立しているものもある(純利益50%減はスコアに直接影響しないがフラグは立つ)。これは「今年だけの大幅減益」と「構造的な問題」を区別するため。1年の減益でスコアを大きく動かすのは過敏すぎる。

業種バイアスの問題

このスコアは業種調整を行っていない。

金融業(銀行・証券)は自己資本比率が構造的に低い。銀行は預金が負債に計上されるため、自己資本比率10%台が普通。これは健全な銀行でも安定性カテゴリで-15〜-5される可能性がある。

不動産業もレバレッジが高い業種で、同様のバイアスがかかる。

業種別のベンチマーク比較は、EDINET DBのanalysisエンドポイントで別途提供している。スコア自体を業種で調整するアプローチは「どの業種にどの重みを適用するか」という主観が入るため、あえて外した。業種別の文脈はユーザー側で判断してもらう設計にしている。

具体例

任天堂(E02367)のスコアを分解してみる。

基準点:    50

自己資本比率 78%   → +15
純資産増加トレンド  → +5
営業利益率 32%     → +10
売上高増加トレンド  → +5
営業CF プラス      → +5
CF安定(全年度+)   → +5
FCF プラス         → +5

合計: 100 → クランプ → 100
ランク: S

三菱UFJフィナンシャル・グループを見ると:

基準点:    50

自己資本比率 4.8%  → -15   ← 銀行の構造的特性
営業利益率        → NULL   ← 銀行は営業利益の開示なし(±0)
純利益 増加       → ±0    ← トレンド判定なし(営業利益ベース)
営業CF プラス     → +5
FCF プラス        → +5

銀行は自己資本比率で大きく減点されるのが見てわかる。これを「バグ」と見るか「仕様」と見るかは使い方次第だ。銀行同士を比較するときは、analysisエンドポイントの業種内ベンチマークを使う方が適切。

APIでの取得方法

# 企業のスコア・分析情報
curl -H "X-API-Key: YOUR_KEY" \
  "https://edinetdb.jp/v1/companies/E02367/analysis"
{
  "data": {
    "edinet_code": "E02367",
    "name": "任天堂株式会社",
    "credit_score": 85,
    "credit_rating": "excellent",
    "risk_flags": [],
    "scoring_details": {
      "stability": { "equity_ratio_score": 15, ... },
      "profitability": { "margin_score": 10, ... },
      "cash_generation": { "ocf_score": 5, ... }
    },
    "industry_benchmark": {
      "industry": "その他製品",
      "avg_roe": 8.2,
      "avg_operating_margin": 6.5,
      "company_roe": 14.1,
      "company_operating_margin": 32.0
    }
  }
}

スコアだけでなく、各カテゴリの内訳(scoring_details)と業種平均との比較(industry_benchmark)を返す。スコアの根拠を検証できるようにしている。

ランキング

スコアでのランキングも取得できる。

curl -H "X-API-Key: YOUR_KEY" \
  "https://edinetdb.jp/v1/rankings/health-score?limit=10"

ROE、営業利益率、配当利回り、売上高成長率など全19種のランキングに対応。

MCP(Claude / ChatGPT連携)

MCPサーバーを接続すると、AIに直接聞ける。

「トヨタのスコアの内訳を教えて」
→ get_analysis(edinet_code="E02144") を呼び出し
→ 各カテゴリの加減点を分解して説明

MCPの設定方法は別記事で書いた。
日本株3,800社の財務データをMCPでClaude/ChatGPTから使う

このスコアが「ではないもの」

明確にしておく。

  • 信用格付ではない。金融商品取引法第66条の27に定義される格付機関の格付とは異なる
  • 投資判断ではない。スコアが高い=買い推奨ではない
  • 将来予測ではない。過去の有報データのみに基づく実績ベース
  • 定性要因は見ない。経営陣の質、市場環境、訴訟リスクなどは対象外

有報の財務数値だけで算出する、機械的な定量スコア。それ以上のものにするつもりはない。使う側がこのスコアをどう解釈し、他の情報とどう組み合わせるかに委ねる。


ロジックの全文: edinetdb.jp/docs/credit-scoring
EDINET DB: edinetdb.jp
APIキー発行: edinetdb.jp/developers(Freeプランは無料)

Discussion