Python 数据分析的价值在于把数据口径、计算和结论连成可复查的链路。算出 p 值、给用户贴上 RFM 标签、生成一张图,都不等于已经回答了业务问题。本篇用虚构的社区咖啡订阅店案例,分别演示 A/B 实验判断、RFM 分层和 pandas 清洗入门。所有数字是教学示例,没有运行实际客户数据或声称得到真实实验结果。
先写分析契约,再打开数据
任务有三种:判断新的订阅说明是否影响购买,描述当前客户交易行为,练习从原始记录生成可靠表。它们需要不同数据与推断条件,不能把描述性分群当成因果实验。给每个任务写问题、统计单位、观察窗口、输入版本、排除规则和产物;分析结果不得自动触发营销或调整客户待遇。
订单行至少区分 customer_id、order_id、paid_at、amount、currency、status,实验另有 assignment 与事件记录。订单明细行、订单、用户和会话是不同单位。保留原始只读副本,记录脱敏方式和字段定义,派生表另存。模型只访问明确目录,不能因为分析需要就擅自上传客户明细或联系用户。
Exploratory Data Analysis 适合在各阶段前,对授权本地 CSV、TSV 或 JSON 做有边界的数据质量与探索报告:缺失、异常、分布及可疑重复。需要相应 Python 环境、格式依赖、数据根目录与输出范围。它不自动清洗覆盖原始文件,不承诺支持任意格式,也不替代随机化审计、确认性检验或因果结论。
场景一:实验开始前决定怎样判断
先定义随机化单位、主要指标、分母、分配比例与观察周期。示例按用户分组,主要指标是固定窗口内是否完成首次订阅,护栏可包括取消、投诉和页面错误。用户重复访问仍按同一分组处理,不能把多次访问当作独立用户增加样本量。明确入组资格与何时开始计时,避免只挑已到购买页的人比较。
样本量规划在上线前进行,考虑基准转化率、最小值得关注的绝对效应、显著性水平、目标功效、组比例及设计假设。分清“提升百分比”和“提升百分点”。统计库能帮助求解,但参数、检验类型和独立性必须匹配;不能把另一类实验的计算结果直接照搬。依照预先约定的固定时点或适当序贯设计作判断,不每天看到显著就立即停止。
运行后先核对分流、暴露和事件记录:分组数是否偏离预期、同一用户是否跨组、是否漏记某设备、资格过滤是否在两组一致、是否完整覆盖约定周期。异常分流可能提示实现或记录问题,不是换一种统计检验就能解决。新奇效应、节假日或同期活动要列作解释限制;多指标、多版本与反复切片需要预定的多重比较处理。
结果报告给每组样本、转化率、绝对差、相对差、适用的置信区间及检验条件。p 值不是零假设为真的概率,也不说明差异有多大;小于某阈值不能保证值得上线。未达到显著性也不证明两组相同,应结合区间看是否仍容纳重要改善或伤害。不要用基于观察效应的事后功效替代区间解释,或临时降低阈值让结果通过。
实操:从算术提升走到实验决定
假设 A 组一万名用户中五百名购买,B 组同样人数中五百二十名购买。转化率为 5% 与 5.2%,绝对差 0.2 个百分点,相对差 4%;这些是示例算术,不是已经计算过显著性的实验结论。先审核分流与窗口,再用适用方法计算不确定性,不能因为“五百二十比五百大”就宣布新页面有效。
在预先确定的业务门槛与护栏下讨论:区间可能包含明显负面结果时不直接扩大;数据完整但不确定时报告不确定,不反复加样直到显著。若决定下一次实验,重新写设计与停止规则。交付计算脚本、参数、输入版本、区间与限制,负责人作发布决定,Agent 不替团队宣布上线。
场景二:RFM 先定义交易,再定义标签
R 为距最近合格交易的时间,F 为窗口内合格订单次数,M 为窗口内约定口径的金额。先固定快照日期和窗口;明确取消、退款、税费、运费、测试订单与多币种处理。以快照为界只使用当时已知数据,不能把未来交易带回历史分群。没有交易的新注册用户单列,不能用零天 recency 伪装成刚购买客户。
先从订单明细汇总到订单,确认订单总额没有因商品行重复累加,再按用户计算。F 通常按去重订单数而非明细行数;最近交易时间与快照使用同一时区。M 是毛额还是净额要一致,退款后的负值不能默认删掉。多币种未获准统一换算时分开分析,保留转换来源与日期。
评分规则可以用业务阈值或分位数,但先处理大量并列值、小样本和季节性。R 较小通常代表更近,评分方向须与 F、M 的方向协调。并非所有交易型业务都适合固定五分制或八分法;把每个分组的定义、人数和边界例子交给运营复核。标签如“需关注”只是行为描述,不等于已经证实会流失。
举例:客户甲最近十天买过一次,客户乙一百天前有六次购买,不能只比较金额就说谁更值得挽留。结合窗口、客单价、退货与渠道解释。先做分布与抽样核对,再形成待测试的行动假设;没有授权不要自动发券。若用分群决定触达策略,可通过适当实验评估效果,不能宣称 RFM 自身证明营销有效。
场景三:用一个 pandas 小项目跑通全流程
选择小型脱敏 CSV,先读取列名、类型与行数,特别把可能有前导零的客户编号当字符串。日期解析失败单列,空值按字段语义处理,不对所有列统一填零。金额先核对单位与币种,原字符串保留审计副本。每个转换记录前后行数、缺失数、唯一订单数和金额核对结果。
合并订单与用户表前检查键的唯一性和预期关系。pandas 的 merge 可用 validate 检查预期基数,并用 indicator 检查匹配情况;这些检查能暴露意外多对多和未匹配,但不验证键的业务含义。合并后记录行数和金额是否膨胀,关键键为空时先处理,不让空键匹配或重复键放大结果。使用哪种连接应由问题决定,而不是统一 inner join 悄悄丢人。
GitHub 的 pandas 是持续维护的 BSD-3-Clause 数据处理项目,已有读取、类型转换、分组与合并能力,本案例优先复用这些能力而不是重造表操作。实际环境应锁定版本和依赖,并查相应版本文档。NumPy 可处理数组运算,Matplotlib 可绘基础图,但学习时先让表的结果可核对,再追求复杂可视化。这里没有安装依赖或执行脚本。
给 Agent 的请求可写成:“只读取 data/input 中指定的三个脱敏 CSV。先报告 schema 与异常,不覆盖输入。按 analysis-plan-v1 生成订单级与用户级表,输出每步核对表和可重跑脚本。遇到未知币种、日期失败或键关系异常停止相关计算并报告。不得联系用户或上传原始记录。”先用手工可数的小样本核对,再扩展全量。
最终项目包含原始清单、清洗脚本、派生表、异常日志、RFM 定义、实验设计与解释报告。图上标单位、窗口和样本范围,避免用截断坐标夸大提升。用新环境按说明重跑,记录实际运行与未运行的步骤;“脚本看起来正确”和“输出已复核”是不同状态。
故障排查与 FAQ
不显著是否只需更多样本?先查数据质量和设计,区间与预先业务门槛比“再等等”更有信息。统计显著是否就有价值?还需效应、成本和护栏,极小改善可能不值得实施。样本量有没有万能数字?没有,取决于基准、目标效应和设计,规划参数应在实验前公开。
RFM 只有消费总额能做吗?不能完整表达最近和频次,先补交易时间与去重订单口径。分位数报重复边界怎么办?检查并列值,调整规则并记录含义,不随机打散伪造区别。清洗后金额翻倍怎么办?优先检查明细聚合、重复导入和合并基数,不靠再去重把真实订单删掉。教程看完仍不会怎么练?使用能手工复核的十几条记录,自己算出预期,再让脚本逐步对照。
原文六个技能没有全部关联,是因为名称、下载量与“已安全审查”描述不替代 SkillPI 的固定来源与用途核验。本篇只把已核验 EDA 关联到数据质量步骤,不把它当 RFM 或 A/B 专用引擎。新候选加入目录后,以同一脱敏夹具检查计算口径、依赖、许可和输出,再增加对应步骤链接。任何结论都应附来源、方法与不确定性,不能由一个技能替代分析责任。