Source code for skfolio.descriptor._growth._issuance_growth_rate

"""Issuance growth rate descriptor."""

# Copyright (c) 2023-2026
# Author: Hugo Delatte <hugo.delatte@skfoliolabs.com>
# SPDX-License-Identifier: BSD-3-Clause

from __future__ import annotations

from skfolio.descriptor._growth._base._growth_rate import GrowthRate


[docs] class IssuanceGrowthRate(GrowthRate): r"""Issuance growth rate descriptor. Computes period-over-period growth in split-adjusted shares outstanding: .. math:: \text{issuance\_growth}(t) = \frac{\text{adj\_shares\_outstanding}(t)} {\text{adj\_shares\_outstanding}(t - \text{lag})} - 1 The first `lag` observations are NaN because no lagged history is available. `adj_shares_outstanding` must contain non-missing finite non-negative values. NaNs are allowed as missing observations and propagate when either the current or lagged value is missing. Zero values are allowed and a zero lagged value makes the growth rate undefined and produces NaN. Positive issuance growth indicates an increase in split-adjusted shares outstanding. Net share issuance is a negative predictor of future returns, independent of size, value and momentum [1]_. This is a convenience subclass of :class:`GrowthRate` with `field="adj_shares_outstanding"`. Parameters ---------- lag : int, default=252 Number of observations to look back. The interpretation depends on the data frequency: `lag=12` means 1 year for monthly data, `lag=252` for daily data, `lag=4` for quarterly data. Attributes ---------- n_assets_ : int Number of assets seen during fitting. asset_names_ : ndarray of shape (n_assets,) Asset names seen during fitting. growth_rate_ : ndarray of shape (n_assets,) Last issuance growth value for each asset. References ---------- .. [1] "Share issuance and cross-sectional returns" The Journal of Finance. Pontiff, J., & Woodgate, A. (2008). See Also -------- GrowthRate : Generic period-over-period growth rate descriptor. Examples -------- >>> from skfolio.datasets import make_synthetic_characteristics >>> from skfolio.descriptor import IssuanceGrowthRate >>> >>> X = make_synthetic_characteristics() >>> >>> descriptor = IssuanceGrowthRate(lag=252) >>> issuance_growth_rate = descriptor.fit_transform(X) """ def __init__(self, lag: int = 252): super().__init__(field="adj_shares_outstanding", lag=lag)