【问题标题】:Calculating optimized weights to maximize correlation计算优化权重以最大化相关性
【发布时间】:2019-02-14 19:41:06
【问题描述】:

我有两个时间序列数据,A 列和 B 列。

我正在计算 A 列上不同持续时间的滚动移动平均线。 例如 (5,10,15,20)。

我想为这些平均列中的每一个分配权重,以便权重和平均列的总和与列 B 具有最大的相关性。换句话说,如何在 Python 中实现类似 excel 的优化。

请查看示例代码并建议前进的方向。

import pandas as pd
import numpy as np

dates = pd.date_range('20130101', periods=100)

df = pd.DataFrame(np.random.randn(100, 2), index=dates, columns=list('AB'))

df['sma_5']=df['A'].rolling(5).mean()

df['sma_10']=df['A'].rolling(10).mean()

df['sma_15']=df['A'].rolling(15).mean()

df['sma_20']=df['A'].rolling(20).mean()

w=[0.25,0.25,0.25,0.25]

df['B_friend'']= 
w[0]*df['sma_5']+w[1]*df['sma_10']+w[2]*df['sma_15']+w[3]*df['sma_20']

需要优化权重“w”以最大化相关性。

df['B'].corr(df['B_friend'])

提前致谢。

【问题讨论】:

    标签: python pandas optimization


    【解决方案1】:

    scipy.optimize.minimize 函数看起来像你需要的:https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.minimize.html#scipy.optimize.minimize

    代码如下所示:

    import pandas as pd
    import numpy as np
    import scipy.optimize as opt
    
    dates = pd.date_range('20130101', periods=100)
    df = pd.DataFrame(np.random.randn(100, 2), index=dates, columns=list('AB'))
    df['sma_5']=df['A'].rolling(5).mean()
    df['sma_10']=df['A'].rolling(10).mean()
    df['sma_15']=df['A'].rolling(15).mean()
    df['sma_20']=df['A'].rolling(20).mean()
    
    def fun(x):
        w = x
        B_friend=w[0]*df['sma_5']+w[1]*df['sma_10']+w[2]*df['sma_15']+w[3]*df['sma_20']
        # -np.abs(corr) instead of just corrr is used
        # in order to turn a maximization problem into a
        # minimization problem
        return -np.abs(df['B'].corr(B_friend))
    
    w=[0.25,0.25,0.25,0.25]
    opt.minimize(fun, w)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-14
      • 2023-03-26
      • 1970-01-01
      • 2018-03-31
      相关资源
      最近更新 更多