今回は、「企業の財務指標をもとに単回帰分析でリターン予測をする」という流れをサンプルコードとともに解説をします!
(記事にでてくるコードは配布しております。まとめにあるリンクからダウンロードください。)
本記事は、全8回に渡って掲載される「Pythonによる財務分析‐バフェットコードを用いて完全レクチャー!」シリーズの第7回です!
今回は、
- Pythonでおこなうことができる単回帰分析について理解する
- Pythonをもちいて単回帰分析によるリターン予測をする
という流れをサンプルコードとともに解説をします!
今回は、最後の第8回(次回)におこなう重回帰分析の理解を深めるために、チュートリアルとして単回帰分析をしていきます。
単回帰分析とは、二つのデータ間で関係がありそうなものに対し、一方のデータが他のデータに対して影響を与える関係が想定できる場合に使われる手法です。
この手法は、一方のデータ群に比例してもう他方のデータ群の値も決まることを予測することができます。
たとえば、”広告費への投資金額”と”売上高”のデータがあるとします。
このとき、広告費への投資が売上高を決めていると予想できる場合、回帰分析によって投資金額による売上高の予測値を求めることができます。
今回は、加工した指標をもとにリターン(キャピタルゲイン)の予測値を求めていきます!
それでは一緒にまなんでいきましょう!
Pythonでおこなうことができる単回帰分析について理解しよう!

単回帰分析をおこなう前に、そもそもこの分析手法はなんなのか簡単に理解していきましょう!
単回帰分析とは
この手法は、2つのデータ間で関係がありそうなものを本当に関係しているか調べたり、
調べた上で関係を 『y = ax+b 』といったように、関係しているものを比例の式で簡単に求たいときに利用します。
例えば、全国の人達を集めて、体重によりだいたい身長が決まってくるのかを調べるとします。
このとき、身長と体重に単回帰分析をかけ、体重が増えれば増えるほど身長が高くなるか調べます。
このとき、もし体重によって身長が影響していることがわかった場合、体重をもとに身長を大体予想することができるようになります。
イメージ 『 y(身長) = a x(体重) + b 』 のような直線の式を書くことが出来ます。
男性で 身長170cm の人は大体60±5 ㎏ が健康診断とかで普通の体重と言われたりしますが、逆に体重からおおよその身長を推定することができる、という具合です。
ちなみにですが、この影響を与える(影響を与えられる)2つのデータは機会学習の分野では以下のように呼ばれています。
さっきの、y(身長) = a x(体重) + b の比例式では、xが説明変数でyが目的変数といった具合です。
xの値が決まれば、それに応じてyの値も決まってくる関係にあるため、XによってYを説明できる(予測できる)ことになります。
相関関係であって因果関係ではないことに注意
単回帰分析で注意しないといけないことは、2つのデータ間が相関関係にあるだけであり、因果関係があるかどうかまではわからないということです。
さっきの単回帰分析の図で例えると、XによってYの値を決めているという前提としていますが、YによってXの値を決めている可能性もあるということです。
このように、予測値を出したとしても因果関係にあるかどうか注意しないといけません。
単回帰分析と重回帰分析の違い
単回帰分析と重回帰分析の違いは、目的変数に対しての説明変数の数が1つか複数かです。
数式で表すと以下のようになります。

重回帰分析についての詳しい説明は第8回にておこないますので、
いまは単回帰分析より説明変数の数が多いくらいに理解してください。
Pythonをもちいて単回帰分析によるリターン予測をしよう!
単回帰分析をざっくりと理解したところで、早速リターン予測をしていきましょう!
まずはいつものように第7回の新規ファイルを作成します。

加工したデータを読み込み、分析に使いたい指標を選ぶ
今回分析に使用するcsv形式のデータある、ProccessedDataを読み込みます。
加えて、読み込んだ全企業データのカラム(列)の項目を確認し、分析に用いる財務指標を選定します。

今回は試しに、ROEとキャピタルゲインを用いて単回帰分析をおこないます!

散布図を作成する
次に散布図を作成し、視覚的に2つのデータ間で比例の関係がありそうか確認します。
(散布図の説明は第1回にておこなっています。)

今回は重回帰分析のチュートリアルとして単回帰分析をおこなっているため結果を公開します。
これの結果をみると、散布図のROEの増加に関わらずキャピタルゲインが増加していることに注目し、相関関係があまりないことが読みとれます。
加えて、図より一部のROEが400%や800%に位置していることから、現実的でないROE(外れ値)があることも読みとれます。
本来はここで、分析する指標を変えるか吟味したり、分析結果に影響を与える可能性がある外れ値を、使えるデータとして認めるか吟味したりします。


統計量を作成する
散布図を確認し、大まかな結果の予想を立てた上で、統計量を作成します。
今回の単回帰分析は、最小二乗法(OLS)呼ばれる数学的手法により算出される分析ですので、最小二乗法の統計量が出力されます。
最小二乗法についての説明は割愛しますが、単回帰分析をするために用いる計算方法だと理解しているだけで大丈夫です。
書きのようなコードを書き統計量を算出します。

統計量を確認する
出力された統計量を確認します。
様々な項目がありますが、優先的にみる項目だけ説明します。
その項目は、「決定係数」「P値」です。
今回の統計量ですと、P値に関しては問題ないですが、決定係数はかなり低く当てはまりが悪いことがわかります。
回帰式を作成する
決定係数の判定でかなり精度が悪いことがわっていますが、回帰式を作成します。
例えば、全国の人達を集めて身長と体重の式を作成するとします。
この場合、いろんな方々がいますが、身長をy体重をxとしてデータの分布を作成すると、
中学で習った y(身長) = a x(体重) + b みたいな直線の式を書くことが出来ます。
男性で 身長170cm の人は大体60±5 ㎏ が健康診断とかで普通の体重と言われたりしますが、逆に体重からおおよその身長を推定することができる、という具合です。
話を戻すと、今回のROEとキャピタルゲインの回帰式をみるに、ROEに比例してリターンがわずかながら増加するといった予測だとわかります。

もちろん、これは全企業データで扱っているため業種ごとだと結果は変わっていきます。
他方、ROE以外の指標で分析しても違った予測になります。
今回は、チュートリアルですので、本格的な分析は第8回にておこないます!
まとめ
第7回では、
- Pythonでおこなうことができる単回帰分析について理解する
- Pythonをもちいて単回帰分析によるリターン予測をする
という流れをサンプルコードとともにレクチャーをしました!
最終回である第8回は「重回帰分析を行いリターン予測をする」をおこないます。
じつは今回の第7回では、回帰分析になれるためのチュートリアルのため、「他の指標での予測」「業種別での分析」「予測値をもとに企業をスクリーニング」といった深い内容はしていません。
しかし、第8回では単回帰分析の知識を前提として、深い分析や具体的な投資戦略を考えることが出来ればと考えています!
記事にでてくるコードはLINE@にて配布をしております!
ラインのメッセージ欄に「財務分析」とお送りいただければ、ダウンロードリンクを送付いたします!
最終的に重回帰分析といった機械学習的手法もマスターできる!