※本記事のコードや情報は執筆時点の仕様に基づいています。投資は自己責任であり、必ずデモ環境や少額資金でテストした上で運用してください。
リスクって、数字で表せるの?
投資でよく聞く「リスクが高い」「ボラティリティが大きい」という表現。これらは感覚的な言葉ですが、統計学では標準偏差(Standard Deviation)という指標で数値化できます。
標準偏差は「データが平均からどれだけバラついているか」を表します。株価の文脈では「価格の変動の大きさ=リスク」として使われます。
標準偏差を直感的に理解する
例として、2つの銘柄の日次リターン(前日比)を考えます。
| 銘柄 | 日次リターンの例 | 平均 | 標準偏差 |
|---|---|---|---|
| A株(安定型) | +0.1%, -0.1%, +0.2%, -0.1%, +0.1% | +0.04% | 小さい |
| B株(変動型) | +3%, -2%, +5%, -4%, +1% | +0.6% | 大きい |
B株の方が期待リターンは高いですが、日々の変動も大きい。標準偏差が大きいほど「予測が難しい=リスクが高い」ということです。
年率ボラティリティへの変換
日次リターンの標準偏差を√252倍すると年率ボラティリティになります(1年の取引日数≒252日)。機関投資家やリスク管理で使われる標準的な指標です。
Pythonで複数銘柄のリスクを比較する
import yfinance as yf
import pandas as pd
import numpy as np
# ==============================
# 設定エリア:比較したい銘柄
# ==============================
WATCHLIST = {
"7203.T": "トヨタ自動車",
"9984.T": "ソフトバンクG",
"6758.T": "ソニーG",
"8306.T": "三菱UFJ",
}
PERIOD = "1y" # 過去1年
TRADING_DAYS = 252 # 年間取引日数
# ==============================
# データ取得とリスク計算
# ==============================
results = []
for symbol, name in WATCHLIST.items():
ticker = yf.Ticker(symbol)
df = ticker.history(period=PERIOD)
# 日次リターン(対数リターン)を計算
# 対数リターン = log(今日の終値 / 前日の終値)
log_returns = np.log(df["Close"] / df["Close"].shift(1)).dropna()
daily_std = log_returns.std() # 日次標準偏差
annual_vol = daily_std * np.sqrt(TRADING_DAYS) # 年率ボラティリティ
annual_ret = log_returns.mean() * TRADING_DAYS # 年率リターン(参考)
results.append({
"銘柄コード": symbol,
"銘柄名": name,
"日次標準偏差(%)": round(daily_std * 100, 3),
"年率ボラティリティ(%)": round(annual_vol * 100, 1),
"年率リターン(%)": round(annual_ret * 100, 1),
})
# 結果をDataFrameで表示(ボラティリティ昇順)
result_df = pd.DataFrame(results).sort_values("年率ボラティリティ(%)")
print(result_df.to_string(index=False))
出力の読み方
年率ボラティリティが20%以下なら比較的安定、30%超なら値動きが大きい銘柄です。分散投資の設計時に、ボラティリティの異なる銘柄を組み合わせるとリスクを抑えられます。
まとめ
- 標準偏差は「株価のバラつき=リスク」を数値で表す指標
- 日次標準偏差 × √252 = 年率ボラティリティ(業界標準)
- 対数リターンを使うと、複利効果を正確に扱える
- 複数銘柄の比較でリスクの高低を客観的に判断できる

