Introdução ao Gerenciamento de Risco de Portfólio em Python
Dakota Wixom
Quantitative Analyst | QuantCourse.com
O artigo original que começou tudo:

Um artigo posterior de Cliff Asness, da AQR:

Em 2015, Fama e French ampliaram o modelo de 3 fatores, adicionando dois fatores:
O fator RMW representa os retornos de empresas com alta lucratividade operacional versus baixa lucratividade operacional.
O fator CMA representa os retornos de empresas com investimentos agressivos versus mais conservadores.

Supondo que você já tenha os retornos em excesso do portfólio e do mercado no objeto Data:
import statsmodels.formula.api as smf
model = smf.ols(formula='Port_Excess ~ Mkt_Excess + SMB + HML + RMW + CMA',
data=Data)
fit = model.fit()
adjusted_r_squared = fit.rsquared_adj
adjusted_r_squared
0.92
Introdução ao Gerenciamento de Risco de Portfólio em Python