自然言語処理を用いた財務分析の取り組み紹介
金融×自然言語処理の領域では、市況や材料に関するニュースから株価の行く末を占うなどの分析が盛んに行われています。
有価証券報告書に対して単語極性判定(ポジティブ・ネガティブワードの判定)を行い株価予測するといった分析の事例はいくつか報告されています。
ただし、ポジティブワードが多ければ株価も上昇するといった相関があるわけではありません。単に単語の極性を判別するのではなく、株価の上昇・下降に影響を与えたワードや文章を過去のデータから学習する必要があると考えています。
弊社では社内PoCの一環で、有価証券報告書と株価を学習データとして用いて、株価に影響をあたえる文章を抽出する取り組みを実施したので共有したいと思います。
背景
投資家にとって各企業の事業からもたらされる損益は、投資判断の最重要項目です。時代によって事業が多様化しており、損益計算書における結果としての売上高や純利益だけではなく、それらが本業から出ている利益なのか、将来性を感じる決算なのか、吟味する必要性が増しています。しかしながら、ほとんどの企業において採用する決算期は似通っている為、決算ラッシュの時期においては数百銘柄が同日に決算発表する事もあります。そのため、投資家が決算情報を適時適切に吟味する事が非現実的になってきている課題があります。
投資家に役立つ情報だけを機械的に抽出できれば投資活動の貢献になると考え、株価に影響を与える文章を有価証券報告書から抽出できるか否か検証しました。
目標
投資家が数十ページにわたる決算報告書を目にした時に、どこに重要な事柄が書かれているか、視線誘導して投資家の労力を削減する事
手練れた熟練者であれば、企業の業態や概要は頭の中に入っており、決算報告書から要点抽出や評価といったプロセスを迅速・適切に実施できます。一方、投資経験や業務経験が浅い人にとっては、その域に達するまで多くの経験が必要になります。決算報告書から重要な箇所をシステムで抽出できれば、経験の浅い方々の業務改善につながると考えました。
訓練タスク
モデルの概要を説明する前に、訓練に関わる部分の話をします。
- 過去5年間の有価証券報告書およそ2万文書の【事業の状況】を分析対象とした。
- 出現回数が閾値を下回る単語については、過学習抑制の為に[UNK]として処理する。
- 同じ銘柄コードのサンプルが含まれないように学習・検証サンプルを分割した。
- 学習としては、以下の3つをマルチタスクで訓練した。
A.異なる有価証券報告書が同一銘柄から発せられた文書か否かの2クラス分類
B.有価証券報告書を提出した銘柄の33業種分類
C.有価証券報告書の株式市場に対するインパクト推定
(5%超上昇、5%超下落、それ以外の3クラス分類)
※目標に直接関係するのはCのタスクですが、汎化性能向上のためにA、Bのタスクも追加しています。
A.異なる有価証券報告書が同一銘柄から発せられた文書か否かの学習についてまずは、事業領域について言及されている箇所にモデルの注意を促す為、無作為に抽出した2文書が同一の企業より提出された文書なのかを学習させました。
B.有価証券報告書を提出した銘柄の業種推定については、タスクAによって文章が事業内容的に近いかのみならず、当該文章がどの業種に近いのかまで学習するようにしました。
C.有価証券報告書の株式市場に対するインパクト推定については、トレーディングによる利益を追求する場合、EDINETに提出される有価証券報告書よりも約一週間先にTDNetに提出される決算短信を分析対象とし、提出後にトレードできる最初の価格からの上昇率を目的変数とするべきですが、今回は、有価証券報告書はiXBRLとしてテキストでデータ取得ができる事、また、トレーダブルか否かよりも、決算情報自体がどれだけの株価変動要因を持っているのかを推定する事を目的とするために、有価証券報告書の提出日前後一週間の株価変動が、5%以上上昇しているのか、5%以上下落しているのか、それ以外なのかの3クラス分類問題として学習を行いました。
また、文書解析といえども、損益計算書、貸借対照表、キャッシュフロー計算書の数値は重要なインプットになるのですが、今回は精度というよりも純粋にビジネスドライバとなるような事業から収益がもたらされているか否かを捉えられるのかを目的としたかったので、財務三表の数値データはインプットとして使いませんでした。
同様にして本来は、コンセンサス(市場の期待値)を加味し、投資家の期待を上回るような内容なのか否かを吟味しなければなりませんが、コンセンサス情報も分析に用いる事はしませんでした。
モデル概要
- 上図は、すべてのタスクについて同一の構造であり、DropoutやNormalization等のユニットは適宜組み込まれている。
- EncoderおよびLSTMレイヤは各タスクでパラメータ共有している。
- Encoderレイヤは日本語wikipediaで訓練された学習済みモデルを利用した。
- LSTMレイヤはEncoderに対して冗長ではあるものの、金融業界に特化した表現を抽出する目的で搭載した。
- FC&Softmaxレイヤはアテンションの目的で利用しており、重要箇所に重み付けを行い、FCレイヤで分類学習を行っている。
概要3については、トランスフォーマー部の学習時間の節約をする為に、学習済みモデルを利用しました。
概要4については、学習済みトランスフォーマーでは専門用語に弱く、かといってトランスフォーマー部を再学習する計算時間とGPUメモリを節約したかったので、今回、トランスフォーマーはフリーズさせて、便宜的に学習対象とするLSTM層を直後に配置し、LSTMで専門用語を扱えるようにしました。
概要5については、モデルの精度それ自体もさる事ながら、その過程を可視化する事に重点を置く為に、明示的にソフトマックス型のアテンションを採用しています。
結果および考察
学習と検証を行う為のデータ分割は以下の様に実施しました。
- 学習セット:銘柄コードが奇数となる企業が提出した文書
- 検証セット:銘柄コードが偶数となる企業が提出した文書
もともとはタスクCのみで学習を行う予定でしたが、特定の偏ったパターンに強い因果を持つ単語のみを暗記してしまう現象が見られ上手く過学習を抑制できませんでした。タスクA、Bを追加し、様々なタスクをモデルに学習させることでモデルの汎化能力が向上しました。
また、LSTMレイヤを加えた方が学習精度、検証精度ともに高かったです。
学習に用いていないデータセットで検証を行ったところ、検証精度は以下のようになりました。(Class Weightは調整してあります)
- Aの同一銘柄判定タスク:92%(2クラス)
- Bの業種分類タスク :83%(33クラス)
- Cの株価推定タスク :41%(3クラス)
AおよびBに関しては、わりと人間に近いまずまずな結果だと思います。が、問題はCです。闇雲な推定よりは良い結果ですが、コンセンサス等を加味していない事による織り込み済みか否かの判断の欠落が相当に致命的な印象があります。投資経験者であれば8割くらいの精度で、そもそもこれが中身のある良い決算なのか否かの判断はできると思います。
以下はある程度訓練したモデルに対して、有価証券報告書の【事業の状況】を入力した際のアテンション等の状態を可視化したものです。
- 事業内容と関係が強い部分を緑に着色
- 事業内容上、重要と判定された行の文字を黒字化
- 株価上昇要因と推測される部分を赤く着色
- 株価下落要因と推測される部分を青く着色
/////////////////////////////////////////////////////////////////////////////////
)、親会社株主に帰属する当期純利益は649百万円(前年同期比42.7%増)となりました。
セグメントごとの業績は次のとおりであります。
(塗料事業)
アルミ電着塗料分野は、下半期において一部ユーザーで出荷の回復がありましたが、主要ユーザーの生産体制再編に伴う工場の閉鎖及び輸出低迷などにより、売上高は減少いたしました。
工業用電着塗料分野は、新規ユーザーの獲得はありましたが、これまで堅調に推移してきた電設資材及びハウスメーカー向けの出荷が下半期に入り低調となったため、売上高は減少いたしました。
粉体塗料分野は、鋼製家具メーカー向けは低調でありましたが、新規顧客の開拓及び既存顧客への拡販が順調に推移し、売上高は増加いたしました。
工業用塗料分野は、建設機械、工作機械向け出荷は低調に推移しましたが、ブラインド、ゴルフボール、窯業建材向け出荷が回復し、形鋼向け出荷も堅調に推移したことから、売上高は増加いたしました。
建築塗料分野は、価格競争の激化に伴い、主力の汎用品の出荷が低迷したことに加え、集合住宅改修物件の獲得も低調に推移いたしました。また、工事売上も前期に引き続き不振に終わったため、売上高は減少いたしました。
防食塗料分野は、下半期に入って公共工事向けの需要が低迷し、また、価格競争の激化で新規物件の獲得も低調に推移したため、売上高は減少いたしました。
道路施設用塗料分野は、主力のカラー舗装材、すべり止め舗装材の出荷が低調に推移したため、売上高は減少いたしました。
軌道材料製品については、可変パッド樹脂の出荷は順調に推移したものの、スラブ補修材の出荷が低調に推移したため、売上高は減少いたしました。
自動車用塗料分野では、一部主力ユーザーにおいて輸出が低調に推移したことにより、出荷が伸び悩み、売上高は減少いたしました。
この結果、売上高は19,872百万円(前年同期比6.7%減)となり、経常利益は1,072百万円(前年同期比1.9%減)となりました。
(化成品事業)
受託生産している化成品の売上高は1,550百万円(前年同期比2.2%減)、経常利益は17百万円(前年同期比222.9%増)となりました。
(2)キャッシュ・フローの状況
当連結会計年度における現金及び現金同等物は、2,692百万円と前年同期に比べ345百万円の増加となりました。
/////////////////////////////////////////////////////////////////////////////////
誤判別や理解に苦しむアテンションの付与はまだまだあるものの、雰囲気くらいは感じる可視化になってきました。
単語に対してではなく文章に対して着色が行われているという事は、文脈を理解しようとしているのでしょうか?なかなか怪しいです。ともあれ、素直な表現が何かさえ知らないモデルに、いきなり有価証券報告書を学習させているので、まずは素直な表現が多いニューステキストなどをタスクに加えて精度改善に取り組んでみるべきなのでしょう。
また、1文ずつ良し悪しを判断しているように見えており、事業的に重要な部分においてどうなのかという所は、やはりというかさすがにできていない印象です。
以上が、今回の分析での一旦の結果です。
奏功しなかった取り組みの紹介
今回の分析において強く感じたのが、学習精度と検証精度の乖離つまり過学習です。単語の出現頻度に応じてマスク処理などを施してはいるものの、単語の連なりなど再現性の少ない低頻度高因果な固有表現と各クラスを強く結びつけてしまい、汎化能力を維持できない傾向がありました。
そこで、「A同一銘柄推定」「B 業種分類推定」に加え、無作為抽出した2文書の株価が似た変動をするか否かを判定するタスクを追加しました。固有表現パターンと各クラスの結びつきを抑えながら、AからCの精度を高めることを試みましたが、結果の向上は見受けられませんでした。
また、事前学習として映画レビューなどの学習済みモデルから転移学習を行うことを試してみましたが、映画レビューなどは主観的で感情的かつ口語的な表現が多く、有価証券報告書の様な客観的かつ文語的な表現が多い文書判別のタスクには上手く作用しませんでした。
応用
今回はリソース節約のために簡易で扱いやすいモデルを実験しましたが、一般知識層(トランスフォーマー部分)で金融経済などの専門知識を獲得することが出来れば、より精度の良いモデルを構築できたのではないかと思っています。
また、投資家の行動を学習する事で、短信や有報などの決算情報のみならず市況や材料など、巷に溢れすぎている数多のテキスト情報に対して、投資家の潜在ニーズを察し適切に情報にアプローチできるようなサービスを構築出来たら有用で面白いものになると思っています。
この記事の投稿者
林 慶樹(はやし よしき)