2016-03-19 29 views
3

我有包含客户购买历史记录的数据以及每个订单的相应销售价值。我想随着时间的推移,每个客户都会有某种趋势。我想过每个客户的回归,然后提取系数。这是否可以用高效的方式处理大熊猫(我在数据中获得了大约1000000笔交易)?如果是的话,我该怎么做?每个客户数据的回归

为了更好地理解这里的数据结构。

 Date  Customer_ID  Sales_Value  
    2014-07-01   1   62.946002 
    2014-12-01   2   62.947733 
    2013-05-01   3   27.328221 
    2015-01-01   1   30.023658 

这将是交易数据的结构与其他几列在这种情况下不需要的结构。该数据不幸的是在月份的基础上,所以对于日期,你将只有这种格式:20xx-xx-01

我现在想要的是一个数组,为我提供给我每个客户的回归系数根据Sales_Value在整个时间间隔内对交易数据进行分析。所以基本上是这样的:

Customer_ID trend_coeff 
    1    -0,5 
    2    0 
    3    0 

(本为trend_coeff数字当然是由只是为了演示)

谢谢您的帮助!

+0

大熊猫是不是一台机器学习模块。你可能想看看[Scikit-learn](http://scikit-learn.org/stable/modules/linear_model.html) –

+0

是的,我知道熊猫本身不提供任何回归方法。我宁愿考虑如何安排或准备数据,以便以有效的方式为每位客户进行回归。 – TheDude

+0

然后显示一个数据样本不会受到伤害。 –

回答

2

假设你有这样的开始:

import pandas as pd 

df = pd.DataFrame({ 
    'a': [1, 2, 3, 1, 2, 3, 1, 2, 3], 
    'b': range(9), 
    'c': range(1, 10)}) 
>>> df 
    a b c 
0 1 0 1 
1 2 1 2 
2 3 2 3 
3 1 3 4 
4 2 4 5 
5 3 5 6 
6 1 6 7 
7 2 7 8 
8 3 8 9 

要为'a'每个值'b''c'之间进行线性回归,你可以这样做:

from sklearn import linear_model 

def find_for_a(g): 
    p = linear_model.LinearRegression().fit(g.b.values[:, None], g.c.values) 
    return pd.Series({'coef': p.coef_[0], 'intercept': p.intercept_}) 

>>> df.groupby('a').apply(find_for_a) 
    coef intercept 
a  
1 1.0  1.0 
2 1.0  1.0 
3 1.0  1.0