首页
1
最新活动
2
PLC
3
RFM4
https://www.yilanboss.com/ 宜兰头家
Missing parameters [image]

相关连结:https://tmrmds.co/enterprise-training-service/python-data-an ...


使用RFM 顾客分类模型,将客群分成新顾客、常贵客、沉睡客、流失客。企业的主要获利客户一目了然,从市场面、财务面、行销面、产品面与顾客回购面,找出现有客户之产品行销调整策略。

学习目标:
深入五个面向,提供企业学员深入健诊的方向:
 •市场面:以最基本的顾客消费资料(频率、购买次数),顾客分类。
 •财务面:计算出在每个顾客身上所赚得毛利,在不同客群中的获利。
 •行销面:藉由RFM的分析进行行销预算重新分配。
 •产品面:观察在不同客群中,各个产品的销售状况。
 •顾客回购面:分析顾客的购买周期后,进行精准推荐。





cd2e3b22962bc48465f7a09ac5c92c7e.png

程式码

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Tue Apr 28 12:32:20 2020

@author: ivan
"""
import pandas as pd
import datetime
import numpy as np

orders = pd.read_csv('orders.csv')
#空值该列全部删除
orders.dropna(inplace = True)


##### 算出每个客户的购买清单 #####
# pivot_table:计算每个人在banana、water与milk的消费数量
orders['values'] = 1
purchase_list = orders.pivot_table(index=['clientId','gender','orderdate'], #分类条件
columns='product', # 目的栏位
aggfunc=sum, # 计算方式,max, min, mean, sum, len
values='values' #根据栏位
).fillna(0).reset_index()

##### 最近一次消费计算 #####
# 设定今天的日期为最近一位顾客购买的日期,从那天来看过往的销售状况
theToday = datetime.datetime.strptime(orders['orderdate'].max(), "%Y-%m-%d")
# 将购买清单资料中'orderdate'的栏位,全部转换成datetime格式
purchase_list['orderdate'] = pd.to_datetime(purchase_list['orderdate'])
# 计算消费者至今再次购买与上次购买产品的时间差'
purchase_list['recency'] =( theToday - purchase_list['orderdate'] ).astype(str)
# 将'recency'栏位中的days去除
purchase_list['recency'] = purchase_list['recency'].str.replace('days.*', #想取代的东西
'', #取代成的东西
regex = True)
# 将'recency'栏位全部转换成int
purchase_list['recency'] = purchase_list['recency'].astype(int)


##### 计算购买间隔 #####
purchase_list['interval'] = purchase_list.groupby("clientId", #分类条件
as_index = True # 分类条件是否要取代Index
)['orderdate'].diff()
purchase_list.dropna(inplace = True)#删除第一次来本店的资料
purchase_list['interval'] = purchase_list['interval'].astype(str) # 将时间资料转成字串
purchase_list['interval'] = purchase_list['interval'].str.replace('days.*', '').astype(int) #将栏位中的days去除


purchase_list['interval'].describe()
purchase_list['interval'].quantile([0.25, 0.5, 0.75])
purchase_list['interval'].quantile([0.16, 0.32, 0.5, 0.66, 0.82])









1-1


2-1



2-2


2-3


2-4