自己資本比率は、企業の 財務健全性 を見るための入り口となる指標です。本記事では自己資本比率・流動比率・有利子負債依存度などの定義と読み方を整理し、pandas で組み合わせて使うコード例を示します。
目次
- 自己資本比率とは
- 業種で水準が違う
- 流動比率と当座比率
- 有利子負債依存度
- 単一銘柄を計算する
- 複数銘柄を pandas で一括計算する
- 指標の組み合わせで見る
- 業種中央値と比較する
- 倒産リスクの簡易チェック
- 時系列で悪化を追う
自己資本比率とは
自己資本比率(Equity Ratio)は「総資産のうち、何%が自己資本(返済不要の資金)で賄われているか」を表します。
たとえば総資産 1,000 億円、自己資本 400 億円なら、自己資本比率 = 40%。残り 60% は負債で賄っているという意味です。
自己資本比率が高いほど、借入への依存度が低く、業績悪化や金利上昇に対する 耐久力 が強いと解釈されます。
業種で水準が違う
自己資本比率の 適切な水準 は業種で大きく違います。
| 業種 | 自己資本比率の傾向 |
|---|---|
| 銀行 | 5〜10% 前後(預金が負債に分類されるため) |
| 製造業 | 30〜60% 程度が多い |
| 不動産 | 20〜40% 程度(借入を使った投資が多い) |
| IT・サービス | 50〜70% 以上もある |
「30% 以上が安全」と一律の基準で語ると、銀行や不動産の業態を見誤ります。業種を揃えた比較 が前提になります。
流動比率と当座比率
短期の支払い能力を見る指標として、流動比率と当座比率があります。
流動比率
1 年以内に現金化できる資産が、1 年以内に支払う負債の何倍あるかを示します。一般に 150% 以上 が一つの目安とされますが、業種・事業モデルで変わります。
当座比率
当座資産は流動資産から 棚卸資産(在庫) を除いたもの。在庫を除外することで、より厳しめの支払い能力を測れます。100% 以上 が目安とされます。
有利子負債依存度
借入金・社債など、利息が発生する負債 の比率を見る指標です。
または D/E レシオ(Debt to Equity) として、
の形で見ることも多くあります。D/E が 1 を超えると、自己資本より有利子負債のほうが大きい状態です。金利上昇局面で耐久力が落ちます。
単一銘柄を計算する
サンプル値で計算する例です。
def equity_ratio(equity: float, assets: float) -> float | None: """自己資本比率(%)を返す。""" if assets is None or assets <= 0: return None return equity / assets * 100
def current_ratio(current_assets: float, current_liab: float) -> float | None: """流動比率(%)を返す。""" if current_liab is None or current_liab <= 0: return None return current_assets / current_liab * 100
def de_ratio(debt: float, equity: float) -> float | None: """D/E(倍)を返す。""" if equity is None or equity <= 0: return None return debt / equity
print(round(equity_ratio(400, 1000), 2)) # 40.0print(round(current_ratio(600, 400), 2)) # 150.0print(round(de_ratio(500, 400), 3)) # 1.25自己資本がマイナス(債務超過)の場合、D/E は計算不能扱いにしておくのが安全です。
複数銘柄を pandas で一括計算する
import numpy as npimport pandas as pd
df = pd.DataFrame({ "Code": ["1301", "1302", "1303", "1304", "1305"], "TA": [1000, 1500, 2000, 500, 1200], "Eq": [ 600, 400, 150, 300, -50], # 1305 は債務超過 "current_assets": [ 400, 500, 800, 200, 500], "current_liab": [ 200, 600, 900, 100, 600], "interest_debt": [ 200, 500, 1200, 100, 800],})
df["equity_ratio"] = np.where(df["TA"] > 0, df["Eq"] / df["TA"] * 100, np.nan)df["current_ratio"] = np.where(df["current_liab"] > 0, df["current_assets"] / df["current_liab"] * 100, np.nan)df["de_ratio"] = np.where(df["Eq"] > 0, df["interest_debt"] / df["Eq"], np.nan)df["debt_dep"] = np.where(df["TA"] > 0, df["interest_debt"] / df["TA"] * 100, np.nan)
cols = ["Code", "equity_ratio", "current_ratio", "de_ratio", "debt_dep"]print(df[cols].round(2))債務超過の銘柄(1305)は、equity_ratio が負・de_ratio が NaN になり、後段の集計で扱いやすくなります。なお、上記サンプル値は説明用の 架空の概算 です。実値は J-Quants API の財務データから取得します(#6-6「財務情報を取得する (/fins/summary)」)。
指標の組み合わせで見る
財務健全性は単独の指標で判断せず、複数を組み合わせて見ます。
| 自己資本比率 | 流動比率 | D/E | 解釈の例 |
|---|---|---|---|
| 高 | 高 | 低 | 余裕のある財務 |
| 高 | 低 | 低 | 在庫過多 / 売掛回収遅延などキャッシュ循環の懸念 |
| 低 | 高 | 高 | 借入で投資中。事業モデルが許容するか要確認 |
| 低 | 低 | 高 | 短期支払いと長期借入の両面で警戒水準 |
「全部高ければ良い」「低ければ危ない」と単純化するのではなく、事業モデルに対して妥当な水準か を考えます。例えば不動産事業では D/E が高いのが標準で、低い方が逆に資金効率の悪さを意味することもあります。
業種中央値と比較する
業種ごとの中央値と並べて、相対的な位置を見ます。
df["S33Nm"] = ["製造業", "製造業", "不動産", "IT", "製造業"]
sector_med = ( df.dropna(subset=["equity_ratio"]) .groupby("S33Nm")["equity_ratio"] .median())df["sector_median_eq_ratio"] = df["S33Nm"].map(sector_med).round(2)df["eq_ratio_vs_sector"] = (df["equity_ratio"] - df["sector_median_eq_ratio"]).round(2)
print(df[["Code", "S33Nm", "equity_ratio", "sector_median_eq_ratio", "eq_ratio_vs_sector"]])eq_ratio_vs_sector がマイナスなら、業種平均より自己資本比率が低い銘柄、ということが分かります。
倒産リスクの簡易チェック
財務健全性の観点から、最低限のスクリーニング条件を例示します。
mask_safe = ( (df["equity_ratio"] >= 30) & (df["current_ratio"] >= 100) & (df["de_ratio"].fillna(np.inf) <= 1.0) & (df["Eq"] > 0) # 債務超過を除外)print(df[mask_safe][["Code", "S33Nm"]])これは 教育目的の簡易フィルタ で、これに通れば倒産しないという保証ではありません。実務では営業キャッシュフロー・利息カバレッジ・社債格付けなど、別の指標も併用します。
時系列で悪化を追う
財務健全性は トレンド で見ると変化が分かりやすくなります。3〜5 年分の自己資本比率・D/E を時系列で並べることで、悪化が継続的かを判断できます。
# サンプル: 銘柄 A の 5 年分の自己資本比率yearly = pd.DataFrame({ "year": [2020, 2021, 2022, 2023, 2024], "equity_ratio": [55, 50, 45, 40, 35],})print(yearly)# 単年の水準より、徐々に下がっていることのほうが本質的なシグナル「水準が低い」より「年々下がっている」のほうが、本質的な悪化のシグナルになることがあります。
生成AI へのプロンプト例
自己資本比率・流動比率・D/E を 1 ページにまとめるダッシュボード関数を依頼する例です。
入力 DataFrame に次の列があります(銘柄識別列は J-Quants API に準拠)。- Code (str)- CoName (str)- S33Nm (str)- equity_ratio (float, %)- current_ratio (float, %)- de_ratio (float, 倍)
依頼: 健全性スコアを 0〜100 で算出する関数 fin_health_score(df) を書いてください。
スコアの構成(均等重み):- equity_ratio: 業種中央値以上で +33 点、未満で按分- current_ratio: 150 以上で +33 点、未満で按分- de_ratio: 0.5 以下で +34 点、超過分は按分減点(2.0 で 0 点)
要件:- pandas 2.2 系- 戻り値は元の列にスコア列を加えた DataFrame- 教育目的のサンプル指標である旨をコメントで明記- docstring は日本語まとめ
- 自己資本比率は「自己資本 / 総資産」。業種で水準が違うため業種を揃えて比較する
- 流動比率・D/E などと組み合わせて見ると解像度が上がる
- 自己資本がマイナス(債務超過)は計算不能扱いで除外する
- 単年の水準より、3〜5 年のトレンドが本質的なシグナルになる
- 簡易スクリーニング条件は教育目的。倒産しない保証ではない