Estoy jugando con los datos de los 3 factores Fama-French y me está resultando difícil obtener resultados que se aproximen a lo que se cubrió en su paper aquí: https://www.bauer.uh.edu/rsusmel/phd/Fama-French_JFE93.pdf
Descargué el último archivo csv de su sitio web en esta url: https://mba.tuck.dartmouth.edu/pages/faculty/ken.french/data_library.html#Research.
Aquí hay algo de código de Python de una regresión que hice en una sola acción. Sé que esto no es lo mismo que un portafolio completo, pero aún así creo que los resultados son incorrectos.
# archivo limpio
fama = pd.read_csv('Downloads/fama_french_factors.csv')
# datos de una sola acción
data = yf.download('AAPL', freq = 'M')['Adj Close']
# obtener rendimientos EOM para Apple
data = data.resample('M', convention = 'end').last()
data = data.pct_change().dropna()
data.index = data.index + MonthEnd(0)
# fusionar los archivos juntos
data = pd.merge_asof(data, fama, left_index = True, right_index = True)
# ejecutar una regresión
y = data['Return']
X = data[['Mkt', 'SMB', 'HML']]
X = sm.add_constant(X)
# ajustar modelo con statsmodels
mod = sm.OLS(y, X)
res = mod.fit()
print(res.summary())
Cuando ejecuto esto, la regresión da un valor de R2 de 0.288, lo cual me parece muy bajo. Sé que mis regresiones no coinciden exactamente con lo que se hizo en el papel, que es el exceso de rendimiento de un portafolio regresado contra los 3 factores, pero sospecho que hay algo mal, probablemente con cómo las fechas están indexadas entre sí.
Los datos de Fama solo contienen año y mes, y no está claro si esos representan rendimientos al principio del mes o al final del mes, lo cual podría afectar los resultados.
Me pregunto si alguien sabe qué está mal con mi configuración.