Residual Income
Residual Income is a measure of the profit a company generates in excess of the return required by its equity holders. It is the equity-side counterpart to Economic Value Added (EVA), and underpins the Residual Income Model, an alternative equity valuation lens to a traditional Discounted Cash Flow (DCF) that is particularly useful when a company’s free cash flows are negative or unpredictable but its accounting earnings are more stable.
The formula is as follows:
\[\text{Residual Income}_{t} = \text{Net Income}_{t} - (\text{Cost of Equity} \cdot \text{Book Value of Equity}_{t-1})\]Also known as: RI, economic profit (equity variant), abnormal earnings.
Residual Income in Python or via the MCP
Install the Finance Toolkit with:
pip install financetoolkit -U
Then call get_residual_income as shown below.
from financetoolkit import Toolkit
toolkit = Toolkit(
["V", "MA", "AXP"],
api_key="FINANCIAL_MODELING_PREP_KEY",
start_date="2022-01-01",
end_date="2025-12-31",
)
toolkit.models.get_residual_income().xs("Residual Income", level=1)
Or, after setting up the Finance Toolkit MCP, ask:
How much residual income above their cost of equity did Visa, Mastercard and American Express earn from 2022 to 2025?
Which returns:
| 2022 | 2023 | 2024 | 2025 | |
|---|---|---|---|---|
| AXP | 5.6287e+09 | 5.94485e+09 | 7.56011e+09 | 7.62486e+09 |
| MA | 9.35646e+09 | 1.06974e+10 | 1.23824e+10 | 1.44718e+10 |
| V | 1.24384e+10 | 1.48241e+10 | 1.71898e+10 | 1.69421e+10 |
Parameters
get_residual_income accepts the following parameters.
| Parameter | Type | Description | Example |
|---|---|---|---|
rounding | int | The number of decimals to round the results to. Defaults to None. | 2 |
growth | bool | Whether to calculate the growth of the values. Defaults to False. | True |
lag | int | list[int] | The lag to use for the growth calculation. Defaults to 1. | 4 |
standardize | bool | Whether to standardize (Z-Score) the result. When combined with growth=True, standardizes the growth values instead of the raw values. Defaults to False. | True |
trailing | int | None | The trailing period to use for the calculation. Defaults to None. | 4 |
market_risk_premium | float | None | The annual equity risk premium the Cost of Equity uses. Defaults to None, which takes the equity risk premium of each company’s country (Damodaran’s Total Equity Risk Premium, see get_market_risk_premium) and, where that is not available, the benchmark’s average return above the risk-free rate over the data. | None, which takes the equity risk premium of each company's country (Damodaran's Total Equity Risk Premium, see get_market_risk_premium) and, where that is not available, the benchmark's average return above the risk-free rate over the data |
show_columns | list[str] | None | List of columns to show in the results. If None, all columns will be shown. Defaults to None. | ["Cost of Equity", "Residual Income"] |