Skip to content

Latest commit

 

History

History
108 lines (75 loc) · 5.68 KB

README.md

File metadata and controls

108 lines (75 loc) · 5.68 KB

客户价值、复购与生命周期分析

本项目使用UCI Online Retail交易数据,研究一家英国在线零售商的客户价值、复购行为和生命周期,并将结果整理为SQL、pandas Notebook、统计分析、预测模型和Power BI看板。

完整分析见正式报告。

研究问题

企业应如何识别高价值客户、理解客户复购与生命周期,并据此制定客户分层运营策略?

主要结果

  • 去重并排除取消、负数量和非正价格记录后,共得到524,878条有效销售明细、19,960张订单和£10,642,110.80有效销售额。
  • 4,338名已知客户中,核心活跃客户占12.70%,贡献50.91%的已知客户销售额;客户价值和总体销售均呈明显的头部集中。
  • 双快照分析中,核心活跃、稳定复购、高频待唤回、近期低频和沉睡低频客户的后续三个月购买率依次为95.60%、79.45%、67.30%、52.52%和39.30%,与客户运营优先级一致。
  • Kaplan–Meier估计的30、60和90天累计复购概率分别为22.48%、38.02%和48.01%。首单金额较高与更快复购相关,但不能解释为因果关系。
  • 首单后60天复购模型的时间外ROC-AUC仅为0.5782。对于存量客户,仅按历史订单数排序已经达到0.7214,完整模型达到0.7391,增量只有0.0177;在本次有限的模型搜索中,随机森林没有优于逻辑回归,也没有证明其复杂度具有实际业务价值。
  • 2011年11月同时达到观察期内销售额和订单数的最高点。2011年12月仅包含1日至9日数据,不与完整月份直接比较。

Power BI看板

经营总览汇总有效销售额、有效订单、已知客户、平均订单金额和复购客户率,并提供日期和国家筛选。

Power BI经营总览

客户与市场结构页展示生命周期分层销售额和国家销售额Top 10,并提供生命周期分层筛选。

Power BI客户与市场结构

本地PBIX文件位于outputs/powerbi_dashboard/dashboard.pbix。outputs/不纳入版本控制,仓库通过截图展示看板结果。

分析流程

阶段 主要内容 交付物
数据审计 环境检查、重复值、缺失值、取消和异常交易审计 sql/00_environment_check.sql、sql/01_data_audit.sql
统一口径 建立有效销售、客户销售和取消交易视图 sql/02_analysis_views.sql
经营分析 销售规模、客户覆盖、复购、高价值客户和价值集中度 sql/03_customer_business_analysis.sql
客户分层 RFM评分、生命周期分层和金额层级 notebooks/01_rfm_analysis.ipynb
生命周期 cohort月度活跃率、观察窗口和双快照客户迁移 notebooks/02_cohort_analysis.ipynb
稳健性分析 Wilson区间、购买间隔、Bootstrap和阈值敏感性 notebooks/03_statistical_robustness.ipynb
生存分析 Kaplan–Meier、Log-rank、Cox模型和假设诊断 notebooks/04_survival_analysis.ipynb
复购预测 首单后第二单预测、时间外测试和敏感性分析 notebooks/05_repurchase_prediction.ipynb
存量客户预测 Frequency业务基准、滚动快照、时间隔离、模型对照和客户聚类Bootstrap notebooks/06_existing_customer_prediction.ipynb

技术栈

  • MySQL 8和DataGrip
  • Python、pandas、NumPy和SQLAlchemy
  • SciPy、lifelines和scikit-learn
  • Matplotlib、Seaborn和Power BI

核心口径

  • 每行是一张订单中的一条商品明细,订单数使用COUNT(DISTINCT InvoiceNo)。
  • 原始表online_retail.online_retail保持只读,清洗通过视图和派生数据完成。
  • 有效销售先完全去重,再保留Quantity > 0、UnitPrice > 0且订单号不以C开头的记录。
  • CustomerID缺失记录参与总体销售分析,但不进入客户级分析。
  • RFM快照日期固定为2011年12月10日;复购客户定义为至少拥有两张不同有效订单。
  • 金额单位为英镑。

本地复现

1. 准备数据和数据库

从UCI Online Retail下载数据,将原始数据导入MySQL数据库online_retail的online_retail表。仓库不包含原始Excel或CSV。

依次运行:

  1. sql/00_environment_check.sql
  2. sql/01_data_audit.sql
  3. sql/02_analysis_views.sql
  4. sql/03_customer_business_analysis.sql

sql/00_import_precision_fix.sql只用于修正特定导入精度问题,不应在未确认问题时直接执行。

2. 配置Python环境

python -m venv .venv
.\.venv\Scripts\Activate.ps1
pip install -r requirements.txt
Copy-Item .env.example .env

在本地.env中填写MySQL连接信息。.env已被Git忽略,不要提交密码。

3. 运行Notebook

按照01至06的编号顺序运行notebooks/中的Notebook。data/exports/中的CSV是Notebook之间的本地派生缓存,不是新的数据源,也不纳入版本控制。

项目结构

sql/            可复现的MySQL审计、视图和经营分析
notebooks/      pandas、统计、生存分析和预测模型
report/         正式分析报告
figures/        报告与README使用的图表和看板截图
outputs/        本地Power BI文件和数据包,不纳入版本控制

解释边界

  • 数据来自单一零售商,结论不能直接推广到整个行业。
  • 数据缺少商品成本,客户销售额不能等同于利润。
  • 数据缺少营销触达、访问流量和实验对照,不能进行营销因果推断。
  • 观察窗开始前的客户历史不可见,期末尚未复购的客户还受到右删失影响。
  • 数据缺少退货原因,不能判断取消或退货的具体业务原因。