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} = \text{Net Income} - (\text{Cost of Equity} \cdot \text{Book Value of Equity})\]

Also known as: RI, economic profit (equity variant), abnormal earnings.

Residual Income in Python

get_residual_income is part of the Models module of the open-source Finance Toolkit. Install it with:

pip install financetoolkit -U

Then call get_residual_income as shown below.

from financetoolkit import Toolkit

toolkit = Toolkit(["AAPL", "MSFT"], api_key="FINANCIAL_MODELING_PREP_KEY")

toolkit.models.get_residual_income().loc["AAPL"]

Which returns:

  2021 2022
Net Income 9.4680e+10 9.9803e+10
Cost of Equity 0.3757 -0.2485
Book Value of Equity 6.4215e+10 5.6881e+10
Residual Income 7.0554e+10 1.1394e+11

Parameters

get_residual_income accepts the following parameters:

  • rounding (int, optional): The number of decimals to round the results to. Defaults to None.
  • growth (bool, optional): Whether to calculate the growth of the values. Defaults to False.
  • lag (int | list[int], optional): The lag to use for the growth calculation. Defaults to 1.
  • standardize (bool, optional): Whether to standardize (Z-Score) the result. When combined with growth=True, standardizes the growth values instead of the raw values. Defaults to False.
  • trailing (int | None, optional): The trailing period to use for the calculation. Defaults to None.
  • show_columns (list[str] | None, optional): List of columns to show in the results. If None, all columns will be shown. Defaults to None.
Share