利⽤Python分析航空公司客户价值
利⽤Python分析航空公司客户价值
⼀、背景介绍
随着社会⽣活中数据量的急剧增多,如何从这些海量的数据中提取与发掘出对我们决策有⽤的信息成为当前亟待解决的题,因此,数据分析与挖掘技术在这些年得到了⼴泛的发展,也受到了⾜够的重视。⾯对不同领域的数据,不同的任务⽬标,我们在进⾏数据分析时也会选择不同的模型来进⾏建模,从⽽发现数据中的特征,提取其中的价值。常见的数据挖掘模型有:分类与预测、聚类分析、关联规则、时序模式、离点检测等。这些模型,在我们的⽣活中已经有了⼴泛的应⽤。例如航空公司的客户价值分析,就是对⽤户数据进⾏聚类分析,发掘出不同价值的⽤户,然后有针对性的制定相应的营销⼿段,实现精准化运营,以期获取最⼤的⽤户转化率。(更好的阅读体验,请移步我的)
本篇博⽂的实例来源于《Python数据分析与挖掘实践》(第⼆版)中的第七章。实现的主要⽬标是:
1,借助航空公司客户数据,对客户进⾏分类。
2,对不同客户类别进⾏特征分析,⽐较不同类别的客户价值。
3,针对不同价值的客户类别制定相应的营销策略,为其提供个性化服务。
⼆、分析步骤与流程
此案例的总体流程图如下所⽰。简单来说就是:因为最开始只是要构建模型,所以不需要使⽤航空公司的全部客户数据,只需要先从业务系统中抽取某⼀时段的客户数据作为训练即可,然后对数据从宏观上进⾏分析,之后对数据进⾏处理,使之能够达到建模的要求,最后选择合适的聚类算法建模并且对结果进⾏反馈。
2.1. 建模数据的获取:
这个可以从公司的业务系统选择性抽取,例如抽取最近两年的数据。数据的属性说明如下图所⽰:
2.2. 数据的宏观性探索分析:
2.2.1 描述性统计分析 - 查看属性字段的缺失值、平均值、最⼤值、最⼩值等情况,从宏观层⾯上了解数据。import pandas as pd
datafile = r'C:\Users\itour\Desktop\air_customer_data.csv'
data = pd.read_csv(datafile, encoding='utf-8')
explore = data.describe(percentiles=[], include='all').T # 使⽤统计函数对数据进⾏统计分析
explore['null'] = len(data) - explore['count'] # 计算空值数
# describe有很多统计⼦项,这⾥就取我们要⽤到的即可
explore = explore[['null', 'mean', 'max', 'min']]
print(explore)
通过上图可以看出有⼀些记录含有空值,这样的数据对建模可能会有影响,因此,在后⾯的数据预处理环节,要把这些空值删掉。
2.2.2 数据的分布分析 - 寻客户信息的分布规律,例如⼊会时间分布、年龄分布、性别分布、会员等级分布等等。
1)⼊会时间分布图展⽰
import pandas as pd
from datetime import datetime
import matplotlib.pyplot as plt
datafile = r'C:\Users\itour\Desktop\air_customer_data.csv'
data = pd.read_csv(datafile, encoding='utf-8')
ffp = data['FFP_DATE'].apply(lambda x: datetime.strptime(x, '%Y/%m/%d'))
ffp_year = ffp.map(lambda x: x.year)
# 绘制各年份会员⼊会⼈数直⽅图
描写眼睛的句子plt.hist(ffp_year, bins='auto', color='green')
plt.xlabel('年份')
plt.ylabel('⼊会⼈数')专硕和学硕的区别
plt.title('各年份会员⼊会⼈数')
plt.show()
2)会员性别⽐例分布图
import matplotlib.pyplot as plt
datafile = r'C:\Users\itour\Desktop\air_customer_data.csv'
data = pd.read_csv(datafile, encoding='utf-8')
# 获取会员中不同的性别⼈数
志愿者实践报告
徐组词2个字male = pd.value_counts(data['GENDER'])['男']
female = pd.value_counts(data['GENDER'])['⼥']
# 绘制会员分布饼状图
plt.pie([male, female], labels=['男', '⼥'], colors=['lightskyblue', 'green'], autopct='%1.1f%%') plt.title('会员性别⽐例')
plt.show()
3)会员年龄分布箱型图
import pandas as pd
from datetime import datetime
import matplotlib.pyplot as plt
datafile = r'C:\Users\itour\Desktop\air_customer_data.csv'
data = pd.read_csv(datafile, encoding='utf-8')
# 提取会员的年龄
age = data['AGE'].dropna()
age = age.astype('int64')
# 绘制会员年龄分布箱型图
plt.boxplot(age, patch_artist=True, labels=['会员年龄'], boxprops={'facecolor': 'lightblue'}) plt.title('会员年龄分布箱型图')
爱到尽头覆水难收爱悠悠恨悠悠是什么歌id(axis='y')
plt.show()
2.2.3 数据属性之间的相关性分析 - 这对特征的选择来说⾮常有⽤,通过分析属性之间的关联性,可以确定选择哪些属性作为特征值,哪些则是可以忽略的。
import pandas as pd
from datetime import datetime
datafile = r'C:\Users\itour\Desktop\air_customer_data.csv'
data = pd.read_csv(datafile, encoding='utf-8')
data_corr = data[['FFP_TIER', 'FLIGHT_COUNT', 'LAST_TO_END', 'SEG_KM_SUM', 'EXCHANGE_COUNT', 'Points_Sum']]
age_1 = data['AGE'].fillna(0)
data_corr['AGE'] = age_1.astype('int64')
ffp = data['FFP_DATE'].apply(lambda x: datetime.strptime(x, '%Y/%m/%d'))
ffp_year = ffp.map(lambda x: x.year)
旌
data_corr['ffp_year'] = ffp_year
# 计算相关性矩阵
dt_corr = (method='pearson')
print(dt_corr)
从上⾯的图可以看出,有些属性的相关性较强,有些则较弱。例如 ffp_year与FFP_TIER的相关性就弱,已经是负相关了。⽽FLIGHT 与FFP_TIER的相关性就稍微强⼀些。属性之间的相关性关系,也是在做特征降维的⼀个重要参考量,有时候特征较多会严重增加建模的时间,为了提⾼效率,需要对特征进⾏降维,构建有代表性的特征进⾏建模。
2.3. 数据预处理:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论