You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

计算会员每次购买的季度间隔及全体会员总平均间隔

会员购买间隔及总平均计算方案

步骤1:数据整理与排序

首先需要将每个会员的购买记录按时间先后排序,把Year和Quarter转换成统一的季度序号(公式:Year*4 + Quarter),方便后续计算间隔。例如:

  • 2020年第1季度 → 2020*4+1=8081
  • 2021年第1季度 → 2021*4+1=8085

步骤2:计算单个会员的购买间隔

对每个会员排序后的购买记录,计算相邻两次购买的季度序号差值,得到单次购买间隔:

  • 示例中会员10521321仅有两次购买,序号差为4,对应间隔4个季度
  • 会员113213213有4次购买,得到3个间隔:4、5、3个季度

步骤3:计算单个会员的平均购买间隔

将该会员的所有间隔求和,除以间隔的数量:

  • 会员113213213:(4+5+3)/3=4个季度

步骤4:计算全体会员的总平均购买间隔

有两种统计逻辑,可根据业务需求选择:

  • 逻辑一:将所有会员的平均购买间隔求和,再除以会员总数
  • 逻辑二:直接将所有会员的所有间隔求和,再除以间隔的总数量

SQL实现示例

假设你的表名为member_purchases,字段为MemberNo、Year、Quarter、Purchase,代码如下:

-- 1. 生成会员购买季度序号并排序
WITH ranked_purchases AS (
    SELECT 
        MemberNo,
        Year*4 + Quarter AS quarter_seq,
        ROW_NUMBER() OVER(PARTITION BY MemberNo ORDER BY Year, Quarter) AS purchase_rank
    FROM member_purchases
    WHERE Purchase > 0 -- 过滤有效购买记录
),
-- 2. 计算相邻购买的间隔
purchase_intervals AS (
    SELECT 
        curr.MemberNo,
        curr.quarter_seq - prev.quarter_seq AS interval_quarters
    FROM ranked_purchases curr
    JOIN ranked_purchases prev 
        ON curr.MemberNo = prev.MemberNo 
        AND curr.purchase_rank = prev.purchase_rank + 1
),
-- 3. 计算单个会员的平均间隔
member_avg_intervals AS (
    SELECT 
        MemberNo,
        AVG(interval_quarters) AS avg_interval
    FROM purchase_intervals
    GROUP BY MemberNo
)
-- 4. 计算全体总平均(二选一)
-- 逻辑一:会员平均间隔的平均值
SELECT AVG(avg_interval) AS overall_avg_interval FROM member_avg_intervals;

-- 逻辑二:所有间隔的总平均值
-- SELECT AVG(interval_quarters) AS overall_avg_interval FROM purchase_intervals;

Python实现示例(基于Pandas)

import pandas as pd

# 读取数据(替换为你的数据源路径)
df = pd.read_csv('member_purchases.csv')

# 生成统一季度序号
df['quarter_seq'] = df['Year'] * 4 + df['Quarter']

# 过滤有效购买记录
df = df[df['Purchase'] > 0]

# 按会员分组并按时间排序
df_sorted = df.sort_values(by=['MemberNo', 'Year', 'Quarter'])

# 计算每个会员的相邻购买间隔
df_sorted['interval_quarters'] = df_sorted.groupby('MemberNo')['quarter_seq'].diff()

# 剔除无前置记录的首条购买数据
valid_intervals = df_sorted.dropna(subset=['interval_quarters'])

# 计算单个会员的平均间隔
member_avg = valid_intervals.groupby('MemberNo')['interval_quarters'].mean()

# 计算全体总平均(二选一)
overall_avg_member = member_avg.mean()
overall_avg_all = valid_intervals['interval_quarters'].mean()

print(f"全体会员总平均(会员均值的平均):{overall_avg_member:.2f} 季度")
print(f"全体会员总平均(所有间隔的平均):{overall_avg_all:.2f} 季度")

内容的提问来源于stack exchange,提问作者Yen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 04:25:03