Python 计算优化权重以最大化相关性

Python 计算优化权重以最大化相关性,python,pandas,optimization,Python,Pandas,Optimization,我有两个时间序列数据,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.

我有两个时间序列数据,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'])
提前感谢。

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)