Earnings Quality Score¶
Measures how closely reported earnings track real cash generation. Low earnings quality often precedes earnings disappointments or restatements.
Score: 0–100 (higher = higher quality)
Rating: high (≥70) | medium (45–69) | low (20–44) | poor (<20)
Signals¶
| Signal | Weight | Logic |
|---|---|---|
| Accruals Ratio | 30% | (Net Income − OCF) / Total Assets; lower accruals = more cash-backed earnings (Sloan, 1996) |
| Cash Earnings Quality | 25% | OCF / Net Income over time; ratio above 1.0 means cash generation exceeds reported profit |
| Revenue Recognition Quality | 20% | Change in receivables vs revenue growth; aggressive receivables growth may signal channel stuffing or premature recognition |
| Gross Margin Stability | 15% | Coefficient of variation of gross margin; stable margins indicate genuine pricing, not accounting smoothing |
| Asset Efficiency Trend | 10% | Asset turnover trend; improving efficiency signals real operational leverage, not financial engineering |
Usage¶
from fin_ratios.utils.earnings_quality import (
earnings_quality_score_from_series,
earnings_quality_score,
)
from fin_ratios.fetchers.edgar import fetch_edgar
annual_data = fetch_edgar('AAPL', num_years=7)
score = earnings_quality_score_from_series(annual_data)
print(score.score) # 84
print(score.rating) # 'high'
print(score.table())
# One-liner
score = earnings_quality_score('AAPL', years=7, source='yahoo')
Interpreting Accruals¶
The accruals ratio is the most predictive signal:
< −0.05→ possibly aggressive cash collection; investigate−0.05 to +0.05→ healthy, earnings closely match cash> +0.10→ earnings significantly exceed cash generation; risk of overstatement
Output Structure¶
@dataclass
class EarningsQualityScore:
score: int
rating: str # high / medium / low / poor
components: EarningsQualityComponents
evidence: list[str]
interpretation: str
@dataclass
class EarningsQualityComponents:
accruals_ratio: float # 0–1
cash_earnings: float # 0–1
revenue_recognition: float # 0–1
gross_margin_stability: float # 0–1
asset_efficiency: float # 0–1
Minimum Data Requirements¶
- At least 3 years of data
net_income,operating_cash_flow,total_assets,capex,depreciationrequired
References¶
- Sloan, R.G. (1996). Do Stock Prices Fully Reflect Information in Accruals and Cash Flows About Future Earnings? The Accounting Review.
- Richardson, S. et al. (2005). Accrual Reliability, Earnings Persistence and Stock Prices. Journal of Accounting and Economics.
- Penman, S. (2013). Financial Statement Analysis and Security Valuation (5th ed.).