企業分析サイト「バフェット・コード」開発者が語る、データ整形の「苦労」と「価値」
企業分析に必要になるデータを、誰でも簡単に参照できるサイト「バフェット・コード」。
しかし、そのキレイなUIの背景には、開発者の様々な「苦労」が存在するとか…?
今回は、バフェット・コードの開発者に、データ整形の苦労や、「バフェット・コード」が達成したい「データ整形の価値」について伺いました!
便利な「バフェット・コード」とその裏
バフェット・コード、便利ですよね。 僕も企業に関するデータを調べなきゃいけないことが結構あって、よく使っています。 経年でまとまっていて、かつ見やすいサイトっていうのがほとんどなくて。
ありがとうございます。
世の中の役に立っているサービスだと思います。 ただ、今回は開発、特にデータまわりのお話を聞きたくて。 想像するに、レガシーな分野だし、結構大変なところがあるんじゃないかな、と思っている訳ですが…。
大変なところね(笑)。 たくさんありますよ(笑)。
「XBRL」を「RDB」の世界に落とし込む
まず、こういった財務に関するデータって、どこから取ってくるかって分かります?
えっと…、EDINETですよね?
そうです。 EDINETが公開しているAPIがあって、有報(有価証券報告書)やIPO、株式分割などのリリースはここから取ってきています。 ただ、データが、ウェブサービスが期待するデータ構造をしていないんですよね。
というと…?
EDINETでのファイルは、「XBRL」という財務諸表を表現するための「XML」で来るんです。
本当だ。 よく見ると <?xml version="1.0" encoding="UTF-8"?>と書かれていますね。
XBRLはただのファイルなので、このままだとウェブサービスにとって嬉しくないですよね。 ウェブアプリケーションから扱いやすいのは、「RDB(リレーショナル・データベース)」や「KVS(キーバリューストア)」ですが、元データはネストしたデータ構造を表現しやすいXMLなので、それぞれのストレージやウェブアプリケーションからのユースケースに応じて、適切にデータを加工して保存する必要があります。 ここのtransform、変換の作業がそもそも大変です。
「データが確定しない」ことの難しさ
あと、「不定期に出るデータ」をマージするのが難しくて…。 例えば「株式分割」ってあるじゃないですか。
1株を100株に分割するやつですね。 その場合、株数が100倍になるという。
はい。 その株数の変化があった場合、過去の1株あたりのデータ…、例えば「配当」が使い物にならなくなってしまいます。 こういった数値を再計算しないといけない。
確かに、そのままだと「配当」のグラフはぶっ壊れてしまいますね。 100分割だと、過去の配当が実際より100倍高いように見えてしまうのか…。 それに「PER」も「株価×株数/当期純利益」なので、同じく壊れてしまいますね…。
そう、「1株あたり」の指標って結構多くて、再計算処理はたくさん走っています。 過去のデータでも本質的に「データが確定しないこと」がある。 一方で、業績や配当の予想値も、「業績予想の修正」や「配当予想の修正」などで不定期で修正が入るので、大変ですね。
どうしても残ってしまう「手オペ」
どうしても例外的な処理が残ってしまう、ということもあって。 例えば、「IPO(新規上場)」や「上場廃止」とかですよね。
どの辺りの処理が例外的なんですか?
IPOだと、まず「有価証券届出書」(有価証券「報告書」ではない!)がEDINETに掲載されます。 ただ、「届出書」に載っている情報というのが、有報などの定期・定型な報告書とは違って、会社ごとにまちまちな部分があるんですよ…。 数値が足りなかったりするので、手打ちが必要になるケースも出てくる。
開発コストを沢山かければ、自動化できなくもないでしょうが…。 現状は数が少ないこともあって、ある程度は「手オペ(手動オペレーション)」でやってますね。
複雑なデータ処理のジョブ管理
日々走らせているジョブの管理も大変です。 これがバフェット・コードの日次batch処理の「DAG(有向非巡回グラフ)」になるんですが。
オッ…。
データ処理の依存関係が複雑で、扱っているデータ量が多いということに加えて…。 新しい有報が提出されたときや、特定のデータのパースにバグがあったときなどに、それらのデータソースの変更が影響するデータを、すべて再計算して更新する必要があるんですよ。 弊社では、Apache AirFlowというワークフロー管理ツールを使っています。
AirFlowは何が嬉しいんですか?
データ処理の依存関係をコードで記述できることですね。 あと、エラーが起こったとき、web UIからボタン1つで失敗した部分だけリトライできることや、日次処理の履歴(成功・失敗とか処理時間)が可視化されるのもメンテナンスに嬉しいです。
「人間が使いやすい財務データ」を整備する
財務データを取り扱う「苦労」について話してもらいましたが、ぶっちゃけ、ここまで大変なことを出来ているモチベーションって何なんでしょうか?
今って、残念ながら、人間が使いやすい、エンジニア/リサーチャーにフレンドリー「財務データ」が世の中にあるとは言い難いんですよね。 誰かがやらなきゃいけないのに、誰もやっていない。 そこを「自分たちが整備している」という意識はありますね。 なので、バフェット・コードのデータを参照できるWeb APIも公開しています。
自分も学部の頃経済学部だったので、株価に関する研究もやったことがあるんですが、めちゃくちゃ分かります…! 「xx年にIPOした企業の初値データの一覧」を集めるだけで死ぬほど大変だったりする…! こういう財務データって、相場的に言うとかなり値段が高いと思うんですけど、どうですか? 学生でも使えそう?
現在、月額1万円で提供しております。
めっちゃ安いやん! これなら経済学部の学生が卒論のために全然使える範疇ですね! 僕が学生のときにあってくれれば…!
非エンジニアの方にも使っていただきたいので、Google Spreadsheetから簡単に扱えるアドオンも開発しています。
至れり尽くせりやん…! 経済学部でも、学部だとRやPythonを扱える学生って少ないですもんね…。 ちょっと学生時代の苦労が思い起こされて、素で興奮してしまうわ…!
なので、経済学部の方には是非APIを使ってみていただきたいですね。 我々がデータを整備することで、研究者や学生のお役に立てれば、エンジニア冥利に尽きます(笑)。
ライター
編集部オススメコンテンツ
アンドエンジニアへの取材依頼、情報提供などはこちらから