日志返回(几乎)与百分比变化相同



我有这个函数来计算回报日志。它按预期工作。

def log_returns(prices):
return np.log(prices / prices.shift(1))
data.apply(lambda x: log_returns(x))

返回的值非常接近pct_change方法。这是意料之中的吗?

data.pct_change((

是的,因为自然对数中的微小变化几乎等于百分比变化,这不是代码问题。

因为:

log(A/B) = log(A) - log(B)

在您的情况下,A 等于 B 的一些小变化e

log(A/B) = log(A) - log(B) =  log(B(1+e)) - log(B)
log(A/B) = log(B) + log((1+e)) - log(B) = log(1+e)

对于e的小值,这意味着log是大约 1 的良好近似值

log(1+e) ≈ e

有关更数学的解释,请参阅此SO帖子。

使用此代码亲自查看:

import pandas as pd
import numpy as np
small = np.linspace(0.01, 0.1, 100)
df = pd.DataFrame({"vals" : small})
df["changes"] = df["vals"].pct_change()
df["log div"] = np.log(df["vals"]/df["vals"].shift())
diff_log = np.log(df["vals"]) - np.log(df["vals"].shift())
df["diff log"] = diff_log
diff_log = diff_log[~np.isnan(diff_log)]
log_div  = df["log div"].dropna().values
assert(np.allclose(log_div, diff_log))

df.head(10)

values   changes   log div  diff log                                                                               
0  0.010000       NaN       NaN       NaN                                                                               
1  0.010909  0.090909  0.087011  0.087011                                                                               
2  0.011818  0.083333  0.080043  0.080043                                                                               
3  0.012727  0.076923  0.074108  0.074108                                                                               
4  0.013636  0.071429  0.068993  0.068993                                                                               
5  0.014545  0.066667  0.064539  0.064539                                                                               
6  0.015455  0.062500  0.060625  0.060625                                                                               
7  0.016364  0.058824  0.057158  0.057158                                                                                  
8  0.017273  0.055556  0.054067  0.054067                                                                                    
9  0.018182  0.052632  0.051293  0.051293 

是的,这确实并不奇怪。对于一个小的 y,它保存y 和大约对(1+y(。有关更多信息,请参阅此数学交流帖子。

百分比变化计算为 x i+1/xi-1,而计算 log(xi+1/xi(。如果我们用 y 代替y= xi+1/xi-1,我们会看到近似弹出。

最新更新