
今回は、「企業の財務指標をスコアリングし順位付けをする」という流れをサンプルコードとともに解説をします!
(記事にでてくるコードは配布しております。まとめにあるリンクからダウンロードください。)
本記事は、全8回に渡って掲載される「Pythonによる財務分析‐バフェットコードを用いて完全レクチャー!」シリーズの第6回です!
今回は、
- 全企業の総合力をスコアリングし順位を求める
- 業種ごとでの総合力をスコアリングし順位を求める
という流れをサンプルコードとともに解説をします!
読み込んだデータの財務指標をスコアリングします。
そして、スコアリングしたデータから、企業を順位付けしていきます!
スコアリングをおこなうことで、色んな企業と比較し、総合的にみて優秀な企業を見つけ出すことができます。
また、今回は業種ごとでの財務指標の目安の違いを考慮し、全企業だけでなく業種内でもスコアリングを行い順位付けをします!
これを行うことで、企業の優位性を、業種内といったせまい範囲で精度たかく確認することができます!
企業の優位性を確認しておくことは、ある銘柄の値動きを予測するときなどに役立ちます。
通常、値動きはたくさんの要素がいりまじり、予測をするのはとても大変です。
しかしながら、企業の優位性を確認しておくことで、値動きの要因をしぼれ予測精度が上がります。
今回のレクチャーを通し、銘柄をスクリーニングする際の一つの方法をマスターしましょう!
目次
Pythonによる財務分析の方法として、全企業の総合力をスコアリングし順位を求めよう!

第5回にてクレンジングをおこない保存した、csv形式のデータを読み込ます。
その後、全企業の財務指標をスコアリングし順位を求めていきます!
スコアリングをおこなうことで、企業ごとの財務指標の順位付けをすることができます!
順位付けを行うことで、財務指標から簡単に優良企業を判断できるようになります!
もちろん、業種ごとで指標の目安が違ったり、注目すべき勘定科目やそれらの指標は通常変わっていきます。
たとえば、銀行業では、利息や信用リスクの管理のために、受取・支払利息といった勘定科目に関連した指標が重要視されます。
それに対し、製造業では、R&Dや製品の欠陥が重みをおかれ、R&D費や製品保証引当金といった勘定科目に関連した指標が重要視されます。
しかしながら、おおまかに企業をスクリーニングする上で、順位付けという手法はおぼえて損はないので、是非マスターしておきましょう!
まずは、いつものように第6回のファイルを新規作成します!


サンプルコードをLINE@にて配布していますので、そこから第6回のファイルをダウンロードするでも大丈夫です。
メッセージにて、「財務分析」とお送りいただければダウンロードができます。

第5回でクレンジングをおこなったデータを読み込む
その後、下記のようなコードを書き、第5回でクレンジングをおこなったデータを読み込みます。

そのとき、ついでにmatplotlibとよばれるライブラリをインポートしたり、クレンジングしたデータが読み込まれている変数”processed”を変数”memory”にもコピーします。
これらは、次以降の章である「ヒストグラムを確認する」や「 選択した業種をもとに銘柄コードを抽出する」にて使いますので説明はのちほどします!
財務指標の良し悪しをスコアリングする
その後、total_power_surveyとよばれる、企業の総合力を調べる関数を作成します。

この際、財務指標ごとで良し悪しをスコアリングします。

順位付けした各指標をもとに、企業の総合力のランキングを作成する
順位付けした各指標をもとに、総合力のランキングを作成します。
そのさい、100点満点換算にスケールを変え各指標をまとめ総合点を出し、総合点が高い順にデータを並び変えていきます。

100点満点換算にしている理由は、単に馴染みが深い数字だからというだけです。
他にも何点満点とスケールを変えることはできます。
トップ3の企業を出力する
最後に、総合力のランキングのトップ3の企業を出力します。
せっかくなので、インデックスの部分をランキングに張り替えて見栄えを良くしていきます!

今回はあえて順位を載せていません。
実際に試してみて、体感してみましょう!
ヒストグラムを確認する
最後にヒストグラムを作成し、トップとの差を確認します。
ヒストグラムとは、データの分布状況を分かりやすくしたものです。

ヒストグラムの縦軸は会社数、横軸はスコアを表しています。
ヒストグラムをみるに、大半の企業が40~60の間に位置しており、トップ層のスコアがいかに珍しいのかがわかります!
Pythonによる財務分析の方法として、業種ごとでの総合力の順位順位を求めよう!
全企業だけでなく、業種ごとでの分析もおこないます!
こちらは、より業種ごとの目安に特化させたい場合や、業種ごとでデータを取得した方向けになります!
分析したい業種を選択する
分析したい業種を選択しましょう!
選択するための材料として、まずは業種ごとの企業数を求めていきます。

その後、「何社以上の企業数がある業種」と、業種をスクリーニングしていきます。
試しに 120社以上の業種でスクリーニングしてみます!

このように、スクリーニングされた業種が確認できます!
今回は建設業を選択して分析してみます!
もちろん、どの業種でも分析は可能です。
皆さんも好きな業種を選んでください!
選択した業種をもとに銘柄コードを抽出する
選択した業種をもとに、下記のようなコードを書き、銘柄コードを抽出します。
このとき、冒頭で作成した変数”memory”をつかって抽出します。
変数”memory”をつかう理由は、バグを防ぐためです。
このバグは値とアドレスが関係しています。
プログラミングの変数は、値を代入できる箱のようなものをイメージしていますが、Pythonのlist型やdict型といった配列は、変数の中に住所のようなアドレスが存在します。
今回の場合ですと、変数memoryやprocessed_dataはリスト型で、箱の中に[0][1][2]とアドレスがあります。
「東京都」という大きな箱に、色んな地区のアドレスがあるイメージです。
そのため、copy()せずそのまま変数processed_dataを代入すると、たんに変数の中の値を代入するのではなく、値の中のアドレスを代入する形になります。
そうなると、本来スコアリング前のデータがほしかったのに、今さきほど全企業でスコアリングしたデータが更新されてmemoryに代入されます。
要は、list型やdict型などの配列はコピーする際注意くらいに思って頂けると大丈夫です!
詳しくはこちら →「値渡し」と「参照渡し」の違い

ランキングを作成しトップ3を出力する
全企業データと同様に、業種ごとでも同じように、ランキングを作成しトップ3を作成します!


ヒストグラムを確認する
最後にヒストグラムを作成し、トップとの差を確認します!

まとめ
第6回では、Pythonで本格的な財務分析を行うための、
- 全企業の総合力の順位を求める
- 業種ごとでの総合力の順位順位を求める
という流れをサンプルコードとともにレクチャーをしました!
次回の第7回では、「企業の財務指標をもとに単回帰分析ででリターン予測をする」流れに入っていきます。
こちらをレクチャーすることで、機会学習的手法の基本である単回帰分析を学ぶだけでなく、財務指標からリターンの予測を行うことができます!
記事にでてくるコードはLINE@にて配布をしております!
ラインのメッセージ欄に「財務分析」とお送りいただければ、ダウンロードリンクを送付いたします!
最終的に重回帰分析といった機械学習的手法もマスターできる!