mcpField
S
statistics-fundamentals

statistics-fundamentals

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

statistics-fundamentals について

金融データ分析向けの統計基礎スキルです。記述統計、分布検定、共分散推定、回帰診断、ブートストラップを扱い、計算用のPythonメソッドも備えています。

主な機能

  1. 01記述統計と年率換算ボラティリティ
  2. 02Jarque-Bera正規性検定
  3. 03共分散推定と縮小推定
  4. 04CAPM回帰診断
  5. 05ブートストラップ信頼区間

活用シーン

  1. 01リターン分布と外れ値の確認
  2. 02ポートフォリオ最適化向け共分散の推定
  3. 03CAPMのアルファとベータの評価
  4. 04Sharpe比率の信頼区間推定

インストール

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

$npx skills add https://github.com/joellewis/finance_skills --skill statistics-fundamentals

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

同梱ファイルscripts/statistics_fundamentals.py

詳細

統計の基礎

主要な概念

慣例と判断基準
標本分散:n-1を使用

リターンの標本から分散や標準偏差を推定する場合は、nではなくn - 1(ベッセルの補正)で割ります。nで割ると、ばらつきを系統的に過小評価します。リターンの標準偏差は「ボラティリティ」です。年率換算するには、sigma_annual = sigma_period * sqrt(periods_per_year)を使用します(例:月次なら* sqrt(12)、日次なら* sqrt(252))。

正規性検定:Jarque-Beraとその限界

JB = (n/6) * (skew^2 + excess_kurtosis^2 / 4)で、正規性の帰無仮説のもとでは自由度2のカイ二乗分布に従います(有意水準5%の臨界値:5.99)。

検出力の低さに関する注意点: 標本が小さい場合(およそnが50未満)、明らかに非正規なデータであってもJB検定ではほとんど棄却されません。棄却できないことは正規性を示す弱い根拠にすぎず、正規性の確認にはなりません。標本が大きい場合、金融リターン系列は裾が厚く、株式では負の歪度もあるため、ほぼ常に棄却されます。この検定はスクリーニングとして扱い、歪度や尖度の実際の大きさ、極端な観測値も併せて確認してください。

共分散の推定とLedoit-Wolf縮小推定

資産数pが観測数nに近づくと、標本共分散行列Sigma_hat = (1/(n-1)) (X - X_bar)^T (X - X_bar)は、条件が悪くなるか特異になります。これを平均・分散最適化にそのまま使用すると、わずかなデータの変化で大きく変動する、極端で不安定なウェイトが算出されます。

縮小推定では、標本行列と構造化されたターゲットを組み合わせます。

$$\hat{\Sigma}_{shrunk} = \delta \cdot F + (1 - \delta) \cdot \hat{\Sigma}$$

ここでFはターゲット(例:スケーリングした単位行列)、deltaは縮小の強度です。Ledoit-Wolf(2004)は、真の共分散行列との期待二乗フロベニウス距離を最小化するdeltaを導出します。これにより、わずかなバイアスと引き換えに分散を大幅に削減し、条件が良く逆行列を求められる行列と、安定したポートフォリオのウェイトが得られます。

注: 同梱のスクリプトにあるshrunk_covarianceは、完全なLedoit-Wolf推定量ではなく、簡略化された縮小強度の推定を実装しています。本番環境での使用にはsklearn.covariance.LedoitWolfを使用してください。

回帰診断(CAPMとファクターモデル)

単一ファクターCAPM回帰R_i - R_f = alpha + beta * (R_m - R_f) + epsilonでは、次のようになります。

  • beta = rho * sigma_i / sigma_m(市場感応度)です。alphaはリスク調整後の超過リターンです。
  • 単一ファクター回帰では、R^2 = rho^2です。
  • 係数はt統計量(t = coefficient / SE)で評価します。自由度がn - 2の場合、|t|がおよそ2を超えると、有意水準5%で有意となります。|t| < 2の正のアルファ推定値は、スキルの証拠にはなりません。
  • 回帰変数を追加すると、決定係数は常に上昇します。過剰適合を防ぐには、自由度調整済み決定係数、AIC/BIC、または交差検証を使用してください。
ブートストラップ手順

解析的な標準誤差が得られない場合(シャープレシオ、アルファ)、分布が正規分布ではない場合、または標本が小さい場合に、統計量の標本分布を推定するためのノンパラメトリックな再標本化手法です。

  1. 元のn個の観測値から、サイズnの再標本をB個、復元抽出で取得します(B = 1,000-10,000)。
  2. 各再標本で統計量を計算します。
  3. パーセンタイル法:(1 - alpha)信頼区間は、ブートストラップ分布のalpha/2パーセンタイルから1 - alpha/2パーセンタイルまでです。ブートストラップ標準誤差は、B個の統計量の標準偏差です。

注意点:i.i.d.ブートストラップでは自己相関とボラティリティ・クラスタリングが考慮されません。時系列依存のあるリターン系列には、ブロックブートストラップを使用してください。

標準的な分析ワークフロー

リターン系列が与えられた場合は、次の手順を実行します。

  1. 記述統計 — 平均、ボラティリティ(n-1)、歪度、超過尖度を算出し、報告用に年率換算します。
  2. 分布の確認 — Jarque-Bera 検定を行います(検出力が低いという注意点に留意してください)。歪度・尖度の大きさと最大の外れ値を調べ、正規分布に基づく手法(パラメトリック VaR、t 検定)が妥当かどうかを判断します。
  3. 共分散/相関(複数資産の場合)— 標本共分散行列と相関行列を算出します。p が n に比べて大きい場合は、最適化の前に縮小推定を適用します。
  4. 回帰診断 — CAPM またはファクター回帰を行い、アルファ/ベータを t 統計量および R-squared とともに報告し、残差に構造がないか確認します。
  5. ブートストラップ信頼区間 — 解析的な標準誤差を簡単に求められない統計量(シャープレシオ、アルファ、ドローダウン)については、点推定値だけを報告せず、ブートストラップ信頼区間を算出します。

実例

例 1:記述統計と正規性検定

条件: 月次リターン(%)12 個:[2.1, -0.5, 1.8, -3.2, 4.5, 0.3, -1.1, 2.7, -0.8, 3.4, 1.2, -0.6]

Mean      = 9.8 / 12 = 0.8167% per month  (~9.8% annualized, simple x12)
s^2       = 52.977 / 11 = 4.816   ->   s = 2.195% per month
Ann. vol  = 2.195% * sqrt(12) = 7.60%
Skewness  = -0.045  (bias-corrected; near symmetric)
Ex. kurt  = -0.42   (bias-corrected; lighter tails than normal)

JB = (12/6) * ((-0.045)^2 + (-0.42)^2 / 4) = 0.09

JB = 0.09 < 5.99(カイ二乗分布の 5% 臨界値、df=2):正規性の帰無仮説は棄却できません。観測数が 12 個しかないため、この検定の検出力は非常に低く、リターンが真に正規分布に従うことを示す証拠ではありません。

例 2:要約統計量からの CAPM 回帰

条件: 月次観測値 24 個。ファンドの超過リターン:平均 0.8%、標準偏差 4.2%。市場の超過リターン:平均 0.6%、標準偏差 3.8%。相関 0.85。

beta  = rho * sigma_i / sigma_m = 0.85 * 4.2 / 3.8 = 0.939
alpha = 0.8% - 0.939 * 0.6% = 0.236% per month (~2.84% annualized)
R^2   = rho^2 = 0.7225

Residual std = 4.2% * sqrt(1 - 0.7225) = 2.213%
SE(alpha) = 2.213% / sqrt(24) = 0.452%   ->  t(alpha) = 0.236 / 0.452 = 0.52
SE(beta)  = 2.213% / (3.8% * sqrt(23)) = 0.121  ->  t(beta) = 0.939 / 0.121 = 7.74

自由度 22 では、両側 5% の t 臨界値は 2.074 です。ベータは非常に有意です(7.74 >> 2.074)。一方、アルファは有意ではありません(0.52 < 2.074)。点推定値は正ですが、このサンプルではゼロと区別できません。

よくある落とし穴

  • 標本分散の代わりに母分散を使う:標本から推定する場合は、必ず n - 1(ベッセル補正)を使用します。
  • 金融リターンにファットテールがあるのに正規性を仮定する:株式リターンは通常、負の歪度と正の超過尖度を示します。正規分布に基づくモデル(標準的な VaR)はテールリスクを過小評価します。スチューデントの t 分布またはノンパラメトリック手法を使用してください。
  • 非定常性を無視する:リターン分布は時間とともに変化します(レジーム変化、ボラティリティ・クラスタリング)。全標本の統計量より、ローリングウィンドウ推定や GARCH のほうが適切な場合があります。
  • 回帰変数を増やしすぎて過剰適合する:ファクターを追加すると R-squared は常に上昇します。調整済み R-squared、情報量基準、または交差検証を使用してください。
  • 小標本で不安定な共分散行列を使う:p が n に近い、または n を上回る場合は、最適化の前に Ledoit-Wolf 縮小推定またはファクターベースの共分散モデルを適用します。

スクリプトの実行

scripts/statistics_fundamentals.py には、静的メソッド descriptive_stats、covariance_matrix、correlation_matrix、shrunk_covariance(簡略化した Ledoit-Wolf。上記の注を参照)、ols_regression、rolling_regression、bootstrap_mean、jarque_bera_test を備えた StatisticsFundamentals クラスがあります。

  • 実行:uv run scripts/statistics_fundamentals.py(PEP 723 のインラインメタデータで numpy と scipy を解決します)。または、numpy/scipy をインストールしたうえで python3 scripts/statistics_fundamentals.py を実行します。
  • 引数なしでの実行(または --verify)では、合成データのデモを表示し、上記の例 1 の実例の値(12 か月系列の平均 0.8167、標準偏差 2.195、JB 0.09)も検証します。不一致があれば、ゼロ以外の終了コードで終了します。
  • --help で利用可能なメソッドとインポート方法を表示します。
  • プログラムから使用する場合は、実行するのではなくインポートします:from statistics_fundamentals import StatisticsFundamentals としてから、たとえば StatisticsFundamentals.descriptive_stats(...) を呼び出します。

相互参照

  • return-calculations(コアプラグイン):算術平均リターンと幾何平均リターン、統計モデリング用の対数リターン
  • time-value-of-money(コアプラグイン):CAPM 回帰による割引率の推定。NPV と IRR の計算では統計的な入力値を使用します
  • factor-investing(資産運用プラグイン):単一ファクターの CAPM/OLS 回帰を Fama-French のマルチファクターモデルに拡張し、アルファの帰属分析とファンド評価に使用します
  • financial-statements(資産運用プラグイン):財務比率と同業他社との比較に記述統計とトレンド分析を適用します

コメント