リスク・リターンの計算方法とその意味

[マケデコ Advent Calendar 2024](https://qiita.com/advent-calendar/2024/market-api)  3日目です。

# リターンとは
株や仮想通貨などの金融商品を扱う際、リターンを考えることが多くあります。リターンとは収益率のことで、その金融商品の価値がどれくらい上下するかを定量的に評価するものです。リターンを計算するには、ある時点の価格と別の時点の価格を使います。ある時点$t_o$での価格$V_0$と別の時点$t_1$（$t_0$より未来）の価格$V_1$からその期間のリターン$r$は次のように計算されます。
```math
r= \frac{V_1-V_0}{V_0} = \frac{V_1}{V_0}-1
```
すなわちリターンとは価格の上昇率です。例えば資産価格が10000円から11000円に上昇した場合は10％のリターンとなります。異なる金融資産のリターンを比較したり、同じ資産の異なる期間のリターンを比較することでその収益性を評価することができます。

金融資産は投資期間が長くなるほど資産価格が大きく動くことが多いため、計算期間が異なるリターンを比較する際にはリターンを平均する必要があります。一つ目の方法としては、各リターンの和を取り計算期間で割る方法があります。すなわち算術平均をとる方法であり具体的には次のようになります。
```math
\bar{r}= \frac{1}{N}\sum_{i=1}^{N}r_i
```
一方もう一つの方法としては、リターンの積をとりサンプル数乗根をとる方法で幾何平均を計算します。
```math
\bar{r}= \left( \prod_{i=1}^{N}r_i \right)^{\frac{1}{N}}
```




# リスクとは
リターンがどれだけ変動するのかを示す指標です。一般的には、リターンの標準偏差$\sigma$を用いて計測されます。ある期間のリスクは例えばその期間内の日次のリターンを用いて次の様に計算されます。
```math
\sigma= \sqrt{\frac{1}{N-1}\sum_{i=1}^{N}(r_i-\bar{r})}
```
ここで$r_i$は$i$番目の基準日の日次リターン、$\bar{r}$は日次リターンの算術平均、$N$は基準日数です。

# 具体例
具体的にJ-Quants APIを使ってリスクとリターンを計算してみます。
```python
import pandas as pd
import numpy as np
import requests
import json


idToken = 'piypiyo'
ulr = 'https://api.jquants.com/v1/prices/daily_quotes'

symbol = "7203"  
start_date = "2022-09-10"
end_date = "2024-09-10"

headers = {'Authorization': 'Bearer {}'.format(idToken)}
params = {
    "code": symbol,
    "from": start_date,
    "to": end_date
}
response = requests.get(ulr, headers=headers, params=params)
data = response.json()
df = pd.DataFrame(data["daily_quotes"])

# リターンを計算
df["daily_return"] = df["Close"].pct_change()

# Calculate arithmetic mean, geometric mean, and standard deviation
arithmetic_mean = df["daily_return"].mean()
geometric_mean = (1 + df["daily_return"].dropna()).prod() ** (1 / len(df["daily_return"].dropna())) - 1
std_dev = df["daily_return"].std()

print(f'日次リターンの算術平均：{arithmetic_mean}')
print(f'日次リターンの幾何平均：{geometric_mean}')
print(f'日次リターンの標準偏差：{std_dev}')
```
```python:結果
日次リターンの算術平均：0.0005695957234289291
日次リターンの幾何平均：0.0003848538425392789
日次リターンの標準偏差：0.019201459113214216
```

# リスクとリターンの意味
リターンとリスクが計算されたとして、それをどのように解釈すればいいでしょうか。

一つは複数の金融商品を比較する際の尺度として使えます。
リターンが大きい金融商品の方が将来の収益の期待値は大きいと考えられます。
またリスクが大きな金融商品はリスクが小さいものと比べて大きなリターンが発生する確率が高いですが、同時に大きなドローダウンが発生する確率が大きいとも言えます。

もう一つの観点として、リスクとリターンが収益の内部モデルのパラメタであると考える事が出来ます。例えばあるデータ群が正規分布に従って生成されていると仮定すると、平均±標準偏差の範囲に68%のサンプルが含まれることが知られています。この様に考えると、リスクとリターンを計算することでその金融商品の将来の収益がどれくらいの範囲に収まるのか定量的に予想することが可能です。（当然過去と将来でリターンが正規分布に従いそのパラメタが不変であるという前提のもとでの話です）

実際にはリターンに関するこれらの前提は必ずしも常に成り立つとは限りません。
よく言われている事としては、リターンが正規分布に従うのではなく、対数リターンが正規分布に従うという仮定の方が現実のリターンの分布によくあてはまるというものです。

対数リターン$r_l$は資産価格の対数を使って下記の様に計算されます。
```math
r_l= \ln\left(\frac{V_1}{V_0}\right) = \ln V_1 - \ln V_0
```

対数正規分布とは各サンプルの対数と取ったときにそれらが正規分布に従うような確率分布です。
実際に対数正規分布の確率密度関数をプロットすると次のようになります。

![lognorm1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/190079/91ee7e7b-02fe-94e4-aa29-b2ba8436ba44.png)


対数正規分布はその性質上正の値しかとりません。また正規分布の様に左右対称ではなく左側に偏った分布になっています。
そのため、対数正規分布の中央値は平均値と比べて左側（値が小さい側）に存在します。
このことから、リターンが対数正規分布に従う場合ではリターンの平均値よりも中央値（リターンがその値以上になる確率とその値以下になる確率がどちらも50%）の方が小さくなることを意味しています。
例えばリターンが5%、リスクが10%と計算された金融商品があったとして、その将来のリターンを対数正規分布の仮定のもとに考えるとリターンが5%を超える確率は50%より小さくなります。

具体的には、対数正規分布の平均$r$、中央値$m$は次のようになります。


```math
\begin{align}

r &= e^{\mu+\frac{\sigma^2}{2}} \\
m &= e^{\mu}
\end{align}
```
ここで$\mu$と$\sigma$はあくまでも対数正規分布の元となる正規分布の平均、標準偏差であることに注意してください。上記の通り、中央値は$e^{\frac{\sigma^2}{2}}$分だけ平均値より小さくなっています。すなわちリスクが大きいほど、先程考えていたリターンの中央値が平均値より低くなる現象がより顕著になってくることになります。


# まとめ
リスクとリターンについては金融商品を扱う上で必ず考える指標ですが、（ある前提の下では）それらは独立に意味があるのではなくリスクが大きい場合はリターンの将来予想にも影響があります。