mcpField
F
factor-investing

factor-investing

github.com/joellewisデータ・データベース218347 回インストール15 週間前に更新
リポジトリ

factor-investing について

投資家やアナリスト向けに、マルチファクターモデルと、ファンドのリターン、ファクターエクスポージャー、運用者のスキルの評価方法を解説するスキルです。スマートベータ商品、クローゼット・インデックスの判定、ファクター戦略の限界も扱います。

主な機能

  1. 01主要な株式ファクターの解説
  2. 02回帰係数、アルファ、R²の解釈
  3. 03リターンをファクター要因とアルファに分解
  4. 04クローゼット・インデックスの判定
  5. 05スマートベータの実装と手数料の評価
  6. 06ファクターの循環性と混雑の解説

活用シーン

  1. 01ファンドのリターンがスキルかファクター要因かを評価
  2. 02アクティブファンドがクローゼット・インデックスか判定
  3. 03エクスポージャーと実装面からスマートベータ商品を比較
  4. 04ロングオンリーのファクター投資に期待値を設定

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/joellewis/finance_skills --skill factor-investing

インストール後、Claude Code で/factor-investingを入力して読み込まれたか確認します。

同梱ファイルscripts/factor_investing.py

詳細

ファクター投資

コア概念

CAPMからマルチファクターモデルへ

CAPMは単一のリスク源を価格付けします:E(R_i) - R_f = beta * (E(R_m) - R_f)。小型株、割安株(簿価時価比率が高い銘柄)、ベータから予測される以上のリターンを上げる直近の勝ち組など、持続的なアノマリーを受けて、ファクターの追加が進みました。Fama-French(1993)は市場ファクターにサイズとバリューを追加し(3ファクターモデル)、Carhart(1997)はモメンタムを追加しました。Fama-French(2015)は収益性と投資を追加しました(5ファクターモデル):

R_i - R_f = alpha + b_MKT*MKT + b_SMB*SMB + b_HML*HML [+ b_RMW*RMW + b_CMA*CMA] [+ b_UMD*UMD] + epsilon

重要な再解釈は、運用者のCAPMアルファが、単に静的なファクターエクスポージャーにすぎない場合があるということです。アルファが意味を持つのは、投資家が低コストで購入できるファクターを考慮した後だけです。単一ファクターのOLSの仕組み、t統計量、CAPM回帰そのものについては、statistics-fundamentalsスキルで扱います。このスキルではK個の説明変数に一般化し、出力を解釈します。

代表的なファクター
ファクター構築方法(ロング・ショート)根拠:リスクベース根拠:行動ファイナンス概算プレミアム*
MKT市場リターンから無リスク金利を差し引く分散投資では除去できないマクロリスク—年率6~7%
SMB(サイズ)小型株から大型株を差し引く流動性の低さ、経営危機への感応度小規模企業への注目不足年率1.5~2%
HML(バリュー)簿価時価比率の高い銘柄から低い銘柄を差し引く経営危機リスク、景気循環に左右されるキャッシュフロー成長の過剰な外挿年率2.5~3%
RMW(収益性)営業収益性の高い企業から低い企業を差し引くキャッシュフローリスクへの対価質の高さへの反応の遅れ約年率3%
CMA(投資)資産成長率が保守的な企業から積極的な企業を差し引くQ理論:投資が多いほど期待リターンは低い帝国建設を目的とする過剰投資約年率3%
UMD(モメンタム、Carhart)過去12~1か月の勝ち組から負け組を差し引く暴落リスク(急激な反転)反応の遅れ、同調行動年率6~7%

*米国のロング・ショート戦略における1963~2024年の概算年率プレミアム。2026年時点のKen Frenchデータライブラリに基づきます。長期平均であり、予測値ではありません。実績は10年に及ぶ期間でも大きく乖離します(下記の循環性を参照)。

プレミアムの持続性を考えるうえで、その根拠は重要です。リスクベースのプレミアムは、誰かがリスクを引き受ける必要があるため、持続するはずです。行動ファイナンスに基づくプレミアムは、裁定取引の限界によって競争で消失するのを防げる間だけ残り、混雑の影響をより受けやすいものです。

ファクター回帰の読み方

ファンドの超過リターンをファクターリターン系列に対してOLS回帰します。次のように解釈します。

  • **ローディング(b_k):**ファクター単位あたりのエクスポージャーです。b_HML = 0.45なら、そのファンドはバリューのロング・ショート・ポートフォリオに0.45のウェイトで投資しているのと同様に振る舞います。それぞれのt統計量で判断します(5%有意水準では|t|が概ね2を超えることが目安です)。
  • **アルファ:**ファクターでは説明できない平均リターンで、スキルの主張を裏付けられる唯一の指標です。|t| < 2の正のアルファは、スキルの証拠にはなりません(t統計量についてはstatistics-fundamentalsを参照)。ほとんどのファンドでは、バリューまたはモメンタムのローディングを加えるとアルファは有意でなくなります。
  • **R二乗:**ファクターが説明するリターン分散の割合です。分散投資された株式ファンドでは、通常、3~4ファクターに対するR二乗が0.90~0.99になります。ファクター数が異なるモデルを比較する場合は、調整済みR二乗を使います。R二乗は説明変数を追加するたびに機械的に上昇するためです。
  • **安定性:**ローリングウィンドウで分析します。ローディングの推移は、安定した傾向ではなく、スタイルの変化やファクター・タイミングを示している可能性があります。
アルファの分解とクローゼット・インデックスの検出

同じ回帰分析には、相補的な用途が2つあります。

  1. 期待リターンの分解: E(R) = R_f + sum(b_k * lambda_k)。ここで lambda_k は想定されるファクター・プレミアムです。これは、保有エクスポージャーだけからファンドが本来得るはずのリターンを示します。実現した超過リターンからファクターが示唆する超過リターンを差し引いたものが、マネージャーのインプライド・アルファです。インプライド・アルファがほぼゼロなら、そのファンドは低コストのファクター ETF で複製できるファクター・ポートフォリオです。
  2. クローゼット・インデックスのスクリーニング: ベンチマークに追随しながら、アクティブ運用の手数料を請求するファンドを見つけます。リターンに基づく危険信号は、ベンチマーク回帰の R-squared >= 0.98、かつ年率換算トラッキングエラー <= 2% です。保有銘柄に基づく指標は、アクティブシェアが約60%を下回ることです(Cremers and Petajisto 2009)。次に、損益分岐点となるインフォメーション・レシオを計算します:IR_breakeven = (fund fee - index fee) / tracking error。クローゼット・インデクサーは、手数料差を埋めるだけでも、わずかなアクティブリスクの範囲内で非現実的に高い IR を達成する必要があります(インフォメーション・レシオ自体については performance-metrics で扱います)。
スマートベータ商品の評価

すべてのスマートベータ商品をファクター・ポートフォリオ(equities スキルのルール)として捉え、マーケティング上の名称ではなく、実装を評価します。

  • ファクター純度: 商品を学術的ファクターで回帰します。b_HML = 0.15、b_MKT = 1.0 の「バリュー」ETF は、高価なベータです。対象ファクターへの負荷量が有意かつ支配的で、意図しない負荷量(例えば、バリュー・ファンドの負のモメンタム・エクスポージャー)が小さいものを探します。
  • 回転率: モメンタムを実現するには高い回転率(年率約100%以上)が必要ですが、バリューにはほとんど必要ありません(年率約15~25%)。ファクターに必要な水準を大幅に上回る回転率はコスト負担となり、大幅に下回る場合はエクスポージャーが陳腐化していることを意味します。
  • 運用規模の上限: 資産の増加による劣化が最も速いのは、サイズとモメンタムです(小型で流動性の低い銘柄、高い回転率)。メガキャップのバリューとクオリティは、最も規模を拡大しやすいファクターです。
  • 手数料と実装品質の比較: 問うべきなのは「0.25%は安いか」ではなく、「1ベーシスポイントあたりの負荷量はいくらか」です。b_HML = 0.20 を実現する手数料0.15%のファンドは、b_HML = 0.50 を実現する手数料0.30%のファンドより割高です。
学術的なロング・ショート・ファクターとロングオンリーの傾斜

公表されているプレミアムは、ロング・ショートで、多くの場合レバレッジや空売りに制約のないポートフォリオを、コストを考慮せずにリバランスした場合の数値です。実装可能なロングオンリーの傾斜では、次のようになります。

  • 論文で示されたプレミアムのおよそ半分を獲得します(誤価格がより大きいことの多いショート側を利用できず、市場ポートフォリオとの重複によって傾斜が薄まります)。
  • 学術的ファクターに対する負荷量は1.0を大きく下回ります(ロングオンリーのバリュー・ファンドでは通常、b_HML は1.0ではなく0.3~0.5です)。
  • バックテストでは無視されていた実際の取引コストと税金が発生します。

期待値を適切に調整しましょう。b_HML = 0.4 のロングオンリーのバリュー傾斜が、2.5~3%のプレミアムに対してもたらす価値は、ロング・ショートの見出し上の数値ではなく、コスト控除前で年率およそ1.0~1.35%です。

ファクターの循環性とファクター・タイミングの危険性

どのファクターにも、数年にわたる低迷期があります。米国のバリューは2017~2020年ごろにグロースを下回り、キャリアを終わらせかねないほど相対的に大きく下落した後、2021~2022年に急反発しました。モメンタムは急激な反転局面(2009年)で激しく暴落します。低迷期は長く、転換点を予測できないため、ファクター・タイミング、つまり「割安な」ファクターへの入れ替えは、実運用での実績が乏しく、回転率も高めます。循環性を踏まえた妥当な活用法は、(a)相互相関の低いファクターを組み合わせて分散すること(バリューとモメンタムは自然な補完関係にあります)、(b)底値で投げ売りすることなく10年に及ぶ低迷期を乗り切れるよう、傾斜の規模を調整することです。

ファクターの動物園、混雑、再現性

「有意」なファクターが何百も発表されています。Cochrane が「ファクターの動物園」と呼ぶものです。この動物園は懐疑的に捉えてください。

  • 多重検定: 同じデータを何百人もの研究者が掘り下げている状況では、t = 2 では不十分です。Harvey、Liu、Zhu(2016)は、新たに提案されたファクターは t > 3 をクリアすべきだと主張しています。
  • 発表後の減衰: McLean と Pontiff(2016)は、異常リターンがアウト・オブ・サンプルでおよそ3分の1、発表後はおよそ半分低下することを示しています。その一因はデータマイニングであり、もう一因は投資家が参入してプレミアムを裁定取引で消し去ることです。
  • 混雑: 人気のあるファクター取引は、ストレス時に一斉に巻き戻されます(2007年8月の「クオンツ・クエイク」)。ファクターのバリュエーション・スプレッドが急激に拡大または縮小するのは、混雑が進んでいる、あるいは解消している兆候です。
  • 数十年にわたるアウト・オブ・サンプルおよび国外での証拠と経済的根拠がある、少数のファクター(おおむね頑健性の高い順に、マーケット、バリュー、モメンタム、収益性、サイズ)を基本とします。新たに宣伝されるファクターの実績は、バックテストを大幅に下回ると想定してください。

主要な数式

数式表現用途
3ファクターモデルR_i - R_f = alpha + b_MKTMKT + b_SMBSMB + b_HML*HML + eps株式リターンの基本的な要因分解
Carhart 4ファクター3-factor + b_UMD*UMDモメンタム要因を追加
5ファクターモデル3-factor + b_RMWRMW + b_CMACMA収益性と投資の要因を追加
期待リターンの分解E(R) = R_f + sum(b_k * lambda_k)ファクター・エクスポージャーとプレミアムから求めるリターン
インプライド・アルファ実現超過リターンの平均 - sum(b_k * lambda_k)ファクター・エクスポージャー控除後の運用スキル
有意性の基準t = 係数 / SE。スキルには |t(alpha)| > ~2 が必要運とスキルを区別
残差(アクティブ)ボラティリティsigma_resid = sigma_fund * sqrt(1 - R^2)トラッキングエラーの分解
損益分岐 IR(ファンドの手数料 - インデックスの手数料) / トラッキングエラークローゼット・インデックス運用の手数料を判定

計算例

例1:「バリュー・ファンド」はスキルを発揮しているのか、それとも単なるファクター・エクスポージャーなのか?

条件: 米国大型バリュー・ファンドの月次超過リターン60件(単位は月次%)を、MKT、SMB、HMLで回帰します。

alpha = 0.037  (t = 0.60)     -> 0.037 x 12 = 0.44% per year
b_MKT = 0.98   (t = 58.1)
b_SMB = 0.12   (t = 4.6)
b_HML = 0.45   (t = 23.1)
R^2   = 0.986   (residual vol 0.457% per month)

分析: 3つのファクターでファンドのリターン分散の98.6%を説明できます。バリューのローディングは0.45と大きく、統計的にも非常に有意です(t = 23.1 >> 2)。これは、ロングオンリーのバリュー・ファンドに典型的な、真の安定したバリュー・ティルトです(学術的なロング・ショートHMLポートフォリオの1.0を大きく下回ります)。マーケット・ローディングの0.98は、通常のフルインベストメントの株式エクスポージャーを示しており、SMBの小幅なプラスのローディングは、軽度の小型株寄りを示しています。アルファは年率0.44%で、t = 0.60 < 2 です。統計的にゼロと区別できません。

結論: スキルではなく、ファクター・エクスポージャーです。このファンドが提供するものはすべて、マーケット・ファンドとバリュー寄りのインデックス・ファンドで再現できます。現在このファンドを保有するかどうかは、スキルではなく手数料の問題になります(例3)。

例2:ローディングとプレミアムから期待リターンを分解する

条件: 例1のローディングを用い、将来のプレミアムを年率でMKT 6.5%、SMB 2.0%、HML 3.0%、リスクフリー金利を4.0%(2026年半ば時点の想定)、ファンドの実現超過リターンを年率8.4%とします。

MKT contribution = 0.98 x 6.5% = 6.37%
SMB contribution = 0.12 x 2.0% = 0.24%
HML contribution = 0.45 x 3.0% = 1.35%
Factor-implied excess return   = 6.37 + 0.24 + 1.35 = 7.96%
Total expected return          = 4.0% + 7.96% = 11.96%
Implied alpha                  = 8.4% - 7.96% = 0.44% per year

分析: ファンドの実現超過リターン8.4%のうち、7.96ポイントはファクター・エクスポージャーによるもので、説明できない要因によるものはわずか0.44ポイントです。これは、例1で回帰アルファが有意でなかったことと整合しています。また、実装可能性を考慮した割引にも注目してください。ファンドのバリュー・ティルトの価値は年率1.35%(0.45 x 3.0%)で、表面上のロング・ショートHMLプレミアムのおよそ半分です。これは、上記のロングオンリーについての説明とまさに一致します。

例3:損益分岐点のインフォメーションレシオを用いたクローゼット・インデックスの判定

条件: 月次ボラティリティが4.30%、ベンチマークに対するR二乗が0.99、経費率が0.85%、比較対象のインデックスファンドの経費率が0.05%のファンドです。

Residual vol   = 4.30% x sqrt(1 - 0.99) = 4.30% x 0.10 = 0.43% per month
Tracking error = 0.43% x sqrt(12) = 1.49% annualized
Fee gap        = 0.85% - 0.05% = 0.80% per year
Breakeven IR   = 0.80 / 1.49 = 0.54

分析: R二乗が0.99(>= 0.98)で、トラッキングエラーが1.49%(<= 2%)であるため、どちらもクローゼット・インデックスの判定基準に該当します。さらに、アクティブリスクの許容度が1.49%の場合、運用者が手数料分の損益を均衡させるだけでも、インフォメーションレシオ0.54を維持する必要があります。このIRはアクティブ運用者の上位10%に入る水準ですが、ここでは単にコスト控除後でインデックスファンドと同等の成績を出すために求められています。判定: クローゼット・インデックスです。合理的な保有先はインデックスファンド、または手数料差を回収できるほどトラッキングエラーが大きい、真にアクティブなファンドです。

よくある落とし穴

  • CAPMアルファを「スキル」と呼ぶこと: 単一ファクターのアルファの大半は、サイズ/バリュー/モメンタムへの静的なエクスポージャーです。運用者を評価する前に、投資家が低コストで購入できるファクターの影響を必ず調整してください。
  • t < 2のプラスのアルファを信頼すること: 年率0.5%のアルファでt = 0.6の場合(例1)、それは証拠ではなくノイズです。同じ統計の基本原則はCAPMアルファにも当てはまります。
  • ロングオンリー商品に学術研究上のプレミアムを期待すること: ロングオンリーのティルトではファクターへのローディングは0.3~0.5となり、バックテストで無視されるコストを差し引く前でも、理論上のプレミアムの約半分しか得られません。
  • ファクターのタイミングを計ること: 10年に及ぶ低迷期(バリューでは2017~2020年)と予測不能な転換点があるため、ファクターローテーションは高値で買い、安値で売る確実な方法になってしまいます。代わりに、ファクター間とサイズ・ティルトに分散し、継続可能性を高めてください。
  • ファクターの動物園から選ぶこと: 公表された数百のファクターは、複数検定におけるt > 3の基準を満たしません。公表後に3分の1から半分程度の劣化が起きると見込み(McLean and Pontiff 2016)、アウト・オブ・サンプルおよび他国での証拠がある少数のファクターを基本としてください。
  • スマートベータを手数料だけで評価すること: 手数料1ベーシスポイントあたりに得られるローディングを比較してください。目標ファクターへのローディングが0.15しかない低コストファンドは、実質的には割高なベータです。
  • ファクター数が異なるモデル間でR二乗を比較すること: 説明変数を追加するたびにR二乗は機械的に上昇します。自由度調整済みR二乗を使用してください(過剰適合を防ぐ方法についてはstatistics-fundamentalsで説明しています)。

関連項目

  • statistics-fundamentals(core plugin):OLS回帰の仕組み、t統計量、R二乗、およびこのスキルの多因子モデルが拡張する単一ファクターCAPM回帰
  • performance-metrics(wealth-management plugin):ここでクローゼット・インデックスの損益分岐テストに用いるインフォメーションレシオとトラッキングエラー。リスク調整後の比率はファクター寄与度分析を補完します。
  • equities(wealth-management plugin):スタイル指数とファクター指数の構築。このスキルでは、スマートベータ商品をファクターポートフォリオとして評価するという同スキルのルールを、ローディングを通じて実行します。
  • asset-allocation(wealth-management plugin):ファクター・ティルトを、ポリシー・ポートフォリオからの意図的かつ継続可能な乖離として配分する方法
  • diversification(wealth-management plugin):ファクター・プレミアム間の相関の低さ(例:バリューとモメンタム)は、資産クラスとは別の分散投資の層です。
  • fund-vehicles(wealth-management plugin):ファクター・エクスポージャーを得るためのETF、ミューチュアルファンド、SMAの運用形態、および各運用形態の手数料、売買回転率、運用容量の仕組み

スクリプトの実行

uv run scripts/factor_investing.py            # run the demo (uses PEP 723 inline deps)
uv run scripts/factor_investing.py --verify   # check outputs against the worked examples (exit 1 on mismatch)
python3 scripts/factor_investing.py           # alternative (requires: pip install numpy scipy)

scripts/factor_investing.pyには、静的メソッドmultifactor_regression(numpyの最小二乗法によるKファクターOLSで、アルファ、ローディング、t統計量、p値、R二乗、残差ボラティリティを返します)、expected_return_decomposition(ローディング x プレミアムにより分解し、インプライド・アルファを算出します)、closet_index_diagnostics(残差ボラティリティ、トラッキングエラー、損益分岐IR、クローゼット・インデックスのフラグを算出します)を備えたFactorInvestingクラスが用意されています。引数なしで実行するか--verifyを指定すると、シード値を固定したデータセットでデモを表示し、さらに上記の実例の値(例1のローディング/t統計量/R二乗、例2の分解、例3の診断結果)を検証します。不一致があれば、ゼロ以外の終了コードで終了します。メソッドの一覧を確認するには--helpを実行してください。プログラムから使用する場合は、実行するのではなく、次のようにインポートしてください:from factor_investing import FactorInvesting。

コメント