精华内容
下载资源
问答
  • 行业资料-电子功用-基于可扩展用户细分模型的有序用电数据转换方法及装置.pdf
  • 用户群体细分(RFM模型)-附件资源
  • 从电子政务用户的角度出发,首先对电子政务用户的相关文献进行了论述,接着对电子政务...在此基础上,构建了电子政务的用户群体关系模型。最后,讨论了该模型在电子政务研究与实践中的应用,并对以后的研究提出了展望。
  • 基于RFM模型与kmeans聚类的用户细分

    千次阅读 2020-02-29 12:51:54
    用户与商品(or服务)是企业最重要的资产,当用户数量增长到一个比较庞大的规模,如何有效地管理是需要关注的问题,而用户细分、差异化运营正是是一个可考虑的方向。将相似的用户归类,给每一个类别贴上“标贴”,...

    前面主要是关于客户风险的分析,本文换一个角度,对客户价值做一点研究。

    用户与商品(or服务)是企业最重要的资产,当用户数量增长到一个比较庞大的规模,如何有效地管理是需要关注的问题,而用户细分、差异化运营正是是一个可考虑的方向。将相似的用户归类,给每一个类别贴上“标贴”,然后针对各类的特征制定差异化策略。

    核心流程主要包含以下模块:

    • 用户分群,要求不重不漏,群内差异较小,群间差异较大;
    • 对上一步得到的用户群进行特征分析、价值比较;
    • 针对不同用户群制定差异化管理策略,实现个性化运营。

    主要模型与方法:

    • 特征选择(传统RFM模型,从R——最近购买,F——购买频次,M——平均消费金额)
    • kmeans聚类(聚类分析常用方法:层次聚类与kmeans聚类,选第二种)

    通过一个案例加以说明。

    一、案例背景
    数据探索分析用到订单明细作为源数据,属于比较常见的零售数据类型。
    在这里插入图片描述
    以订单编号标识一条订单记录,商品编码标识订单内的一条明细,以YBM20190201083534100004为例,这条记录由id为106030的用户,在2019/2/1 8:35:35,通过重庆分公司的平台,购买三种商品Y010103201、Y010102635、Y010106332产生。

    抽样保留25万+条,明细跨度为3个月,涉及不同用户1万+。

    二、数据预处理
    订单数据并不能直接建模,首先以RFM模型为基础进行特征选择和统计计算。
    在这里插入图片描述
    处理后的数据如下:
    在这里插入图片描述
    三个指标量纲差距非常大,需要进一步处理,两个思路任选:标准化(均值为0,方差为1);离散化。下面是聚类算法离散化后的结果:
    在这里插入图片描述在这里插入图片描述
    三、用户细分
    kmeans聚类的类别数需要提前给定,我们知道类别一定是分得越多效果越好,但代价一定也就更大,选择一个合适的类别是非常重要的
    1.参考模型
    以纵轴的群内方差作为分类效果的度量,模型可以帮我们找到一个群内差异较小,群间差异较小的类别,从4开始方差下降就不明显了,4、5、6都是可以考虑的类别数。

    在这里插入图片描述
    2.实际需求
    如果公司有财有力,一对一管理都ok,那类别数自然可以放宽。
    又或是公司有心无力,多一条差异化策略也没有,那多一个类别多一份负担。

    3.模型结果
    分类的要求不只是分开而已,更为重要的是提取各类别的特征,为决策服务。如果出现模型显著,但结果无法解释,或者特征明显,但是数量特别特别少,也是不行的。

    四、特征提取
    选取4个类别。
    超平面上聚类效果,一个颜色代表一个类别所在的区域。整体聚类效果不错,但1和4有点难分。
    在这里插入图片描述

    四个类别分别在R、F、M三个指标上的表现,各类别特征还是非常明显的,注意R是唯一一个反向指标,越大约糟糕。
    在这里插入图片描述
    每位用户对应一个类别,各类别特征归纳如下,策略写得比较糙,大致方向是这样的。
    在这里插入图片描述
    五、结论与反思

    基于RFM模型和kmeans聚类,可将这份订单数据里用户分为区分度较高的4个类别,针对这四组用户群体各自的特点,考虑制定不同的管理策略。
    有两处地方值得注意:
    输入指标选取,只选择R、F、M是因为源数据信息有限,条件允许可让更多指标参与建模;
    类别数的确定,考虑实际需求以及模型结果的反馈作用。

    部分参考代码:

    #对R、F、M不做标准化而是离散化处理
    #可辅助识别异常值
    library(factoextra);library(ggplot2)
    fviz_nbclust(as.data.frame(dd$R), kmeans, method = "wss")  #5类
    fviz_nbclust(as.data.frame(dd$F), kmeans, method = "wss")  #5类
    fviz_nbclust(as.data.frame(dd$A_M), kmeans, method = "wss")#5类
    
    R<-kmeans(dd$R,5);F<-kmeans(dd$F,5);M<-kmeans(dd$A_M,5)
    table(R$cluster);table(F$cluster);table(M$cluster)
    newdata<-data.frame(R$cluster,F$cluster,M$cluster)
    colnames(newdata)<-c('R','F','M');rownames(newdata)<-dd$用户id
    
    #类别特别少的摘出去
    spe<-newdata[which(newdata$F==5|newdata$M==5),]
    remain<-newdata[-which(newdata$F==5|newdata$M==5),]
    
    #knn聚类
    fviz_nbclust(remain, kmeans, method = "wss")  #4或者6
    result <- kmeans(remain,4)
    type <- result$cluster
    table(type) 
    
    #可视化1;各维度上的表现
    library(fmsb)
    max <- apply(result$centers, 2, max)
    min <- apply(result$centers, 2, min)
    data.radar <- data.frame(rbind(max, min, result$centers))
    radarchart(data.radar, pty = 32, plty = 1, plwd = 2, vlcex = 0.7)
    # 加图例
    L <- 1.2
    for(i in 1:4){
      text(2, L, labels = paste("--class", i), col = i)
      L <- L - 0.2
    }
    
    #可视化2:聚类效果
    fviz_cluster(result,remain)
    
    展开全文
  • 核心内容:使用python的sklearn的KMeans算法对电商用户进行分类。 包含内容:数据概览、特征构建、k值选择、模型训练、可视化等。

    背景

    聚类分析在机器学习领域属于无监督学习的一种,能够根据一些特征对样本数据进行分类。使用聚类分析分完的类具有“类中相似,类间区别”的特点。RFM模型是非常常见的分析用户价值的方法,其核心思想是根据用户的最近购买时间、购买频次、花费金额3个特征来对用户进行分群,针对每个群体采取不同的营销手段。k-means是常用的聚类分析算法之一,基于欧氏距离对样本进行分类。k-means算法运行速度快,能够处理的数据量大,且易于理解。但缺点也很明显,就是算法性能有限,在高维上可能不是最佳选项。在当前动辄上亿的数据量来看,k-means算法是比较好的选择了。还有需要提醒的一点是,一定要结合业务使用算法,任何特征都可能拿来聚类,但是聚类的结果呢,能不能很好的解释和指导业务?如果不能,那么这个算法就没有什么意义。本次使用的数据来源于数据不吹牛公众号,这里也是小打一波广告。
    本案例将从一个简单的k-means机器学习模型入手,在介绍聚类算法的同时也简单介绍机器学习的常规步骤。

    1、数据概览

    首先,我们导入数据,并查看前5行。

    import pandas as pd
    import numpy as np
    df = pd.read_excel(r'F:\数据分析项目\电商数据的RFM模型\RFM\PYTHON-RFM实战数据.xlsx')
    df.head(5)
    

    在这里插入图片描述
    总览数据:

    df.info()
    

    在这里插入图片描述
    数据共有28833行,9列,而且数据非常干净,没有空值,省去了我们处理空值的过程。
    根据RFM模型的要求,我们需要的是买家昵称、购买日期、实付金额三个变量。其中购买日期和实付金额用于帮助我们训练模型,买家昵称则让我们确定每个用户所属的类别。

    选取交易成功的用户:

    df['订单状态'].value_counts()
    df = df[df['订单状态'] == '交易成功']
    

    在这里插入图片描述
    选择我们需要的字段:

    data = df[['买家昵称', '付款日期',  '实付金额']]
    data.head(5)
    

    在这里插入图片描述

    有个细节需要注意,订单每一行代表着单个用户的单次购买行为,什么意思呢?如果一个用户在一天内购买了4次,订单表对应记录着4行,而在实际的业务场景中,一个用户在一天内的多次消费行为,应该从整体上看作一次。 ----- 数据不吹牛 小Z

    2、特征构建

    根据我们的RFM模型,我们需要构建3列数据,这个原始表中是没有直接提供的,需要我们根据原始表的数据来提取。
    所以这里需要先提取付款日期数据:

    data['paytime'] = pd.to_datetime(data['付款日期'].apply(lambda x:x.date()))
    data.head()
    

    在这里插入图片描述
    根据paytime计算最后一次付款时间距当前的天数(数据引用的背景当前时间是2019-07-01):

    # 提取每个用户最近(最大)的购买日期
    data_r = data.groupby('买家昵称')['paytime'].max().reset_index()
    # 与当前日期相减,取得最近一次购买距当前的天数。
    data_r['recency'] = data_r['paytime'].apply(lambda x:(pd.to_datetime('2019-07-01')-x).days)
    # 两个日期相减,得到的数据类型是timedelta类型,要进行数值计算,需要提取出天数数字。
    data_r.drop('paytime',axis = 1,inplace = True)
    data_r.head()
    

    data_r表
    提取购买次数数据:

    # 分组聚合,得到每个用户发生于不同日期的购买次数
    data_f = data.groupby(['买家昵称','paytime'])['付款日期'].count().reset_index()
    data_f = data_f.groupby('买家昵称')['paytime'].count().reset_index()
    # 修改列名
    data_f.rename({'paytime':'frequence'},axis = 1,inplace = True)
    data_f.head()
    

    在这里插入图片描述
    提取购买金额数据,这里的金额我们使用每个用户的金额/次:

    data_m = data.groupby('买家昵称')['实付金额'].sum().reset_index()
    data_m['money'] = data_m['实付金额']/data_f['frequence']
    data_m.drop('实付金额',axis = 1,inplace = True)
    data_m.head()
    

    在这里插入图片描述
    所以现在我们已经有了包含recency、frequence、money的3个DataFrame表了,下面合并三个表:

    data_rf = pd.merge(data_r,data_f,on = '买家昵称',how = 'inner')
    data_rfm = pd.merge(data_rf,data_m, on = '买家昵称',how = 'inner')
    data_rfm.head()
    

    在这里插入图片描述

    3、查看数据分布特征

    数据的分布特征会影响算法结果,所以有必要先了解数据的大致分布。

    import matplotlib.pyplot as plt
    import seaborn as sns
    plt.figure(figsize = (6,4))
    sns.set(style = 'darkgrid')
    sns.countplot(data_rfm['frequence'])
    

    购买次数的分布

    sns.distplot(data_rfm['recency'])
    plt.title('recency的分布直方图',fontsize = 15)
    

    recency的分布直方图

    sns.distplot(data_rfm['money'],color = 'g')
    plt.title('money的分布直方图',fontsize = 15)
    

    在这里插入图片描述

    4、数据处理及模型构造

    首先,对数据进行标准化处理,这是为了消除量纲的影响。

    from sklearn import preprocessing
    from sklearn.cluster import KMeans
    from sklearn import metrics
    data_rfm_s = data_rfm.copy()
    min_max_scaler = preprocessing.MinMaxScaler()
    data_rfm_s = min_max_scaler.fit_transform(data_rfm[['recency','frequence','money']])
    

    K-Means方法有个经常被人诟病的地方,如何选择K值?也就是要把样本分成多少类呢?如果贸然定一个,会太主观,所以还是要用数据说话。一般采用三个指标:

    • Calinski-Harabaz Index。通过计算类中各点与类中心的距离平方和来度量类内的紧密度,通过计算各类中心点与数据集中心点距离平方和来度量数据集的分离度,CH指标由分离度与紧密度的比值得到。从而,CH越大代表着类自身越紧密,类与类之间越分散,即更优的聚类结果。
    • 轮廓系数。轮廓系数(Silhouette Coefficient),值是介于 [-1,1] ,越趋近于1代表内聚度和分离度都相对较优。也就是尽量选择更大的轮廓系数。
    • inertia值。kmeans自带的评价方法,越小说明聚类效果越好。
    inertia = []
    ch_score = []
    ss_score = []
    for k in range(2,9):
        model = KMeans(n_clusters = k, init = 'k-means++',max_iter = 500)
        model.fit(data_rfm_s)
        pre = model.predict(data_rfm_s)
        ch = metrics.calinski_harabaz_score(data_rfm_s,pre) 
        ss = metrics.silhouette_score(data_rfm_s,pre)
        inertia.append(model.inertia_)
        ch_score.append(ch)
        ss_score.append(ss)
    print(ch_score,ss_score,inertia)
    

    画图可以更加直观看出三个指标的变化:

    score = pd.Series([ch_score,ss_score,inertia],index = ['ch_score','ss_score','inertia'])
    aa = score.index.tolist()
    plt.figure(figsize = (15,6))
    j = 1
    for i in aa:
        plt.subplot(1,3,j)
        plt.plot(list(range(2,9)),score[i])
        plt.xlabel('k的数目',fontsize = 13)
        plt.ylabel(f'{i}值',fontsize = 13)
        plt.title(f'{i}值变化趋势',fontsize = 15)
        j+=1
    plt.subplots_adjust(wspace = 0.3)
    

    score变化
    根据上图中3个指标综合判断,选择k=4时,各指标变化出现明显的拐点,聚类效果相对较优,所以分成四类比较好。

    model = KMeans(n_clusters = 4, init = 'k-means++',max_iter = 500)
    model.fit(data_rfm_s)
    ppre = model.predict(data_rfm_s)
    ppre = pd.DataFrame(ppre)
    data = pd.concat([data_rfm,ppre],axis = 1)
    data.rename({0:u'cluster'},axis = 1,inplace = True)
    data.head()
    

    在这里插入图片描述
    可以看出,每个用户都有了对应的类别,并且可以查看每个类别的中心:

    labels = model.labels_   # 取得各样本的类别数据
    labels = pd.DataFrame(labels,columns = ['类别'])
    result = pd.concat([pd.DataFrame(model.cluster_centers_),labels['类别'].value_counts().sort_index()],axis = 1)
    result.columns = ['recency','frequence','money','cluster']
    result
    

    在这里插入图片描述
    cluster=0时的分布状态:
    在这里插入图片描述
    cluster=1时的分布状态:
    在这里插入图片描述
    cluster=2时的分布状态:
    在这里插入图片描述
    cluster=3时的分布状态:
    在这里插入图片描述

    展开全文
  • 关于数据挖掘应用到电信行业的应用 用户细分\基于数据挖掘的电力行业客户细分模型研究
  • 用户群体细分(RFM模型

    千次阅读 2019-02-03 10:54:09
    #模型训练 fit_kmeans = kmeans_model . fit ( data_standard ) #查看聚类中心 core = kmeans_model . cluster_centers_ #查看样本的类别标签 r = kmeans_model . labels_ #统计不同类别样本的数目 r1 = pd . ...

    在这里插入图片描述

    1. 背景及目的

    背景:市场竞争加剧,航空公司面临旅客流失,竞争力下降和资源未充分利用等经营危机。针对不同客户群体,制定不一样的营销策略,提供个性化服务是必须和有效的。
    目的:借助航空公司客户数据,对客户进行分类。
    案例来源:《Python数据分析与挖掘》
    数据链接:https://pan.baidu.com/s/1-_BtDa-W3CyzKy8jC7bkMQ 提取码:72vp

    2. 数据特征含义

    在这里插入图片描述

    3. 结果展示

    展开全文
  • 用户细分是20世纪50年代中期由美国学者温德尔·史密斯提出的,其理论依据主要有两点: 一是用户需求的异质性。只要存在两个以上的用户,需求就会不同。由于用户需求、欲望及购买行为是多元的,所以用户需求满足呈现...

    用户细分是20世纪50年代中期由美国学者温德尔·史密斯提出的,其理论依据主要有两点:

    一是用户需求的异质性。只要存在两个以上的用户,需求就会不同。由于用户需求、欲望及购买行为是多元的,所以用户需求满足呈现差异。

    二是,企业有限的资源和有效的市场竞争。任何一个企业不能单凭自己的人力、财力和物力来满足整个市场的所有需求。因此,企业应该分辨出它能有效为之服务的最具吸引力的细分市场,然后集中企业资源,制定科学的竞争策略,以取得和增强竞争优势。

    常见的用户细分方法

    用户细分的方法有很多,常见的包括:

    (1)根据用户的外在属性分类。例如按物业项目的类型(住宅、写字楼、商业等)划分、按客户的的地域分布划分、按客户的的组织归属划分(如企业用户、个人用户、政府用户)等。这种划分方法简单、直观,数据也很容易得到,但这种分类相对比较粗放。

    (2)根据用户的内在属性分类。例如性别、年龄、籍贯、信仰、爱好、收入水平、家庭成员数、价值取向等。

    (3)根据用户的消费行为分类。例如客户的消费场所、消费时间、消费频率、消费金额等。通常我们很容易从客户历史消费记录中统计得到这些数据,但这种分类方法显而易见的缺陷就是它只适用于现有的客户。对于潜在的客户,由于消费行为还没有开始分类自然也就无从谈起。

    如何进行用户细分?

    企业进行用户细分,通常经历以下四个流程:

    1.确定细分的指标

    用户细分的指标有很多,刚才上面提到社交属性中的:性别、年龄、地域等;营销数据中的:年费用户、包月用户等,行为数据中的:打开频次,关注行为,注销动作等;除此之外还有其他很多很多细分的指标,细分指标的确定由细分目的和目标用户等相关因素决定。

    2. 用户信息采集

    用户信息包括公司日常运营所积累的用户,通过企业相关调研活动所采集的用户信息,以及第三方合作平台互换的用户信息。

    3. 制定细分标准

    细分标准并没有一个定型,暂且可以归类为售前、售中、售后。售前细分是粗颗粒度细分,筛选,譬如:时间、社交属性等。

    售中细分是根据以往成熟经验模型(案例)可以明确用户行为的细分准则,售后细分为用户类型起初并没有具体的特征形态,根据多个数据特征变量,利用聚类等统计分析方法,而定义的细分标准。

    4.细分用户描述

    将不同类型的用户进行具备其特征的描述,比如:根据用户价值和用户活跃度进行四象限分类为:普通用户、高价值低频用户、低价值高频用户、超级用户,还可以根据用户行为继续往下拆解描述。
    用户细分

    展开全文
  • 行业分类-设备装置-一种基于联合矩阵分解模型的电力用户细分方法
  • 在移动互联网发展带动作用下,电信运营商主营业务已经由传统的语音业务逐渐向移动数据业务方向发展,在这种背景下,互联网企业同移动通讯业务之间的...文章对基于大数据的客户细分模型以及精确营销策略进行深入的研究。
  • 客户细分——RFM模型

    万次阅读 2019-05-08 15:56:02
    一、模型概述 RFM模型是衡量当前客户价值和客户潜在创利能力的重要工具和手段,在众多的客户关系管理(CRM)的分析模式中,RFM模型是被广泛应用的;该模型通过R(Recency)表示客户购买时间有多远,F(Frequency)表示...
  • 用户细分的意义及策略分析

    千次阅读 2019-07-02 14:22:03
    用户细分(User segmentation)是通过分析用户的属性、行为、需求等,寻求客户之间的个性与共性特征,对客户进行划分与归类,从而形成不同的客户集合。 用户细分没有统一的标准,它是从业务角度出发、结合实际应用...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 47,747
精华内容 19,098
关键字:

用户细分模型