LTV预测 - 零膨胀对数正态模型 (ZILN)
Skill-LTV-Prediction-ZILN · 06-增长模型
experimentforecastingoptimization广告与投放客服与VOC推荐与搜索WF-B 广告优化WF-C 客服分诊WF-H 复购增长
收录于用户增长决策手册
年化 ROI100-200 万
实现难度⭐⭐⭐☆☆
业务优先级⭐⭐⭐☆☆
业务视角
适用角色CEO / 增长负责人 · CMO · 财务负责人
适用平台Amazon · TikTok Shop · DTC 独立站 · 多市场
什么情况下用公司增长放缓,不知道是市场饱和还是产品问题还是获客太贵;老板要 12 个月 GMV 预测,只能靠感觉
成功是什么样的建立增长拆解模型找到瓶颈,预测未来 6-12 个月营收区间,支撑融资/战略会议
业务痛点
1. 解决的问题
我们通过 Facebook/TikTok 广告获取了大量北美新客,但并非所有新客都有长期价值
2. 核心算法逻辑
LTV (Customer Lifetime Value, 客户生命周期价值) 预测是增长模型的核心能力。传统回归方法难以处理 LTV 分布的两个典型特征:零膨胀(大量用户只购买一次)和长尾分布(少数高价值用户贡献大部分收入)。
3. 业务应用场景
业务问题: 我们通过 Facebook/TikTok 广告获取了大量北美新客,但并非所有新客都有长期价值。部分用户只购买一次基础款吸奶器就流失了,而另一部分会复购配件、升级高端款,LTV 可达初购金额的 3-5 倍。我们需要在首次购买时就预测用户的 LTV,以决策是否值得继续投放广告维护关系。
数据要求: - 用户画像:年龄、是否新手妈妈、收入水平、地域 - 首购行为:购买产品 SKU、客单价、是否使用优惠券 - 行为特征:注册到首购间隔、浏览页面数、加购次数 - 渠道特征:获客渠道、广告素材、落地页类型 - 标签:历史 LTV(6 个月/12 个月)、是否复购 - 数据量:建议至少 5,000+ 有完整 LTV 历史的用户
预期产出: - LTV 点估计:每个新客的预测生命周期价值 - 流失概率:该用户成为"一次性购买者"的概率 - 价值分层: - 高 LTV 潜力(Top 20%):重点运营,推送会员计划 - 中 LTV 潜力(中间 50%):标准运营,定期触达 - 低 LTV 潜力(Bottom 30%):降低维护成本
4. 输入数据要求
请查看原始代码模板获取输入规格。
5. 输出结果
请查看原始代码模板获取输出规格。
6. 业务价值 / ROI
- 数据要求:需要 6-12 个月的用户行为数据
- 技术门槛:中等,需理解概率分布和神经网络
- 工程复杂度:中,PyTorch 实现直观
- 维护成本:中,需定期重新训练模型
- 业务价值极高:LTV 是增长模型的核心指标
- 方法成熟:Google Research 开源,业界广泛验证
7. 代码模板
代码块数量:2 · 路径:未检测到
"""
LTV预测 - 零膨胀对数正态模型 (ZILN)
用于母婴出海电商新客价值预测和会员等级划分
基于 Google Research 的 ZILN 实现
"""
import numpy as np
import pandas as pd
import torch
import torch.nn as nn
import torch.optim as optim
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
import warnings
warnings.filterwarnings('ignore')
class ZILNModel(nn.Module):
"""
Zero-Inflated Lognormal 神经网络模型
"""
def __init__(self, input_dim, hidden_dims=[128, 64, 32], dropout_rate=0.2):
"""
初始化 ZILN 模型
Args:
input_dim: 输入特征维度
hidden_dims: 隐藏层维度列表
dropout_rate: Dropout 率
"""
super(ZILNModel, self).__init__()
# 构建共享网络层
layers = []
prev_dim = input_dim
for hidden_dim in hidden_dims:
layers.extend([
nn.Linear(prev_dim, hidden_dim),
nn.ReLU(),
nn.Dropout(dropout_rate)
])
prev_dim = hidden_dim
self.shared_layers = nn.Sequential(*layers)
# 三个输出头
# 1. 流失概率 (churn probability)
self.churn_head = nn.Linear(prev_dim, 1)
# 2. 对数均值 (mu)
self.mu_head = nn.Linear(prev_dim, 1)
# 3. 对数标准差 (sigma) - 使用 softplus 保证正值
self.sigma_head = nn.Linear(prev_dim, 1)
def forward(self, x):
"""
前向传播
8. 论文来源
- 1912.07753
- 2411.15944
- 2601.13013