現(xiàn)與匯報(bào)避坑指南)
簡(jiǎn)介金融計(jì)量學(xué)課程中Fama-Macbeth小組第一次匯報(bào)的完整演示PDF文檔面向?qū)W習(xí)實(shí)證資產(chǎn)定價(jià)與面板數(shù)據(jù)分析的高年級(jí)本科生和研究生。內(nèi)容從CAPM模型推導(dǎo)切入系統(tǒng)講解Fama-Macbeth回歸的模型設(shè)定與兩階段估計(jì)流程先通過時(shí)間序列回歸獲得個(gè)股的因子暴露β再逐期做截面回歸估計(jì)風(fēng)險(xiǎn)溢價(jià)λ并給出了λ及β標(biāo)準(zhǔn)誤的計(jì)算公式。文檔還深入剖析了該方法的核心優(yōu)勢(shì)——排除隨機(jī)擾動(dòng)截面相關(guān)性對(duì)標(biāo)準(zhǔn)誤的影響、得到異方差穩(wěn)健估計(jì)——同時(shí)指出變量誤差EIV問題、殘差時(shí)序相關(guān)不一致等缺陷及改進(jìn)思路。此外文末Stata實(shí)證部分總結(jié)了β標(biāo)準(zhǔn)誤的具體計(jì)算與解讀要點(diǎn)對(duì)模型回歸操作有直接參考價(jià)值。資源為單個(gè)PDF文件壓縮包約551KB目前已有1188人學(xué)習(xí)下載適合作為金融計(jì)量課程匯報(bào)模板或Fama-Macbeth方法自學(xué)入門材料。1. Fama-MacBeth 回歸一篇講透兩步法原理、代碼實(shí)現(xiàn)與匯報(bào)前必查的坑第一次做 Fama-MacBeth 小組匯報(bào)最容易被問倒的不是“回歸怎么跑”而是“為什么非要跑兩步”。這個(gè)方法是資產(chǎn)定價(jià)里檢驗(yàn)因子是否被定價(jià)的經(jīng)典工具——第一步用時(shí)間序列回歸估計(jì)個(gè)股對(duì)因子的暴露beta第二步用橫截面回歸估計(jì)因子溢價(jià)risk premium。它的價(jià)值在于直接告訴你“承擔(dān)這個(gè)風(fēng)險(xiǎn)市場(chǎng)到底給多少回報(bào)”而不是像普通多元回歸那樣只給一個(gè)平均系數(shù)。適合做因子研究、寫實(shí)證論文、或者驗(yàn)證某個(gè)多頭策略的讀者。今天這篇不繞彎子從原理到可復(fù)現(xiàn)的代碼再到匯報(bào)前必須自查的四個(gè)坑一次講完。2. 兩步法的本質(zhì)為什么不能用一把梭的混合回歸2.1 從 CAPM 到多因子Fama-MacBeth 要回答的問題資本資產(chǎn)定價(jià)模型CAPM說股票的期望收益只跟它對(duì)市場(chǎng)組合的敏感度beta有關(guān)。但現(xiàn)實(shí)中沒有人只用一個(gè)因子解釋收益于是有了多因子模型期望收益等于無風(fēng)險(xiǎn)利率加上每個(gè)因子的暴露乘以對(duì)應(yīng)的因子溢價(jià)。問題來了——因子溢價(jià)是多少這不能直接對(duì)面板數(shù)據(jù)做一次混合 OLS 回歸因?yàn)槟菢与[含假設(shè)所有個(gè)股的截距項(xiàng)相同、殘差獨(dú)立同分布而實(shí)際上截面?zhèn)€體效應(yīng)和時(shí)序異方差都很嚴(yán)重。Fama-MacBeth 的核心貢獻(xiàn)是把“估計(jì)暴露”和“估計(jì)溢價(jià)”兩個(gè)任務(wù)拆開先用時(shí)間序列把每個(gè)股票的 beta 估準(zhǔn)再用橫截面回歸把 beta 對(duì)收益的定價(jià)關(guān)系估出來。這樣得到的標(biāo)準(zhǔn)誤對(duì)截面相關(guān)性更穩(wěn)健也更符合經(jīng)濟(jì)學(xué)直覺。2.2 第一步回歸時(shí)間序列里估計(jì)因子暴露第一步是在每只股票的時(shí)間序列上做回歸import pandas as pd import numpy as np import statsmodels.api as sm # 假設(shè) returns 是股票收益率寬表行日期列股票代碼 # factors 是因子收益率 DataFrame包含市場(chǎng)因子 mkt 和規(guī)模因子 smb # 以第一只股票為例 stock returns.iloc[:, 0] X factors[[mkt, smb]].copy() X sm.add_constant(X) # 按完整樣本回歸匯報(bào)時(shí)常用滾動(dòng)版本見后文 ols sm.OLS(stock, X).fit() beta ols.params[[mkt, smb]] resid_std ols.resid.std()這段代碼的關(guān)鍵在于回歸的因變量是個(gè)股的日收益率或月收益率取決于你的頻率設(shè)定自變量是因子組合的收益率。常數(shù)項(xiàng)代表股票在因子模型之外的超額收益alpha。beta 就是個(gè)股對(duì)每個(gè)因子的暴露。如果樣本期間內(nèi)公司的經(jīng)營(yíng)結(jié)構(gòu)發(fā)生重大變化靜態(tài) beta 會(huì)失真一個(gè)常見修正是用 36 個(gè)月滾動(dòng)窗口估計(jì)——每個(gè)月只使用過去 36 個(gè)月的數(shù)據(jù)重新回歸一次得到當(dāng)期的 beta。這會(huì)導(dǎo)致第二步回歸里的 beta 不是觀測(cè)值而是估計(jì)值產(chǎn)生誤差項(xiàng)序列相關(guān)的問題也正是 Fama-MacBeth 標(biāo)準(zhǔn)誤需要調(diào)整的原因。實(shí)操上我一般先看殘差標(biāo)準(zhǔn)差。如果某只股票的 resid_std 是其他股票的數(shù)倍說明存在異常波動(dòng)或數(shù)據(jù)錯(cuò)誤拆股、停牌、極端值。匯報(bào)前把殘差標(biāo)準(zhǔn)差大于 3 倍中位數(shù)的標(biāo)的單獨(dú)拉出來核對(duì)能省掉很多答辯時(shí)的尷尬。2.3 第二步回歸橫截面里估計(jì)因子溢價(jià)第二步每個(gè)月做一次橫截面回歸——用第一步估計(jì)出的 beta 作自變量當(dāng)月的個(gè)股收益作因變量# 假設(shè) beta_df 是第一步得到的暴露矩陣行股票列因子 # month_returns 是某月的個(gè)股收益 Series X_cross sm.add_constant(beta_df) cross sm.OLS(month_returns, X_cross).fit() gammas.append(cross.params) # 收集每個(gè)月的回歸系數(shù)為什么不能把全樣本放在一起做一次橫截面回歸因?yàn)椴煌路莸氖找娼孛婵赡艽嬖谙到y(tǒng)性差異——牛市的因子溢價(jià)和熊市的因子溢價(jià)可能完全相反。逐月回歸的好處是每個(gè)月得到一個(gè)獨(dú)立的 gamma因子溢價(jià)估計(jì)值最后把全部月份的 gamma 取平均得到平均溢價(jià)同時(shí) gamma 的標(biāo)準(zhǔn)差用來構(gòu)造 t 統(tǒng)計(jì)量。這就等于把“由于某個(gè)月的特殊行情導(dǎo)致因子溢價(jià)波動(dòng)”的問題通過月度回歸的分布暴露出來——如果只有少數(shù)月份因子顯著平均下來 t 值可能不顯著這本身就是重要結(jié)論。2.4 Shanken 標(biāo)準(zhǔn)誤beta 是估出來的不是天上掉下來的第二步回歸直接對(duì)逐月 gamma 取均值再除以標(biāo)準(zhǔn)誤得到的 t 值會(huì)偏大——因?yàn)?beta 本身是第一步估計(jì)出來的存在測(cè)量誤差第一步的估計(jì)誤差會(huì)傳導(dǎo)到第二步。Shanken1992修正的核心是給標(biāo)準(zhǔn)誤乘上一個(gè)膨脹因子用公式寫出來是# Shanken 修正系數(shù) # sigma_f 是因子收益率的協(xié)方差矩陣 # gamma_est 是第二步回歸系數(shù)的均值向量 # cov_gamma 是第二步回歸系數(shù)的協(xié)方差矩陣 factor_cov factors.cov() shanken_factor 1 gamma_est.dot(factor_cov).dot(gamma_est) / (T - N - 1) adj_se np.sqrt(np.diag(cov_gamma) * shanken_factor) adj_t gamma_mean / adj_se注意這個(gè)修正幅度取決于因子收益的波動(dòng)率和 gamma 的估值。因子月波動(dòng)率越大、gamma 越高修正幅度越大。如果你發(fā)現(xiàn)某個(gè)因子 Shanken 修正前后的 t 值從 2.1 掉到 1.6不要慌這是常見情況——說明你的 beta 估計(jì)噪聲較大或者因子之間的多重共線性比較強(qiáng)。匯報(bào)時(shí)主動(dòng)把修正前和修正后的結(jié)果并列展示反而會(huì)讓聽眾覺得你對(duì)方法有掌控力。3. 數(shù)據(jù)準(zhǔn)備與分組Fama-MacBeth 最容易翻車的隱蔽環(huán)節(jié)3.1 數(shù)據(jù)頻率與對(duì)齊別讓收益和因子差一天Fama-MacBeth 對(duì)數(shù)據(jù)對(duì)齊極其敏感。最常見的錯(cuò)誤是股票的月收益用的是月末收盤價(jià)計(jì)算而因子收益率用的是月初到月末的整月收益但數(shù)據(jù)源里因子更新有滯后。這會(huì)導(dǎo)致 beta 估計(jì)出現(xiàn)嚴(yán)重的“前瞻偏差”——用未來信息解釋過去收益。我一般會(huì)在合并數(shù)據(jù)前檢查日期索引是否完全一致# 檢查對(duì)齊 assert returns.index.equals(factors.index), 日期索引不一致 # 或者用 merge 后檢查 NaN merged returns.join(factors, howleft) nan_ratio merged.isna().mean().mean()對(duì)齊檢查通過后再看 NaN 比例。如果某只股票因停牌導(dǎo)致月收益缺失不要直接刪除整只股票——Fama-MacBeth 允許不平衡面板只需要在使用該股票參與回歸的那個(gè)月跳過即可。但要注意如果某只股票數(shù)據(jù)缺失超過一半它的 beta 估計(jì)會(huì)失真參與第二步回歸時(shí)可能引入噪聲。我常用的過濾標(biāo)準(zhǔn)是保留至少 24 個(gè)月觀測(cè)值的個(gè)股且最近 6 個(gè)月不能有連續(xù)缺失。這個(gè)閾值沒有絕對(duì)標(biāo)準(zhǔn)你可以匯報(bào)中說明自己用的規(guī)則但一定要避免“全樣本隨意丟棄”。3.2 分組做組合 vs 個(gè)股橫截面兩種經(jīng)典口徑的取舍原始 Fama-MacBeth 論文用的是“先分組構(gòu)建組合再做組合橫截面回歸”的方式目的是分散個(gè)股特質(zhì)波動(dòng)讓 beta 估計(jì)更穩(wěn)定。但實(shí)際做報(bào)告時(shí)很多同學(xué)直接對(duì)個(gè)股做第二步回歸——這樣上報(bào)的 gamma 的 t 值往往偏高因?yàn)閭€(gè)股層面的特質(zhì)波動(dòng)把標(biāo)準(zhǔn)誤壓低這是一個(gè)經(jīng)典陷阱標(biāo)準(zhǔn)誤小不一定是好事可能只是樣本被過度分散。兩條路線的選擇沒有對(duì)錯(cuò)取決于你的目的是檢驗(yàn)?zāi)硞€(gè)因子是否定價(jià)用組合更穩(wěn)健還是預(yù)測(cè)個(gè)股收益用個(gè)股更貼近市場(chǎng)。我的習(xí)慣是先用個(gè)股做全樣本回歸得到直覺再用 Fama-French 的 10x10 分組做穩(wěn)健性檢驗(yàn)。分組代碼不復(fù)雜關(guān)鍵是分位數(shù)切分后的收益等權(quán)重加權(quán)# 按因子暴露分 5 組 bins pd.qcut(beta_df[mkt], 5, labelsFalse) portfolio_returns {} for group in range(5): selected returns.columns[bins group] portfolio_returns[group] returns[selected].mean(axis1) portfolio_df pd.DataFrame(portfolio_returns)分組口徑下第一步回歸的 beta 是組合的 beta組合收益對(duì)因子時(shí)間序列回歸而不是組內(nèi)個(gè)股 beta 的平均值。這是很多人搞混的地方——組合 beta 必須是重新回歸得到的因?yàn)榻M合的收益特征不同于個(gè)股的簡(jiǎn)單平均。3.3 因子構(gòu)造的口徑統(tǒng)一溢價(jià)因子是零投資組合還是原始指標(biāo)因子收益率必須是“可投資組合的收益率差”比如市值因子的 SMB小市值減大市值而不是原始的賬面市值比數(shù)值。如果直接把公司的 book-to-market 值當(dāng)作自變量放進(jìn)橫截面回歸得到的是“每單位 B/P 對(duì)應(yīng)的溢價(jià)”這跟 Fama-MacBeth 框架下的因子溢價(jià)含義完全不同。匯報(bào)時(shí)如果中途換了因子的定義方式前后結(jié)果不具備可比性——這是組內(nèi)分工時(shí)最常見的矛盾來源。建議在第一次小組會(huì)議就定死因子的構(gòu)造方法并寫進(jìn)代碼注釋里。數(shù)據(jù)構(gòu)造完成后畫一條因子累計(jì)凈值曲線肉眼確認(rèn)沒有明顯的趨勢(shì)異常再做兩步回歸。4. 完整復(fù)現(xiàn)從數(shù)據(jù)到匯報(bào)圖的 Fama-MacBeth 流水線4.1 項(xiàng)目目錄與數(shù)據(jù)準(zhǔn)備腳本實(shí)操時(shí)我習(xí)慣按“數(shù)據(jù)輸入 → 因子構(gòu)造 → 第一步回歸 → 第二步回歸 → 輸出圖表”拆成五個(gè)模塊。目錄結(jié)構(gòu)如下project/ ├── data/raw/ # 原始行情數(shù)據(jù) ├── data/processed/ # 清洗后的收益和因子序列 ├── src/ │ ├── make_factors.py │ ├── run_timeseries.py │ ├── run_crosssection.py │ └── output_tables.py └── output/ ├── tables/ └── figures/這樣分組合作時(shí)每個(gè)人只負(fù)責(zé)一個(gè)模塊最終由一個(gè)人統(tǒng)一跑全流程。第一次匯報(bào)時(shí)只需要提交 run_timeseries.py 和 run_crosssection.py 的輸出不需要把全部數(shù)據(jù)放進(jìn)附錄但代碼和隨機(jī)種子必須固定。4.2 第一步回歸的完整腳本含滾動(dòng)窗口與參數(shù)說明def estimate_betas(returns, factors, window36, min_obs24): betas {} for stock in returns.columns: sr returns[stock].dropna() if len(sr) min_obs: continue # 滾動(dòng)窗口每個(gè)時(shí)點(diǎn)只用過去 window 個(gè)月 for t in range(window, len(sr)): y sr.iloc[t - window:t] X factors.loc[y.index] X sm.add_constant(X) model sm.OLS(y, X).fit() betas.setdefault(stock, []).append({ date: sr.index[t], beta_mkt: model.params[mkt], beta_smb: model.params[smb] }) return pd.DataFrame(betas).T這個(gè)函數(shù)有兩個(gè)關(guān)鍵參數(shù)。window 設(shè)為 36 個(gè)月是經(jīng)典選擇——太長(zhǎng)會(huì)平滑掉公司基本面的變化太短則 beta 估計(jì)噪聲大。min_obs 控制最小樣本量防止早期上市或數(shù)據(jù)不全的股票產(chǎn)出不可靠的 beta。這里需要注意滾動(dòng)窗口會(huì)導(dǎo)致前 36 個(gè)月沒有 beta 估計(jì)因此第二步回歸的起始時(shí)間會(huì)整體后移——如果樣本只有 5 年實(shí)際有效區(qū)間只有 2 年樣本量過低。一個(gè)常用的替代方案是“擴(kuò)展窗口”expanding window從 24 個(gè)月開始逐步遞增能多保留一些樣本但 beta 的可變性會(huì)降低。兩種方案的結(jié)果差異本身就可以作為穩(wěn)健性檢驗(yàn)的一項(xiàng)。4.3 第二步回歸的完整腳本與 t 統(tǒng)計(jì)量匯總def run_fm_crosssection(beta_df, returns, factors): gammas [] dates [] for date in returns.index: # 取該月有效的 beta 截面 betas_at_date beta_df.apply(lambda row: row[beta_mkt] if row[date] date else np.nan, axis1) # 實(shí)際中 beta_df 結(jié)構(gòu)不同這里簡(jiǎn)化為按日期切片 X_cross sm.add_constant(beta_df.loc[date].T) y_cross returns.loc[date] valid y_cross.notna() X_cross.notna().all(axis1) if valid.sum() 10: # 至少 10 只股票 continue model sm.OLS(y_cross[valid], X_cross[valid]).fit() gammas.append(model.params) dates.append(date) gamma_df pd.DataFrame(gammas, indexdates) mean_gamma gamma_df.mean() se_gamma gamma_df.std() / np.sqrt(len(gamma_df)) t_stats mean_gamma / se_gamma # 再加上 Shanken 修正略見 2.4 節(jié) return mean_gamma, se_gamma, t_stats逐月回歸的樣本量差異很大——早期市場(chǎng)股票數(shù)量少回歸的精度低gamma 的波動(dòng)會(huì)大。如果發(fā)現(xiàn) gamma 序列存在明顯的季節(jié)性比如每年 1 月特別大這是學(xué)界早已發(fā)現(xiàn)的一月效應(yīng)不影響方法本身但匯報(bào)時(shí)主動(dòng)提一句會(huì)讓別人覺得你有市場(chǎng)感覺。另外如果某個(gè)月的橫截面回歸用了不到 10 只股票直接剔除該月這個(gè)閾值寫在匯報(bào)里作為數(shù)據(jù)篩選規(guī)則。4.4 匯報(bào)圖的標(biāo)配累計(jì) gamma、分年 t 值和因子收益曲線聽眾最關(guān)心的三張圖第一張是每個(gè)因子逐月 gamma 的累計(jì)值看方向是否穩(wěn)定第二張是分年度的 t 值熱力圖看顯著性是否來自某一年第三張是因子組合的累計(jì)收益曲線直觀展示這個(gè)因子在市場(chǎng)里到底賺不賺錢。畫圖時(shí)注意——gamma 累計(jì)圖的縱軸單位是“百分比月收益”不是“對(duì)數(shù)收益”如果畫成對(duì)數(shù)收益聽眾會(huì)誤解數(shù)值大小。用 matplotlib 加一行自動(dòng)保存圖片到 output/figures 即可。5. 匯報(bào)前必查避坑Fama-MacBeth 的五個(gè)經(jīng)典翻車現(xiàn)場(chǎng)5.1 完整個(gè)股的混合 OLS 回歸冒充 Fama-MacBeth現(xiàn)象直接對(duì)整個(gè)面板跑一次固定效應(yīng)回歸系數(shù)和 Fama-MacBeth 差不多于是有人覺得可以偷懶。原因混合回歸的系數(shù)是“平均處理效應(yīng)”而 Fama-MacBeth 的系數(shù)是“逐月橫截面回歸系數(shù)的時(shí)序平均”——兩者的標(biāo)準(zhǔn)誤結(jié)構(gòu)完全不同混合回歸會(huì)顯著低估標(biāo)準(zhǔn)誤得出虛假的顯著結(jié)論。解決一旦要下“因子被定價(jià)”這個(gè)結(jié)論必須以逐月回歸的 t 值為準(zhǔn)混合回歸只能當(dāng)作初步探索。5.2 beta 用全樣本估計(jì)導(dǎo)致第二步回歸用未來信息現(xiàn)象第一步回歸用了 2005-2020 全部數(shù)據(jù)估計(jì) beta第二步回歸卻從 2015 年開始做橫截面回歸。原因這樣的 beta 包含了未來 5 年的信息違反了“時(shí)點(diǎn) t 只能用 t 之前的信息”的因果邏輯beta 的測(cè)量誤差會(huì)被系統(tǒng)性低估gamma 的 t 值偏大。解決第一步必須用滾動(dòng)或擴(kuò)展窗口保證任何時(shí)點(diǎn)的 beta 僅依賴該時(shí)點(diǎn)之前的數(shù)據(jù)。這是答辯時(shí)最容易暴露的方法論漏洞。5.3 不同股票的 beta 橫截面相關(guān)性被忽略現(xiàn)象t 統(tǒng)計(jì)量算出來 3.5以為穩(wěn)了但換一組股票就掉到 1.8。原因Fama-MacBeth 假設(shè)逐月 gamma 獨(dú)立同分布但跨股票截面的相關(guān)性沒有被顯式建模當(dāng)某些股票同屬一個(gè)行業(yè)或高度關(guān)聯(lián)時(shí)beta 的橫截面相關(guān)性會(huì)讓負(fù)相關(guān)股票產(chǎn)生共線性。解決在第二步回歸中加入行業(yè)啞變量作為控制但注意這會(huì)改變 gamma 的含義或者做 Newey-West 標(biāo)準(zhǔn)誤調(diào)整以修正 gamma 序列的自相關(guān)。Shanken 修正能處理第一步誤差但不能處理截面相關(guān)這是一個(gè)經(jīng)常被混為一談的細(xì)節(jié)。5.4 因子收益率與股票收益率的滯后期不匹配現(xiàn)象因子數(shù)據(jù)來自月度初股票收益用月末且沒有做日期對(duì)齊導(dǎo)致同一個(gè)月的收益和因子之間發(fā)生了錯(cuò)位。原因數(shù)據(jù)源不同日期格式不一致合并時(shí)直接按位置拼接。解決統(tǒng)一使用月末交易日作為索引先用 merge 檢查 NaN再畫一張交叉相關(guān)圖因子 t 期收益與股票 t1 期收益來驗(yàn)證沒有明顯“未來信息”泄漏。這一步可視化在匯報(bào)時(shí)也很有說服力。5.5 分組數(shù)太多導(dǎo)致組合 beta 估計(jì)噪聲爆炸現(xiàn)象把個(gè)股分成 50 組每組只有十幾只股票組合收益被少數(shù)個(gè)股主導(dǎo)beta 估計(jì)極不穩(wěn)定第二步回歸的 gamma 也大幅波動(dòng)。原因分組不是越多越好組合的分散效應(yīng)要求每組至少有幾十只股票。解決經(jīng)典 Fama-French 用 10x10 分組已算密集建議起步用 5x5共 25 組等樣本量大了再增加分組數(shù)。如果樣本總共只有 300 只股票25 組已經(jīng)是上限。這個(gè)原則在匯報(bào)時(shí)作為參數(shù)選擇依據(jù)寫進(jìn)腳注比“參考主流文獻(xiàn)”更有說服力。6. 匯報(bào)加分技巧從“跑完結(jié)果”到“講出故事”的最后一公里6.1 把 gamma 序列畫成時(shí)間軸回答“這個(gè)因子什么時(shí)候有效”逐月 gamma 的時(shí)序圖能直接揭示因子的有效期。比如市場(chǎng)因子 gamma 在危機(jī)期間顯著變大在牛市后期轉(zhuǎn)負(fù)——這種時(shí)變性比一個(gè)平均 t 值更有信息量。匯報(bào)時(shí)不要只給一個(gè)平均 gamma 就結(jié)束至少展示一張累計(jì) gamma 曲線標(biāo)出幾個(gè)關(guān)鍵經(jīng)濟(jì)事件點(diǎn)政策調(diào)整、利率變動(dòng)等說明因子溢價(jià)的均值回歸特征。這一張圖能區(qū)分“真正理解方法的人”和“只會(huì)跑回歸的人”。我一般會(huì)在圖注里寫明“陰影區(qū)域?yàn)槟P驮O(shè)定的樣本擴(kuò)展期”而不是隨便標(biāo)一下。6.2 用因子收益分解解釋 gamma 的經(jīng)濟(jì)含義gamma 的經(jīng)濟(jì)含義不僅取決于統(tǒng)計(jì)顯著性。假設(shè)規(guī)模因子的 gamma 平均為每月 0.3%看起來不大但換算成年度就是 3.6%——這到底是什么量級(jí)對(duì)比同期市場(chǎng)因子的年化溢價(jià)如果只有 5%規(guī)模因子就解釋了其中很大一部分。推薦的做法是做一個(gè)“截面收益分解”表選兩只典型股票分別列出來自市場(chǎng)因子和規(guī)模因子的收益貢獻(xiàn)。這樣你能很具體地說“這只股票在樣本期內(nèi)的超額收益有 60% 來自市場(chǎng)風(fēng)險(xiǎn)暴露30% 來自規(guī)模效應(yīng)剩下 10% 是 alpha”。這種拆解讓聽眾的注意力從統(tǒng)計(jì)檢驗(yàn)轉(zhuǎn)向經(jīng)濟(jì)解釋。6.3 穩(wěn)健性檢驗(yàn)的標(biāo)配組合時(shí)間區(qū)間、分組數(shù)量、因子替代指標(biāo)三個(gè)維度各做一次變體寫在附錄里。比如市場(chǎng)因子用等權(quán)平均和市值加權(quán)各做一輪看 gamma 的方向和顯著性是否改變。如果某個(gè)因子的顯著性完全依賴市值加權(quán)方式這說明結(jié)論不穩(wěn)健——你在匯報(bào)時(shí)主動(dòng)展示這種不穩(wěn)健比答辯被追問到時(shí)再承認(rèn)要好得多。記住一個(gè)慣例Fama-MacBeth 的結(jié)論不是“這個(gè)因子有效”而是“在什么條件下、什么樣本內(nèi)、什么因子定義下這個(gè)因子的溢價(jià)顯著”。最后提一個(gè)我自己的堅(jiān)持Fama-MacBeth 跑完先用 Python 把全部中間結(jié)果 dump 成 CSV 存檔再?zèng)Q定畫哪些圖。因?yàn)閰R報(bào)前一到兩天總是會(huì)發(fā)現(xiàn)需要重新切樣本、調(diào)整分組或者臨時(shí)加一個(gè)控制變量。沒有一個(gè)穩(wěn)定的中間結(jié)果緩存每次改動(dòng)都要從頭跑全流程既容易出錯(cuò)又浪費(fèi)時(shí)間。這也算是我多次匯報(bào)前熬夜改代碼換來的血淚經(jīng)驗(yàn)。希望幫到你。本文還有配套的精品資源點(diǎn)擊獲取