订阅业务怎么建模?扣款、续费、取消和会员到期是一回事吗?
面试怎么回答
我会把订阅合同、支付退款事件和权益有效区间分开建模。取消自动续费通常改变未来续订意愿,是否立即终止权益要看产品规则,不能直接等同会员流失。有效会员按观察时点与权益区间判断,付费人数按成功资金事件去重,续费按周期关系定义。试用、宽限期、退款和恢复购买需要独立路径,指标可追溯到事件与规则版本。
先把这段讲顺;面试官追问时,再展开下面的原理和细节。
详细讲解
用户今天关闭自动续费,但会员还有20天才到期。运营问他算不算会员,财务问这月有没有扣款,产品问下月会不会续订。三个问题都围绕“订阅”,却不能用同一个 status 字段给出答案。
订阅合同、资金事件和权益区间应分开记录;取消续订不一定立即失去权益,付费也不自动等于已生效。
先拆开合同、资金与使用资格
订阅合同表达用户订了什么产品、以什么周期续订以及当前续订设置。它不是每一笔扣款本身。
资金事件记录扣款成功、失败、退款等动作。一次续费可能有多次失败重试,成功扣款次数、扣款尝试次数和订阅人数分别是不同指标。
权益区间表达用户什么时候可以使用功能。试用、赠送、宽限期可能产生没有当期成功扣款的权益;延迟生效的购买也可能有扣款但暂未开始权益。
这些差异由具体产品和渠道协议决定。本文给的是数仓建模框架,不把某个平台的规则当成所有订阅产品的共同约定。
取消续订与立即终止,要保留不同事件
关闭自动续费,通常是在未来不再自动扣下一周期费用;立即终止权益,则会改变当前有效区间。它们即使在界面上都叫“取消”,也不该被统一压成一个状态。
恢复续订可能只是重新打开下期扣款开关,并不新增长一段当前权益。恢复购买也可能是找回已有权益,而非新的一次成交。
应保留原始事件类型、渠道订阅标识、周期标识和生效时间,再映射成统一分析含义,避免把渠道差异在采集层提前抹掉。

会员存量最好按观察时点计算
给定时点,满足权益开始不晚于该时点且尚未结束的记录,可以进入对应有效会员口径;区间通常采用左闭右开,避免相邻周期交界重复。
但一个用户可能有多个产品或重叠权益。统计产品订阅数可以分产品,统计独立会员人数则要按统一用户去重,不能把多个有效区间直接当多个人。
按日统计时,还要定义是日末会员、当天任意时刻拥有权益,还是会员服务时长。三者会得出不同结果,不能统称日会员数后自由切换。
一个典型场景:取消按钮让会员数提前下降
比如收到取消续订事件后,直接把当前会员状态设为失效。报表当天会员数明显下降,但用户仍然能够正常观看付费内容。
最初怀疑应用权限缓存没有刷新,核对协议后发现当前周期权益本来就应持续到期。根因是把未来续费设置当成当前权益状态。
旧验收只检查“取消事件是否进入数仓”,没有验证取消后的权益结束时间。修复应保留取消续订时间,并保持已确认的当前权益区间,除非另有即时撤销事件。
测试中加入取消后到期、取消后恢复、退款撤销和部分退款等情境,才能证明模型处理的是完整生命周期,而不是按钮名称。
续费率也不能只数成功支付
续费率的母集合应是到达续费机会、符合统计条件的订阅周期。分子是这些周期按规则完成续费,而不是所有当期成功扣款。
宽限期或补扣可能使结果晚于原定续费日才确定。需要区分暂估与成熟周期,避免把尚在重试中的周期提前认定为永久流失。
退款是否撤销权益、是否影响续费成功口径,应明确记录。资金报表与权益报表不必每一天都相等,但差异应该可以沿事件解释。
涉及收入确认、税费和渠道结算时,还要遵循实际财务口径,不能从权益天数直接推出法定收入。数仓应保留计算依据,而不是擅自制定会计规则。
好的订阅模型,是让“还在用、刚付钱、下月想不想续”各有准确答案,再把它们联系起来分析。