快速实验篇(B17)B组实验总结报告:电商用户行为数据分析的完整实践

小肥柴的Hadoop之旅 快速实验篇(B17)B组实验总结报告:电商用户行为数据分析的完整实践

数据源:user_visit_action.txt(18.6 MB,180570 行,13 字段)

技术栈:Hadoop MR + Hive on MR + 本地 Python

集群:1 master + 3 worker,每节点 2GB

实验周期:B01--B16,共 16 个实验


1. 这份报告的写作目的

B 组实验的起点是一份电商用户行为日志,终点是一套关于"这份数据能做什么、不能做什么、边界在哪"的完整认知;中间经历 16 个实验,覆盖数据治理、描述性分析、关联分群、方法论演示、建模预测五个阶段。

报告要回答三个问题:

  1. 电商平台数据应该分析哪些项目?
  2. 每个项目的分析目的是什么,对应哪个实验,结果如何?
  3. 这些实验共同揭示了什么规律?

报告内容以实际执行结果为准,所有数字来自各实验的日志和产出表,不引用未验证的推断。


2. 实验设计思路

B 组实验的设计遵循一条主线:从数据底座出发,逐层向上,每一层都为下一层提供输入,同时在每一层检验上一层结论是否成立。

结构图如下。

text 复制代码
                        ┌──────────────────────────────────────┐
                        │  原始日志 user_visit_action.txt       │
                        │  180570 行 / 13 字段 / 11 天          │
                        └──────────────────┬───────────────────┘
                                           │
              ┌────────────────────────────┴────────────────────────────┐
              │              第一层:数据治理与底座                       │
              │  B01 原始日志质量审计(MR Counter 画像)                 │
              │  B02 DWD 生产级升级(分区 + ts + seq_in_session)        │
              │  产出:dwd_user_behavior + 4 张多值子表                  │
              └────────────────────────────┬────────────────────────────┘
                                           │
              ┌────────────────────────────┴────────────────────────────┐
              │              第二层:描述性业务分析                       │
              │  B03 行为漏斗   B04 品类排名   B05 品类活跃 Session      │
              │  B06 页面跳转   B07 会话序列   B08 搜索词   B09 城市维度  │
              │  产出:漏斗/品类/页面/会话/搜索/城市 6 个维度的 ADS 表    │
              └────────────────────────────┬────────────────────────────┘
                                           │
              ┌────────────────────────────┴────────────────────────────┐
              │              第三层:关联与分群                           │
              │  B10 品类共现与关联规则                                   │
              │  B11 用户 RFM 与聚类分群                                  │
              │  产出:共现矩阵、关联规则、用户分群标签                    │
              └────────────────────────────┬────────────────────────────┘
                                           │
              ┌────────────────────────────┴────────────────────────────┐
              │              第四层:方法论演示三部曲                     │
              │  B12 异常检测(Z-score + 卡方 + iForest)                │
              │  B13 路径挖掘(马尔可夫 + n-gram + 聚类 + 规则)          │
              │  B14 用户标签体系(PCA/LDA/t-SNE/K-means/DBSCAN)        │
              │  主题:简单方法 ≥ 高级方法;合成数据铁证                   │
              └────────────────────────────┬────────────────────────────┘
                                           │
              ┌────────────────────────────┴────────────────────────────┐
              │              第五层:建模与预测                           │
              │  B15 品类推荐系统(CF vs 随机/热门/规则)                 │
              │  B16 用户级预测可行性审计(流失分类 + 价值回归)           │
              │  产出:推荐指标表、预测可行性表、基线对比表                │
              └────────────────────────────┬────────────────────────────┘
                                           │
              ┌────────────────────────────┴────────────────────────────┐
              │              第六层:收口                                 │
              │  B17 总结与工程复盘(本报告)                             │
              └─────────────────────────────────────────────────────────┘

六层结构的设计逻辑是:先有底座,再有描述,再有挖掘,最后才建模。 每一层都在检验上一层的前提是否成立。如果上层前提不成立,下一层的实验方向就要调整。

这个设计在 B 组执行过程中被反复验证是必要的。B03 发现品类均匀,B04 就调整了排名策略;B09 发现城市不可分,B10 就不再按城市切片;B15 发现推荐前提不成立,B16 就改为可行性审计。每一层的结论直接影响下一层的方向。


3. 第一层:数据治理与底座(B01--B02)

3.1 B01 原始日志质量审计

分析目的:在任何分析开始之前,先回答一个基础问题:这份数据能不能用,有哪些坑。

做法:用 MapReduce 写一个清洗程序,在解析每一行的同时,用 Counter 记录 16 个审计维度的统计量。Counter 是 MR 提供的分布式计数器,不占输出文件,不影响主逻辑,是数据画像的免费工具。

结果:六条假设中,两条成立,四条被推翻。

假设 结果
H1 结构完整性 成立。无空行、无字段数异常、无真缺失
H2 行为互斥 成立。四类行为互斥,multi=0,unclassified=0
H3 单日数据 推翻。实际覆盖 11 天
H4 品类-产品配对 推翻。80% 的订单品类与产品数组长度不等
H5 文件顺序=时间顺序 推翻。2.16% 的行在 session 内时间倒流
H6 脏数据多 推翻。格式校验全部为 0

关键教训:审计不是被动找问题,是主动检验假设。四条推翻对应四次设计调整:日期 Counter 从硬编码改为分布画像,多值子表从 1 张拆为 4 张,序列分析必须显式排序。

3.2 B02 DWD 生产级升级

分析目的:把 B01 的"能用"升级成"好用"。B01 的主表是非分区表,时间字段是字符串,session 内没有序号。这三个问题会让下游 10 个项目各自处理一遍,口径分叉。

做法:在 DWD 层一次性解决三个公共问题

  1. 按 dt 分 11 个区,按天查询不再全表扫。
  2. 新增 ts timestamp,时间差分析统一口径。
  3. 新增 seq_in_session,按 action_time, raw_line_id 双键排序,序列分析不再各自写窗口函数。

结果:主表 180570 行,11 个分区,5 个关键不变量全部通过:总行数守恒、分区数 11、seq 无重复、seq 从 1 开始、ts 无 NULL。四张子表与 B01 对照完全一致。

关键教训:公共计算要前置。B06 页面单跳、B07 会话序列、B12 异常检测都需要时间差和页序,这些计算在 B02 做一次,比在三个项目里各做一次更可靠。


4. 第二层:描述性业务分析(B03--B09)

这一层回答的问题是:这份数据在业务维度上呈现出什么形态。

七个实验从漏斗、品类、页面、会话、搜索、城市六个角度切入。

4.1 B03 用户行为漏斗与转化率

分析目的:原设计要回答"搜索→点击→下单→支付的漏斗流失在哪"。这个问题的前提是搜索是漏斗入口。

结果:前提不成立。73.5% 的 session 是先点击后搜索,搜索和点击没有稳定顺序。搜索不是漏斗入口,是独立的用户意图信号。

真正的漏斗是"点击→下单→支付"。Session 层点击到下单转化率 58.5%,下单到支付 82.6%。

同时发现 1128 个 session 出现"支付但无下单",占支付 session 的 27.5%。这在真实电商里不可能,支付必然跟着下单。

输出 :ads_funnel_overall(4 行)、ads_funnel_session(8744 行)、ads_funnel_session_ordered(8744 行)、ads_funnel_category(20 行)。

4.2 B04 热门品类 Top10 与加权排名

分析目的:原设计要按点击量排 Top10,再按"点击×20% + 下单×30% + 支付×50%"做加权排名。

结果:B03 已经发现品类分布极端均匀,20 个品类的点击量全部在 5438 到 5687 之间,波动只有 2.3%。在这个分布上做排名,Top1 和 Bottom1 只差 4.6%,排名差异不具业务意义。

加权排名同样失效。归一化后的综合分全部在 0.050093 到 0.05125 之间,20 个品类的平均分就是 0.05,所有品类都在平均值附近。

唯一有区分度的是 order_to_pay_rate,范围 62.64% 到 76.04%,差异 13.4 个百分点。品类 15 支付意愿最高,品类 5 最低。

输出 :ads_category_summary(20 行)、ads_category_top10_rule1(10 行)、ads_category_top10_rule2(10 行)、ads_category_conversion_rank(20 行)。

4.3 B05 每个品类 Top10 活跃 Session

分析目的:从品类下钻到 session,看每个品类里哪些 session 贡献最大。

结果:(1)100 个 Top10 席位只来自 65 个不同的 session。其中 15 个 session 跨 2 个以上品类进入 Top10。同一个 session 可以是多个品类的 Top1。(2)Top10 内部区分度很低。25 组(品类 × total_events)出现并列,Top1 最小事件数与 Rank10 最大事件数重叠,都是 10。

输出 :ads_session_category_activity(87836 行)、ads_category_top10_session(100 行)。

4.4 B06 页面单跳转化率

分析目的:看用户在页面之间如何跳转,哪些路径转化率高。

结果:(1)50 个页面,2500 条跳转路径全部出现,是完整的 50×50 满矩阵。每条路径的跳转次数在 40 到 91 之间,极差只有 2.3 倍。95.3% 的路径样本量 ≥ 50。(2)转化率有区分度。订单转化率范围 62.5% 到 98.3%,支付转化率范围 50.8% 到 89.4%。这是 B 组第一次出现强区分度指标。但 Top10 高转化路径内部只有 5 个百分点的差距,且样本量高度接近。

一次真实的 OOM :窗口函数在 2GB 集群上触发了 OOM,DataNode 和 NodeManager 被系统杀掉。修复方案是显式设置容器内存,收紧 io.sort.mb,限制 reducer 数。这套内存控制参数被后续所有窗口函数脚本继承。

输出 :ads_page_transition(158026 行)、ads_page_single_step_conversion(2500 行)。

4.5 B07 Session 会话化与行为序列

分析目的:把每个 session 的行为拼成完整序列,看有哪些常见路径模式。

结果:这是 B 组第一个出现强区分度业务发现的实验。

Session 长度是长尾分布。中位数 13,最大值 203,相差 15.6 倍。39 个长度 ≥ 100 的深层 session 全部转化,转化率 100%。1640 个长度 < 5 的极短 session 只有 25.8% 转化。全量基准是 56.9%。100% 和 25.8% 之间的差距是 4 倍。

同时发现一个分布悖论:n-gram 频次是长尾的,click>click 占 44.6%;但 n-gram 的条件转化率是均匀的,所有 2-gram 的后续下单率都在 52.8% 到 56.9% 之间。频次长尾和条件概率均匀同时成立。

输出 :ads_session_sequence(8744 行)、ads_session_ngram(80 行)。

4.6 B08 搜索词分析

分析目的:原设计要做搜索词 TopN 排行榜和用户搜索偏好。

结果:搜索词只有 6 个。100 个用户每个人都搜过全部 6 个词。排行榜和偏好都做不了。

改用 event 级转化率分析。搜索后点击率 68.9% 到 71.0%,搜索后下单率 18.6% 到 19.8%,搜索后支付率 13.4% 到 14.3%。6 个词的转化率差异全部小于 2 个百分点。

核心方法论改进:转化率必须用 event 级,不能用 session 级。session 级算法下,同一个订单会被同时算给 session 里搜过的每一个词,导致转化率虚高 3 倍。这个发现是 B08 最重要的方法论贡献。

输出 :ads_search_keyword(6 行)、ads_search_summary(16 行)。

4.7 B09 城市维度分析

分析目的:原设计要做城市 × 品类偏好分析,看不同城市偏好哪些品类。

结果

26 个城市,每个城市的 user_cnt 都是 100。全部 100 个用户同时出现在全部 26 个城市里。这在真实电商里不可能,说明 city_id 是行为级随机分配字段,与用户无绑定。

品类分布完全均匀。每个城市的点击份额最大值都在 0.053 到 0.059 之间,无一超过 0.06。三套归一化熵全部超过 0.99。

方法论沉淀 :均匀随机字段识别的三个条件:第一,每个取值覆盖全部用户,user_cnt 恒定;第二,归一化熵 ≥ 0.99;第三,最大份额 ≤ 品类数倒数的 1.2 倍。三条同时满足即可判定为均匀随机字段。

输出 :ads_city_category_dist(520 行)、ads_city_summary(26 行)。


5. 第三层:关联与分群(B10--B11)

5.1 B10 品类共现与关联规则

分析目的:回答"哪些品类经常被一起买",用于捆绑销售和搭配推荐。

结果:购物篮平均 2.98 个品类,最大 5 个。190 对品类对全部有共现,没有一对为零,是完全稠密的共现矩阵。共现归一化熵 0.999616,比单品类分布更均匀。

FP-Growth 输出 210 个频繁项集,其中 20 个 1-项集,190 个 2-项集,3-项集为 0。380 条规则的提升度中位数 0.9428,低于 1.0。只有 4 条规则的提升度超过 1.05,最高 1.0738。

提升度小于 1 的解释:购物篮容量约束下,提升度小于 1 是正常现象。假设 20 个品类完全均匀,每个购物篮固定装 3 个品类,即使两个品类完全独立,提升度也会是 0.70 左右。所以提升度中位数低于 1 不是负相关,是几何约束。

算法切换:原设计用 Apriori。探测发现共现矩阵完全稠密后,改用 FP-Growth。输出结果与 Apriori 完全一致,但扫描数据次数从"最大项集长度次"降到 2 次,避免候选集膨胀。

输出 :ads_category_cooccurrence(190 行)、ads_category_rules(380 行)。

5.2 B11 用户 RFM 与聚类分群

分析目的:回答"高价值、潜力、流失用户是谁"。

结果"R 维度完全均匀。所有 100 个用户的 R 都等于 1,标准差为 0。每个用户在 07-26 这天都有行为。

F 和 M 有区分度。F 范围 977 到 2327,M 范围 78 到 233。但 F 和 M 的皮尔逊相关系数是 0.8484,高度正相关,数据本质是一维的。

K-means 在 k=2 时达到最优,silhouette=0.5161。两群分别是低价值 40 人(F 均值 1408,M 均值 122)和高价值 60 人(F 均值 1840,M 均值 167.5)。Mann-Whitney 检验 p 值小于 1e-15。

高价值用户占比 60%,远高于真实电商的二八原则。

输出 :ads_user_rfm(100 行)、ads_user_cluster(100 行)。


6. 第四层:方法论演示三部曲(B12--B14)

这一层的定位不是"找业务答案",而是"演示方法能做什么、不能做什么"。三个实验共享同一个主题:简单方法 ≥ 高级方法。

6.1 B12 异常流量与刷单识别

分析目的:原设计要识别刷单和异常流量。

探测结论:数据是合成的,不存在真实业务异常。四条铁证:session 内相邻行为时间间隔最大 11 秒;24 小时分布均匀;100 用户全 10 天活跃;支付无下单比例 27.75%。

B12 因此改为方法论演示。

三方法分工

Z-score 定位可疑候选,卡方用统计检验验证,iForest 从多维角度独立复核。

实测结果:搜索词"手机"的 Z 值为 -2.2306,卡方贡献 1802.5,占卡方总值的 83%。卡方总值 2174.49,是临界值 11.07 的 196 倍。iForest 从 11 维特征标记 415 个 session 异常,占 5.00%。V2 候选 30 个被 iForest 命中 11 个,占 36.7%。

敏感性分析:iForest 的 contamination 从 0.01 变到 0.10,异常数从 83 变到 830,V2 候选命中从 1 变到 25。这说明 iForest 的输出不是"客观异常清单",而是"主观设定的前 N% 离群点"。

输出 :ads_anomaly_zscore(36 行)、ads_anomaly_iforest(8744 行)、ads_anomaly_summary(8750 行)。

6.2 B13 用户行为路径挖掘

分析目的:从 session 序列里找出反复出现的路径模式。

四工具分工:马尔可夫链验证是否有条件结构,n-gram 找局部模式,路径聚类压缩路径,规则分组给出主结论。

结果

马尔可夫链:4×4 转移矩阵四行几乎完全一致。不管当前行为是什么,下一步到 click 的概率都是 0.663 到 0.671。条件偏差最大值 0.0042,KL 散度都在 1e-5 量级。行为序列近似独立随机。

n-gram 提升度:含 search 的 n-gram 提升度都大于 1,search>search>search 最高 1.337,click>click>click 最低 1.149。搜索密度越高转化率越高。

路径聚类:K-means 最优 k=13,silhouette 只有 0.328,属于弱结构。聚类边界和规则分组完全重合,没有发现新结构。

规则分组:4 类路径类型,完整转化 2970 个(34.0%),纯浏览 2626 个(30.0%),下单不付 2007 个(23.0%),支付无下单 1141 个(13.0%)。4 类的 user_cnt 都是 100,每个用户都派发了全部 4 类 session。

路径长度与转化率:6 个分桶全部单调,下单率从 1-5 桶的 18.5% 升到 100+ 桶的 100%。跨度 5.4 倍。

输出

ads_path_markov(4 行)、ads_path_type(4 行)、ads_path_cluster(8744 行)、ads_path_ngram_lift(80 行)、ads_path_seqlen_conv(6 行)、ads_path_kmeans_scan(14 行)、ads_path_rule_vs_kmeans(4 行)。

6.3 B14 用户标签体系构建

分析目的:原设计要从 20 多个维度做用户画像。

结果

PCA:前 3 个主成分解释 63.81% 方差。三类质心沿 PC1 有 4.4 单位偏移,但点云严重重叠。存在弱梯度,无清晰分群。

LDA:三类在 LDA 2D 上看起来分得很开,但这是循环论证。value_tier 本身是从 f_cnt 和 m_cnt 派生的,LDA 只是在验证一个已知事实。

t-SNE:三种 perplexity 和随机种子下,分团方向完全不同。分团是算法产物,不是数据属性。

K-means:最优 k=2,silhouette=0.2144,基本无结构。K-means 与 value_tier 的 ARI 只有 0.318,弱一致。

DBSCAN:27 个参数组合全部失效,要么全噪声要么全一簇。

核心方法论发现:没有外部标签时,监督降维必然自证。LDA 的"分开"来自标签,标签又来自特征,这是同义反复。打破循环的唯一方法是有不来自特征的外部标签,但这份数据没有。

输出

ads_user_feature_wide(100 行)、ads_user_label(100 行)、ads_user_label_summary(11 行)、ads_user_pca(100 行)、ads_user_lda(100 行)、ads_user_tsne(100 行)、ads_user_kmeans_scan(9 行)、ads_user_dbscan_scan(27 行)、ads_user_agreement_metrics(20 行)、ads_user_cluster_label(100 行)。


7. 第五层:建模与预测(B15--B16)

7.1 B15 品类推荐系统

分析目的:原设计要跑协同过滤、规则推荐、混合推荐,比较离线指标。

信号审计:推荐系统能成立依赖三个前提:用户有偏好差异、物品有区分度、存在未观测项。

三个前提全部不成立。矩阵密度 1.000,训练集 2000 个格子全部非零。用户熵均值 0.9884,接近 1.0。品类份额 Top1 只有 0.052,均匀期望是 0.050。基尼系数 0.0115,接近 0。

六方法对照

Random、Popular、UserHistory、RuleBased、UserCF、ItemCF 六种方法。

K=10 时 HitRatio 极差仅 0.009。Random 0.926,UserCF 0.929,ItemCF 0.933。差异属于噪声级别。

K=20 时全部方法 HitRatio 都是 1.000,指标完全失去区分力。

Popular 在 K=5 时 HitRatio 0.904,低于 Random 的 0.928。原因是覆盖率只有 0.25,所有用户收到同一个列表,越集中越难命中。

用户相似度:用户两两余弦相似度均值 0.9365。这不是偏好相似,是伪相似。所有用户都在 20 个品类上均匀撒行为,向量方向几乎一致,余弦相似度自然接近 1。任何用户都是任何用户的"相似邻居",邻居加权等价于全局平均。

输出 :ads_reco_metrics(18 行)、ads_reco_summary(1 行)、ads_reco_topn(21000 行)。

7.2 B16 用户级预测可行性审计

分析目的:原设计要做流失预测和价值预测。B16 把两者合并,做一次可行性审计。

流失审计:100 用户最后行为日期全部是 2019-07-26。100 用户在 10 天窗口内全部每天活跃。流失正样本为 0。流失分类任务不可定义,分类审计终止。

价值审计

时间切分:前 7 天历史,后 3 天预测。未来 3 天支付次数均值 22.59,标准差 7.28,范围 8 到 41,零值比例为 0。目标有方差,看起来可以回归。

相关性审计:6 个历史特征与未来支付的最大 Pearson 相关是 0.208,最大单变量 AUC 是 0.584。历史支付次数与未来支付次数的相关性是 0.057。6 个特征同时比较时,Bonferroni 校正后没有一个显著。

回归基线:全局均值 MAE 5.97,历史支付次数 3/7 缩放版 MAE 7.03,线性回归 5 折 CV 的 MAE 6.15。全局均值最优,任何模型都打不过它。

输出 :ads_prediction_feasibility(2 行)、ads_user_value_baseline(4 行)。


8. 实验之间的逻辑关系

16 个实验不是 16 个独立任务,而是一条有依赖的链。

纵向依赖:B01 的数据认知支撑 B02 的结构设计。B02 的 DWD 支撑 B03 到 B16 的全部分析。B03 的漏斗结论支撑 B04 的品类排名调整。B04 的品类清单支撑 B05 的 session 下钻。B05 的头部集中支撑 B07 的长尾发现。B07 的 session 序列支撑 B13 的路径挖掘。B11 的用户分群支撑 B14 的用户标签。B12 的异常检测支撑 B14 的异常特征。B13 的路径标签支撑 B14 的路径特征。B14 的用户特征宽表支撑 B15 的规则推荐。B15 的推荐结论和 B16 的预测结论互为呼应。

横向交叉验证

B03 的支付 session 数 4111,B06 的支付 session 数 4111,B07 的支付 session 数 4111。三个实验独立计算,数字完全一致。

B06 的 n-gram 2-gram 频次 158026,B07 的 2-gram 频次 158026。两个实验独立计算,数字完全一致。

B12 的支付无下单行数 1141,B13 的支付无下单 session 数 1141。两个实验粒度不同,数字完全一致。

这些交叉验证说明各实验的口径是一致的,结论可以互相信任。


9. 核心发现汇总

9.1 数据分析层面

电商平台数据分析应该覆盖六个维度。

用户维度回答"用户是谁、值多少钱、会不会走"。品类维度回答"哪些品类热、哪些品类能一起卖"。页面维度回答"用户在页面间怎么跳、哪一跳流失最多"。会话维度回答"用户一次访问做了什么、路径有多长"。搜索维度回答"用户主动搜什么、搜完之后转化如何"。城市维度回答"地域偏好有没有差异"。

每个维度的分析目的不同,不能互相替代。

用户维度做分群和预测,品类维度做推荐和捆绑,页面维度做流程优化,会话维度做行为序列,搜索维度做意图识别,城市维度做区域运营。

六个维度的分析前提都必须先验证。

用户维度要先验证用户之间有没有差异。品类维度要先验证品类分布是否均匀。页面维度要先验证页面跳转是否有结构。会话维度要先验证会话长度是否有分布。搜索维度要先验证搜索词是否有长尾。城市维度要先验证城市是否与用户绑定。

9.2 数据认知层面

这份数据是参数化合成的,共有 9 条铁证。

编号 铁证 来源
1 时间间隔 ≤ 11 秒 B12
2 24 小时分布均匀 B12
3 100 用户全 10 天活跃 B12
4 行为序列近似独立随机 B13
5 路径长度与转化率强单调 B13
6 每个用户都派发 4 类 session B13
7 用户维度近似独立同分布 B14
8 用户-品类矩阵全密集、用户熵接近 1 B15
9 流失正样本为 0、价值目标不可预测 B16

九条铁证共同描绘出一个参数化生成器:

text 复制代码
对每个用户 u:
    for 每一天 d:
        for 每个 session s:
            1. 决定该 session 是否转化
            2. 随机填充行为序列(4 状态独立同分布)
            3. 随机生成时间戳(间隔 ≤ 11 秒)
            4. 保证每个用户每天都活跃
            5. 保证每个用户覆盖全部 20 个品类

9.3 方法论层面

简单方法 ≥ 高级方法,在合成数据、小样本、无外部标签条件下反复成立。

实验 对照 结论
B11 规则分层 vs K-means 规则胜
B12 Z-score / 卡方 vs iForest 简单不输
B13 规则分组 vs K-means 规则胜
B14 PCA / LDA / t-SNE / DBSCAN 高级制造假结构
B15 CF vs 随机 / 热门 / 规则 CF 不优于随机
B16 均值基线 vs 用户历史 / 线性回归 均值基线最优

没有外部标签时,监督方法必然自证。 B14 的 LDA 实验是这条结论的直接证据。标签来自特征,LDA 用标签找投影方向,找出来的方向必然是特征组合,画出来必然"分开"。这是同义反复,不是发现。

数据的信息量决定模型的上限。 B15 的协同过滤不是"效果不好",是"跑出来没有意义"。矩阵全密集、均匀,没有任何模型能从均匀里学到非均匀。B16 的价值预测同理,全局均值是最优解,任何模型都不如它。

"均匀"是有维度的。 B03 到 B06 说的均匀是"聚合边缘均匀",B07 说的长尾是"个体结构长尾",两者不矛盾。聚合后的边缘分布均匀,不代表个体分布均匀。以后遇到均匀结论,必须问一句"哪个维度的均匀"。


10. 对电商数据分析实践的启示

10.1 先审计,再建模

B15 和 B16 的最大价值不是"跑了什么模型",而是"在建模之前先做了信号审计"。B15 的 Step 0 检查了矩阵密度、用户熵、品类份额、相似度分布,确认三个前提全部不成立后,才决定不做真正的推荐建模。B16 同样先做了流失标签审计和价值目标审计,确认任务不成立后,才决定不跑复杂模型。

这个流程可以复用到任何数据分析任务:先回答"任务能不能定义、目标有没有信号",再决定"用什么模型"。

10.2 交叉验证是硬约束

B03、B06、B07 独立计算的支付 session 数完全一致。B06 和 B07 独立计算的 2-gram 频次完全一致。B12 和 B13 在行级和 session 级分别计算的 pay_no_order 完全一致。

这些交叉验证不是多余的。如果某个实验的口径写错了,交叉验证会立刻暴露。B 组执行过程中,因为交叉验证发现了多次口径不一致,及时修正。

10.3 诚实交代局限

B12 和 B13 都明确写了"这是合成数据,结论限定在方法论演示范围"。B14 明确写了"没有外部标签,监督降维必然自证"。B15 明确写了"候选集选择是权宜之计"。B16 明确写了"样本量小,统计效力低"。

这些局限不是"自我贬低",是"给读者一个正确的使用边界"。一份分析报告如果不说清适用范围,读者会误用。

10.4 每个实验都要有可复用的产出

B01 产出的是"一套已被验证的数据认知"。B02 产出的是"DWD 结构"。B03 产出的是"业务认知"。B04 产出的是"均匀认知"。B05 产出的是"头部结构认知"。B06 产出的是"页面稠密认知"。B07 产出的是"长尾认知"。

每一层都在为下一层提供输入。这些输入不只是表,还包括认知、口径、方法论。表会被覆盖,认知不会。


11. 结语

B 组实验从一份 18.6 MB 的电商用户行为日志出发,经过 16 个实验,覆盖数据治理、描述性分析、关联分群、方法论演示、建模预测五个阶段,产出了 60 多张 ADS 表、10 余张可视化图、20 多个 HQL 和 Python 脚本,以及一份关于"这份数据能做什么、不能做什么"的完整认知。

核心结论有三条:

第一,电商平台数据分析应该覆盖用户、品类、页面、会话、搜索、城市六个维度,每个维度回答不同的业务问题,不能互相替代。

第二,每个维度的分析前提都必须先验证。用户维度要验证用户差异,品类维度要验证品类分布,页面维度要验证跳转结构,会话维度要验证长度分布,搜索维度要验证词频长尾,城市维度要验证字段随机性。

第三,简单方法在合成数据、小样本、无外部标签条件下反复优于高级方法。这不是"高级方法不好",是"数据的信息量决定模型的上限"。

B 组的价值不在"发现了什么业务洞察",而在"用严格的方法确认了这份数据没有多少业务洞察,并在这个过程中沉淀了一套可复用的分析方法论"。

这份方法论可以带到任何电商数据分析任务里:先审计数据底座,再验证分析前提,再选择合适的方法,最后诚实交代局限。

相关推荐
用户7783366132112 小时前
前端本地存搜索数据:IndexedDB 入门实战(缓存、历史、离线)
数据挖掘·indexeddb
wang_yb4 小时前
什么是范数?用 NumPy 动手算一遍就明白了
数据分析·databook
YangYang9YangYan7 小时前
2027 届校招|大数据管理与应用专业投递供应链管培,数据分析能力考察逻辑拆解
数据挖掘·数据分析
卷毛迷你猪20 小时前
快速实验篇(B16)用户级预测可行性审计(否定性意见)
大数据·hadoop·数据挖掘·聚类
正在走向自律20 小时前
AI数据分析与可视化:从基础到应用实践
服务器·人工智能·python·机器学习·数据分析·pandas
wang_yb20 小时前
从手动检查到自动监控:一个数据质量工作流的实现
数据分析·databook
databook20 小时前
从手动检查到自动监控:一个数据质量工作流的实现
后端·python·数据分析
Asa1213821 小时前
NC|核质大DNA病毒门(Nucleocytoviricota)生物地理格局及其与欧洲湖泊真核生物互作研究
数据挖掘
茗创科技1 天前
Nature Mental Health | 基于皮层相似性网络分析,揭示神经性厌食症的神经机制
matlab·数据分析·脑网络