アセットマネージャーのためのファイナンス機械学習:テストデータのオーバーフィッティング シャープレシオと偽戦略定理

金融において、投資戦略のパフォーマンスを評価する一般的な尺度は、リスクとリターンの比率のシャープレシオで、再現率と適合率ではない。試行で得られるシャープレシオと、メタデータを使って、投資戦略が偽である確率を評価するフレームワークを作成する。
 投資戦略が超過リターン(risk premium)$${\{r_t\} t=1,\cdots,T}$$を持ち、$${r_t}$$はIIDで正規分布$${r_t \sim {\mathcal N}[\mu, \sigma^2]}$$に従うとする。シャープレシオは平均と分散の比で与えられ$${\mu}$$と$${\sigma}$$は未知であるから、シャープレシオの推定値$${\widehat{SR}}$$は、期待値と分散で与えられる。
$${\widehat{SR}=\displaystyle{\frac{E[\{r_t\}]}{\sqrt{V[\{r_t\}]}}}}$$
$${r_t}$$はIIDと仮定してあることから、$${\widehat{SR}}$$の漸近分布は、
$${\hat{\sigma}(\widehat{SR})=\displaystyle{\sqrt{\frac{1+\frac{1}{2}\widehat{SR}^2}{T-1} }}}$$ で与えられることから、
$${(\widehat{SR}-SR)\to^a {\mathcal N} \displaystyle{\left[0,\frac{1+\frac{1}{2}SR^2}{T-1}\right]}}$$

 実際的に、$${r_t}$$は正規分布でなく、負の歪度と正の歪度を持つ。よって、iidではあるが非正規分布に従うとした場合、
$${\widehat{SR}- SR\to^{a}{\mathcal N}\left[\displaystyle{0,\frac{1+\frac{1}{2}SR^2-\gamma_3SR+\frac{\gamma_4-3}{4}SR^2}{T-1}}\right]}$$
となる。$${\gamma_3}$$は$${r_t}$$の歪度、$${\gamma_4}$$は尖度で、正規分布に従う場合は、$${\gamma_3=0,\ \gamma_4=3}$$である(Mertens.E (2002)Comments on the Correct Variance of Estimated Sharpe Ratios in Lo(2002, FAJ) When Returns Are IID)
 確率的シャープレシオは、リターン分布に歪みやファットテールがある場合に起こる過大評価の影響を取り除いたシャープレシオの推定値であり、ベンチマークの$${SR^\ast}$$よりも大きい$${\hat{SR}}$$が計測される確率を与える。標準正規分布の累積分布関数(CDF)を$${Z[.]}$$として、
 $${\widehat{PSR}[SR^\ast]=Prob[\widehat{SR} > SR^\ast]=\displaystyle{Z\left[\frac{(\widehat{SR}-SR^\ast)\sqrt{T-1}}{\sqrt{1-\hat{\gamma_3}\widehat{SR} +\frac{\gamma_4-1}{4}\widehat{SR}^2 }}\right] }}$$
で与えられる。

複数回の試行の結果から得られた最大SRは、試行結果の中からランダムに選ばれたものではなく、SBuMT(選択バイアス)がかかっている。最大SRの期待値と、ランダムに選ばれるSRの期待値が大きくかけ離れていたら、SBuMTも大きくなる。SBuMTは試行回数と試行間のシャープレシオの分散に依存し、以下の定理が与えられる。

K回の試行によるシャープレシオの推定値$${\{\widehat{SR}_k\}, k=1, \cdots, K}$$があり、$${\widehat{SR}_k \sim \mathcal{N}[0,V[\widehat{SR}_k]]}$$の時、
$${E[\max_k{\widehat{SR}_k}](V[\widehat{SR}_k])^{-1/2} \approx }$$ $${(1-\gamma)Z^{-1}\left[1-\frac{1}{K}\right] + \gamma Z^{-1}\left[1-\frac{1}{K\mathcal{e}}\right]}$$が成り立つ。
$${\ \ Z^{-1}[.]}$$は標準正規分布のCDFの逆関数で、$${\mathcal{e}}$$はオイラー数、$${\gamma}$$はオイラーマスケローに定数である。

この定理は、期待最大シャープレシオの近似値を与える。よって、もしも試行の結果から選ばれた最大シャープレシオ$${\max_k\{\widehat{SR}_k\} \gg E[\max_k{\widehat{SR}_k}]}$$でない限り、その投資戦略は偽である可能性が強いことになる。
 $${E[\max_k{\widehat{SR}_k}]}$$は以下の様に与えられる。
$${E[\max_k{\widehat{SR}_k}]=\sqrt{V[\widehat{SR}_k]} \left( (1-\gamma)Z^{-1}\left[1-\frac{1}{K}\right] + \gamma Z^{-1}\left[1-\frac{1}{K\mathcal{e}}\right]\right)}$$
 収縮ポーロフォリオは、この推定の最大シャープレシオから、歪度、尖度、サンプル長、多重テストの影響を考慮にいれ、真のシャープレシオがゼロである帰無仮説の元で、$${\widehat{SR}}$$以上のシャープレシオが観測される確率であり、以下の様に定義される。
$${\widehat{DSR}=\displaystyle{Z\left[ \frac{(\widehat{SR}-E[ \max_k\{\widehat{SR}_k\}])\sqrt{T-1}}{\sqrt{1-\hat{\gamma}_3\widehat{SR} +\frac{\hat{\gamma}_4-1}{4}\widehat{SR}^2} }\right] }}$$

 偽戦略定理によれば、真のSRがゼロであっても、その最大値の期待値は0より大きくなる。実際のシャープレシオがゼロであるという帰無仮説のもとでは、最大SRはDSRと推定され、試行が何回もくりかえれ、分散が増大すると、DSRも増大する。標準の有意水準を0.05とすると、発見された戦略が統計的に優位であるためにDSRは0.95を超えなくてはならない。

日次のIID正規リターン5年分がある投資戦略で、10回のうちの最良の試行は年率換算シャープレシオが2で、年率換算シャープレシオの分散は1であった。年率換算から、年間営業日を250日として、日次に直すと、
$${\widehat{SR}=2/\sqrt{250}}$$、
$${T=250\times 5}$$、
$${V[\widehat{SR}_K]=\sqrt{1/250}}$$
 これから、期待される最大シャープレシオは、偽戦略定理を用いて、スニペット8.1のgetExpectedMaxSRで得られる。

import numpy as np
import pandas as pd
from scipy.stats import norm
import scipy.stats as ss
import matplotlib.pylab as plt

def getExpectedMaxSR(nTrials, meanSR, stdSR):
    #Expected max SR, controlling for SBuMT
    emc = 0.477215664901532860606512090082402431042159336 #Euler-Mascheronis Constant
    sr0 = (1-emc)*norm.ppf(1-1./nTrials)+emc*norm.ppf(1-(nTrials*np.e)**-1)
    sr0 = meanSR + stdSR*sr0
    return sr0

V=(1.0/250)**.5
SR=2./250**.5
K=10
ExpMaxSR=round(getExpectedMaxSR(K,0,V),4)
ExpMaxSR

$${E[\max_k{\widehat{SR}_k}]=0.0964}$$
また、一回の試行で2以上の最大シャープレシオを観測する確率(確率的シャープレシオ)と、10回の試行後に2以上の最大シャープレシオを観測する確率(Deflated sharp ratio)を計算しグラフ化する。

def getProbSR(sr, sr_, t,skew=0, kurt=3):
    z=(sr-sr_)*((t-1)**.5)
    z/=(1-skew*sr+(kurt-1)/4.*sr**2)**.5
    return(ss.norm.cdf(z))

def getDeflatedSR(sr, t, Emaxsr, skew=0, kurt=3):
    return getProbSR(sr=sr,sr_=Emaxsr,t=t,skew=skew,kurt=kurt)

T=250*5
K=10
g3=0
g4=3
SR=np.linspace(1.0,3.0,100)
dfSR=[]
probSR=[]
for sr in SR:
    dfSR.append(getDeflatedSR(sr=sr/250**0.5, t=T, Emaxsr=ExpMaxSR,skew=g3,kurt=g4))
    probSR.append(getProbSR(sr=sr/250**0.5, sr_=dSr, t=T,skew=0, kurt=3))
plt.plot(SR,dfSR,label='Defrated sharp ratio')
plt.plot(SR,probSR,label='Probabilistic sharp ratio')
plt.axhline(y=0.95, color='r', linestyle='-',label='95\% conf.')
plt.xlabel('SR')
plt.ylabel('Prob')
plt.legend()
plt.show

よって、10回試行後に、最大シャープレシオが2.25以上を観測したら、95%の確信度でこの戦略は偽戦略ではないと言える。また一回の試行で、95%の確信度で戦略が受け入れられるためには、観測される最大シャープレシオが2.7以上でなくてはならない。

この記事が気に入ったらサポートをしてみませんか?