【问题标题】:How to calculate quarterly wise churn and retention rate using python如何使用 python 计算季度明智的流失率和保留率
【发布时间】:2018-03-19 22:10:04
【问题描述】:

如何使用 python 计算带有日期列的季度明智的流失率和保留率。带有日期列,我想使用 python 按季度对它进行分组。

这用于按季度计算流失率

quarterly_churn_yes = out.loc[out['Churn'] == 'Yes'].groupby(out["Date"].dt.quarter).count()
print(quarterly_churn_yes["Churn"])

Date
1    1154
2     114
3      68
4      69
Name: Churn, dtype: int64

这用于按季度计算流失率

total_churn = out['Churn'].count()
print(total_churn) 

quarterly_churn_rate = out.groupby(out["Date"].dt.quarter).apply(lambda x: quarterly_churn_yes["Churn"] / total_churn).sum()
print(quarterly_churn_rate)

Date
1    0.862159
2    0.085170
3    0.050803
4    0.051550
dtype: float64

上面的代码我试图找到按日期列分组的客户流失率。我得到 1、2、3、4,但我想要按年计算的季度流失率。

例如,如果我在数据框中有四年,例如 2018,2014,2017 年

2008

1    1154
2     114
3      68
4      69

2014

1    1154
2     114
3      68
4      69

【问题讨论】:

标签: python


【解决方案1】:

我认为需要:

out = pd.DataFrame({ 'Date': pd.to_datetime(['2015-01-01','2015-05-01','2015-07-01','2015-10-01','2015-04-01','2015-12-01','2016-01-01','2016-02-01','2015-05-01', '2015-10-01']), 'Churn': ['Yes'] * 8 + ['No'] * 2 })
print (out)
  Churn       Date
0   Yes 2015-01-01
1   Yes 2015-05-01
2   Yes 2015-07-01
3   Yes 2015-10-01
4   Yes 2015-04-01
5   Yes 2015-12-01
6   Yes 2016-01-01
7   Yes 2016-02-01
8    No 2015-05-01
9    No 2015-10-01

df = (out.loc[out['Churn'] == 'Yes']
         .groupby([out["Date"].dt.year,out["Date"].dt.quarter])["Churn"]
         .count()
         .rename_axis(('year','quarter'))
         .reset_index(name='count'))

print(df)
   year  quarter  count
0  2015        1      1
1  2015        2      2
2  2015        3      1
3  2015        4      2
4  2016        1      2

可以按年份创建单独的 DataFrames dictionary of DataFrames:

dfs = dict(tuple(out.groupby(out['Date'].dt.year)))
print (dfs)
{2016:   Churn       Date
6   Yes 2016-01-01
7   Yes 2016-02-01, 2015:   Churn       Date
0   Yes 2015-01-01
1   Yes 2015-05-01
2   Yes 2015-07-01
3   Yes 2015-10-01
4   Yes 2015-04-01
5   Yes 2015-12-01
8    No 2015-05-01
9    No 2015-10-01}

print (dfs.keys())
dict_keys([2016, 2015])

print (dfs[2015])
  Churn       Date
0   Yes 2015-01-01
1   Yes 2015-05-01
2   Yes 2015-07-01
3   Yes 2015-10-01
4   Yes 2015-04-01
5   Yes 2015-12-01
8    No 2015-05-01
9    No 2015-10-01


Tenure column looks like this

out["tenure"].unique() 
Out[14]: 
array([ 8, 15, 32,  9, 48, 58, 10, 29,  1, 66, 24, 68,  4, 53,  6, 20, 52,
       49, 71,  2, 65, 67, 27, 18, 47, 45, 43, 59, 13, 17, 72, 61, 34, 11,
       35, 69, 63, 30, 19, 39,  3, 46, 54, 36, 12, 41, 50, 40, 28, 44, 51,
       33, 21, 70, 23, 16, 56, 14, 62,  7, 25, 31, 60,  5, 42, 22, 37, 64,
       57, 38, 26, 55])

它不包含月份,似乎是 1 到 72。

我需要将任期列拆分为“范围”。

例如此列包含 1 到 72 个数字,最多需要 4 个范围。

like 1 to 18 --> 1 range
     19 to 36 --> 2nd range
     37 to 54 --> 3rd range like that

在这里,我找到了按季度计算的流失率,后来我用流失率计算了流失率和流失率。

quarterly_churn_yes = out.loc[out['Churn'] == 'Yes'].groupby([out["Date"].dt.year,out["Date"].dt.quarter]).count().rename_axis(('year','quarter'))
quarterly_churn_yes["Churn"]

quarterly_churn_rate = out.groupby(out["Date"].dt.quarter).apply(lambda x: quarterly_churn_yes["Churn"] / total_churn).sum()
print(quarterly_churn_rate)

像这样,我需要找到任期明智的 4 范围来查找流失率。

【讨论】:

  • 它正在工作。但我需要一些确认,比如 2008 年它有第一季度的权利,它包含一月、二月、三月?还是随机的?
  • @sangeethasivakumar - 是的,它包含jan, feb, march
  • 你能告诉我如何交叉验证吗?
  • @sangeethasivakumar + 给我一秒钟。
  • 请慢慢来
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-04
  • 1970-01-01
  • 1970-01-01
  • 2020-04-13
相关资源
最近更新 更多