当前位置:   article > 正文

Python数据挖掘-RFM模型K-means聚类分析-航空公司客户价值分析_rfm模型 特征衍生

rfm模型 特征衍生

使用教材:《Python数据分析与挖掘实战》
模型:RFM模型
算法:K-means聚类;其他方法还用到了层次聚类
数据:需要数据的可以评论里call。

内容:

(1)案例: 航空公司客户价值分析

(2)基于RFM客户价值理论的特征提取, 聚类结果解释

作业:

(1)使用教材 §7 航空公司客户价值聚类分析配套示例数据和代码,掌握其特征构造操作过程

(2)考虑:使用其它模型参数, 聚类算法, 并观察结果;利用数据探索分析结果, 提取有用的变量/特征, 进行聚类分析, 观察结果

  1. 背景:

企业在面向客户制定运营和营销策略,需要因人而异,给出最佳方案。因此企业的核心问题之一是客户关系管理。某航空公司正面临着:常旅客六十、竞争力下降、航空资源未得到充分利用的经营危机,建立客户价值评估模型亟待解决。

  1. 挖掘目标:

2.1 对客户进行分类,比较不同客户群体的价值,制定相应的营销策略。

2.2 对不同的客户进行特征分析,比较不同类别客户的价值。

2.3 针对不同价值的客户类别制定相应的营销策略,提供个性化服务。

1. 描述性统计分析

通过观察原始数据,发现存在票价为空值的记录,存在票价最小值为0、折扣率最小值为0但总飞行公里数大于0的记录。
查找每列属性观测值中空值个数、最大值、最小值。

#-*- coding: utf-8 -*- 

# 对数据进行基本的探索
# 返回缺失值个数以及最大最小值

import pandas as pd

datafile= r'C:/Users/lenovo/Documents/MEGA/Data Mining School/第2版CodeData/chapter7/demo/data/air_data.csv'  # 航空原始数据,第一行为属性标签
resultfile = r'C:/Users/lenovo/Documents/MEGA/Data Mining School/第2版CodeData/chapter7/demo//tmp/explore.csv'  # 数据探索结果表

# 读取原始数据,指定UTF-8编码(需要用文本编辑器将数据装换为UTF-8编码)
data = pd.read_csv(datafile, encoding = 'utf-8')

# 包括对数据的基本描述,percentiles参数是指定计算多少的分位数表(如1/4分位数、中位数等)
explore = data.describe(percentiles = [], include = 'all').T  # T是转置,转置后更方便查阅
explore['null'] = len(data)-explore['count']  # describe()函数自动计算非空值数,需要手动计算空值数

explore = explore[['null', 'max', 'min']]
explore.columns = [u'空值数', u'最大值', u'最小值']  # 表头重命名
'''
这里只选取部分探索结果。
describe()函数自动计算的字段有count(非空值数)、unique(唯一值数)、top(频数最高者)、
freq(最高频数)、mean(平均值)、std(方差)、min(最小值)、50%(中位数)、max(最大值)
'''

explore.to_csv(resultfile)  # 导出结果

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
explore.head()
  • 1

2. 分布分析

分别从客户基本信息、乘机信息、积分信息3个角度进行数据探索,寻找客户信息的分布规律。

(1) 客户基本信息分布分析

选取客户基本信息中的入会时间、性别、会员卡级别和年龄字段进行探索分析,探索客户的基本信息分布情况。

#-*- coding: utf-8 -*- 

# 代码7-2

# 对数据的分布分析

import pandas as pd
import matplotlib.pyplot as plt 

datafile= r'C:/Users/lenovo/Documents/MEGA/Data Mining School/第2版CodeData/chapter7/demo/data/air_data.csv'  # 航空原始数据,第一行为属性标签

# 读取原始数据,指定UTF-8编码(需要用文本编辑器将数据装换为UTF-8编码)
data = pd.read_csv(datafile, encoding = 'utf-8')

# 客户信息类别
# 提取会员入会年份
from datetime import datetime
ffp = data['FFP_DATE'].apply(lambda x:datetime.strptime(x,'%Y/%m/%d'))
ffp_year = ffp.map(lambda x : x.year)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
# 绘制各年份会员入会人数直方图
fig = plt.figure(figsize = (8 ,5))  # 设置画布大小
plt.rcParams['font.sans-serif'] = 'SimHei'  # 设置中文显示
plt.rcParams['axes.unicode_minus'] = False
plt.hist(ffp_year, bins='auto', color='#0504aa')
plt.xlabel('年份')
plt.ylabel('入会人数')
plt.title('各年份会员入会人数')
plt.show()
plt.close
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
# 提取会员不同性别人数
male = pd.value_counts(data['GENDER'])['男']
female = pd.value_counts(data['GENDER'])['女']
# 绘制会员性别比例饼图
fig = plt.figure(figsize = (7 ,4))  # 设置画布大小
plt.pie([ male, female], labels=['男','女'], colors=['lightskyblue', 'lightcoral'],
       autopct='%1.1f%%')
plt.title('会员性别比例')
plt.show()
plt.close
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
# 提取不同级别会员的人数
lv_four = pd.value_counts(data['FFP_TIER'])[4]
lv_five = pd.value_counts(data['FFP_TIER'])[5]
lv_six = pd.value_counts(data['FFP_TIER'])[6]
# 绘制会员各级别人数条形图
fig = plt.figure(figsize = (8 ,5))  # 设置画布大小
plt.bar(x=range(3), height=[lv_four,lv_five,lv_six], width=0.4, alpha=0.8
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/喵喵爱编程/article/detail/780017
推荐阅读
相关标签
  

闽ICP备14008679号