前回の記事で3社を手動で検証した。トヨタの会計基準が違う、ソニーのデータが重複してる、といった話。
手動で3社やって思ったのは、3社じゃ足りないということ。
50社やった。OSSにした。誰でも回せる。
リポジトリ
方法論の詳細は論文(PDF)にまとめた。
結果
| # | プロバイダ | 精度 | スコア |
|---|---|---|---|
| 1 | Axiora | 100.00% | 285 / 285 |
| 2 | edinetdb.jp | 74.74% | 213 / 285 |
フィールド別:
| フィールド | Axiora | edinetdb.jp |
|---|---|---|
| revenue(売上高) | 50/50 | 45/50 |
| net_income(純利益) | 50/50 | 48/50 |
| operating_income(営業利益) | 35/35 | 29/35 |
| total_assets(総資産) | 50/50 | 48/50 |
| total_equity(株主資本) | 50/50 | 0/50 |
| eps(一株当たり利益) | 50/50 | 43/50 |
edinetdbはtotal_equityを一件も返さない(フィールド未実装)。このフィールドを除外すると、edinetdbのスコアは213/235(90.6%)になる。残り22件のエラーは売上要素の選択ミス、営業利益の期間ずれ、EPSの株式分割未調整。
仕組み
正解データはEDINETのXBRL有報(doc_type=120)から取得。金融庁に提出された監査済みの数値がそのまま正解になる。
50社は19セクター・3会計基準(IFRS 32社、JP-GAAP 15社、US-GAAP 3社)から層化抽出。シード値 2026-03-03 で固定。
マッチングルール:
- 金額(JPY整数): ¥1B未満は±1円の完全一致、¥1B以上は±0.01%の相対誤差
- EPS(JPY小数): ±¥0.01の絶対誤差、銭→円の自動変換あり
- 期待値がnullの行(営業利益を報告しない業種など)はスコアから除外
回し方
git clone https://github.com/axioradev/edinet-benchmark.git
cd edinet-benchmark
pip install httpx numpy
export AXIORA_API_KEY="..."
export EDINETDB_API_KEY="..."
python compare.py
APIキーを持っているプロバイダだけテストされる。片方だけでもOK。
自分のAPIを追加する
providers.jsonにエントリを追加するだけ:
{
"name": "your_api",
"display_name": "Your API",
"base_url": "https://api.example.com/v1",
"api_key_env": "YOUR_API_KEY",
"auth_header": "Authorization",
"auth_prefix": "Bearer ",
"endpoint": "/companies/{edinet_code}/financials",
"params": {},
"response_path": "data",
"fiscal_year_key": "fiscal_year",
"rate_limit_ms": 100
}
EDINETコードで企業を指定して、fiscal_year・revenue・net_income・total_assets・total_equity・epsを返すAPIなら参加できる。
PRを送ってくれれば結果をマージする。
なぜ作ったか
財務データAPIを選ぶとき、ドキュメントやカバレッジ数だけ見ても精度はわからない。「4,000社対応」と書いてあっても、返ってくる数値が有報と違ったら意味がない。
このベンチマークは誰でも検証できる。正解データはEDINETの公式提出書類。コードは公開済み。結果に疑問があればforkして自分で回せばいい。
リンク
- リポジトリ: axioradev/edinet-benchmark
- Axiora: axiora.dev — 無料10,000回/日
- edinetdb: edinetdb.jp
- 前回の記事: EDINET財務データAPIの精度を検証してみた