2021/04/20(火)に行われたJ-Quants ニュース分析チャレンジ! 〜自然言語処理を用いたポートフォリオ構築〜のAlapcaJapan発表資料 https://connpass.com/event/210157/
STRICTLY CONFIDENTIALJ-Quants ニュース分析チャレンジ!LDAを利用した予測モデル構築2021.04.20 // AlpacaJapan
View Slide
STRICTLY CONFIDENTIALAlpacaの紹介2Client’s Testimonial from Quants優れたテクノロジーは疑う余地が無い。ただ、それだけではパートナーとして不十分。成功までの道のりはトライアンドエラーの連続。市場の謎解きへの純粋なモチベーション、あきらめない姿勢、そして結果への強いこだわり。Alpacaを語る時にそうした要素は欠かせない。彼らは真に信頼できる集団だ。5人 → 30人サイエンティスト/エンジニアの3年の増加数Client’s Testimonial from Traders“金融市場の未来は AIと人とのコラボレーションにこそある ”というのはまさに私も強く共感するコンセプトです。世の先をいく貴社の皆様にはどんどん未来へ向かって進んでいって頂きたい。コロナ禍の中で金融業界全体で今まで出来ないと思っていたことが 実際にやってみると出来てしまうことが沢山出てきている と感じています。その中で AIと人間のコラボレーションも益々増えていくでしょうし、そういう部分が 各企業の競争源泉になっていくのだろうと思います。Alpacaはデータサイエンス・機械学習を金融マーケットの様々なリアルな問題に適用することに強みを持つ会社です。
STRICTLY CONFIDENTIAL 3本セッションの発表内容J-QuantsではAlpacaはチュートリアル作成支援と問題作成支援を担当させていただきました。その中で5/6章においてディープニュールラルネットワークを利用する手法がNLP初心者には難易度が高いとうフィードバックをいただき本日はニューラルネットワークを利用しない手法を紹介いたします。チュートリアルの5/6章の流れデータセット作成方法 (欠損値・正規化)頻度/ワードクラウド/LDAなどをデータセットの可視化BERTを用いた特徴量の設計LSTMモデルの構築・評価バックテスト・モデルの提出本セッションの発表内容LDAを用いたトピックベースの特徴量の設計モデルの構築(step 1-5)ニューラルネットワークを利用しない方法を紹介
STRICTLY CONFIDENTIAL 4日経ニュースデータの特性の説明 1いくつか本資料を見る上で重要な日経ニュースデータの特性を紹介します。x 軸 は 銘 柄 の 数 を 示 し て い ま す。 青 色 線 は 左 側 の y 軸 に 対 応 し て お り 記 事 件 数 を 表 し て い ま す、 黄 色 線 は 右 側 の y 軸に 対 応 し て お り 記 事 件 数 全 体 に お け る 累 積 割 合 を 示 し て い ま す。 一 部 の 銘 柄 に 記 事 件 数 が 集 中 し て お り、約 1750 銘 柄 中 250 銘 柄 で 記 事 件 数 全 体 の 70% 程 度 を 占 め て い る こ と が わ か り ま す。250銘柄で全体の70%のニュースになる
STRICTLY CONFIDENTIAL 5日経ニュースデータの特性の説明 2いくつか本資料を見る上で重要な日経ニュースデータの特性を紹介します。特にいくつかの大型株にニュースが集中しており、具体的には7203 ト ヨ タ 自 動 車、 9984 ソ フ ト バ ン ク グ ルー プ 、6758 ソニー、7201 日産、7267 本田技研工業に 関 す る 記 事 件 数 が 突 出しています。
STRICTLY CONFIDENTIAL 6日経ニュースデータの特性の説明 3いくつか本資料を見る上で重要な日経ニュースデータの特性を紹介します。銘柄コードが付与されているニュースは全体の30-40%程度であり、毎週1000-1500件程度の銘柄コード付きのニュースがでていることがわかります。
STRICTLY CONFIDENTIAL 7LDAとはLDA (Latent Dirichlet Allocation; 潜在的ディレクリ配分法)は、トピックモデルの基本的なモデルです。文章中の潜在的なトピックを推定し、文章分類や、文章ベクトルの次元削減等に用いられる技術です。チュートリアルにおいても説明しているため、本セッションではLDAの具体的な手順は説明しませんが、例えば、日経のニュースデータに適用すると以下のようなトピックが抽出でき、各トピックがそれぞれどのような意味を持つかもある程度、人間にもわかる形で出力できます。この解釈性がニューラルネットワークとの大きな違いです。「新型コロナ」、「コロナ禍」や「トヨタ」、「工場」などが一緒のトピックとして出現しやすいという結果からもトピックの概念がイメージできるかとおもいます。(0, '0.058*"コロナ" + 0.010*"会長" + 0.009*"新型コロナ" + 0.008*"追加" + 0.008*"コロナ禍"')(1, '0.020*"新型コロナ" + 0.018*"トヨタ" + 0.016*"生産" + 0.015*"工場" + 0.013*"中国"')(2, '0.044*"発売" + 0.008*"用" + 0.006*"商品" + 0.006*"シリーズ" + 0.006*"日本"')(3, '0.025*"日銀" + 0.024*"銀" + 0.023*"再開" + 0.012*"ポイント" + 0.011*"最終"')(4, '0.024*"開始" + 0.020*"開発" + 0.014*"発売" + 0.013*"事業" + 0.013*"サービス"')(5, '0.022*"社長" + 0.021*"氏" + 0.015*"提供開始" + 0.013*"サービス" + 0.012*"AI"')(6, '0.064*"減" + 0.045*"期" + 0.041*"純利益" + 0.029*"増" + 0.025*"月"')(7, '0.018*"発表" + 0.011*"店" + 0.009*"楽天" + 0.008*"開業" + 0.008*"JR東日本"')(8, '0.091*"東証" + 0.021*"株" + 0.020*"マザーズ" + 0.018*"一時" + 0.017*"米"')(9, '0.028*"発行" + 0.015*"格付け" + 0.013*"債" + 0.011*"R&I" + 0.011*" 社債"')
STRICTLY CONFIDENTIAL 8基本的なモデリング戦略基本的なモデリング戦略を考えます。あまり複雑すぎないモデリングを想定。• 前の週のニュースのトピックの平均(複数個のニュース対応)から次週の銘柄毎のリターンを推定するモデル• ニュースがなかった銘柄は「スコアなし」として次週の投資対象から除外• LDAに設定するトピック数はハイパーパラメータとしていくつか試してみる(5, 10, 15, 20など)• 評価はすべて2020年のデータを2分割して、前半をトレーニング、後半をテストデータとして利用銘柄Aの今週のニュース銘柄Bの今週のニュース銘柄Cの今週のニュース銘柄Dの今週のニュース銘柄Aの次週リターン銘柄Bの次週リターン銘柄Cの次週リターン銘柄Dの次週リターン銘柄Aのトピック情報の平均銘柄Bのトピック情報の平均銘柄Cのトピック情報の平均銘柄Dのトピック情報の平均試行錯誤追加データも考慮
STRICTLY CONFIDENTIAL 9#1 全銘柄のデータで学習した全銘柄で利用する単一のモデル 1銘柄Aの今週のニュース銘柄Bの今週のニュース銘柄Cの今週のニュース銘柄Dの今週のニュース銘柄Aの次週リターン銘柄Bの次週リターン銘柄Cの次週リターン銘柄Dの次週リターン銘柄Aのトピック情報の平均銘柄Bのトピック情報の平均銘柄Cのトピック情報の平均銘柄Dのトピック情報の平均LinearRegressionの単一モデルを利用モデリングの狙い• モデリングではまずは最も基本的な手法によるベンチマークを把握することが重要(そこから良くなったかをみていく)。いきなり複雑なモデルを作ると何が効果があったのかの知見が貯まらない。• 線形・単一のモデルだが、このアプローチの筋が良いならこの手法でも何らかの結果が出るはずなので、まずは結果を観測する
STRICTLY CONFIDENTIAL 10#1 全銘柄のデータで学習した全銘柄で利用する単一のモデル 2結果1: モデルのトレーニング期間とテスト期間の精度の測定トピック数 5/10/15/20のケースでそれぞれ実験してみたが、トレーニング期間の上げ下げ精度自体が低いのでそもそもこの方法ではトレーニング期間でも上げ・下げの分離が出来ていない。つまり線形の分解面が存在しないことになる。結果2: 各トピックと銘柄の次週のリターンの相関係数銘柄ごとにトピックに対する相関係数の符号が逆転することが観測できる。これはコロナのトピックがDX銘柄にとっては+だが、外食ではーになるということを考えると容易に理解できる結果である。つまり、トピックはマーケットにグローバルに説明できる変数ではないことがわかる(これは直感に反しない)
STRICTLY CONFIDENTIAL 11#2 各銘柄のデータで、銘柄ごとにモデルを作成 1銘柄Aの今週のニュース銘柄Bの今週のニュース銘柄Cの今週のニュース銘柄Dの今週のニュース銘柄Aの次週リターン銘柄Bの次週リターン銘柄Cの次週リターン銘柄Dの次週リターン銘柄Aのトピック情報の平均銘柄Bのトピック情報の平均銘柄Cのトピック情報の平均銘柄Dのトピック情報の平均モデリングの狙い• 単一モデルは線形分離できないので銘柄ごとにモデルを線形モデルで学習してみる• ただし、実際にやってみると銘柄の学習ができそうなデータ数のある銘柄は80銘柄程度しかなかった• 投資に利用するにはあきらかに数が少ないが、ニュースが集中する大型個別株投資(TOPIX 100)などには良いアプローチかもしれない銘柄Aのモデル銘柄Bのモデル銘柄Cのモデル銘柄Dのモデル
STRICTLY CONFIDENTIAL 12#2 各銘柄のデータで、銘柄ごとにモデルを作成 2結果: モデルのトレーニング期間とテスト期間の精度の測定青のトレーニング期間の精度が上昇(つまり線形分離はできいる)、しかしオレンジのテスト期間の精度はいくつか高い銘柄もあるが平均は0.5近辺になっている。上位のモデルはなかなか良さそうだが、そもそも学習できるデータがある銘柄が限定的であるこのアプローチでは投資対象の銘柄数が非常に限定的になりそうという感触がある。このあたりのモデルは使えるかもしれないが、いかんせん銘柄数がすくない
STRICTLY CONFIDENTIAL 13#3 各銘柄のデータでセクターごとにモデルを作成 1銘柄Aの今週のニュース銘柄Bの今週のニュース銘柄Cの今週のニュース銘柄Dの今週のニュース銘柄Aの次週リターン銘柄Bの次週リターン銘柄Cの次週リターン銘柄Dの次週リターン銘柄Aのトピック情報の平均銘柄Bのトピック情報の平均銘柄Cのトピック情報の平均銘柄Dのトピック情報の平均モデリングの狙い• 全体では学習ができず、銘柄個別だとデータがすくないのでその中間であるセクター情報でモデルを作成。• 具体的には17分類でそれぞれモデルを作成するアプローチを採用• セクター毎にトピックの効果が共通であることは直感に反してないので、期待ができる可能性があるセクター1のモデルセクター2のモデル
STRICTLY CONFIDENTIAL 14#3 各銘柄のデータでセクターごとにモデルを作成 2結果: モデルのトレーニング期間とテスト期間の精度の測定17業種のうち10業種でトレーニング可能なデータが存在していた。それぞれの業種別モデルを見ると、全体モデルよりもトレーニング期間のテストが線形分離に成功(精度53-60%)しており、単一モデルより期待がもてる。テスト期間の精度も業種5は外れ値としてもうまく動いてそうな業種もあり、全体モデルと銘柄別モデルの中間の業種別モデルがポテンシャルが高そうなことがわかってきた。単一モデルと違って線形分離できていそうな傾向が観測できる
STRICTLY CONFIDENTIAL 15#4 セクター情報を入力に加えた単一のモデルを作成 1銘柄Aの今週のニュース銘柄Bの今週のニュース銘柄Cの今週のニュース銘柄Dの今週のニュース銘柄Aの次週リターン銘柄Bの次週リターン銘柄Cの次週リターン銘柄Dの次週リターン銘柄Aのトピック情報の平均/業種情報銘柄Bのトピック情報の平均/業種情報銘柄Cのトピック情報の平均/業種情報銘柄Dのトピック情報の平均/業種情報モデリングの狙い• #3の結果より業種情報を利用することのポテンシャルを感じたのでその方向でモデルを発展させることに決定• RandomForestの単一モデルを利用し、業種を説明変数に与えモデル内部的に業種別のパターンを学習することを期待。おそらく、データが足りてなかった問題も改善する可能性がある• 一応、他にも時価総額情報も一緒に与えてみてインパクトを見るRandomForestを利用。単一モデルだが、業種の情報を与えて学習
STRICTLY CONFIDENTIAL16#4 セクター情報を入力に加えた単一のモデルを作成 2結果 モデルのトレーニング期間とテスト期間の精度の測定• トピック10/33分類において全体精度51%だが、probabilityとして取得できる予測スコアtop10%を見るとテスト期間の精度が54%に達しているモデルがある(random forestを利用するとtrain accuracyはあまり意味がない)• 予測スコアtop 10%を評価するのは、実際に投資対象に使うのは予測スコアが高い銘柄を利用するはずなので、スコアの分位点の上位スコアがきちんと精度がでているかを確認する手法• いったんここでモデリング方針の策定は完了、通常はここから説明変数追加、モデルの変更、ハイパーパラメータの選定、最適化項目の調整、ユニバースの選定などで精度だけではなく順位相関(スコアと次の週のリターン)をあげていく自信のあるtop 10%の予測を評価probability順に上からソートして上位だけを評価する手法を利用予測全体
STRICTLY CONFIDENTIAL 17参考情報: #4 33業種の情報を入力に加えた単一のモデルの特徴量有望なtopicが10個、33セクターを利用したモデルに対して特徴量の重要度を抽出• topicが支配的な影響力を持っている• 6100 小売業、9050 サービス業、3050 サービス業などの業種のone hot vectorを利用していることがわかる• 重要度が若干高い0のトピックは「(0, '0.058*"コロナ"+ 0.010*"会長" + 0.009*"新型コロナ" + 0.008*"追加"+ 0.008*"コロナ禍"')」、4のトピックは「(4, '0.024*"開始" + 0.020*"開発" +0.014*"発売" + 0.013*"事業" + 0.013*"サービス"')」となっている#4 33業種の情報を入力に加えた単一のモデルの特徴量の重要度
STRICTLY CONFIDENTIAL 18ここまでのモデリングの試行錯誤のまとめ# モデルの概要 説明変数 モデルの種別 予測対象1全銘柄のデータで学習した全銘柄で利用する単一のモデルを作成銘柄ごとのトピックの平均値LinearRegression ニュースが出ている銘柄全体2各銘柄のデータで、銘柄ごとにモデルを作成銘柄ごとのトピックの平均値LinearRegression 学習データと評価データが十分な銘柄のみに限定3各銘柄のデータでセクターごとにモデルを作成銘柄ごとのトピックの平均値LinearRegression 17業種毎のモデルを学習するため、学習データと評価データが十分な業種に限定4セクター情報/時価総額を入力に加えた単一のモデルを作成銘柄ごとのトピックの平均値 + セクター情報/時価総額RandomForest ニュースが出ている銘柄全体1. 最初はシンプルなモデルから、ベンチマークを作る。テスト期間の精度なども用いて学習可能性を検討2. 線形のモデルをキープしたまま、だんだんモデルの複雑度を上げていき、仮説検証を行う3. 最後にある程度仮説が固まったところで複雑なモデルを利用して、精度を狙いに行く
STRICTLY CONFIDENTIAL