【问题标题】:pandas dataframe daily regression at monthly frequency熊猫数据框按月频率每日回归
【发布时间】:2018-01-31 06:16:46
【问题描述】:

我有一些股票的每日回报数据,如下所示:

           Stock A  Stock B  Stock C  Market
date
1987-02-02  0.01    0.02      0.02     0.01
1987-02-03  0.02    0.03      0.02     0.02
1987-02-04  0.03    0.01      0.01     0.03
1987-02-05  0.04    0.03      0.05     0.04

我想计算股票 A、B、C 在市场上的 30 天回归,但只在每个月底,即 1987-02-28、1987-03-31... 然后保存回归产生两个矩阵(一个用于常数项,一个用于系数):

           Stock A  Stock B  Stock C  
date
1987-02-28  const    const     const   
1987-03-31  const    const     const  
1987-04-30  const    const     const 

           Stock A  Stock B  Stock C 
date
1987-02-28  coeff    coeff     coeff 
1987-03-31  coeff    coeff     coeff 
1987-04-30  coeff    coeff     coeff 

到目前为止,我所做的是为“月末”创建一个指标,然后遍历日期的所有行和列:

loop over columns:
    loop over rows:
        if end of month is true:
            regress Stock on Market using past 30 days data
            save the result 

鉴于我有很多股票(7000+)超过 50 年,这种方式非常缓慢。我想知道是否有人以前曾解决过类似的问题并且有更快的实现方式?任何有关如何提高速度或效率的提示将不胜感激。

【问题讨论】:

    标签: python pandas regression finance


    【解决方案1】:

    你可以从这样的方法开始

    import pandas as pd
    import numpy as np
    from datetime import datetime
    from pandas.tseries.offsets import MonthEnd
    
    #sample Data
    df = pd.DataFrame(index=pd.DatetimeIndex(freq='D',start=datetime(1990,1,1),end=datetime(1995,12,25)),data=np.random.randint(0,100,(2185,3)),columns=['Stock A','Stock B','Stock C'])
    
    #Create a column that has the end of the month for each date
    df['end'] = df.index + MonthEnd(1)
    
    #Groupby the end of the month and apply your regression function
    for group,data in df.groupby('end'):
        for row in data.columns #Sudo code loop over columns used per regression
            regressFunction()
    

    这应该消除在行和列上循环浪费的时间,而只需计算已知索引的回归。此外,在parallel 中计算回归以加快计算速度可能会有所帮助。

    【讨论】:

    • 请问如果我想使用过去的 3 个月而不是仅 1 个月,请问如何更改代码?换句话说,对于每个组,我需要来自“当前组”、“组 - 1”和“组 -2”的数据。谢谢!
    猜你喜欢
    • 2014-02-05
    • 2020-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多