当前位置:网站首页 >  教程

零门槛Python实现站内流量用户分层全流程实操

时间:2026年06月12日 21:32:50 来源:易频IT社区

环境准备与依赖安装

在开始用户分层之前,我们需要配置一个基础的Python数据处理环境。本文将使用Python中最轻量级且功能强大的Pandas库进行数据清洗与计算,无需配置复杂的大数据组件。

确保你的电脑上安装了Python(建议版本3.8及以上)。打开终端或命令行工具,执行以下命令安装必要的依赖库:

pip install pandas numpy

安装完成后,新建一个名为user_segmentation.py的文件,我们将在这个文件中编写所有逻辑。

数据样本构建

为了让你能直接运行代码,我们首先构建一份模拟的电商用户行为数据。在实际业务中,你可以直接替换为从MySQL或CSV读取的真实数据。数据必须包含三个核心字段:用户ID、订单时间、订单金额。

请在代码文件中输入以下代码生成模拟数据user_data.csv

```python import pandas as pd import numpy as np from datetime import datetime, timedelta 设置随机种子以保证结果可复现 np.random.seed(42) 生成模拟数据 num_users = 1000 user_ids = np.random.randint(1000, 2000, size=5000) 5000条交易记录 生成过去90天内的随机时间 base_date = datetime.now() dates = [base_date - timedelta(days=np.random.randint(0, 90)) for _ in range(5000)] 生成随机金额 amounts = np.random.uniform(10, 500, size=5000).round(2) 创建DataFrame df = pd.DataFrame({ 'user_id': user_ids, 'order_date': dates, 'amount': amounts }) 保存为CSV,方便后续读取 df.to_csv('user_data.csv', index=False) print("模拟数据已生成,共 {} 条记录。".format(len(df))) ```

运行上述代码后,当前目录下会生成一个user_data.csv文件。这是后续分层操作的基础数据源。

RFM模型核心计算逻辑

零门槛Python实现站内流量用户分层全流程实操

用户分层最经典的模型是RFM模型。我们将通过计算每个用户的三个指标来进行分层:

  • R (Recency):最近一次消费时间距今的天数。值越小,用户越活跃。
  • F (Frequency):消费频率。即一段时间内的下单次数。
  • M (Monetary):消费金额。即一段时间内的总贡献金额。

接下来,我们编写代码读取CSV并计算这三个指标。请注意,这里的“今天”设定为数据中最大日期的后一天,以模拟实时分析场景。

```python 读取数据 df = pd.read_csv('user_data.csv') df['order_date'] = pd.to_datetime(df['order_date']) 设定分析基准日期(数据中最新日期的第二天) snapshot_date = df['order_date'].max() + timedelta(days=1) 计算RFM指标 rfm = df.groupby('user_id').agg({ 'order_date': lambda x: (snapshot_date - x.max()).days, R 'user_id': 'count', F 'amount': 'sum' M }) 重命名列 rfm.columns = ['recency', 'frequency', 'monetary'] rfm.reset_index(inplace=True) print("RFM指标计算完成,前5行数据预览:") print(rfm.head()) ```

用户分层打标规则

计算完RFM数值后,我们需要将数值转化为标签。为了实现自动化分层,我们将使用均值作为评分阈值:高于平均值记为1(高),低于平均值记为0(低)。通过R、F、M三个维度的0/1组合,我们将用户分为8类。

以下是具体的打标逻辑与实现代码:

```python 计算R、F、M的均值,作为评分阈值 r_avg = rfm['recency'].mean() f_avg = rfm['frequency'].mean() m_avg = rfm['monetary'].mean() 定义打标函数 def label_user(row): r_score = 1 if row['recency'] < r_avg else 0 R越小越好,所以小于均值是高分 f_score = 1 if row['frequency'] > f_avg else 0 m_score = 1 if row['monetary'] > m_avg else 0 根据组合定义用户层级 if r_score == 1 and f_score == 1 and m_score == 1: return '重要价值客户' elif r_score == 1 and f_score == 1 and m_score == 0: return '重要发展客户' elif r_score == 1 and f_score == 0 and m_score == 1: return '重要保持客户' elif r_score == 1 and f_score == 0 and m_score == 0: return '一般挽留客户' elif r_score == 0 and f_score == 1 and m_score == 1: return '重要唤醒客户' elif r_score == 0 and f_score == 1 and m_score == 0: return '一般发展客户' elif r_score == 0 and f_score == 0 and m_score == 1: return '一般保持客户' else: return '流失客户' 应用打标函数 rfm['user_segment'] = rfm.apply(label_user, axis=1) 统计各层级人数 segment_counts = rfm['user_segment'].value_counts().reset_index() segment_counts.columns = ['用户类型', '人数'] print("\n用户分层结果统计:") print(segment_counts) ```

完整代码实现与运行

为了方便你直接复制使用,下面是整合了数据生成、RFM计算、分层打标及结果导出的完整脚本。你可以直接覆盖之前的文件内容并运行。

```python import pandas as pd import numpy as np from datetime import datetime, timedelta ================= 1. 数据准备 ================= def generate_data(): np.random.seed(42) user_ids = np.random.randint(1000, 2000, size=5000) base_date = datetime.now() dates = [base_date - timedelta(days=np.random.randint(0, 90)) for _ in range(5000)] amounts = np.random.uniform(10, 500, size=5000).round(2) df = pd.DataFrame({ 'user_id': user_ids, 'order_date': dates, 'amount': amounts }) df.to_csv('user_data.csv', index=False) return df ================= 2. 核心逻辑 ================= def main(): 如果没有数据,先生成 try: df = pd.read_csv('user_data.csv') except FileNotFoundError: print("未找到数据文件,正在生成模拟数据...") df = generate_data() df['order_date'] = pd.to_datetime(df['order_date']) snapshot_date = df['order_date'].max() + timedelta(days=1) 计算RFM rfm = df.groupby('user_id').agg({ 'order_date': lambda x: (snapshot_date - x.max()).days, 'user_id': 'count', 'amount': 'sum' }) rfm.columns = ['recency', 'frequency', 'monetary'] rfm.reset_index(inplace=True) 计算阈值 r_avg = rfm['recency'].mean() f_avg = rfm['frequency'].mean() m_avg = rfm['monetary'].mean() 打标 def label_user(row): r_score = 1 if row['recency'] < r_avg else 0 f_score = 1 if row['frequency'] > f_avg else 0 m_score = 1 if row['monetary'] > m_avg else 0 if r_score == 1 and f_score == 1 and m_score == 1: return '重要价值客户' elif r_score == 1 and f_score == 1 and m_score == 0: return '重要发展客户' elif r_score == 1 and f_score == 0 and m_score == 1: return '重要保持客户' elif r_score == 1 and f_score == 0 and m_score == 0: return '一般挽留客户' elif r_score == 0 and f_score == 1 and m_score == 1: return '重要唤醒客户' elif r_score == 0 and f_score == 1 and m_score == 0: return '一般发展客户' elif r_score == 0 and f_score == 0 and m_score == 1: return '一般保持客户' else: return '流失客户' rfm['user_segment'] = rfm.apply(label_user, axis=1) ================= 3. 结果导出 ================= rfm.to_csv('user_segments_result.csv', index=False) print("处理完成!结果已保存至 user_segments_result.csv") print(rfm['user_segment'].value_counts()) if __name__ == '__main__': main() ```

结果应用策略

运行上述代码后,你将得到一个名为user_segments_result.csv的文件。该文件包含了每个用户的RFM数值以及具体的分层标签。以下是针对不同分层标签的实操运营建议:

  • 重要价值客户:R、F、M均高。这是你的核心资产。操作建议:建立VIP群,提供专属客服,优先发货,定期赠送高价值权益。
  • 重要发展客户:R、F高,M低。买得勤但单价低。操作建议:通过满减券或组合销售引导其提高客单价。
  • 重要保持客户:R、M高,F低。买得贵但不常来。操作建议:定期回访,在新品上市时精准推送,激活其购买频率。
  • 重要唤醒客户:R低,F、M高。曾经的大佬,最近没来。操作建议:发送大额召回优惠券,调查流失原因,必须最高优先级挽回。
  • 流失客户:R、F、M均低。操作建议:停止投入昂贵的营销资源,仅进行最低成本的短信触达或自然流失。

通过这套流程,你不仅完成了技术层面的分层,更拿到了可直接指导业务决策的数据报表。你可以将user_segments_result.csv导入BI工具或直接导入CRM系统进行自动化营销推送。

相关推荐

最新

热门

推荐

精选

标签

易频IT社区是综合性互联网IT技术门户网站,专注分享网络技术、服务器运维、网络安全、编程开发、系统架构、云计算、大数据等行业干货,实时更新IT行业资讯、零基础教程、实战案例,为IT从业者、技术爱好者提供专业的学习交流平台。

Copyright © 2021-2026 易频IT社区. All Rights Reserved. 备案号:闽ICP备2023013482号 网站地图