Empirical asset pricing has a factor zoo: 300+ characteristics predict cross-sectional returns. Since Fama-MacBeth (1973) the central question is whether each predictive characteristic is:
Three challenges block a clean answer:
Chen, Roussanov & Wang (CRW) tackle all three jointly.
For stock $i$ in month $t$:
$$ y_{it} \;=\; \alpha(z_{it}) \;+\; \beta(z_{it})' f_t \;+\; \varepsilon_{it}, \qquad i=1,\dots,N,\;\; t=1,\dots,T. $$| Symbol | Meaning | Observed? |
|---|---|---|
| $y_{it}$ | excess return | ✅ |
| $z_{it}$ | $M$-vector of stock characteristics (lagged) | ✅ |
| $\alpha(\cdot)$ | scalar pricing-error function | ❌ unknown |
| $\beta(\cdot)$ | $K$-vector loading function | ❌ unknown |
| $f_t$ | $K$-vector of latent factors | ❌ unknown |
| $\varepsilon_{it}$ | idiosyncratic shock | ❌ |
The asset-pricing question is whether $\alpha(\cdot) \equiv 0$. If yes, characteristics matter only via $\beta(\cdot)$ — only via risk exposures. If no, characteristics carry mispricing too.
You can't estimate $\alpha(z)$ and $\beta(z)$ directly because they're infinite-dimensional. Sieve approximation replaces each by a finite linear combination of basis functions $\phi(z)$ (polynomials, B-splines, etc.):
$$ \alpha(z) \;\approx\; \phi(z)' a, \qquad \beta_k(z) \;\approx\; \phi(z)' b_k. $$Stacking $a$ and the $b_k$'s into a $J\times(K+1)$ coefficient matrix lets us rewrite:
$$ y_{it} \;\approx\; \phi(z_{it})'\; \underbrace{\bigl(a + B f_t\bigr)}_{\displaystyle =: \Gamma_t \in \mathbb{R}^J} \;+\; \varepsilon_{it}. $$So at each $t$ the return is approximately linear in the basis $\phi(z_{it})$, with time-varying coefficient vector $\Gamma_t$.
The basis $\phi(z)$ creates lots of "synthetic" linear factors out of nonlinear functions of characteristics. The conditional model with $K$ latent factors becomes a linear panel with $J \gg K$ "managed portfolios", and the $K$ true factors live inside the time series of slopes.
For each month $t$, run OLS of returns on the basis:
$$ \hat{\Gamma}_t \;=\; \bigl(\Phi_t' \Phi_t\bigr)^{-1} \Phi_t' Y_t. $$This is Fama-MacBeth (1973) with basis functions. The slopes $\hat{\Gamma}_t \in \mathbb{R}^J$ are returns on $J$ managed portfolios — each has unit exposure to one basis function and zero exposure to the others.
Collect them: $\hat{\Gamma} = [\hat{\Gamma}_1, \dots, \hat{\Gamma}_T] \in \mathbb{R}^{J\times T}$.
Since $\Gamma_t = a + B f_t$, the variation in $\Gamma_t$ across $t$ is driven by the $K$ latent factors $f_t$. Apply PCA to $\hat{\Gamma}$:
Because $\Gamma_t$ is affine in $f_t$, the principal components of the slope matrix are exactly the latent factors (up to rotation). The cross-sectional regression projects the high-dimensional return panel onto a $J$-dimensional managed-portfolio space, and PCA on that smaller object is well-conditioned even when $T$ is small. This is the whole paper in one sentence.
| IPCA (Kelly–Pruitt–Su 2019) | Regressed-PCA (CRW 2023) | |
|---|---|---|
| Model | $y_{it} = z_{it}'\Gamma_\alpha + z_{it}'\Gamma_\beta f_t + \varepsilon$ | $y_{it} = \alpha(z_{it}) + \beta(z_{it})'f_t + \varepsilon$ |
| Functional form | linear in $z$ | nonparametric $\alpha, \beta$ |
| Estimation | minimise joint TS+XS squared error, iteratively | one-shot: regress, then PCA |
| Implicit objective | fit cross-section of average returns | fit time-series comovement (APT-flavoured) |
| Asymptotics | large $N$ and large $T$ | large $N$, fixed $T$ OK |
| Empirical $K$ | 5 advocated | 1 (linear) or 2 (nonlinear), data-selected |
| Take-away | characteristics ≈ loadings; small $\alpha$ | characteristics carry both loadings and non-zero $\alpha$ |
Conceptual divergence: IPCA fits everything jointly so factors absorb whatever cross-sectional pattern characteristics suggest. CRW extracts factors that explain comovement first, then asks whether characteristics still predict average returns conditional on those factors. The answer is yes.
CRW propose an eigenvalue-ratio estimator that consistently selects $K$ as $N\to\infty$ for fixed $T$:
$$ \hat{K} \;=\; \arg\max_{1 \le k \le k_{\max}} \frac{\lambda_k(\hat{\Gamma}\hat{\Gamma}')}{\lambda_{k+1}(\hat{\Gamma}\hat{\Gamma}')}. $$The ratio spikes at $k = K$ because the $(K{+}1)$-th eigenvalue is "noise-sized". No need to pre-commit to "5 factors" (Fama-French) or "1 factor" (CAPM) — the data choose.
The asymptotic distribution of $(\hat{a}, \hat{B})$ depends on a rotation matrix $H$ that is data-dependent. A naive bootstrap re-estimates $H$ in each replication and breaks consistency.
CRW's fix: enforce the same factor estimator $\hat{F}$ from the original sample in every bootstrap replication, so the rotation is held fixed.
Two tests follow:
Weight distribution: $w_i \sim \text{Exp}(1)$ i.i.d.
Sample: Kelly–Pruitt–Su (2019) panel = Freyberger–Neuhierl–Weber (2020) data: ~12,813 stocks × 36 characteristics, monthly Sep-1968 → May-2014.
| Specification | $K$ selected | Total $R^2$ | Out-of-sample $R^2_O$ | Pure-$\alpha$ Sharpe |
|---|---|---|---|---|
| Linear $\alpha,\beta$ | 1 | comparable to IPCA-1 | ~0.54% | > 3 |
| B-spline (1 internal knot) | 2 | comparable to IPCA-2 | ~0.59% | > 3 |
| B-spline (2 internal knots) | 2 | comparable to IPCA-2 | ~0.57% | > 3 |
| IPCA-5 (reference) | 5 imposed | 0.60% | 0.60% | smaller |
Four headline claims:
For Japan: nobody has run this estimator on a full-universe JP panel yet. Open question whether you'd find 1, 2, or more factors, and whether $\alpha$-portfolios survive transaction costs in the JP market.
INPUT:
Y ∈ ℝ^{N×T} excess returns
Z ∈ ℝ^{N×T×M} characteristics (lagged, rank-transformed to [-0.5, 0.5])
φ ∶ ℝ^M → ℝ^J basis (start with (1, z); upgrade to B-splines for nonlinear)
STEP 1 (cross-sectional OLS each month)
for t = 1..T:
Φ_t = φ(Z_{·,t}) # N × J
Γ̂_t = (Φ_t'Φ_t)^{-1} Φ_t' Y_{·,t} # J
Γ̂ = [Γ̂_1, …, Γ̂_T] # J × T
STEP 2 (PCA)
â = mean of columns of Γ̂ # J
Γ̃ = Γ̂ − â · 1_T'
SVD: Γ̃ = U Σ V' # take top-K̂
B̂ = U_{:,1:K̂} # J × K̂
F̂ = Σ_{1:K̂} V_{:,1:K̂}' # K̂ × T
OUTPUTS:
α̂(z) = φ(z)' â
β̂(z) = φ(z)' B̂
f̂_t = F̂_{·,t}
INFERENCE:
For b = 1..B:
w_i ∼ Exp(1) i.i.d.
repeat Step 1 with weights; PCA fixed to original F̂
collect (â^{(b)}, B̂^{(b)})
Build Wald stat for H_0: a = 0 → bootstrap p-value
Compare nested specs for linearity test
About 200 lines of Python with numpy and scipy.sparse.linalg.eigsh.
実証アセットプライシングにはファクター動物園(factor zoo)問題がある。300 を超える特性がクロスセクション収益率を予測するとされている。Fama-MacBeth (1973) 以降の中心的問いは、各特性が以下のどちらに該当するかである:
明確な回答を阻む 3 つの障害:
Chen, Roussanov & Wang(CRW)はこの 3 つを同時に解決する。
銘柄 $i$、月 $t$ について:
$$ y_{it} \;=\; \alpha(z_{it}) \;+\; \beta(z_{it})' f_t \;+\; \varepsilon_{it}, \qquad i=1,\dots,N,\;\; t=1,\dots,T. $$| 記号 | 意味 | 観測可能? |
|---|---|---|
| $y_{it}$ | 超過収益率 | ✅ |
| $z_{it}$ | 銘柄特性ベクトル($M$ 次元、ラグ付き) | ✅ |
| $\alpha(\cdot)$ | スカラーの価格付け誤差関数 | ❌ 未知 |
| $\beta(\cdot)$ | $K$ 次元のローディング関数 | ❌ 未知 |
| $f_t$ | $K$ 次元の潜在ファクター | ❌ 未知 |
| $\varepsilon_{it}$ | 個別ショック | ❌ |
アセットプライシング上の問いは $\alpha(\cdot) \equiv 0$ かどうかである。もし「然り」なら、特性は $\beta(\cdot)$ を通じてのみ意味を持つ — すなわちリスクエクスポージャーとしてのみ機能する。「否」ならば、特性はミスプライシングも担っている。
$\alpha(z)$ と $\beta(z)$ は無限次元なので直接推定できない。篩近似はそれぞれを基底関数 $\phi(z)$(多項式、B スプライン等)の有限線形結合で置き換える:
$$ \alpha(z) \;\approx\; \phi(z)' a, \qquad \beta_k(z) \;\approx\; \phi(z)' b_k. $$$a$ と $b_k$ たちを $J\times(K+1)$ 係数行列に積み重ねると、モデルは以下のように書き直せる:
$$ y_{it} \;\approx\; \phi(z_{it})'\; \underbrace{\bigl(a + B f_t\bigr)}_{\displaystyle =: \Gamma_t \in \mathbb{R}^J} \;+\; \varepsilon_{it}. $$各 $t$ において、リターンは基底 $\phi(z_{it})$ に対しほぼ線形であり、係数ベクトル $\Gamma_t$ が時間変動する。
基底 $\phi(z)$ は、特性の非線形関数から「合成ファクター」を多数生成する。$K$ 個の潜在ファクターを持つ条件付きモデルは、$J \gg K$ 個の「マネージドポートフォリオ」を持つ線形パネルに変換され、本当の $K$ 個のファクターはそれらの係数の時系列の中に潜んでいる。
各月 $t$ で、リターンを基底に対し OLS 回帰:
$$ \hat{\Gamma}_t \;=\; \bigl(\Phi_t' \Phi_t\bigr)^{-1} \Phi_t' Y_t. $$これは基底関数を用いた Fama-MacBeth (1973) 回帰である。係数 $\hat{\Gamma}_t \in \mathbb{R}^J$ は、$J$ 個のマネージドポートフォリオのリターンと解釈できる — 各々ある基底関数に単位エクスポージャーを持ち、他の基底にはゼロエクスポージャーを持つポートフォリオ。
これらをまとめる:$\hat{\Gamma} = [\hat{\Gamma}_1, \dots, \hat{\Gamma}_T] \in \mathbb{R}^{J\times T}$。
$\Gamma_t = a + B f_t$ であるから、$\Gamma_t$ の時間変動は $K$ 個の潜在ファクター $f_t$ に駆動される。$\hat{\Gamma}$ に PCA を適用:
$\Gamma_t$ が $f_t$ についてアフィンであるため、係数行列の主成分は(回転を除いて)正確に潜在ファクターと一致する。クロスセクション回帰により高次元のリターンパネルが $J$ 次元のマネージドポートフォリオ空間に射影され、その小さな対象に対する PCA は $T$ が小さくとも well-conditioned である。これが論文全体を一文に凝縮した内容。
| IPCA (Kelly–Pruitt–Su 2019) | Regressed-PCA (CRW 2023) | |
|---|---|---|
| モデル | $y_{it} = z_{it}'\Gamma_\alpha + z_{it}'\Gamma_\beta f_t + \varepsilon$ | $y_{it} = \alpha(z_{it}) + \beta(z_{it})'f_t + \varepsilon$ |
| 関数形 | $z$ について線形 | $\alpha, \beta$ はノンパラメトリック |
| 推定 | 時系列+クロスセクション二乗誤差を反復的に同時最小化 | 一発:回帰 → PCA |
| 暗黙の目的関数 | 平均リターンのクロスセクションフィット | 時系列共動のフィット(APT 的) |
| 漸近論 | $N$ も $T$ も大きい必要 | $N$ 大、$T$ 固定で OK |
| 実証 $K$ | 5 を主張 | 1(線形)/ 2(非線形)、データで決定 |
| 結論 | 特性はほぼローディング;$\alpha$ は小 | 特性はローディングと非ゼロ $\alpha$ の両方を担う |
概念的な分岐:IPCA は全てを同時にフィットするため、ファクターがクロスセクション上のパターンを吸収してしまう。CRW はまず共動を説明するファクターを抽出し、その後「特性は依然として平均リターンを予測するか」と問う。答えは「然り」である。
CRW は $N\to\infty$ かつ $T$ 固定で $K$ を一致推定する固有値比推定量を提案:
$$ \hat{K} \;=\; \arg\max_{1 \le k \le k_{\max}} \frac{\lambda_k(\hat{\Gamma}\hat{\Gamma}')}{\lambda_{k+1}(\hat{\Gamma}\hat{\Gamma}')}. $$$(K{+}1)$ 番目の固有値が「ノイズサイズ」になるため、比は $k = K$ で急激に大きくなる。「Fama-French の 5 ファクター」や「CAPM の 1 ファクター」を事前に決め打つ必要はなく、データが選ぶ。
$(\hat{a}, \hat{B})$ の漸近分布はデータ依存の回転行列 $H$ を含む。素朴なブートストラップでは各反復で $H$ を再推定してしまい、一致性が崩れる。
CRW の解決策:すべてのブートストラップ反復で元サンプルのファクター推定値 $\hat{F}$ を固定し、回転を不変に保つ。
2 つの検定が得られる:
重み分布:$w_i \sim \text{Exp}(1)$(i.i.d.)。
サンプル:Kelly–Pruitt–Su (2019) パネル = Freyberger–Neuhierl–Weber (2020) データ:約 12,813 銘柄 × 36 特性、月次、1968 年 9 月〜2014 年 5 月。
| 仕様 | 選択された $K$ | Total $R^2$ | OOS $R^2_O$ | 純 $\alpha$ シャープ |
|---|---|---|---|---|
| 線形 $\alpha,\beta$ | 1 | IPCA-1 と同等 | 約 0.54% | > 3 |
| B スプライン(節点 1 個) | 2 | IPCA-2 と同等 | 約 0.59% | > 3 |
| B スプライン(節点 2 個) | 2 | IPCA-2 と同等 | 約 0.57% | > 3 |
| IPCA-5(参考) | 5 を強制 | 0.60% | 0.60% | より小 |
4 つの主要主張:
日本市場については:このフルユニバース推定はまだ誰も実行していない。1 個か 2 個か、それ以上のファクターが見つかるか、$\alpha$ ポートフォリオが取引コスト控除後も生き残るかは未解明のオープンクエスチョン。
入力:
Y ∈ ℝ^{N×T} 超過収益率
Z ∈ ℝ^{N×T×M} 特性(ラグ付き、[-0.5, 0.5] にランク変換済み)
φ ∶ ℝ^M → ℝ^J 基底(まず (1, z)、非線形にしたければ B スプラインへ)
第 1 段階 (各月のクロスセクション OLS)
for t = 1..T:
Φ_t = φ(Z_{·,t}) # N × J
Γ̂_t = (Φ_t'Φ_t)^{-1} Φ_t' Y_{·,t} # J
Γ̂ = [Γ̂_1, …, Γ̂_T] # J × T
第 2 段階 (PCA)
â = Γ̂ の列平均 # J
Γ̃ = Γ̂ − â · 1_T'
SVD: Γ̃ = U Σ V' # 上位 K̂ 個を取る
B̂ = U_{:,1:K̂} # J × K̂
F̂ = Σ_{1:K̂} V_{:,1:K̂}' # K̂ × T
出力:
α̂(z) = φ(z)' â
β̂(z) = φ(z)' B̂
f̂_t = F̂_{·,t}
推測:
For b = 1..B:
w_i ∼ Exp(1) i.i.d.
第 1 段階を重み付きで反復;PCA は元の F̂ で固定
(â^{(b)}, B̂^{(b)}) を集める
H_0: a = 0 の Wald 統計量 → ブートストラップ p 値
入れ子仕様の比較で線形性検定
numpy と scipy.sparse.linalg.eigsh で約 200 行の Python。