基于产品的RFM模型的k-means聚类分析

2023-11-09

首先我们可以看看数据集的数据形态:
在这里插入图片描述
导入rfm数据,查看数据的统计学参数

df =pd.read_csv('rfm.csv')
df.describe()

在这里插入图片描述
在实施Kmeans聚类之前,我们必须检查这些关键k-means假设
-变量对称分布(不倾斜)
-具有相同平均值的变量
-方差相同的变量

从这个表中,我们发现了这个问题:均值和方差不相等
解决:使用scikit-learn库中的标量来缩放变量

#绘制RFM值的分布
f,ax = plt.subplots(figsize=(10, 12))
plt.subplot(3, 1, 1); sns.distplot(rfm.Recency, label = 'Recency')
plt.subplot(3, 1, 2); sns.distplot(rfm.Frequency, label = 'Frequency')
plt.subplot(3, 1, 3); sns.distplot(rfm.MonetaryValue, label = 'Monetary Value')
plt.style.use('fivethirtyeight')
plt.tight_layout()
plt.show()

在这里插入图片描述
在这里插入图片描述

还有另一个问题:变量的不对称分布(数据倾斜)
解决方案:对数转换(仅为正值)将管理倾斜程度

我们使用这些结构化预处理步骤的顺序
1。取消数据倾斜-log转换的倾斜
2。标准化到相同的平均值
3。比例化到相同的标准偏差
4。存储为单独的数组用于分簇

#解决数据倾斜,log transfrom
rfm_log = rfm.apply(np.log, axis = 1).round(3)

# 查看分布
f,ax = plt.subplots(figsize=(10, 12))
plt.subplot(3, 1, 1); sns.distplot(rfm_log.Recency, label = 'Recency')
plt.subplot(3, 1, 2); sns.distplot(rfm_log.Frequency, label = 'Frequency')
plt.subplot(3, 1, 3); sns.distplot(rfm_log.MonetaryValue, label = 'Monetary Value')
plt.style.use('fivethirtyeight')
plt.tight_layout()
plt.show()

在这里插入图片描述

在这里插入图片描述
接下来运用kmeans聚类人群

  1. 数据预处理
  2. 选择一些集群
  3. 对预处理数据运行k-means聚类
  4. 分析每个集群的平均RFM值

数据预处理

#标准化变量
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
scaler.fit(rfm_log)
#存储导独立的数组里
rfm_normalized= scaler.transform(rfm_log)

选择合适的簇值

肘部判定方法
绘制群集数量与群集内的平方和误差(SSE) -从每个数据点到其群集中心的平方距离的和
在情节中找出一个“肘部”
肘部——代表“最佳”簇数的点

from sklearn.cluster import KMeans

#获取最佳的kmeans
ks = range(1,8)
inertias=[]
for k in ks :
    # Create a KMeans clusters
    kc = KMeans(n_clusters=k,random_state=1)
    kc.fit(rfm_normalized)
    inertias.append(kc.inertia_)

# Plot ks vs inertias
f, ax = plt.subplots(figsize=(15, 8))
plt.plot(ks, inertias, '-o')
plt.xlabel('Number of clusters, k')
plt.ylabel('Inertia')
plt.xticks(ks)
plt.style.use('ggplot')
plt.title('find the best clustering ?')
plt.show()

在这里插入图片描述
如图,我们在图中选择一个“肘”,在这里选择斜率开始缓慢下降的点,故选择3作为kmeans的簇

# 创建kmeans类
kc = KMeans(n_clusters= 3, random_state=1)
kc.fit(rfm_normalized)

#创建一个聚类后的标签列
cluster_labels = kc.labels_

#增加新列
rfm_k3 = rfm.assign(K_Cluster = cluster_labels)

#计算每个簇下的R F M值的平均值
rfm_rfm_k3.groupby('K_Cluster').agg({'Recency': 'mean','Frequency': 'mean','MonetaryValue': ['mean', 'count'],}).round(0)

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于产品的RFM模型的k-means聚类分析 的相关文章

  • scikit-learn LinearRegression 的意外交叉验证分数

    我正在尝试学习使用 scikit learn 来完成一些基本的统计学习任务 我认为我已经成功创建了适合我的数据的线性回归模型 X train X test y train y test cross validation train test
  • 使用 Flask 从 Jinja 模板中的 settings.py 文件获取变量

    假设我有 settings py 文件 其中包含一堆常量 将来可能会更多 如何访问 Jinja 模板中的这些变量 Flask 会自动将您的应用程序的配置包含在标准上下文 http flask pocoo org docs templatin
  • Python(openpyxl):将数据从一个excel文件转移到另一个(模板文件)并用另一个名称保存,同时保留模板

    我有一个templateexcel 文件名为template xlsx其中有许多张 我想从单独的地方复制数据 csv文件到第一页template xlsx 命名为data 并将新文件另存为result xlsx同时保留原来的模板文件 我想粘
  • Plotly - 不同颜色的表面

    我正在尝试在 Plotly for Python 中绘制多个曲面 每个曲面具有不同的颜色 具体来说 表面显示了在相空间中不同点采取行动的预测奖励函数 由于我在每个点都有多个可能的操作 因此每个点都是不同的表面 我想对每个表面进行独特的着色
  • 如何在python包中包含.pyx文件

    我在我的包中使用了 cythonpyirt https github com 17zuoye pyirt 但是当我将其发布到 pypi 时 pyx 文件不包含在 tar gz 中 我认为这一定与安装文件有关 但是 我找不到解决这个问题的方法
  • Pandas Dataframe.to_csv 小数=',' 不起作用

    在 Python 中 我正在将 Pandas Dataframe 写入 csv 文件 并希望将小数分隔符更改为逗号 像这样 results to csv D Data Kaeashi BigData ProcessMining Voorbe
  • seaborn 未在定义的子图中绘制

    我正在尝试用这段代码并排绘制两个图表 fig ax1 ax2 plt subplots 1 2 sns displot x X train Age hue y train ax ax1 sns displot x X train Fare
  • 如何在Python模拟中调用模拟方法

    我想创建一个模拟方法来调用被模拟的底层方法 我正在想象类似以下的内容 但我找不到任何有关模拟对象的文档 该对象包含对被模拟对象的引用 我将其表示为 wrapped method foo below from mock import patc
  • Python:选择多个已安装模块版本之一

    在我的系统上 我多次安装了多个模块 举个例子 numpy 1 6 1安装在标准路径中 usr lib python2 7 dist packages 我有一个更新版本numpy 1 8 0安装于 local python lib pytho
  • 您能否从函数、args 和 kwargs 确定变量将如何分配?

    我有一些样板逻辑 我想包装几个具有相同可选关键字的函数 现在看起来像下面的代码 但是 这仅处理 opt key 作为关键字传递的情况 而不是按位置传递 解决这个问题的一种方法是了解如何解决参数分配 是否有一些元函数接受函数 args 和 k
  • 在 matplotlib 中分割图例

    是否有可能将一个大图例分成多个 通常是 2 个 较小的图例 from pylab import t arange 0 0 2 0 0 01 s sin 2 pi t plot t s linewidth 1 0 label Graph1 g
  • Django:上传前调整图像大小

    我想调整图像大小 Pillow 在上传之前 我在下面编写了代码但不起作用 并得到错误 myapp list 处的属性错误 坚定的 请求方式 POST 请求网址 http 127 0 0 1 8000 myapp list http 127
  • os.path.expanduser("~") 的替代方案?

    在Python 2 7 x中 os path expanduser Unicode 已损坏 这意味着如果 的扩展中包含非 ASCII 字符 则会出现异常 http bugs python org issue13207 http bugs p
  • 将 Python 3 的“范围”“向后移植”到 Python 2 是一个坏主意吗?

    我的一门课程要求用 Python 完成作业 作为练习 我一直使用如下脚本确保我的程序可以在 Python 2 和 Python 3 中运行 bin bash Run some PyUnit tests python2 test py pyt
  • Anaconda (Python) - Windows 10 上的 Cmder 集成

    我在 Windows 10 64 位上通过 Anaconda 让 Cmder 使用 Python 时遇到了一些麻烦 我让 Anaconda 工作得很好 测试过用 matplotlib 绘制一些东西 它与 Anaconda Prompt 一起
  • 使用 pyinstaller 制作的可执行文件出现运行时错误

    所以我使用 Pygame 制作了一个游戏 现在我想用它制作一个可执行文件 首选独立可执行文件 所以我用它来制作可执行文件 pyinstaller onefile main py 编译顺利 但运行时出现错误 这是错误 Traceback mo
  • python 中的优化标准化

    在优化过程中 对输入参数进行归一化 使它们处于同一数量级 通常会很有帮助 这样收敛效果会更好 例如 如果我们想要最小化 f x 而合理的近似值是 x0 1e3 1e 4 则将 x0 0 和 x0 1 归一化到大约相同的数量级可能会有所帮助
  • Mac 上的 PythonXY?

    如何在 Mac OS X Lion 上安装 Python 我开始了 它应该能够通过 macports 但无论如何我找不到 mac ports 网站上所述的端口 pythonXY 我对 MAC 和 pythonXY 都不太了解 但在 pyth
  • 媒体文件上的 404 - Django

    昨晚我将项目上传到 pythonanywhere com 我想在那里测试我的项目生产设置 在我允许的模型之一中用户上传JPG 团队徽标 上传过程运行良好 文件位于我的 MEDIA ROOT 中 问题是 当我尝试在模板中访问它 以将其显示在页
  • Python 线程与 Linux 中的多处理

    基于此question https stackoverflow com questions 807506 threads vs processes in linux我假设创建新流程应该几乎和创造新线程在Linux中 然而 很少的测试显示出截

随机推荐

  • word无法显示图片的问题终于搞定!oh yeah!

    我的word中的图片只显示一个方框 这个问题困扰我有一段时间了 今天终于搞定 原因如下 Word中不能显示公式 问 在Word 2003中编辑好的公式无法显示 只显示为一个方框 该怎么办 答 Word把使用公式编辑器输入的公式作为图形处理
  • SPECCPU 2017测试指导

    一 依赖包下载安装 安装前需要安装依赖包 可通过本地源进行安装 yum install gcc gfortran 离线场景下需要外网下载好后传到本地再安装 Deepin gfortran安装包手动安装3个gfortran的包 可选 yum
  • UDS应用层协议解析(史上最全)

    UDS应用层协议解析 UDS应用层协议解读 下 诊断服务分类 基础服务类 0x10 诊断会话模式 任何会话模式切换至默认会话模式时 非默认会话模式下设置的状态需要reset 28服务 85服务设置的状态需要恢复至默认状态 27服务解锁状态需
  • Win平台搭建WordPress环境

    Win平台搭建WordPress环境 WordPress是一个开源流行的个人信息发布平台 使用PHP编写 现在有众多的网站都使用WordPress来搭建的 同时WordPress还提供了大量的插件 能够帮助人们搭建个性化的网站 安装PHP
  • 在IntelliJ IDEA上使用Maven创建Spring项目HelloWorld

    因为IDEA自带Maven插件 所以使用IDEA是不需要在下载Maven的文件的 也可使用自己下载的Maven Spring我们则是通过Maven来下载构建 所以不需要下载jar包的 大神勿喷 请自行绕道 本博客面向第一次接触spring的
  • 使用Python绘制语音信号的波形图

    improt library import numpy as np import wave import pylab as pl download open souce audio in http www voiptroubleshoote
  • (一)基于物联网的智能安防监控机器人2207231212569

    基于物联网的智能安防监控机器人2207231212569 项目摘要 机器人是人类一直期待的东西 但自动化的东西有点不同 理想情况下 机器人能够做的事情比自动化机器人想做的要多得多 自动化机器人希望实现监控和制造商想要实现的另一主要可用性 但
  • 【六袆 - Dubbo】Dubbo服务的简单调用;

    这里写目录标题 1 Dubbo服务的基本调用过程 1 1在Java中定义dubbo服务 以interface接口的方式 1 2 Provider提供服务的具体实现 并声明为dubbo服务 1 3 Consumer使用dubbo服务 1 Du
  • ArrayList LinkedList Set HashMap介绍

    在Java中提供了Collection和Map接口 其中List和Set继承了Collection接口 同时用Vector ArrayList LinkedList三个类实现List接口 HashSet TreeSet实现Set接口 直接有
  • 11-13 输入输出流的位置

    1 获取文件流的读取位置 使用 ftell 函数可以获取当前文件流的读取位置 其返回值为当前位置距 0 位置的字节数 文件以二进制形式打开后 默认从 0 位置开始读取 读取一定字节后 读取位置会向后推移该字节数 例如下面的代码 未读取时 p
  • Java中FileInputStream简介说明

    转自 Java中FileInputStream简介说明 FileInputStream简介说明 FileInputStream对象的功能用于从文件中读取数据 我们可使用new 关键字创建此对象 FileInputStream功能 用于从文件
  • C++报错 invalid operands to binary expression

    C 报错 invalid operands to binary expression c 为什么加 const 就解决了 invalid operands to binary expression c 为什么加 const 就解决了 inv
  • 四种IO模型

    四种IO模型 目录 一 什么是IO 二 阻塞IO 三 非阻塞IO 四 信号驱动IO 五 异步IO 目录 一 什么是IO 对于IO的简单理解 我们首先通过两个数据之间的交互过程来理解什么是IO 向上面这样数据从对应的发送缓冲区发送到对应的接受
  • 视频中的I帧、B帧、P帧

    视频文件都是一帧一帧存储的 为了使文件的大小减小 通常会对文件进行压缩 mpeg4 MP4 文件中的每一帧开始都是固定的 00 00 01 b6 那么在接下来的每一帧分别是什么帧呢 I帧 B帧 P帧 一般在这固定帧的后面2bit就是标志是什
  • 【山河送书第十一期】:朋友圈大佬都去读研了,这份备考书单我码住了,考研书籍五本!!

    朋友圈大佬都去读研了 这份备考书单我码住了 数据结构与算法分析 计算机网络 自顶向下方法 现代操作系统 深入理解计算机系统 概率论基础教程 原书第10版 线性代数 原书第10版 线性代数及其应用 重磅推荐 参与方式 往期赠书回顾 八九月的朋
  • 【翻译】torch.device的使用举例

    参考链接 class torch device 原文及翻译 torch device torch device栏目 class torch device torch device 类型 A torch device is an object
  • 我们为什么选择CentOS

    服务器操作系统大多采用Unix和Linux操作系统 而Linux发行版本系统中 多使用CentOS Redhat Ubuntu Gentoo Debian 而这些发行版本可以大体分为两类 一类是商业公司维护的发行版本 一类是社区组织维护的发
  • Spark Shuffle 中 JVM 内存使用及配置内幕详情

    引言 Spark 从1 6 x 开始对 JVM 的内存使用作出了一种全新的改变 Spark 1 6 x 以前是基于静态固定的JVM内存使用架构和运行机制 如果你不知道 Spark 到底对 JVM 是怎么使用 你怎么可以很有信心地或者是完全确
  • 面试官的技术面试技巧与步骤

    面试官进行技术面试的常用技巧与步骤 面试需求 解读人员需求与岗位说明 了解岗位需求和工作内容 明确岗位对人员的知识技能 工作经验和基本素质要求 面前准备 分析应聘者简历 判断人员需求 岗位说明与应聘人员的匹配度 发现需进一步确认的信息 分析
  • 基于产品的RFM模型的k-means聚类分析

    首先我们可以看看数据集的数据形态 导入rfm数据 查看数据的统计学参数 df pd read csv rfm csv df describe 在实施Kmeans聚类之前 我们必须检查这些关键k means假设 变量对称分布 不倾斜 具有相同