使用 K-Means 进行客户分群分析

使用 K-Means 进行客户分群分析

本文将详细介绍如何使用 K-Means 聚类算法对客户的购买行为进行分群分析。我们会从数据清理和特征工程开始,到 K-Means 聚类的应用,最后进行结果的分析和商业洞察。使用的数据集为 Online Retail 数据集,包含了一家在线零售商的交易数据。

数据集概述

Online Retail 数据集包含了详细的交易信息,字段包括:

  • InvoiceNo: 每笔交易的唯一发票编号。如果发票编号以 “C” 开头,则表示该交易为退货记录。
  • StockCode: 唯一标识每种产品的代码。
  • Description: 产品的描述信息。
  • Quantity: 每笔交易中购买的产品数量。
  • InvoiceDate: 交易的日期和时间。
  • UnitPrice: 单价(英镑)。
  • CustomerID: 客户的唯一标识符。
  • Country: 客户所在国家。
数据清理与预处理

为了确保数据的准确性和完整性,首先对数据进行了必要的清理和预处理,具体步骤如下:

  1. 去除缺失的 CustomerID 数据: 数据集中有些交易记录缺少客户编号,这些记录无法关联到具体的客户,因此需要删除。
  2. 删除退货订单及交易金额小于 0 的记录: 退货订单通过 InvoiceNo 以 “C” 开头进行识别,因为这些记录不反映正常的购买行为,所以删除。同时删除交易金额小于 0 的异常记录。
  3. 计算总消费金额 (TotalPrice): 新增 TotalPrice 列,用于表示每笔交易的总金额,计算方式为 Quantity * UnitPrice

以下是数据清理的代码实现:

import pandas as pd

# 读取数据集
file_path = 'Online Retail.xlsx'
data = pd.read_excel(file_path)

# 数据清理
# 去除缺失的 CustomerID 行
data_cleaned = data.dropna(subset=['CustomerID'])

# 将 InvoiceNo 转为字符串类型
data_cleaned['InvoiceNo'] = data_cleaned['InvoiceNo'].astype(str)

# 删除退货订单及交易金额小于 0 的记录
data_cleaned = data_cleaned[~data_cleaned['InvoiceNo'].str.startswith('C')]
data_cleaned = data_cleaned[data_cleaned['Quantity'] > 0]
data_cleaned = data_cleaned[data_cleaned['UnitPrice'] > 0]

# 计算总消费金额
data_cleaned['TotalPrice'] = data_cleaned['Quantity'] * data_cleaned['UnitPrice']
特征工程

在数据清理完成后,我们进行了特征工程,提取了一些反映客户购买行为的特征,这些特征用于后续的聚类分析,包括:

  • TotalQuantity: 客户的总购买数量。
  • TotalPrice: 客户的总消费金额。
  • MaxQuantity: 客户单次购买的最大数量。
  • MaxPrice: 客户购买的最高单价。
  • AvgQuantity: 客户的平均购买数量。
  • AvgPrice: 客户的平均购买价格。

以下是特征提取的代码:

# 特征工程
customer_data = data_cleaned.groupby('CustomerID').agg(
    TotalQuantity=('Quantity', 'sum'),
    TotalPrice=('TotalPrice',
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

机智的小神仙儿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值