4、数据清洗与预处理:处理缺失值、异常值、标准化价格数据,构建可用数据集
在美妆价格策略制定过程中,从电商平台、社交媒体、竞品监测工具及内部ERP系统采集到的原始数据,往往存在字段缺失、数值异常、单位不统一、量纲差异大等问题。若直接将这些“脏数据”用于价格弹性测算、竞品比价或促销效果评估,轻则导致定价偏离市场真实水位,重则引发利润测算失真、库存周转误判。本章聚焦数据清洗与预处理的三大核心任务:缺失值处理、异常值识别与修正、价格数据标准化,并最终输出可供后续建模与策略分析使用的干净数据集。
4.1 缺失值处理:从“丢弃”到“智能补全”
4.1.1 核心原理:缺失不是“没有”,而是“信息损失”
美妆价格数据中的缺失值通常出现在以下场景:竞品某SKU在特定渠道未上架、促销活动期间价格字段未记录、不同平台对“套装价”与“单件价”的字段定义不一致、以及人工录入时的遗漏。缺失值处理的核心原则是:先判断缺失机制,再选择处理方法。缺失机制分为三类:完全随机缺失(MCAR)、随机缺失(MAR)、非随机缺失(MNAR)。在美妆价格场景中,MCAR较少见,更多是MAR(如高端品牌在部分平台不公布价格)或MNAR(如低价清仓产品被刻意隐藏价格)。
| 缺失类型 | 含义 | 美妆价格场景示例 | 推荐处理方式 |
|---|---|---|---|
| MCAR | 缺失与任何变量无关 | 系统随机丢包导致的价格字段缺失 | 直接删除或均值填充 |
| MAR | 缺失与其他可观测变量相关 | 高端品牌在部分平台不展示价格,但品牌、规格可观测 | 回归插补、KNN插补 |
| MNAR | 缺失与自身数值相关 | 清仓产品价格过低,被运营刻意隐藏 | 业务规则填充 + 敏感性分析 |
4.1.2 操作流程:分级处理策略
- 缺失率诊断:计算每列缺失率。缺失率 < 5% 的字段可直接删除对应记录;5%-20% 采用填充策略;> 20% 需评估字段价值,若为关键价格字段则必须插补,若为次要属性可考虑剔除。
- 填充方法选择:数值型价格字段优先使用中位数填充(抗异常值干扰);若存在明显趋势(如季节性促销),使用线性回归插补;若字段间关联性强(如“套装价”与“单件价”),使用KNN插补。
- 业务规则补充:对于MNAR场景,结合运营经验设定“价格下限阈值”,低于该阈值的缺失值按阈值填充,并打上“清仓标记”。
4.2 异常值处理:识别“真异常”与“假异常”
4.2.1 核心原理:异常值可能是噪声,也可能是市场信号
美妆价格数据中的异常值常见于:秒杀活动价(如原价300元的面霜秒杀价29.9元)、系统单位错误(如将“元/瓶”录为“元/毫升”)、以及竞对恶意低价引流(如0.01元试用装)。处理异常值的关键在于区分“数据错误”与“真实业务行为”。盲目删除可能导致丢失重要的促销策略情报,而保留过多异常值则会扭曲价格弹性模型。
4.2.2 判断方法:多维度交叉验证
- 统计方法:采用3σ原则(均值±3倍标准差)或IQR(四分位距)识别极端值。对于美妆价格这种右偏分布数据,IQR方法更稳健。
- 业务阈值法:设定“价格下限=成本价×0.8”和“价格上限=建议零售价×1.5”,超出范围即标记为异常。
- 横向对比法:同品牌、同规格、不同渠道的价格差异超过30%时,触发异常检查。
# 异常值检测示例(Python伪代码)
import numpy as np
# IQR方法
Q1 = np.percentile(price_data, 25)
Q3 = np.percentile(price_data, 75)
IQR = Q3 - Q1
lower_bound = Q1 - 1.5 * IQR
upper_bound = Q3 + 1.5 * IQR
outliers = price_data[(price_data < lower_bound) | (price_data > upper_bound)]
4.2.3 案例拆解:某美妆品牌的价格异常排查
背景:某国货美妆品牌在2024年双11期间监测到某竞品精华液价格从日常价219元骤降至89元,数据采集系统标记为异常值。
初步判断:统计方法显示该价格低于IQR下界,属于统计异常。
深入分析:通过爬取该竞品详情页发现,89元为“买一送一”的折算价(实际支付89元得2瓶),且该活动仅限前2小时。进一步查看历史数据,发现该竞品每年双11均有类似操作。
处理决策:不删除该记录,而是新增“促销类型”字段(标注为“买赠折算价”),并在价格弹性模型中单独设置虚拟变量。
结果:模型准确率提升12%,成功捕捉到该竞品的“价格锚点”策略。
复盘:异常值处理不能“一刀切”,需结合促销日历、活动类型、渠道特性综合判断。
4.3 价格数据标准化:统一口径,消除量纲差异
4.3.1 核心原理:让不同来源的价格“可比较”
美妆价格数据标准化包含三个层面:单位统一(元/瓶、元/毫升、元/克)、口径统一(到手价、券后价、会员价、原价)、量纲统一(不同价格区间对模型的影响权重)。标准化是构建可用数据集的关键步骤,直接影响后续聚类分析、价格带划分和弹性计算的准确性。
4.3.2 标准化方法对比
| 方法 | 公式 | 适用场景 | 美妆价格场景说明 |
|---|---|---|---|
| Min-Max归一化 | (x-min)/(max-min) | 需要将价格映射到[0,1]区间 | 适用于价格带划分、雷达图展示 |
| Z-Score标准化 | (x-μ)/σ | 数据近似正态分布 | 适用于价格弹性回归模型 |
| 单位价格换算 | 价格/规格含量 | 不同规格产品比较 | 统一为“元/毫升”或“元/克” |
| 对数变换 | ln(x) | 右偏严重的数据 | 适用于价格区间跨度大的品类(如从9.9元到1999元) |
4.3.3 操作流程:构建标准化价格字段
- 单位统一:将“元/瓶”“元/盒”“元/支”统一换算为“元/毫升”或“元/克”。例如,某精华30ml售价300元,则单位价格为10元/ml。
- 价格口径归一:定义“标准成交价”= 实际支付金额 / 商品数量(含赠品折算)。若无法获取赠品信息,则使用“券后价”作为标准口径。
- 量纲处理:根据后续模型需求选择Z-Score或Min-Max。若需保留价格的实际意义(如计算价格弹性),使用Z-Score;若仅用于分类,使用Min-Max。
4.4 构建可用数据集:从清洗到验证的闭环
4.4.1 数据集结构设计
经过清洗与预处理后,最终数据集应包含以下核心字段:SKU标识、品牌、品类、规格(ml/g)、渠道、日期、原始价格、标准化价格、促销类型、促销力度、价格异常标记。同时,建议增加“数据质量评分”字段,记录每条数据的清洗过程(如是否插补、是否修正),便于后续审计。
4.4.2 数据质量验证清单
- 完整性检查:关键字段缺失率是否为0?
- 一致性检查:同SKU同渠道同日的价格是否唯一?
- 范围检查:标准化价格是否在合理区间(如0-100元/ml)?
- 分布检查:价格分布是否符合业务认知(如高端品牌价格显著高于大众品牌)?
4.4.3 案例拆解:某美妆集合店的定价数据集构建
背景:某美妆集合店拥有2000+SKU,覆盖护肤、彩妆、个护三大品类,数据来源包括POS系统、天猫旗舰店、京东自营及爬虫抓取的竞品价格。
初始问题:原始数据中30%的SKU存在价格缺失,15%的价格记录存在单位错误(如将“元/盒”录为“元/支”),且不同渠道的促销口径不一致。
处理过程:
1)缺失值处理:对“促销价”字段采用“原价×0.85”的回归插补;对“规格”字段采用同品牌同品类的众数填充。
2)异常值处理:通过IQR方法识别出127条异常记录,经人工复核,其中89条为真实的“限时秒杀”价格,保留并标记;38条为录入错误,修正为正确价格。
3)标准化:将所有价格统一为“元/毫升”或“元/克”,并计算Z-Score值。
结果:最终构建了包含1800+有效SKU的月度面板数据集,数据质量评分从62分提升至95分。基于该数据集,团队成功识别出“高价格敏感度”的彩妆品类,并制定了差异化定价策略,季度毛利率提升2.3%。
代价与风险:整个清洗过程耗时3周,投入2名数据分析师。期间发现部分插补值在后续促销活动中出现偏差,需定期回测修正。
4.5 常见误区与总结
| 误区 | 后果 | 正确做法 |
|---|---|---|
| 所有缺失值均用均值填充 | 低估价格波动,扭曲促销效果评估 | 根据缺失机制选择填充方法 |
| 所有异常值一律删除 | 丢失重要市场信号(如竞对清仓) | 区分“真异常”与“业务行为” |
| 只做归一化不做单位统一 | 不同规格产品无法比较 | 先统一单位,再归一化 |
| 清洗后不保留原始字段 | 无法追溯清洗过程,审计困难 | 保留原始价格与清洗后价格双字段 |
数据清洗与预处理是美妆价格策略分析的“地基工程”。缺失值处理决定了数据的完整性,异常值处理决定了数据的准确性,标准化处理决定了数据的可比性。只有将三者有机结合,并建立持续的数据质量监控机制,才能为后续的价格弹性测算、竞品比价、促销ROI分析提供坚实的数据底座。在实际操作中,建议团队建立“数据清洗SOP文档”,将业务规则、统计方法、人工复核流程固化下来,确保每次清洗结果可复现、可审计。