Valscope開発記 第1回 — 個人で産業分析サービスを作る
はじめに
Valscope(val.codese.net)は、上場企業の有報データを機械的に整理し、業績の方向性を産業ごとに見やすくするWebサービスです。個人が作れる範囲で「産業分析の入り口」を作ることが目標です。
この記事では、なぜ作ることにしたか・どんな構成にしているか・今どこまで進んでいるかを記録します。
なぜ作るのか
株式投資を続けていると「この企業は業界全体で見てどのくらいの位置にいるのか」を手早く確認したい場面がよくあります。有報を1件ずつ読むのは時間がかかり、無料ツールでは産業横断の比較がしにくい。そこで自分で作ることにしました。
データ源と構成
データは金融庁の EDINET から XBRL 形式で取得しています。対象は上場企業の有価証券報告書(通期)で、2016年度以降を処理対象にしています。
パイプラインの大きな流れはこうなっています。
- EDINET API で書類リストを取得
- XBRL を解析して財務項目を抽出・Parquet に保存
- 企業・業種ごとに集計し、特徴量を生成
- LightGBM で翌期の売上方向を予測
- Next.js のフロントエンドで閲覧できるようにする
実行環境は Docker + Python で、データ正本はローカルの外付けSSDに置いています。
現在の進捗
- XBRL 取り込みと財務項目抽出: 完了
- 企業・期ごとの集計と PCA 処理: 完了
- LightGBM による学習(v4): 完了
- スコアリングパイプライン: 実装中
- フロントエンド(Next.js): 未着手
2016年度分の XBRL 突合で未処理件数が約2,190件残っており、データ品質の改善が直近の課題です。
つまずいたこと
XBRL の仕様は版によって項目名が変わるため、年度をまたいだ突合が難しい。特に2016〜2018年頃の古い書類は属性の書き方が現在と異なるものがあり、パーサーを都度調整しています。
また Parquet 出力が空になるケースがあり、スコアリング処理でストリーム読み込みに変更することで回避しました。
次にやること
- スコアリングパイプラインの完成
- フロントエンドの初版実装(企業一覧・スコア表示)
- 未処理 XBRL 件数の削減
月に1〜2回、この開発記で進捗を残していく予定です。
まとめ
- 個人規模でも EDINET XBRL + Python + LightGBM の組み合わせで業績予測パイプラインは作れる
- データ品質(XBRL の版差異)が最大のボトルネック
- フロントエンドは Next.js で静的生成する方針