【问题标题】:Calculate repeat purchase probability计算重复购买概率
【发布时间】:2021-06-03 22:18:04
【问题描述】:

我想根据以下示例计算重复购买概率。我想在 Pandas DataFrame 上运行此计算,但我很难弄清楚如何为每一行增量地执行此操作。

例子:

  • 下单的客户数量:1,000
  • 下2单的客户数:350
  • 下3单的客户数:130

在此示例中,客户在其一生中下过一个订单到下第二个订单的重复订单概率为:(350 + 130) / (350+130+1,000) = 32.43%

这是一个使用 iloc 获得与示例相同的结果的示例,但它不会遍历数据帧。

lst = [[1, 1000], [2, 350],
       [3, 130], [4,70], [5,30]]
    
df = pd.DataFrame(lst, columns =['order', 'order_total'])
df['repeat_purchase_prob'] = df['order_total'].iloc[1:].sum() / df['frequency_total'].iloc[0:].sum()

这是我读过的帖子的链接:https://blog.digitalj2.com/understand-the-power-of-repeat-order-probability

最终结果应该是这样的:

order order_total repeat_purchase_prob
1 1000 0.37
2 350 0.40
3 130 0.43

等等..

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    尝试反向 cumsum 然后 shift 并划分:

    rcs = df.loc[::-1, 'order_total'].cumsum()[::-1]
    df['repeat_purchase_prob'] = rcs.shift(-1) / rcs
    

    df:

       order  order_total  repeat_purchase_prob
    0      1         1000              0.367089
    1      2          350              0.396552
    2      3          130              0.434783
    3      4           70              0.300000
    4      5           30                   NaN
    

    可选用0 填充NaN 通过div

    df['repeat_purchase_prob'] = rcs.shift(-1).div(rcs, fill_value=0)
    

    df:

       order  order_total  repeat_purchase_prob
    0      1         1000              0.367089
    1      2          350              0.396552
    2      3          130              0.434783
    3      4           70              0.300000
    4      5           30              0.000000
    

    完整的工作示例:

    import pandas as pd
    
    lst = [[1, 1000], [2, 350], [3, 130], [4, 70], [5, 30]]
    
    df = pd.DataFrame(lst, columns=['order', 'order_total'])
    
    rcs = df.loc[::-1, 'order_total'].cumsum()[::-1]
    df['repeat_purchase_prob'] = rcs.shift(-1) / rcs
    
    print(df)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多