今回は、「企業の財務指標をもとに重回帰分析を行いリターン予測をする」」という流れをサンプルコードとともに解説をします!
(記事にでてくるコードは配布しております。まとめにあるリンクからダウンロードください。)
本記事は、全8回に渡って掲載される「Pythonによる財務分析‐バフェットコードを用いて完全レクチャー!」シリーズの第8回です!
今回は、
- Pythonでおこなうことができる重回帰分析について理解する
- 業種別で重回帰分析をおこないリターン予測をする
- データクレンジングをおこない再度リターン予測をする
- 予測値をもとに企業をスクリーニングする
という流れをサンプルコードとともに解説をします!
今回は、重回帰分析をおこないリターン予測をします。
重回帰分析とは、あるデータが複数の要因で影響を与えていそうな場合に対し、それらの要因を一気に調べるさいに使われる手法です。
この手法は、複数の要因ひとつひとつがあるデータの予測値の一部となり、それらを合算してひとつの予測値として出力することができます。
たとえば、男子のソフトボール投げの飛距離を予測するとします。
このとき、身長や体重など様々な要因が飛距離に影響していると考えられます。
この場合、重回帰分析をおこないそれらの要因ひとつひとつがそれぞれ飛距離に関係しているのか、関係しているとすればどのくらい関係しているのかを調べ予測値を出すことが出来ます。
今回は、加工した全ての指標をもとに、重回帰分析をおこないリターン(キャピタルゲイン)の予測値を求めていきます!
その後、予測値をもとに企業のスクリーニングをおこないます。
スクリーニングとは、企業をある基準で抽出することを指します。
今回は、予測値と実際のリターンとの差が大きい上位10%、という基準で企業を抽出していきます!(10%はあくまで目安として決めております)
今回はシリーズ最終回です、待ちに待った重回帰分析によるリターン予測をおこなっていきましょう!
それでは一緒にまなんでいきましょう!
重回帰分析をザックリ理解しよう!

重回帰分析をおこなう前に、そもそも重回帰分析という分析手法はなんなのかザックリ理解していきましょう!
重回帰分析とは
この際、身長や体重など様々な要因が飛距離に影響していると考えられます。
この場合、重回帰分析をおこないそれらの要因ひとつひとつがそれぞれ飛距離に関係しているのか、関係しているとすればどのくらい関係しているのかを調べ予測値を出すことが出来ます。
このとき、それぞれの要因が異なる影響度で飛距離に関わっているので、数式でかくと
イメージ 『 y(飛距離) = a × (体重) + b ×(身長) + c 』 のような式を書くことが出来ます。
体重や身長が決まれば、それに応じてのY(飛距離)も決まってくる関係にあるため、複数の要因によってYを説明できる(予測できる)ことになります。
重回帰分析のメリット
今回の場合ですと、前回の単回帰分析のように指標ひとつではなく、全ての指標を使い分析をおこなうことができます!
業種別で重回帰分析をおこないリターン予測をしよう!
重回帰分析をざっくりと理解したところで、早速リターン予測をしていきましょう!
今回は、いきなり業種別で重回帰分析をおこないリターン予測をしていきます。
理由としては、企業全体でおこなうと、業種ごとで指標の目安や重視される勘定科目が異なるため、精度が悪く予測が困難になり分析としてつかえないからです。


まずはいつものように第8回の新規ファイルを作成します。

サンプルコードをLINE@にて配布しています。
メッセージにて、「財務分析」とお送りいただければダウンロードができます。

分析に必要なライブラリをインポートしデータを読み込む
今回の重回帰分析で必要なライブラリをインポートしていきます。
必要なライブラリは画像の通りになります。

その後、今回分析に使用するcsv形式のデータある、ProccessedDataを読み込みます。

企業別でデータを取得する
次に企業別でデータを取得していきます。
第6回にも話しましたが、今回は12指標のため、120社以上の業種からデータを取得していきます。
下記のようなコードを書き、業種のみでデータを取得します。

今回はサービス業を取得しました!このままサービス業で進んでいきます!
統計量を確認する
前回の単回帰分析と同様に、統計量を作成し結果を確認します。

こちらが統計量の全体図です。

様々な項目がありますが、単回帰分析と同様に「決定係数」と「P値」をみます。
決定係数をみると、かなり低く、当てはまりが悪いことがわかります。


株式投資のリターンに関する論文の決定係数は基本当てはまりが悪いので、ここは多目にみます。
研究者が執筆する論文でさえ当てはまりが悪い理由としては、株の値動きは基本的にランダムであるからです。
その中で、値動きの法則性を見つけることがリターンを予測し利益を勝ち取ることがギャンブルとしてでなく投資をする上で重要です。
P値(P >|t|)をみると、前回の単回帰分析で問題としていた0.05以上の数値をもつ要因(説明変数)が多くみられます。
P値に関しては、0.05以上の場合別の要因によってリターンに影響を与えている可能性があるため、適切でないP値をもつ財務指標を除いて再度統計量を出す必要があります。
データ処理をおこない再度統計量を確認しよう!
さきほどの統計量から、P値に問題がある指標がみつかりました。これをもとに、データ処理をおこない再度統計量を出していきます!
P値の結果によるデータ処理をおこない再度統計量を確認する
P値の結果によるデータ処理をします、その前におさらいとしてP値の説明をかきます。
説明変数以外のものにより目的変数に影響を与えている確率(p値が0.05以下なら説明変数以外のもので影響を与えていると判断してよい)
P値をみるに、 “×10 “, ” ×12 “の指標以外が問題の指標となっているため、“×10 “, ” ×12 “ の指標の名前を特定します。
下記のようなコードをかき、一番左の列と対応することNameの列をみます。

ここで注意なのが、統計量では1番からスタートなのに、こちらの表では0番からスタートしている、ということです。
従って、 “×10 “, ” ×12 “を特定するには、 9番,11番の指標を抽出しないといけないです。
データ処理をおこなった上で統計量を確認します。

これをみると、決定係数の当てはまりは悪いですが、P値の問題が解消されていることがわかります。
多重共線性によるデータ処理をおこない再度統計量を確認します
さきほどP値によるデータ処理をおこないましたが、重回帰分析特有でもう一つ重要な処理をおこなう必要があります。
ズバリ、多重共線性です。
説明変数間で相関係数が高いときに、それが原因で発生する現象
多重共線性が起こると分析結果にバグが生じてしまい、正確な分析ができなくなってしまいます。
従って、多重共線性が起きているか確認する必要があります。
下記のようなコードをかき、説明変数間で相関係数が高いかどうか調べます。

結果をみるに、説明変数間の相関係数がひくいことから多重共線性は起きていないことがわかります。

今回はデータ処理をおこないませんでしたが、同じように再度統計量を出力し確認します。

これをみると、決定係数の当てはまりは悪いですが、P値の問題が解消されていることがわかります。(P値によるデータ処理と同じ結果)
もし、多重共線性によるデータ処理をおこなったさいに。P値に問題が発生した場合はP値によるデータ処理を行って統計量を確認しましょう!
予測値をもとに企業をスクリーニングしよう!
統計量から、リターン予測をおこなうことが確認されたので、これをもとに企業のスクリーニングをしていきます!
全ての企業の予測値を求める
まずは、下記のようなコードをかき、全ての企業を予測値を求めていきます。

予測値をもとに企業をスクリーニングして出力する
その後、予測値をもとに企業をスクリーニングして出力します。
スクリーニング方法としては、予測値と実際のリターンの差が上位10%の銘柄を求めていき、その後その求めた銘柄から更にトップ5の銘柄を抽出します。
これにより、予測値に対して実際のリターンがかなり低く見積もられている銘柄を抽出することができます!!!



まとめ
第8回では、
- Pythonでおこなうことができる重回帰分析について理解する
- 業種別で重回帰分析をおこないリターン予測をする
- データクレンジングをおこない再度リターン予測をする
- 予測値をもとに企業をスクリーニングする
をおこなっていきました!
このシリーズを通して、バフェットコード様のAPIを用いた、Pythonの財務分析をおこなうことができたのではとおもいます!
他方、「データの取得」「データの加工」「データの分析」といった、データをサイエンスする上での基本的なところもレクチャーしました!
長きに渡るシリーズでしたが見てくださりありがとうございました!
次回のシリーズでは、複数の個別銘柄をもちいて分散投資をするさいの、最適なポートフォリオの割合をPythonをつかって求めていこうとおもいます!
今回の最後、複数の銘柄を抽出しましたが、実際に投資をするさい数学的な観点からみるベストな投資方法について書いていきます!
今後ともよろしくお願いいたします!
記事にでてくるコードはLINE@にて配布をしております!
ラインのメッセージ欄に「財務分析」とお送りいただければ、ダウンロードリンクを送付いたします!
最終的に重回帰分析といった機械学習的手法もマスターできる!