当前位置: 首页 > news >正文

RFM模型-数据清洗

在进行数据清洗时,主要的目标是确保数据质量良好,以便后续的分析和建模工作能够顺利进行。针对你使用粒子群优化算法改进RFM模型来对电商数据进行用户群像划分的实验,数据清洗环节尤其重要,因为不干净的数据会影响模型的精度和效果。

1. 缺失值处理

在电商数据中,缺失值是一个常见问题。你需要检查各列是否存在缺失值,并决定如何处理它们。

• 检查缺失值

df.isnull().sum()

• 处理缺失值

• 删除缺失值:如果缺失值的比例很小且不重要,可以删除。

df.dropna(inplace=True)

• 填补缺失值:如果某些列的重要性较高,可以考虑填补缺失值,常用的填补方法有:

• 用均值或中位数填补数值型数据。

• 用最频繁值填补分类数据。

df['column_name'].fillna(df['column_name'].mean(), inplace=True)  # 数值型
df['column_name'].fillna(df['column_name'].mode()[0], inplace=True)  # 类别型

2. 重复数据处理

重复数据可能会影响模型的训练,特别是当相同的用户记录出现多次时。

• 检查重复值

df.duplicated().sum()

• 删除重复值

df.drop_duplicates(inplace=True)

3. 数据类型转换

确保每列的数据类型符合其实际意义,特别是在RFM模型中,通常需要确保Recency、Frequency、Monetary等数值型数据列为数值类型。

• 查看数据类型

df.dtypes

• 转换数据类型

df['Recency'] = df['Recency'].astype(int)  # 将Recency转换为整数类型
df['Monetary'] = df['Monetary'].astype(float)  # 将Monetary转换为浮动类型

4. 异常值处理

异常值可能会干扰模型的训练,特别是RFM模型中的Monetary(消费金额)或Frequency(购买频率)列。

• 检测异常值

你可以使用箱型图(boxplot)来可视化数据中的异常值。

import seaborn as sns
sns.boxplot(x=df['Monetary'])

• 处理异常值

• 删除异常值:可以删除异常值或用适当的值替代它们(例如用上四分位数或下四分位数)。

• 裁剪异常值

Q1 = df['Monetary'].quantile(0.25)
Q3 = df['Monetary'].quantile(0.75)
IQR = Q3 - Q1
df = df[(df['Monetary'] >= (Q1 - 1.5 * IQR)) & (df['Monetary'] <= (Q3 + 1.5 * IQR))]

5. 日期格式处理

RFM模型中的Recency(最近购买时间)是一个日期字段,因此需要确保日期格式正确。

• 转换为日期格式

df['LastPurchaseDate'] = pd.to_datetime(df['LastPurchaseDate'])

• 计算Recency:你可以计算用户的最近购买时间距离当前的天数。

today = pd.to_datetime('today')
df['Recency'] = (today - df['LastPurchaseDate']).dt.days

6. 分类数据编码

如果数据集中有类别型特征(如用户所在城市、性别等),你可能需要对它们进行编码,以便将其输入到模型中。

• Label Encoding:将类别转换为整数。

from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
df['Gender'] = le.fit_transform(df['Gender'])

• One-Hot Encoding:将类别数据转化为虚拟变量(0和1)。

df = pd.get_dummies(df, columns=['City'], drop_first=True)

7. 特征缩放(Standardization/Normalization)

RFM模型中的Recency、Frequency和Monetary列通常有不同的量纲,可能需要对这些特征进行标准化或归一化处理,以便后续算法(如粒子群优化算法)更好地处理它们。

• 标准化:将数据转换为均值为0、标准差为1的分布。

from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
df[['Recency', 'Frequency', 'Monetary']] = scaler.fit_transform(df[['Recency', 'Frequency', 'Monetary']])

• 归一化:将数据转换到0到1的范围。

from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
df[['Recency', 'Frequency', 'Monetary']] = scaler.fit_transform(df[['Recency', 'Frequency', 'Monetary']])

8. 生成新特征

在RFM模型中,你可以根据现有的数据生成一些新的特征。例如:

• 创建“高价值用户”标签:基于Monetary,Frequency和Recency来标记哪些用户是高价值用户。

df['HighValue'] = df['Monetary'] > df['Monetary'].quantile(0.75)

• 合成RFM特征:有时我们可以将Recency、Frequency和Monetary合并成一个新的综合特征,用于进一步分析。

9. 数据验证

最后,确保数据中没有出现逻辑错误。例如,Recency不应该为负值,Frequency不应该为0等。

# 确保Recency为正
df = df[df['Recency'] >= 0]

# 确保Frequency大于0
df = df[df['Frequency'] > 0]

总结:主要的数据清洗步骤:

1. 处理缺失值

2. 删除重复数据

3. 检查和修正数据类型

4. 异常值检测与处理

5. 处理日期格式,计算Recency

6. 对分类变量进行编码

7. 特征缩放,确保数据标准化或归一化

8. 生成额外特征(如高价值用户标签等)。

9. 验证数据逻辑

相关文章:

  • 基于mediapipe深度学习的手势数字识别系统python源码
  • 20250214实测飞凌的OK3588-C_Linux5.10.209+Qt5.15.10_用户资料_R1的USB2.0的速度为29.0 MB/s
  • 香港VPS服务器如何排查和修复 MySQL 数据库连接失败的问题
  • 从图像中提取的每行数字作为一张完整的图片,而不是每个数字单独成为一张图片
  • 教程:使用 Vue 3 和 arco 实现表格合并
  • MySQL 数据库定时任务及进阶学习
  • UE_C++ —— Metadata Specifiers
  • Redis——优惠券秒杀问题(分布式id、一人多单超卖、乐悲锁、CAS、分布式锁、Redisson)
  • 【目标检测json2txt】label从COCO格式json文件转YOLO格式txt文件
  • mysql开启gtid并配置主从
  • Windows 11 下 Ollama 安装与 OpenWebUI 调用 DeepSeek-R1 的详细指南
  • 100N03-ASEMI豆浆机专用MOS管100N03
  • qt QOpenGLContext详解
  • 数字电路-基础逻辑门实验
  • 【Elasticsearch】runtime_mappings搜索请求中定义运行时字段
  • 微软AutoGen高级功能——Magentic-One
  • LabVIEW软件需求开发文档参考
  • Win11配置wsl、ubuntu、docker
  • 【哇! C++】内联函数、auto关键字、基于范围的for循环、指针空值nullptr
  • git bash在github的库中上传或更新本地文件
  • 以军证实空袭也门多个港口
  • 中方是否计划解除或调整稀土出口管制?外交部回应
  • 商务部召开全国离境退税工作推进会:提高退税商店覆盖面,扩大入境消费
  • 习近平在第三十五个全国助残日到来之际作出重要指示
  • 美国将与阿联酋合作建立海外最大的人工智能数据中心
  • 王东杰评《国家与学术》︱不“国”不“故”的“国学”