今回は、公開されているsignateチュートリアルの2章の部分を描いていきたいと思います。
こちらのチュートリアルでは、「ファンダメンタルズ分析チャレンジ」に関するものです。
#コンペ概要
ここら辺は、チュートリアルに詳しく書いているので、詳しくはチュートリアルを見てください。要約すると、株式市場をデータ分析したい人が最初の足掛かりとして取り組むのに良いプログラムです。
うんうん。データ分析以外の株式市場の知識も得られそうで一石二鳥になりそうですね。
それでは始めます。
#2.1章
株式情報の使用用途や本コンペにおける評価指標が示されています。
評価指標は、難しかったので随時理解次第こちらの記事を訂正したいと思います。
#2.2章
開示されているデータファイルについて、まとめられている。
###stock_list
銘柄の名前や業種区分などの基本情報をメインに書かれている。
例えば、銘柄の業種区分や発行済株式数等々が書かれている
###stock_price
各銘柄の各日付毎の始値や終値などの株価情報が記録。
###stock_fin
株式投資における、ファンダメンタル情報について記載。
ファンダメンタル情報とは、純資産に関する財務情報や当期純利益といった業績状況を表す情報です。
これは、本コンペ関係なく、今後の企業の成長性や安全性、収益性等の判断材料になることから、より重要度が高い情報を持っていることがわかると思います。
※お金に関する勉強を今後始めようと思うので、別記事、もしくはnoteでこれらの詳細の情報は開示していきたいなと思います。
###stock_fin_price
上記二つのデータをjoinしたもの
###stock_labels
予測対象に関するデータ
#2.3章 実行環境・ライブラリー
これはチュートリアル通りです。
colabが一番手軽かなって思います。
#2.4章 データセットの読み込み
ここからの章は、プログラミングを使って、データを扱うといったことをやっています。
私の記事としては、コードの概要というより、それぞれの章での用語の説明ややっていることを説明したいなっと思います。
この章は、単にデータを読み込んでいるだけです。
#2.5章 データセットの可視化
使用しているモジュールは、matplotlibとseabornです。
可視化ツールとして、めっちゃ王道のものを使用していますね。
2.5.1では、財務諸表のデータを読み込み可視化しています。
これらをすることで、各銘柄の財務状況や特徴を分析することが容易になります。
その後は、複数銘柄の比較をgroupbyを使用して行ったり、numpy等のモジュールを使って移動平均や価格変化率を元絵mグラフでプロットしています。
この章での一番難しい点は、「ヒストリカル・ボラティリティ」だと考えてます。
これは、あるサイトによると
「オプション取引で用いられる用語で、株式、為替、債券、コモディティなどの原資産価格の過去一定期間の値動きデータに基づいて算出した将来の変動率(ボラティリティー)。
「歴史的変動率」とも呼ばれ、英語表記「historical volatility」の略で「HV」ということもあります。統計学の標準偏差を利用して、ある一定期間のボラティリティを年率換算したものです。過去にその原資産の価格がどの程度変動したかを示す指標で、ヒストリカルボラティリティーが高いほど価格変動リスク高く(安全性が低い)、低いほど価格変動リスクが低い(安全性が高い)といえます。」(※引用「https://www.daiwa.jp/glossary/YST2343.html」)
要するに、原資産の価格変動を表したもので、安全性を判断する指標として活用されているようです。これは、めちゃめちゃ大切そうな特徴量ですね。
これに関しても、numpy.rolling等を使用して計算してます。
#2.6章 データセットの前処理
前処理はめっちゃ大事ですよね。
①欠損値処理
②正規化
③特徴量生成
④バリデーション戦略
⑤モデル構築
ざっくりした流れです。
じゃあ、本コンペにおける前処理を見ていきましょう!!
①欠損値処理は方法として、
・平均値埋め
・リストワイズほう
・多重代入法
いろいろあります
今回は、0を入れることで対処しています、ただし、欠損値としての0の意味合いを込めた欠損値処理をしているのでご注意を
#2.7章 特徴量生成
②を超えて、③にきましたね
②は今回は木構造の機械学習モデルを用いるので必要ないと判断し記述していないのでしょう。
ただ、NN等のモデルを使用する場合は必要なのでご注意ください
③特徴量生成
これの重要な点はここにあります。
「ドメイン知識や専門性を活かして特徴量を設計する」といったことにあります。
そのため、対象モデルについて詳しく知識を保有し、細かい部分の影響を考えることでより、予測精度を高めるといった点で重要になります。
しかし、end-to-end学習の方法もあります。これは、どんな人でも活用できるように生のデータのまま学習させ、データ間の関係性を見つける手法もあるので、この場合そこまで生成をする必要はありません。
今回は前者の方法を採用し、金融知識を高めながらデータ分析をしていく手法をとっていくそうです。
その上での最重要な点は、
「仮説を立て、仮説を遂行するために必要な特徴量を考える」である。
今回は金融の領域で重要な判断材料となる、ボラリティリティや移動平均を元に特徴量生成をしています。
#2.8章
④バリデーション戦略
これは、学習させてモデルの汎化性能を上げるために行なっている作業です。
過学習を防ぐためにやっています。
#2.9章 モデルの構築
モデルは木構造をチョイスしてますね。
それに加えて、一つの銘柄に対して、一つのモデルを構築するように学習しています。
#2.10章 モデルの推論
バリデーションしたものに関して、推論し、精度の確認や予測結果の可視化をしています。
#2.11章
モデルの予測に寄与した特徴量の分析
#2.12章 モデルの評価
個人的にはこの章が一番大事だと思う。
なぜならば、全ての取り組みの結果を評価するのがこの章だからだ。
その上で評価している内容は、
RMSE: 2乗平均平方根 -> 予測値と実際の値の差
accuracy: 目的変数の符号と予測した目的変数の符号の精度
spearmanc_corr: スペアマンの順位相関 -> 絶対値が大きいほど、相関関係は高い
corr: ピアソンの相関係数 -> 正の相関があるか負の相関があるか
R^2score: 単回帰した時のばらつき
これにより、どのモデルにどのデータセットを適応させるのがいいのか評価し、判断していきましょう!
#終わりに
今回は2章をざっくりと説明しました。
次回以降は3章等々を紹介していきたいなと思います。