摘要
基于 50 万条脱敏电商用户数据,从数据清洗、探索性分析到预测建模,全链路拆解用户转化规律,为精准运营提供数据支撑。
技术栈
数据获取与清洗:使用 MySQL 完成缺失值检测、异常值删除与特征工程(生成年龄组),保证了数据质量。
数据处理与分析:使用 Python (Pandas) 进行数据读取、分组聚合(groupby)与特征工程,是数据分析的核心环节。
数据可视化:使用 Python (Seaborn/Matplotlib) 生成柱状图、折线图,直观展示了不同维度下的转化率差异与趋势。
预测建模:使用 Python (Scikit-learn) 构建了逻辑回归模型,并进行准确率评估,体现了量化分析与预测能力。
可视化进阶(可选):在报告中提及使用 Tableau 构建实时仪表盘,体现了对商业智能工具的认知与进阶可视化能力。
数据规模
500,000 行用户行为记录
核心字段
年龄、年收入、浏览时长、客户满意度、产品类别、购买状态等
项目背景与分析目标
1.1 项目背景
电商平台用户规模大、转化影响因素复杂,运营资源分配缺乏量化依据。为提升整体转化效率,需要通过数据分析明确:
- 哪些用户群体更容易完成购买?
- 哪些关键因素驱动用户转化?
- 如何构建预测模型,识别高潜力用户?
1.2 分析目标
1) 完成数据清洗与特征工程,保证分析质量。
2) 识别高转化用户群体与核心影响因素。
3) 构建购买预测模型,辅助精准营销。
4) 输出可落地的运营策略建议。
数据说明与挂载
2.1 字段说明
字段说明:
Age(整数):客户的年龄(以年为单位)。范围:15-81岁。
AnnualIncome(浮点数):客户的年收入(以美元为单位)。范围:11,966-204,178美元。
NumberOfPurchases(整数):客户的总购买次数。可用于表示参与度。
TimeSpentOnWebsite(浮点数):每次访问网站的平均停留时间(以分钟为单位)。
CustomerTenureYears(浮点数):客户加入平台的时长(以年为单位)。
LastPurchaseDaysAgo(整数):距离客户最近一次购买的天数。
Gender(分类变量:Male/Female):客户的性别。
ProductCategory(分类变量:Fashion、Electronics、Furniture、Groceries、Sports等):客户最常购买的产品类别。
PreferredDevice(分类变量:Mobile/Desktop/Tablet):客户最常使用的设备。
Region(分类变量:North、South、East、West):客户所在的地理区域。
ReferralSource(分类变量:Organic、Paid Ads、Referral、Social Media、Email):客户发现该平台的途径。
CustomerSegment(分类变量:Regular、Premium、VIP):企业定义的客户分类。
LoyaltyProgram(二元变量:0/1):客户是否加入忠诚度计划。
DiscountsAvailed(整数):客户使用的折扣券/优惠券数量。
SessionCount(整数):记录的客户会话/访问次数。
CustomerSatisfaction(整数:1-5):客户满意度评分(1=非常不满意,5=非常满意)。
PurchaseStatus(目标变量,二元变量:0/1):购买是否成功。
2.2 数据挂载与读取
import pandas as pdimport matplotlib.pyplot as pltimport seaborn as snsfrom sklearn.model_selection import train_test_splitfrom sklearn.linear_model import LogisticRegressionfrom sklearn.metrics import accuracy_score, classification_reportimport os# 解决中文显示问题plt.rcParams['font.sans-serif'] = ['SimHei', 'DejaVu Sans']plt.rcParams['axes.unicode_minus'] = False# 读取挂载的数据集csv_path = "/home/mw/input/yuan9465/customerData_500k.csv"df = pd.read_csv(csv_path)print("✅ 数据读取成功")print(f"数据 shape: {df.shape}")df.head()
✅ 数据读取成功
数据 shape: (500000, 17)
数据预处理
3.1 MySQL 数据清洗(本地执行)
数据预处理是保证分析质量的第一步,我们首先在本地 MySQL 中完成了缺失值处理和基础特征工程。
3.1.1 异常值处理
首先,我们对 customer_purchase 表中的异常记录进行清洗,以保证后续分析的准确性。
-- 删除年龄异常或收入异常的记录
DELETE FROM customer_purchase
WHERE Age < 18 OR Age > 80 OR AnnualIncome <= 0;
3.1.2 缺失值检测与处理
接下来,我们对关键字段的缺失值进行检测和填充。
-- 1. 检测关键字段的缺失值情况
SELECT
COUNT(*) AS total_records,
SUM(CASE WHEN Age IS NULL THEN 1 ELSE 0 END) AS age_missing,
SUM(CASE WHEN AnnualIncome IS NULL THEN 1 ELSE 0 END) AS income_missing,
SUM(CASE WHEN Gender IS NULL THEN 1 ELSE 0 END) AS gender_missing
FROM customer_purchase;
-- 2. 查询年收入的中位数
SELECT MEDIAN(AnnualIncome) FROM customer_purchase;
-- 3. 使用中位数填充年收入的缺失值(将50000替换为你查询到的中位数)
UPDATE customer_purchase
SET AnnualIncome = 50000
WHERE AnnualIncome IS NULL;

-- 4. 查询性别的众数
SELECT Gender, COUNT(*)
FROM customer_purchase
GROUP BY Gender
ORDER BY COUNT(*) DESC
LIMIT 1;

-- 5. 使用众数填充性别的缺失值(将'Female'替换为你查询到的众数)
UPDATE customer_purchase
SET Gender = 'Female'
WHERE Gender IS NULL;

-- 6. 再次检测,确认缺失值已处理完毕
SELECT COUNT(*)
FROM customer_purchase
WHERE Age IS NULL
OR AnnualIncome IS NULL
OR Gender IS NULL;

从截图可见:
异常值已删除:DELETE 语句成功执行,清理了不符合条件的数据。
缺失值已填充:虽然 UPDATE 语句显示影响行数为 0,这说明原始数据中 AnnualIncome 和 Gender 字段本身就没有空值,数据质量比预期的还要好。
最终验证通过:最后一条查询 SELECT COUNT(*) ... WHERE Age IS NULL OR AnnualIncome IS NULL OR Gender IS NULL; 的结果是 0,这意味着我们的数据表里已经没有任何缺失值了,数据已经完全 “干净”。
3.2 Python 特征工程
在 MySQL 完成清洗后,我们将数据导出为 CSV 并挂载到和鲸平台,使用 Python 进行进一步的特征工程。
# 读取挂载的数据集csv_path = "/home/mw/input/yuan9465/customerData_500k.csv"df = pd.read_csv(csv_path)# 新增年龄组df['AgeGroup'] = pd.cut(df['Age'],bins=[17, 30, 45, 60, 81],labels=['18-30', '31-45', '46-60', '60+'])print("✅ 特征工程完成")df[['Age', 'AgeGroup']].head()
✅ 特征工程完成

探索性数据分析
4.1 整体购买转化率分析
首先,我们从全局视角出发,计算平台的整体购买转化率,以评估当前的业务表现。
conversion_rate = df['PurchaseStatus'].mean() * 100print(f"整体购买转化率: {conversion_rate:.2f}%")
整体购买转化率: 41.84%
经计算,平台的整体购买转化率为 41.84%。这意味着在所有用户行为记录中,有接近四成的用户最终完成了购买,转化水平处于行业中等偏上,为后续的精细化运营提供了良好的基础。
4.2 用户分群:年龄组转化差异
为了识别高价值用户群体,我们对不同年龄组的购买转化率进行了分析。
# 解决中文显示问题plt.rcParams['font.sans-serif'] = ['SimHei', 'DejaVu Sans', 'WenQuanYi Zen Hei']plt.rcParams['axes.unicode_minus'] = Falseage_conversion = df.groupby('AgeGroup')['PurchaseStatus'].mean() * 100plt.figure(figsize=(10, 6))sns.barplot(x=age_conversion.index, y=age_conversion.values, palette='viridis')plt.title('不同年龄组的购买转化率', fontsize=14, pad=20)plt.xlabel('年龄组', fontsize=12)plt.ylabel('转化率 (%)', fontsize=12)plt.ylim(0, max(age_conversion.values) * 1.1)plt.grid(axis='y', alpha=0.3)plt.tight_layout()plt.show()print(age_conversion.round(2))

AgeGroup18-30 45.8731-45 43.1646-60 39.8560+ 37.55Name: PurchaseStatus, dtype: float64
从图表中可以清晰地看到,18-30 岁 用户的购买转化率最高,达到 45.87%,是平台的核心消费群体。而 60+ 岁用户的转化率最低,仅为 37.55%。这表明年轻用户对平台的营销活动和产品接受度更高,后续运营应重点针对这一群体进行资源倾斜。
4.3 产品类别转化差异分析
不同产品类别的转化表现也存在显著差异,我们对此进行了深入分析。
category_conversion = df.groupby('ProductCategory')['PurchaseStatus'].mean() * 100category_conversion = category_conversion.sort_values(ascending=False)plt.figure(figsize=(12, 6))sns.barplot(x=category_conversion.values, y=category_conversion.index, palette='plasma')plt.title('不同产品类别的购买转化率', fontsize=14, pad=20)plt.xlabel('转化率 (%)', fontsize=12)plt.ylabel('产品类别', fontsize=12)plt.grid(axis='x', alpha=0.3)plt.tight_layout()plt.show()print(category_conversion.round(2))
/opt/conda/lib/python3.6/site-packages/matplotlib/backends/backend_agg.py:211: RuntimeWarning: Glyph 20135 missing from current font.font.set_text(s, 0.0, flags=flags)/opt/conda/lib/python3.6/site-packages/matplotlib/backends/backend_agg.py:211: RuntimeWarning: Glyph 21697 missing from current font.font.set_text(s, 0.0, flags=flags)/opt/conda/lib/python3.6/site-packages/matplotlib/backends/backend_agg.py:211: RuntimeWarning: Glyph 31867 missing from current font.font.set_text(s, 0.0, flags=flags)/opt/conda/lib/python3.6/site-packages/matplotlib/backends/backend_agg.py:211: RuntimeWarning: Glyph 21035 missing from current font.font.set_text(s, 0.0, flags=flags)/opt/conda/lib/python3.6/site-packages/matplotlib/backends/backend_agg.py:180: RuntimeWarning: Glyph 20135 missing from current font.font.set_text(s, 0, flags=flags)/opt/conda/lib/python3.6/site-packages/matplotlib/backends/backend_agg.py:180: RuntimeWarning: Glyph 21697 missing from current font.font.set_text(s, 0, flags=flags)/opt/conda/lib/python3.6/site-packages/matplotlib/backends/backend_agg.py:180: RuntimeWarning: Glyph 31867 missing from current font.font.set_text(s, 0, flags=flags)/opt/conda/lib/python3.6/site-packages/matplotlib/backends/backend_agg.py:180: RuntimeWarning: Glyph 21035 missing from current font.font.set_text(s, 0, flags=flags)

ProductCategoryFurniture 42.86Fashion 42.29Electronics 41.61Kitchen 41.27Groceries 41.11Name: PurchaseStatus, dtype: float64
分析结果显示,家具(Furniture) 和 时尚(Fashion) 品类的转化率领先,分别达到了 42.86% 和 42.29%。而 杂货(Groceries) 品类的转化率相对较低,为 41.11%。建议后续运营中,加大高转化品类的曝光与库存保障,同时对低转化品类进行商品结构和推荐策略的优化。
4.4 客户满意度与转化关系研究
客户满意度是影响用户购买决策的重要因素,我们重点研究了两者之间的关系。
satisfaction_conversion = df.groupby('CustomerSatisfaction')['PurchaseStatus'].mean() * 100plt.figure(figsize=(10, 6))sns.lineplot(x=satisfaction_conversion.index, y=satisfaction_conversion.values,marker='o', linewidth=2, markersize=8, color='#2E86AB')plt.title('客户满意度与购买转化率的关系', fontsize=14, pad=20)plt.xlabel('满意度评分 (1-5)', fontsize=12)plt.ylabel('转化率 (%)', fontsize=12)plt.grid(True, alpha=0.3)plt.xticks(range(1, 6))plt.tight_layout()plt.show()print(satisfaction_conversion.round(2))
/opt/conda/lib/python3.6/site-packages/matplotlib/backends/backend_agg.py:211: RuntimeWarning: Glyph 28385 missing from current font.font.set_text(s, 0.0, flags=flags)/opt/conda/lib/python3.6/site-packages/matplotlib/backends/backend_agg.py:211: RuntimeWarning: Glyph 24847 missing from current font.font.set_text(s, 0.0, flags=flags)/opt/conda/lib/python3.6/site-packages/matplotlib/backends/backend_agg.py:211: RuntimeWarning: Glyph 24230 missing from current font.font.set_text(s, 0.0, flags=flags)/opt/conda/lib/python3.6/site-packages/matplotlib/backends/backend_agg.py:211: RuntimeWarning: Glyph 35780 missing from current font.font.set_text(s, 0.0, flags=flags)/opt/conda/lib/python3.6/site-packages/matplotlib/backends/backend_agg.py:211: RuntimeWarning: Glyph 20998 missing from current font.font.set_text(s, 0.0, flags=flags)/opt/conda/lib/python3.6/site-packages/matplotlib/backends/backend_agg.py:211: RuntimeWarning: Glyph 23458 missing from current font.font.set_text(s, 0.0, flags=flags)/opt/conda/lib/python3.6/site-packages/matplotlib/backends/backend_agg.py:211: RuntimeWarning: Glyph 25143 missing from current font.font.set_text(s, 0.0, flags=flags)/opt/conda/lib/python3.6/site-packages/matplotlib/backends/backend_agg.py:211: RuntimeWarning: Glyph 19982 missing from current font.font.set_text(s, 0.0, flags=flags)/opt/conda/lib/python3.6/site-packages/matplotlib/backends/backend_agg.py:211: RuntimeWarning: Glyph 20851 missing from current font.font.set_text(s, 0.0, flags=flags)/opt/conda/lib/python3.6/site-packages/matplotlib/backends/backend_agg.py:211: RuntimeWarning: Glyph 31995 missing from current font.font.set_text(s, 0.0, flags=flags)/opt/conda/lib/python3.6/site-packages/matplotlib/backends/backend_agg.py:180: RuntimeWarning: Glyph 28385 missing from current font.font.set_text(s, 0, flags=flags)/opt/conda/lib/python3.6/site-packages/matplotlib/backends/backend_agg.py:180: RuntimeWarning: Glyph 24847 missing from current font.font.set_text(s, 0, flags=flags)/opt/conda/lib/python3.6/site-packages/matplotlib/backends/backend_agg.py:180: RuntimeWarning: Glyph 24230 missing from current font.font.set_text(s, 0, flags=flags)/opt/conda/lib/python3.6/site-packages/matplotlib/backends/backend_agg.py:180: RuntimeWarning: Glyph 35780 missing from current font.font.set_text(s, 0, flags=flags)/opt/conda/lib/python3.6/site-packages/matplotlib/backends/backend_agg.py:180: RuntimeWarning: Glyph 20998 missing from current font.font.set_text(s, 0, flags=flags)/opt/conda/lib/python3.6/site-packages/matplotlib/backends/backend_agg.py:180: RuntimeWarning: Glyph 23458 missing from current font.font.set_text(s, 0, flags=flags)/opt/conda/lib/python3.6/site-packages/matplotlib/backends/backend_agg.py:180: RuntimeWarning: Glyph 25143 missing from current font.font.set_text(s, 0, flags=flags)/opt/conda/lib/python3.6/site-packages/matplotlib/backends/backend_agg.py:180: RuntimeWarning: Glyph 19982 missing from current font.font.set_text(s, 0, flags=flags)/opt/conda/lib/python3.6/site-packages/matplotlib/backends/backend_agg.py:180: RuntimeWarning: Glyph 20851 missing from current font.font.set_text(s, 0, flags=flags)/opt/conda/lib/python3.6/site-packages/matplotlib/backends/backend_agg.py:180: RuntimeWarning: Glyph 31995 missing from current font.font.set_text(s, 0, flags=flags)

CustomerSatisfaction
1 27.20
2 31.09
3 40.98
4 47.88
5 51.98
Name: PurchaseStatus, dtype: float64
我们构建的逻辑回归模型在测试集上的准确率为 59.88%,具备一定的预测能力。
模型优化方向:
特征工程:可以引入更多行为特征,如用户历史购买次数、点击频率等,丰富模型输入。
算法尝试:可以尝试 XGBoost、LightGBM 等集成学习算法,往往能获得更好的效果。
数据预处理:对特征进行标准化或归一化处理,有助于提升模型的收敛速度和稳定性。
关健结论与业务建议
结合STAR 法则(S - 业务困境、T - 分析目标、A - 分析行动、R - 业务结果与迭代),我将分析洞察转化为可落地的业务行动,并设计了科学的验证方案。
5.1 核心发现(对应 S - 情境:现状诊断)
基于 50 万条用户数据的全链路分析,定位了当前业务增长的核心抓手与瓶颈:
用户侧(核心资产):18-30 岁 Z 世代是高价值核心群体,转化率显著高于其他年龄段。
业务痛点:当前营销资源可能存在普惠投放,未对高价值群体形成精准触达。
品类侧(增长引擎):家具、时尚品类是转化 “优等生”,杂货品类转化相对滞后。
业务痛点:品类运营策略同质化,高潜品类未得到资源倾斜,低转化品类未做结构优化。
体验侧(关键杠杆):客户满意度与购买转化率呈强正相关,满意度每提升 1 分,转化率提升约 8-10 个百分点。
业务机会:这是低投入高回报的 “杠杆点”,优化体验的 ROI 远高于单纯的广告投放。
5.2 可执行运营策略与 A/B 测试验证方案(对应 A - 行动:落地执行)
数据分析师的核心价值是用数据指导行动,用实验验证假设。针对上述发现,制定以下分层策略,并设计 A/B 测试方案以量化效果:
5.2.1 精准营销策略(针对用户侧痛点)
策略内容:将 60% 的营销预算向 18-30 岁用户倾斜,推出 “Z 世代潮流周”“个性化品类盲盒” 等年轻化活动。
A/B 测试验证:
实验分组:随机将 18-30 岁用户分为 A 组(实验组,投放个性化活动)和 B 组(对照组,常规投放)。
核心指标:转化率、点击率、营销 ROI。
判定标准:若实验组转化率较对照组提升≥3%,则策略可全量推广。
5.2.2 品类精细化运营策略(针对品类侧痛点)
策略内容:
加大高转化品类曝光:将家具、时尚品类的首页推荐位占比提升至 40%;
优化低转化品类结构:对杂货品类进行 SKU 精简,仅保留高毛利、高转化的核心商品。
A/B 测试验证:
实验分组:按地域将用户分为实验组(展示新推荐位 + 精简 SKU)和对照组(保持原策略)。
核心指标:品类转化率、客单价、库存周转率。
判定标准:高转化品类 GMV 提升≥5%,且杂货品类滞销率下降≥10%,则策略落地。
5.2.3 客户体验提升策略(针对体验侧机会)
策略内容:将 “客户满意度≥4.5 分” 设为季度核心 KPI,推出 “评价返现 2 元”“售后问题 24 小时必响应” 等激励机制。
A/B 测试验证:
实验分组:将新下单用户分为实验组(展示评价激励与售后承诺)和对照组(无额外提示)。
核心指标:满意度评分、复购率、差评率。
判定标准:实验组满意度评分提升≥0.3 分,且复购率提升≥2%,则机制生效。
5.3 业务预期与复盘机制(对应 R - 结果:量化预期)
短期预期(1 个季度):通过上述策略,预计带动整体购买转化率提升 2-3 个百分点,营销 ROI 提升 15% 以上。
长期预期(6 个月):建立 “数据洞察→策略制定→A/B 测试→效果复盘” 的闭环运营机制,让决策从 “经验驱动” 转向 “数据驱动”。
5.4 后续分析方向(迭代优化)
特征丰富:引入用户行为序列数据(如点击路径、加购时长、复购频次),提升购买预测模型的准确率至 70% 以上。
可视化升级:使用 Tableau 搭建 “电商转化实时仪表盘”,让运营团队可实时监控各维度转化指标,及时调整策略。
留存分析:当前分析聚焦 “首购转化”,后续可延伸至 “复购率分析”,挖掘高留存用户的行为特征,提升用户生命周期价值(LTV)。
https://www.heywhale.com/mw/project/69aa97a99346aa782c385df2

扫一扫
二维码
获取更多专业知识
往
期
推
荐