クラウド上でブラウザ経由で必要なサービスを提供するSaaS企業(Software as a Service)は従来のPER,PBRといった指標で評価するのは難しいといった課題がありました。そういった企業群を評価するために成長率や利益率を基準に評価できるのではないか、という考え方になります。
2016年からコロナの急落を経て2021/10月まで多くの銘柄がこの指標をもとに評価されてきました。
企業の売上高の成長率が100%あるならば営業利益率は-60%までは許容できるし、企業の売上高の成長率が20%であれば、営業利益率は20%以上欲しい、、というようなことになります。
その背景にはトップラインである売上高が成長しているのであれば、新興企業という事もあり若干の赤字は仕方がない、市場のシェアを取りに行っているのだ、、という見方があるためです。
評価軸として、MRR: Monthly Recurring Revenue(月間定額収益)を使用したり、FCF(フリーキャッシュフロー) Margin( FCF/売上高 %)を使うことが多いようです。
Yahoo Finance US!からのデータ取得
ここでは簡易的にRevenueGrowthとProfitMarginを利用しています。
銘柄については純粋なSaaS企業だけでなく、時価総額上位10銘柄も入れて、バブルの大きさは時価総額の大きさにしてあります。
2022/08/05時点のデータと2022/07/22時点のデータを比較するとTSLAの位置がRevenueGrowthが下がっているせいか若干、位置ならびにRevenueGrowthのProfitMarginの値が下がっているのが見て取れます。
Yahoo Finance USで取れる情報についてはTTM(Trailing Twelve Months:直近12ヵ月)データなど、完全に取り切れない部分もあるので、残念ながらこのくらいであきらめることにします。
MERITECHを利用する場合
SaaSの評価に特化したサイトがあったりしますので、それを利用します。
上記サイトを見ていただくと %YoY Growth や FCF の値のみでなく、ずばりRule of 40の値も出ていたりします。このサイトのデータをエクセルなどでプロットする手もあるのですが、今回はPythonでプロットすることにします。
他のサイト様ですし、スクレイピングについては割愛させていただき、プロット部分のみ紹介します。
plt.rcParams["font.size"] = 12
sns.lmplot(x="Implied ARR", y="FCF", data=out, height=8, aspect=1.5)
plt.grid(True)
p = np.linspace( -10, 180, 100) # linspace(min, max, N) で範囲 min から max を N 分割します
q = -1*p+40
plt.plot(p, q,'r-.')
for i,(x,y) in enumerate(zip(out["Implied ARR"],out["FCF"])):
plt.annotate(str(out.index[i]),(x,y))
売上高成長率とキャシュフローマージンでクロスプロットし、Rule of 40の想定となるラインを赤の点線でラインを引いたものになります。2022/08/12日時点で84銘柄あるようですので、少し中央あたりは少し混雑しているようですので、数字だけ抜き出し、Rule of 40の値が40以上の物を抜き出すと以下のようになるようです。
display(out[["3-Mo","12-Mo","Implied ARR","FCF","Rule of 40"]][out["Rule of 40"]>40])
また、これらの銘柄がどのような値動きだったかも3カ月と12カ月のデータもあるようなので、X軸をRule of 40の値で、Y軸を3カ月と12カ月としたクロスプロットも載せておきます。
3カ月
plt.rcParams["font.size"] = 12
sns.lmplot(x="Rule of 40", y="3-Mo", data=out, height=8, aspect=1.5)
plt.grid(True)
for i,(x,y) in enumerate(zip(out["Rule of 40"],out["3-Mo"])):
plt.annotate(str(out.index[i]),(x,y))
12カ月
plt.rcParams["font.size"] = 12
sns.lmplot(x="Rule of 40", y="12-Mo", data=out, height=8, aspect=1.5)
plt.grid(True)
for i,(x,y) in enumerate(zip(out["Rule of 40"],out["12-Mo"])):
plt.annotate(str(out.index[i]),(x,y))
12カ月前のRule of 40の値を使うのが筋ですが、今現状ある値を使うという意味で、参考になればと思います。また、この値をCSV等で出力しておいて、数か月後に騰落と確認という事もできると思います。
3カ月後、6カ月後などに、今回の銘柄群がどのような値動きをしたのか、追記などできればと思います。
CSVデータ
2022/08/16時点でのCSVデータ:
—-
投資に関する記事をご紹介します。
コメント