精华内容
下载资源
问答
  • python rfm模型实现

    千次阅读 2019-06-26 09:00:53
    RFM模型,及最近消费时间间隔recency,消费频率Frequency,消费金额Monetary来进行客户细分。本案例用一定时间累积飞行里程M,和乘坐舱位所对应的折扣系数的平均值C代替消费金额。增加客户关系长度L,构成了LRF...

    原数据是航空公司客户数据,目的是对客户分类(按价值等因素),对不同客户类别进行特征分析,比较不同客户的客户价值,对不同价值的客户提供个性化服务。
    所有数据指标如下图所示

    指标及其含义
    RFM模型,及最近消费时间间隔recency,消费频率Frequency,消费金额Monetary来进行客户细分。本案例用一定时间累积飞行里程M,和乘坐舱位所对应的折扣系数的平均值C代替消费金额。增加客户关系长度L,构成了LRFMC模型。
    传统的rfm模型依据三个指标的平均值进行划分,分成约8类,此次的LRFMC模型采用K-Means聚类,识别出最有价值客户。

    第一步选取观测窗口,然后对数据进行初步探索,看其中各参数空值情况及最大值最小值

    import pandas as pd
    
    datafile= '../data/air_data.csv' #航空原始数据,第一行为属性标签
    resultfile = '../tmp/explore1.xls' #数据探索结果表
    
    data = pd.read_csv(datafile, encoding = 'utf-8') #读取原始数据,指定UTF-8编码(需要用文本编辑器将数据装换为UTF-8编码)
    
    explore = data.describe(percentiles = [], include = 'all').T #包括对数据的基本描述,percentiles参数是指定计算多少的分位数表(如1/4分位数、中位数等);T是转置,转置后更方便查阅
    explore['null'] = len(data)-explore['count'] #describe()函数自动计算非空值数,需要手动计算空值数
    print(explore.columns)
    explore = explore[['null', 'max', 'min']]
    explore.columns = [u'空值数', u'最大值', u'最小值'] #表头重命名
    '''这里只选取部分探索结果。
    describe()函数自动计算的字段有count(非空值数)、unique(唯一值数)、top(频数最高者)、freq(最高频数)、mean(平均值)、std(方差)、min(最小值)、50%(中位数)、max(最大值)'''
    
    explore.to_excel(resultfile) #导出结果
    

    第二部数据的预处理
    因为数据中包含极小量的票价为空及票价为0但是总飞行公里数大于0的错误记录,可直接将其删除。

    import pandas as pd
    
    datafile= '../data/air_data.csv' #航空原始数据,第一行为属性标签
    cleanedfile = '../tmp/data_cleaned.csv' #数据清洗后保存的文件
    
    data = pd.read_csv(datafile,encoding='utf-8') #读取原始数据,指定UTF-8编码(需要用文本编辑器将数据装换为UTF-8编码)
    
    data = data[data['SUM_YR_1'].notnull()*data['SUM_YR_2'].notnull()] #票价非空值才保留
    
    #只保留票价非零的,或者平均折扣率与总飞行公里数同时为0的记录。
    index1 = data['SUM_YR_1'] != 0
    index2 = data['SUM_YR_2'] != 0
    index3 = (data['SEG_KM_SUM'] == 0) & (data['avg_discount'] == 0) #该规则是“与”
    data = data[index1 | index2 | index3] #该规则是“或”
    
    data.to_excel(cleanedfile) #导出结果
    

    第三部对数据进行标准化

    import pandas as pd
    datafile = '../data/zscoredata.xls' #需要进行标准化的数据文件;
    zscoredfile = '../tmp/zscoreddata.xls' #标准差化后的数据存储路径文件;
    #标准化处理
    data = pd.read_excel(datafile)
    data = (data - data.mean(axis = 0))/(data.std(axis = 0)) #简洁的语句实现了标准化变换,类似地可以实现任何想要的变换。
    data.columns=['Z'+i for i in data.columns] #表头重命名。
    
    data.to_excel(zscoredfile, index = False) #数据写入
    

    第四部 模型建立

    mport pandas as pd
    from sklearn.cluster import KMeans #导入K均值聚类算法
    
    inputfile = '../tmp/zscoreddata.xls' #待聚类的数据文件
    k = 5                       #需要进行的聚类类别数
    
    #读取数据并进行聚类分析
    data = pd.read_excel(inputfile) #读取数据
    
    #调用k-means算法,进行聚类分析
    kmodel = KMeans(n_clusters = k, n_jobs = 4) #n_jobs是并行数,一般等于CPU数较好
    kmodel.fit(data) #训练模型
    
    kmodel.cluster_centers_ #查看聚类中心
    kmodel.labels_ #查看各样本对应的类别
    
    然后根据聚类中心的特点(里面LRFMC五个值的高低)为几类进行用户画像,定义其特点。
    
    展开全文
  • 主要介绍了Python pandas RFM模型应用,结合实例形式详细分析了pandas RFM模型的概念、原理、应用及相关操作注意事项,需要的朋友可以参考下
  • 数据分析RMF模型之Python实现一、RFM模型接地气解读1.身边的RFM2.业务中的RFM3.RFM分类种类二、Python实现1.思路概要(1)数据(2)计算字段(3)评分(4)分类2.Python方法应用建议 一、RFM模型接地气解读 对于小白...

    一、RFM模型接地气解读

    对于小白来说,沾了“模型”的词汇听起来都会高深莫测,但是所有的高深莫测都要落地、接地气才能被业务真正用上。
    RFM模型的作用简单来说就是做用户的分层、分类,到这里听起来还是虚无缥缈。分完类又能干点啥,能为帮助业务做什么呢?

    1.身边的RFM

    比如我月底没钱了,我要和身边的100个认识的人借钱,那么是否我直接群发一个信息可以了呢?

    仔细想想好像不行,正常来说你可能会这么做。

    1. 关系极好的朋友:沙雕,给我200块。
    2. 亲爹:爹,我没钱吃饭了,转我500块。
    3. 普通同学:hello,李哥,能借我100块不,我下周还你,多谢你了。

    但是如果你把内容发乱了就真正沙雕了。

    对普通同学说:沙雕,借我100块。
    对好朋友说:爹,没钱吃饭了,转我500块。
    对亲爹说:hello,李哥,能借我100块不,我下周还你,多谢你了。

    我相信你好像看出点什么了,给用户好分类才能更好地做接下来的运营动作,帮助业务完成最终的目标,上面例子的目标就是“借钱”。

    2.业务中的RFM

    现实中的业务可能是什么样子的呢?

    假如我的公司WhiteSpace有10000个用户,我这次要做一个销售活动,那么我是直接用CRM给10000个用户直接发推广消息吗?

    仔细想想好像也不能,这就和上面的举例是一样的了。

    1. 2015年注册,只买过一次10元的商品,最近的一次下单日期距今超700天,这些用户占30%。(流失用户)
    2. 2016年注册,下单超过100次,最近一次下单日期距今10—30天,平均每单200元。
    3. 2019年注册,下单200次,最近一次下单日期距今10-15天,平均每单50元。

    每条短信3分钱,如果都发,就要花300块,好像也不多,哈哈。那300块成本能带来多少收益呢?这次业务的投入产出比ROI又会咋样呢?

    如果发优惠券,那么每类用户

    1. 都发满200减30?
    2. 都发无门槛10元?
    3. 都发9折券?

    这就是业务真正面对的问题了,那么我们就需要用RFM把用户进行分类了,不同的用户对应不同的运营策略和方法。

    3.RFM分类种类

    常见RFM纬度表
    具体分类见此表,通过R、F、M三个纬度将用户分为8类,对这8类用户进行个性化的运营方法和策略。
    这里要注意,要结合实际的业务去看对用的用户,要实际业务化。
    例如对于今日头条资讯了app,R-最近一次登陆,F-登陆次数,M-在线时常。

    二、Python实现

    1.思路概要

    (1)数据

    首先要有数据,数据至少要包括用户ID、下单时间、消费金额,示例如表。

    user_idorder_timepayment
    999xc2018-10-019999
    666sh2018-07-019999

    (2)计算字段

    首先要求每个用户最近的一次消费时间,也就是最大的order_time,按用户分组,求最大order_time,然后用今天减去最大的Order_time,这样就求出每个用户最后一次消费日期距今的天数。
    用户分组,求最大order_time,今天-最大order_time,求的R值。

    user_idorder_timepaymentR_v(距今天数)
    999xc2018-10-01999910
    666sh2018-07-01999915

    按用户分组,求所有的下单次数F_v,直接分组计数即可

    user_idorder_timepaymentR_v(某时间周期中最近一次消费的距今天数)F_v(某时间周期中下单次数)
    999xc2018-10-0199991020
    666sh2018-07-0199991530

    按用户分组,对消费金额进行求和M_v

    user_idorder_timepaymentR_v(某时间周期中最近一次消费的距今天数)F_v(某时间周期中下单次数)总消费金额
    999xc2018-10-0199991020500
    666sh2018-07-0199991530600

    (3)评分

    有很多中评分的方法,这里只分享平均值纬度评分法。
    分别求出所有用户R_v,F_v,M_v的平均值,然后将每位用户的R_v,F_v,M_v平均值进行比较。
    高于R_v平均值则为0,反之为1,高于F_v平均值为1,反之为0,高于M_v平均值为1,反之为0。R_v数值5越大,得分越低。
    所以我们有得到6列的计算值。

    user_idorder_timepaymentR_v(某时间周期中最近一次消费的距今天数)F_v(某时间周期中下单次数)总消费金额R_meanF_menaM_meanR_scoreF_scoreM_score
    999xc2018-10-0199991020500515200110
    666sh2018-07-0199991530600515200110

    (4)分类

    根据R_score|F_score|M_score的得分,按照分类种类进行判断分类。
    if R_score = 1 and F_score = 1 and M_score = 1:
    then ‘重要价值’
    elif R_score = 1 and F_socre = 0 and M_score = 1:
    then ‘’

    按照第一个图分类即可,这样我们就会得到最后一个分类结果。

    user_idorder_timepaymentR_v(某时间周期中最近一次消费的距今天数)F_v(某时间周期中下单次数)总消费金额R_meanF_menaM_meanR_scoreF_scoreM_scorecustomer_Class
    999xc2018-10-0199991020500515200110一般价值
    666sh2018-07-0199991530600515200110一般价值

    整体思路就是这些了,其实写sql会更简单一些,后面在写个SQL实现吧。

    2.Python方法应用

    数据集可在此下载,大概10W条数据

    导入numpy、pandas、matplotlib

    import numpy as np
    import pandas as pd
    from matplotlib import pyplot as plt
    

    设置数据集路径

    path_order = '/Users/valkyrja/Documents/dataanalysis/数据集/巴西/olist_orders_dataset.csv'
    path_payment = '/Users/valkyrja/Documents/dataanalysis/数据集/巴西/olist_order_payments_dataset.csv'
    path_customer = '/Users/valkyrja/Documents/dataanalysis/数据集/巴西/olist_customers_dataset.csv'
    

    加载数据集

    order = pd.read_csv(path_order)
    payment = pd.read_csv(path_payment)
    customer = pd.read_csv(path_customer)
    

    预览订单数据集

    order.head()
    

    在这里插入图片描述
    有很多列,我们这里只对order_id,customer_id,order_purchase_timestamp三列保留即可,其他列大家可以自己了解下。

    order_t = order[['order_id', 'customer_id', 'order_purchase_timestamp']]
    

    基本的数据清洗,空值、重复值等。

    order_t.isnull().sum()
    order_t.duplicated('customer_id').sum()
    

    在这里插入图片描述
    在这里插入图片描述
    空值和重复值都没有。

    对用户数据集进行预览,观察后值保留customer_id、customer_unique_id

    customer.head()
    

    在这里插入图片描述
    保留所需列,观察空值情况

    customer_t = customer[['customer_id', 'customer_unique_id']]
    customer_t.head()
    customer_t.isna().sum()
    

    在这里插入图片描述
    观察付款数据集

    payment.head()
    

    在这里插入图片描述
    保留order_id、payment_value即可

    payment_t = payment[['order_id', 'payment_value']]
    

    我们看一下订单的重复情况

    payment[payment.duplicated('order_id')]
    

    在这里插入图片描述
    由此看来,order_id是有重复值的,这里一个订单可能又多个方式付款,因此重复。

    所以按order_id进行分组,对消费金额进行求和

    payment_sum = payment_t.groupby('order_id').agg({'payment_value':'sum'})
    

    在这里插入图片描述
    这样每个Order_id就只对应一个总的消费金额了。

    数据集没什么大问题,再预览一下

    print(order_t.head(1))
    print(customer_t.head(1))
    print(payment_sum.head(1))
    

    在这里插入图片描述

    接下来就是将3各表进行连接了,分别使用order_id,customer_id作为连接键。

    cus_order = pd.merge(customer_t, order_t, how = 'left', left_on = 'customer_id', right_on = 'customer_id')
    

    这里先对用户表和订单表进行连接,使用的是merge的方法,形成的用户订单表如下
    在这里插入图片描述
    在将用户订单表和消费金额表进行连接,获得用户订单付款表

    cus_order_pay = pd.merge(cus_order, payment_sum, how = 'left', on = 'order_id')
    

    在这里插入图片描述
    3个表进行左连接之后出现了一个缺失值,直接删除即可。

    再用isna观察下,没有缺失值了。

    cus_order_pay_n = cus_order_pay.dropna()
    cus_order_pay_n.isna().sum()
    

    在这里插入图片描述
    对大表进行统计性分析,发现居然有0元付费情况

    cus_order_pay_n.describe()
    

    在这里插入图片描述
    可能是有优惠,最后付款就是0元,把这些数据拿出来观察下

    cus_order_pay_n[cus_order_pay_n['payment_value'] == 0]
    

    在这里插入图片描述
    只有3行,貌似没什么影响,直接删掉即可。

    cus_order_pay_n = cus_order_pay_n.drop(cus_order_pay_n[cus_order_pay_n['payment_value'] == 0].index)
    cus_order_pay_n.head()
    

    在这里插入图片描述
    基本清洗完的大表。

    将日期字符串转化为datetime类型方便后面的计算

    cus_order_pay_n['order_purchase_timestamp'] = pd.to_datetime(cus_order_pay_n['order_purchase_timestamp'], 
                                                                format = '%Y-%m-%d %H:%M:%S')
    

    观察下数据类型,应该是没什么问题了。

    cus_order_pay_n.info()
    

    在这里插入图片描述
    分别观察最大最小下单日期Timestamp(‘2018-10-17 17:30:18’)、Timestamp(‘2016-09-04 21:15:19’)

    cus_order_pay_n['order_purchase_timestamp'].max()
    cus_order_pay_n['order_purchase_timestamp'].min()
    

    那我们就按照2018-10-20作为分析截止日期

    cus_order_pay_n['now'] = pd.to_datetime('2018-10-20 00:00:00')
    

    计算下每个下单日期距离截止日期的天数

    cus_order_pay_n['R_value'] = cus_order_pay_n['now'] - cus_order_pay_n['order_purchase_timestamp']
    cus_order_pay_n['R_value'].dt.days.head()
    

    在这里插入图片描述
    按唯一的用户id进行分组,求最近一次下单的最小时间、订单数量和消费总金额。

    modle_value = cus_order_pay_n.groupby('customer_unique_id').agg({'R_value':'min',
                                                                    'order_id':'count', 'payment_value':'sum'})
    
    modle_value.head()
    

    在这里插入图片描述

    modle_value.describe()
    

    在这里插入图片描述
    基本的数据出来了,这里做个rename的列重命名

    modle_value.rename(columns = {'R_value':'R', 'order_id':'order_num', 'payment_value':'pay_total'}, inplace = True)
    

    在这里插入图片描述

    对R、F、M进行逻辑判断,是否大于均值

    modle_value['R_v'] = modle_value['R'].apply(lambda x: 1 if x < 290 else 0)
    modle_value['F_v'] = modle_value['order_num'].apply(lambda x: 1 if x > modle_value['order_num'].mean() else 0)
    modle_value['M_v'] = modle_value['pay_total'].apply(lambda x: 1 if x > modle_value['pay_total'].mean() else 0)
    

    在这里插入图片描述
    定义个函数,做最后的分类即可

    def score(x):
        if x['R_v'] == 1 and x['F_v'] == 1 and x['M_v'] == 1:
            return '高质量'
        elif x['R_v'] == 1 and  x['F_v'] == 0 and  x['M_v'] == 1:
            return '重维持'
        elif x['R_v'] == 0 and  x['F_v'] == 1 and  x['M_v'] == 1:
            return '召回'
        elif x['R_v'] == 0 and  x['F_v'] == 0 and  x['M_v'] == 1:
            return '挽留'
        elif x['R_v'] == 1 and  x['F_v'] == 1 and  x['M_v'] == 0:
            return '挖掘'
        elif x['R_v'] == 1 and  x['F_v'] == 1 and  x['M_v'] == 1:
            return '新用户推广'
        elif x['R_v'] == 1 and  x['F_v'] == 1 and  x['M_v'] == 1:
            return '价值不高,一般维持'
        else:
            return '即将流失'
    

    使用apply方法应用函数

    modle_value['score'] = modle_value.apply(score, axis = 1)
    

    在这里插入图片描述
    所有用户就分出类别来了,接下来观察下比列。

    使用计数方法value_counts,换算成占比

    modle_value['score'].value_counts(normalize = True)
    

    在这里插入图片描述
    即将流失占比70%,高质量占比1%。做一个简单的可视化观察下~

    labels = ['loss','important remain','remain','high value','recall','dig']
    sizes = [0.704286,0.148721, 0.120290,0.013154, 0.008065, 0.005484]
    explode = (0.2,0.2,0.6,0.5,0.3,0.2)
    plt.pie(sizes,explode=explode,labels=labels,autopct='%1.1f%%',shadow=False,startangle=150)
    plt.show()
    

    在这里插入图片描述
    这就是最后的用户分类了。

    建议

    根据运营的需要,将分类结果同步业务方,一起讨论针对不同的用户使用何种方法,以及对应投入的成本等。

    一定要去找业务方沟通,别自己直接给判断。

    展开全文
  • RFM 模型 PYTHON

    2020-03-21 14:24:08
    主讲关于RFM模型PYTHON实现 构造虚拟数据表order.xlsx KEY:关注随机函数的应用 具体代码: import pandas as pd df=pd.read_excel(“d:\order.xlsx”) #剔除未成交订单 df=df.loc[df[“订单状态”]==“成交”,:] #...

    RFM模型
    R:购买时间间隔
    F:购买频次
    M:客单价
    主讲关于RFM模型PYTHON实现
    构造虚拟数据表order.xlsx
    在这里插入图片描述
    KEY:关注随机函数的应用

    具体代码:
    import pandas as pd
    df=pd.read_excel(“d:\order.xlsx”)

    #剔除未成交订单
    df=df.loc[df[“订单状态”]==“成交”,:]

    #根据需求取数
    df=df[[“姓名”,“购买时间”,“总额”]]

    #R:购买时间间隔
    r=df.groupby(“姓名”)[“购买时间”].max().reset_index()
    r[‘R’]=(pd.datetime.today()-r[“购买时间”]).dt.days
    r=r[[‘姓名’,‘R’]]

    #F:购买频次
    f=df.groupby(“姓名”)[“购买时间”].count().reset_index()
    f.columns=[‘姓名’,‘F’]
    rf=pd.merge(r,f,on=“姓名”)

    #M:客单价
    m=df.groupby(“姓名”)[“总额”].sum().reset_index()
    m.columns=[“姓名”,“总客价”]
    m[‘M’]=m[‘总客价’] / rf[‘F’]
    m=m[[‘姓名’,‘M’]]

    rfm=pd.merge(rf,m,on=“姓名”)

    rfm[“r-score”]=(rfm[‘R’]<rfm[‘R’].mean())*1
    rfm[“f-score”]=(rfm[‘F’]>rfm[‘F’].mean())*1
    rfm[“m-score”]=(rfm[‘M’]>rfm[‘M’].mean())*1

    rfm[‘综合评分’]=rfm[‘r-score’]*100+rfm[‘f-score’]*10+rfm[‘m-score’]*1

    def result_fun(x):
    if x111:
    result=“重要价值客户”
    elif x
    110:
    result=“一般价值客户”
    elif x101:
    result=“重要发展客户”
    elif x
    100:
    result=“一般发展客户”
    elif x11:
    result=“重要保持客户”
    elif x
    10:
    result=“一般保持客户”
    elif x==1:
    result=“重要挽留客户”
    else:
    result=“一般挽留客户”
    return result

    rfm[“人群价值”]=rfm[‘综合评分’].apply(result_fun)

    rfm.to_csv(“d:/rfm.csv”,encoding=“gbk”)
    第二种评分机制:

    在这里插入图片描述
    关于RFM模型的一点儿思考:

    评分机制问题

    按照普遍的做法属于‘分数’制

    示例:R数值bins=[0,5,10,15],labels=[5,4,3]
    打分结果:(labels > labels.mean()) * 1
    理解:根据分值高低,分值越高说明最近有购买行为 当分数大于平均分数 结果为1 【(labels > labels.mean()) * 1】结果为1

    本例:不采用‘分数’制
    打分结果:(R < R.mean())*1
    理解:根据R数值与其均值对比,如果小于均值,说明他最近有购买情况 结果为1 【(R<R.mean())*1】 结果为1

    最近有购买行为 如何判别‘最近’这个概念
    最近一天,最近两天,最近三天,最近四天?
    所以不难理解
    分数制更优

    虽然本例中省了一步
    但是从效果而言 分数制更加严谨

    展开全文
  • 忠诚度不高,但是消费能力强,是非常有潜力的客户,需要重点跟进 模型实现 我模拟生成了一个Dataframe,里面包含三个维度,R,F,M,数据由np.random随机生成 import pandas as pd import numpy as np from sklearn....

    在这里插入图片描述客户价值通过三个维度分成了8个等级
    在这里插入图片描述
    高价值客户(高、高、高):最近消费时间较短、消费频度和消费金额都较高,这是需要重点关注和维护的客户。

    重点保持客户(低、高、高):最近消费时间较长,消费频次和消费金额都较高,说明这是个一段时间没来的忠实客户,需要主动保持联系。

    重点发展客户(高、低、高):最近消费时间较短、消费金额高,但消费频次较低。忠诚度不高,但是消费能力强,是非常有潜力的客户,需要重点跟进

    模型实现
    我模拟生成了一个Dataframe,里面包含三个维度,R,F,M,数据由np.random随机生成

    import pandas as pd
    import numpy as np
    from sklearn.cluster import KMeans
    data = {"R":np.random.randint(0,30,1000),"F":np.random.randint(0,20,1000),"M":np.random.randint(0,2000,1000)}
    frame = pd.DataFrame(data)
    frame
    frame.describe()
    

    在这里插入图片描述
    在这里插入图片描述
    我们随机选取中心点,并分成8个簇

    clf = KMeans(n_clusters = 8,random_state = 50)
    clf.fit(frame)
    

    我们看看这8个簇中心点的坐标分别在哪里

    8point = pd.DataFrame(clf.cluster_centers_,columns = ['R','F','M'])
    8point
    

    在这里插入图片描述
    然后我们找寻RFM三个类别的中心点,根据大于小于这个中心点,我们把总的数据分成8个类型。

    rmd = 8point['R'].median()
    fmd = 8point['F'].median()
    mmd = 8point['M'].median()
    rmd,fmd,mmd
    

    在这里插入图片描述
    我们写一个函数,对表格进行加工贴上标签

    def customer_type(frame): 
        customer_type = []
        for i in range(len(frame)):
            if frame.iloc[i,0]>=rmd and frame.iloc[i,1]>=fmd and frame.iloc[i,2]>=mmd:
                customer_type.append('高价值客户')
            elif  frame.iloc[i,0]<rmd and frame.iloc[i,1]>=fmd and frame.iloc[i,2]>=mmd:
                customer_type.append('重点保持客户')
            elif  frame.iloc[i,0]>=rmd and frame.iloc[i,1]<fmd and frame.iloc[i,2]>=mmd:
                customer_type.append('重点发展客户')
            elif  frame.iloc[i,0]<rmd and frame.iloc[i,1]<fmd and frame.iloc[i,2]>=mmd:
                customer_type.append('重点挽留客户')
            elif  frame.iloc[i,0]>=rmd and frame.iloc[i,1]>=fmd and frame.iloc[i,2]<mmd:
                customer_type.append('一般价值客户')
            elif  frame.iloc[i,0]<rmd and frame.iloc[i,1]>=fmd and frame.iloc[i,2]<mmd:
                customer_type.append('一般保持客户')
            elif  frame.iloc[i,0]>=rmd and frame.iloc[i,1]<fmd and frame.iloc[i,2]<mmd:
                customer_type.append('一般发展客户')
            else:
                customer_type.append('潜在客户')
        frame['客户分类'] = customer_type
    

    我们对我们的数据使用这个函数

    customer_type(frame)
    frame
    

    在这里插入图片描述
    再看看各个分类有多少人数

    frame.groupby(by='客户分类').size()
    

    在这里插入图片描述在这里插入图片描述
    这里用matplotlib做了一个粗略的图,感觉要做好看的图还是得导出数据用tableau
    最后看看高价值用户有哪些:

    frame[frame['客户分类']=='高价值客户']
    

    在这里插入图片描述
    总结:这是我模拟的指标,对于实际的指标,也可以按照同样的方法对客户进行分类,然后根据不同的客户选择不同的运营策略

    展开全文
  • Python实现RFM建模

    千次阅读 2020-03-02 22:04:41
      1、RFM模型的含义   2、RFM分析的前提条件   3、原始数据   4、数据处理    4.1、什么是R、F、M呢?    4.2、熟悉数据集    4.3、保留有效数据    4.4、选取有效字段    4.5...
  • python实现RFM建模

    千次阅读 多人点赞 2020-02-21 13:05:05
      1、RFM模型的含义   2、RFM分析的前提条件)   3、原始数据   4、数据处理    4.1、什么是R、F、M呢?    4.2、熟悉数据集    4.3、保留有效数据    4.4、选取有效字段    4.5、缺失值处理 ...
  • 点击上方“超哥的杂货铺”,轻松关注本文目录:01.数据概览02.数据清洗03.维度打分04.分值计算05.客户分层06.结果分析 本文从RFM模型概念入手,结合实际案例,详解Pyt...
  •   对利用Python进行数据分析有一定的了解后,再加上一些业务知识;把理论与实际相结合的需求也呼之欲出。将编程语言应用到实际商务实践中也还是一件比较有成就感的事情。本博文源起是笔者最近总是收到如下“骚扰”...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,394
精华内容 957
关键字:

rfm模型python

python 订阅