首页 >> 运营 >> Python实现基于数据分析的RFM模型

Python实现基于数据分析的RFM模型

2023-03-02 运营

darkgrid') # 里面记事辨识疑问克服 plt.rcParams['font.sans-serif'] = ["SimHei"] plt.rcParams["axes.unicode_minus"] = False # 转换成例子数据资料 np.random.seed(123) centers = [[2, 1], [6, 5], [10, 3]] n_clusters = len(centers) X, labels_true = make_blobs(n_samples=300, centers=centers, cluster_std=0.7) plt.scatter(X[:,0],X[:,1],c='red',marker='o', label='抽样') plt.legend() plt.savefig('example.jpg',dpi=200) plt.show()

编码解读:

首先特设建模的表现形式为seaborn下的黑格子状态,其次必需围绕(2,1),(6,5),(10,3)这三个点(类里面心点)构造抽样集。能用make_blobs()给定只需实现抽样集,该给定里面可以的游戏抽样集的数量n_samples和国际标准差cluster_std。最终以散点示意图范例塑造。

最终调用KMeans硬件,将该抽样集来进行聚类,用建模的模式对聚类后结果来进行塑造,结果如下示意图

可以确切看见,聚类结果为3类,和我们预计的是一致的,接下来看几类里面心点于原设计的里面心点对比,如下所列。

从上所列可以窥见新,聚类里面心点是存在微小相似之处的,这也说明KMeans硬件时为了让伤亡给定来进行迭代的。无关编码如下

# K-Means聚类 from sklearn.cluster import KMeans sns.set_style('darkgrid') # 里面记事辨识疑问克服 plt.rcParams['font.sans-serif'] = ["SimHei"] plt.rcParams["axes.unicode_minus"] = False # 数学分析方法也就是说 k_means = KMeans(init="k-means++", n_clusters=3) k_means.fit(X) # 建模结果 fig = plt.figure(figsize=(15,8)) colors = ["#4EACC5", "#FF9C34", "#4E9A06"] k_means_cluster_centers = k_means.cluster_centers_ k_means_labels = k_means.labels_ ax = fig.add_subplot() for k, col in zip(range(n_clusters), colors): my_members = k_means_labels == k cluster_center = k_means_cluster_centers[k] ax.plot(X[my_members, 0], X[my_members, 1], "w", markerfacecolor=col, marker="*") ax.plot( cluster_center[0], cluster_center[1], "o", markerfacecolor=col, markeredgecolor="k", markersize=6, ) ax.set_title("KMeans聚类结果") #ax.set_xticks() #ax.set_yticks() plt.savefig('例子结果.jpg',dpi=200)

编码解读:

KMeans(init="k-means++", n_clusters=3)这段编码即将有约支架也就是说上述的抽样集。其里面,init参数即为上述所讲KMeans++的初始化必需模式。而后的参数为的游戏分开多少类。

也就是说后的KMeans有约支架是可以来进行调用的,这里我们调用类里面心点(k_means.cluster_centers_)和抽样从属几类(k_means.labels_)。

最终一段编码是结合类里面心点和抽样从属几类来进行建模展出新,可以来得加确切的看见聚类后的结果。(TIps:最终保存示意幻灯片的dpi是微调屏幕的,在Python解释支架里面普通用户保存的示意图象屏幕普遍都不较低,受众可以必需的特设。)

三 基于K-Means的RFM客户服务分群实现

数据资料来源 首先数据资料的来源依旧是在前记事(Python做到基于客观事实的RFM数学分析方法)所中用的已经执行好的数据资料,即有user_id、R、F、M4个字符串的数据资料,数据资料展出新如下,如有受众不似乎该数据资料是如何执行,可以谈到前记事。

K-Means数学分析方法实现(编码)

有了数据资料和scikit-learn库里面的KMmeans硬件的明白,那么接下来先上完整编码和说明了,数学分析方法实现的编码如下

# RMF新武支架 import pandas as pd import seaborn as sns sns.set_style('darkgrid') # 里面记事辨识疑问克服 plt.rcParams['font.sans-serif'] = ["SimHei"] plt.rcParams["axes.unicode_minus"] = False ## 数据资料读取 data = pd.read_excel('rfm.xlsx') X = data.drop(columns = 'user_id') ## KMeans数学分析方法实现 k_means = KMeans(init="k-means++", n_clusters=8,random_state=123) k_means.fit(X) ## 几类检视 data['categories'] = k_means.labels_ ## 无关属性检视 k_means.cluster_centers_ k_means.verbose ## 机支架帮助判别(等深分箱) result = k_means.cluster_centers_ reuslt = pd.DataFrame(result) reuslt['R_label'] = pd.qcut(reuslt[2],2,labels = range(1,3)).astype('int') reuslt['F_label'] = pd.qcut(reuslt[0],2,labels = range(1,3)).astype('int') reuslt['M_label'] = pd.qcut(reuslt[1],2,labels = range(1,3)).astype('int') ## 客户服务分类打标签 for i,j in data.iterrows(): if j['categories'] == 0 or j['categories'] == 2: data.loc[i,'客户服务几类'] = '一般其发展浏览支架' if j['categories'] == 1 or j['categories'] == 5: data.loc[i,'客户服务几类'] = '极为重要价最大值浏览支架' if j['categories'] == 3 or j['categories'] == 7: data.loc[i,'客户服务几类'] = '极为重要始终保持客户服务' if j['categories'] == 4 or j['categories'] == 6: data.loc[i,'客户服务几类'] = '一般应允客户服务' # 建模 cate_sta = data['客户服务几类'].value_counts() cate_sta = pd.DataFrame(cate_sta) sns.barplot(y='客户服务几类', x=cate_sta.index, data=cate_sta) plt.title('浏览支架几类统计学') plt.show() 编码说明了: 首先,确切我们的数学分析方法实现期望。对于一份客户服务暴力行为价最大值数据资料而言,我们是不知道这其里面只不过涵盖几种几类的客户服务的,不太可能会涵盖了8类,也不太可能会涵盖3类等。而这个几类的确定就必需通过KMeans数学分析方法自动的去识别。因此,首先我们的游戏聚类的簇(几类比例)为RFM里面的总几类数量8种,初始化的类里面心点依旧使用KMeans++的模式。这段内容在上面注释为KMeans数学分析方法实现大部分。 有了也就是说后的数学分析方法后,我们就必需检视也就是说后的无关属性结果,k_means.cluster_centers_,k_means.labels_这两个给定分别检视8个类里面心点和对于每个id从属的几类。 接着,有了类里面心点之后,我们就必需对类里面心点来进行等深分箱。 最终赋予每个浏览支架除此以外的客户服务几类并来进行建模直观展出新,下面将具体对结果来进行揭示。 K-Means数学分析方法结果计息 为了让在第二大部分所学知识,只需对这份数据资料来进行一个KMeans聚类,给予的结果如下所列:

从上示意图可以看见,为了让KMeans的有约支架,我们已经给予了每个id从属的几类,那么现在的疑问是,该怎么判别浏览支架是哪种客户服务几类呢(Tips:浏览支架几类分别为8种,不似乎的受众可以谈到前记事),这时候就必需中用类里面心点,通过判别类里面心点来给每种分类一个判别,下所列为每个几类相同的类里面心点。

有了每个几类的类里面心点,我们就必需对每个类赋予RFM数学分析方法里面的客户服务几类,本记事在这方面必需分箱的精准来进行分类。

对类里面心点做到等深分箱,与前记事能用凸分箱有所不同,这里采取的是指定每个几类种的个数是一致的,这也符合RFM数学分析方法里面的每个最大值都有4个较低,4个偏较低。在Python里面为了让pd.qcut()给定来进行分箱,其参数与凸分箱大同小异,很感兴趣的受众可以研究工作。最终以"2"都是较低,"1"都是偏较低。并按照RFM的规则将每种几类赋予一个客户服务几类,结果如下所列:

最终,以柱状示意图的范例展出新该份数据资料集里面的客户服务几类总数

具体数最大值如下所列:

四 对比与揭示

与前记事(Python做到基于客观事实的RFM数学分析方法)对比,本记事将该份数据资料集里面的浏览支架分别为4类(一般其发展浏览支架、极为重要始终保持客户服务、一般应允客户服务、极为重要价最大值浏览支架),而前记事将浏览支架分别为5类(一般其发展浏览支架、一般应允浏览支架、极为重要应允客户服务、一般始终保持浏览支架、极为重要其发展浏览支架)。可以窥见新,两者都识别出新了一般其发展浏览支架的信息,且其所占比例也是最多的。有所不同之处在于,基于KMeans聚类数学分析方法的RFM数学分析方法可以发掘出新极为重要始终保持客户服务、极为重要价最大值浏览支架的信息,而基于客观事实的RFM数学分析方法对一般应允浏览支架较为恰当。

因此,对于决策而言,每个数学分析方法给予的RFM数学分析方法是不一致的,而决策应该从数学分析方法结果的相同点入手,如该份数据资料,两个数学分析方法都发掘出新了一般其发展浏览支架所占比例是最大的,都是其说明了性强。而对于数学分析方法外的有所不同点,则必需来得集里面的探讨如何为重的疑问。

CDA数据资料分析家联合推出新。

江苏皮肤病医院哪家医院好
天津看妇科哪里最好
泉州白癜风医院哪家治疗最好
杭州妇科医院哪个专业
上海皮肤病医院哪家比较好
友情链接