用Hive+Hadoop集群实现《飞机票购买人群分类案例》

转自:https://blog.csdn.net/shuangshaung_/article/details/53611195

1. 思考:我们为什么要做《飞机票购买人群分类案例》?


当今社会,事事存在竞争,航空公司也不例外。想要从林立的航空公司中立足,就要有稳定且增长的盈利。

怎么保证这个盈利呢?这就要从营销策略上下手了,针对不同的客户采取不同的营销策略,才能保证最大的盈利。

那怎么找出不同的客户群呢?这就是这篇文章首先要探索的。


整体思路如下:1.根据航空公司的客户数据,对客户进行分类。

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

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


2.航空公司客户价值的LRFMC模型是什么?五个指标是什么?


LRFMC模型:

L:客户关系长度 = 会员入会时间距观测窗口结束的月数

R:消费时间间隔 =  客户最近一次乘坐公司飞机距观测窗口结束的月数 

F:消费频率 = 客户在观测窗口内乘坐公司飞机的次数

M:飞行里程 = 客户在观测窗口内累计的飞行里程

C:折扣系数的平均值 = 客户在观测窗口内乘坐舱位所对应的折扣系数的平均值



实验步骤如下:

启动Hadoop集群,myhql,hive,上传数据到/root/目录。

=============================================================================================

用Hive做数据预处理:

步骤如下:

1) hive -f create_air_data_base.hql  创建表


create table air_data_base(
member_no string,
ffp_date string,
first_flight_date string,
gender string,
ffp_tier int,
work_city string,
work_province string,
work_country string,
age int,
load_time string,
flight_count int,
bp_sum bigint,
ep_sum_yr_1 int,
ep_sum_yr_2 bigint,
sum_yr_1 bigint,
sum_yr_2 bigint,
seg_km_sum bigint,
weighted_seg_km double,
last_flight_date string,
avg_flight_count double,
avg_bp_sum double,
begin_to_first int,
last_to_end int,
avg_interval float,
max_interval int,
add_points_sum_yr_1 bigint,
add_points_sum_yr_2 bigint,
exchange_count int,
avg_discount float,
p1y_flight_count int,
l1y_flight_count int,
p1y_bp_sum bigint,
l1y_bp_sum bigint,
ep_sum bigint,
add_point_sum bigint,
eli_add_point_sum bigint,
l1y_eli_add_points bigint,
points_sum bigint,
l1y_points_sum float,
ration_l1y_flight_count float,
ration_p1y_flight_count float,
ration_p1y_bps float,
ration_l1y_bps float,
point_notflight int
)row format delimited fields terminated by ',';


2) hive -f load_air_data_base.hql    导入数据


load data local inpath '/root/air_data_base.txt' overwrite into table air_data_base;
=============================================================================================


数据预处理:

本案例主要采用数据清洗、属性规约与数据变换的预处理方法。

1.数据清洗

通过数据探索分析,发现数据中存在缺失值,票价最小值为0、折扣率最小值为0、总飞行公里数大于0的记录。由于原始数据量大,这类数据所占比例较小,对于问题影响不大,因此对其进行丢弃处理。具体处理方法如下:

   丢弃票价为空的记录。

   丢弃票价为0、平均折扣率不为0、总飞行公里数大于0的记录。

1)hive -f create_null_count.hql  统计空值记录

use air;
create table null_count as 
select * from 
(select count(*) as sum_yr_1_null_count from air_data_base where sum_yr_1 is null) 
sum_yr_1_null,
(select count(*) as seg_km_sum_null_count from air_data_base where seg_km_sum is null) 
seg_km_sum_null,
(select count(*) as avg_discount_null_count from air_data_base where avg_discount is null) 
avg_discount_null ;
=============================================================================================
2)hive -f create_min_count.hql  统计最小值
use air;
create table min_count as select min(sum_yr_1) as sum_yr_1_min,
min(seg_km_sum) as seg_km_sum_min,
min(avg_discount) as avg_discount_min from air_data_base ;
=============================================================================================
5. hive -f create_sum_yr_1_not_null.hql   丢弃票价为空的记录
use air;
create table sum_yr_1_not_null as select * from air_data_base where sum_yr_1 is not null ;
=============================================================================================
6. hive -f create_avg_discount_not_0.hql 丢弃平均折扣率为0.0的记录
use air;
create table avg_discount_not_0 as select * from sum_yr_1_not_null where avg_discount <> 0.0 ;
==============================================================================================
7. hive -f create_sum_0_seg_avg_not_0.hql 丢弃票价为0、平均折扣率不为0、总飞行公里数大于0的记录。
use air;
create table sum_0_seg_avg_not_0 as select * from avg_discount_not_0 where !(sum_yr_1 = 0 and avg_discount <> 0.0 and seg_km_sum <> 0);

==============================================================================================

属性规约

原始数据中属性太多,根据航空公司客户价值LRFMC模型,选择LRFMC指标相关的6个属性: FFP_DATE,  LOAD_TIME,  FLIGHT_COUNT,  AVG_DISCOUNT,  SEG_KM_SUM,  LAST_TO_END。删除与其不相关、弱相关或冗余的属性,例如,会员卡号、性别、工作地城市、工作地所在省份、工作地所在国家和年龄等属性。经属性规约之后的数据集只有6列。

 shu行gou

8. hive -f create_flfasl.hql 属性规约
use air;
create table flfasl as select FFP_DATE,LOAD_TIME,FLIGHT_COUNT,AVG_DISCOUNT,SEG_KM_SUM,LAST_TO_END from sum_0_seg_avg_not_0 ;
==============================================================================================

数据变换

是将数据转换成“适当的”格式,以适应挖掘任务及算法的需要。本案例中主要采用的数据变换方式为属性构造和数据标准化。

由于原始数据中并没有直接给出LRFMC五个指标,需要通过原始数据提取这五个指标,具体的计算方式如下。


1)L:客户关系长度 = LOAD_TIME -FFP_DATE

会员入会时间距观测窗口结束的月数 = 观测窗口的结束时间 - 入会时间【单位:月】

2)R:消费时间间隔 = LAST_TO_END

 客户最近一次乘坐公司飞机距观测窗口结束的月数 = 最后一次乘机时间至观察窗口末端时长【单位:月】

3F:消费频率 = FLIGHT_COUNT 

客户在观测窗口内乘坐公司飞机的次数 = 观测窗口的飞行次数【单位:次】

M:飞行里程 = SEG_KM_SUM

客户在观测窗口内累计的飞行里程 = 观测窗口的总飞行公里数【单位:公里】

C:折扣系数的平均值 = AVG_DISCOUNT 

客户在观测窗口内乘坐舱位所对应的折扣系数的平均值 = 平均折扣率【单位:无】



9. hive -f create_lrfmc.hql 数据变换

round((unix_timestamp(LOAD_TIME,'yyyyMMdd')-unix_timestamp(FFP_DATE,'yyyyMMdd'))/
FLIGHT_COUNT as f,
SEG_KM_SUM as m,
round(AVG_DISCOUNT,2) as c
from flfasl ;
===============================================================================================
10.hive -f create_max_min.hql 指标取值范围


use air;
create table max_min as 
select max(l),min(l),max(r),min(r),max(f),min(f),max(m),min(m),max(c),min(c) from lrfmc;
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值