当前位置:   article > 正文

基于机器学习的电信套餐个性化推荐模型的设计与实现_电信用户套餐推荐模型

电信用户套餐推荐模型

温馨提示:文末有 CSDN 平台官方提供的学长 QQ 名片 :) 

1. 项目简介

        随着互联网技术的快速发展和普及,用户消耗的流量也成井喷态势,近年来,电信运营商推出大量的电信套餐用以满足用户的差异化需求,面对种类繁多的套餐,如何选择最合适的一款对于运营商和用户来说都至关重要,尤其是在电信市场增速放缓,存量用户争夺愈发激烈的大背景下。针对电信套餐的个性化推荐问题,本项目通过数据挖掘技术构建了基于用户消费行为的电信套餐个性化推荐模型,根据用户业务行为画像结果,分析出用户消费习惯及偏好,匹配用户最合适的套餐,提升用户感知,带动用户需求,从而达到用户价值提升的目标。

        B站详情与代码下载:基于机器学习的电信套餐个性化推荐模型的设计与实现_哔哩哔哩_bilibili

基于机器学习的电信套餐个性化推荐模型的设计与实现

2. 功能组成

        基于机器学习的电信套餐个性化推荐模型的功能主要包括:

3. 数据读取与预处理

  1. data_df = pd.read_csv('./dataset/train_all.csv')
  2. def contains_null(dataframe):
  3. missing_df = dataframe.isnull().sum(axis=0).reset_index()
  4. missing_df.columns = ['column_name', 'missing_count']
  5. missing_df['missing_rate'] = 1.0 * missing_df['missing_count'] / dataframe.shape[0]
  6. missing_df = missing_df[missing_df.missing_count > 0]
  7. missing_df = missing_df.sort_values(by='missing_count', ascending=False)
  8. return missing_df
  9. contains_null(data_df)
  10. data_df.info()

        数据字段含义如下:

字段中文名数据类型说明
USERID用户IDVARCHAR2(50)用户编码,标识用户的唯一字段
service_type套餐类型VARCHAR2(10)1:2I2C套餐,4:4G套餐
is_mix_service是否固移融合套餐VARCHAR2(10)1.是 0.否
online_time在网时长VARCHAR2(50)/
1_total_fee当月总出账金额_月NUMBER单位:元
2_total_fee当月前1月总出账金额_月NUMBER单位:元
3_total_fee当月前2月总出账金额_月NUMBER单位:元
4_total_fee当月前3月总出账金额_月NUMBER单位:元
month_traffic当月累计-流量NUMBER单位:MB
many_over_bill连续超套VARCHAR2(500)1-是,0-否
contract_type合约类型VARCHAR2(500)ZBG_DIM.DIM_CBSS_ACTIVITY_TYPE
contract_time合约时长VARCHAR2(500)/
is_promise_low_consume是否承诺低消用户VARCHAR2(500)1.是 0.否
net_service网络口径用户VARCHAR2(500)20AAAAAA-2G
pay_times交费次数NUMBER单位:次
pay_num交费金额NUMBER单位:元
last_month_traffic上月结转流量NUMBER单位:MB
local_trafffic_month月累计-本地数据流量NUMBER单位:MB
local_caller_time本地语音主叫通话时长NUMBER单位:分钟
service1_caller_time套外主叫通话时长NUMBER单位:分钟
service2_caller_timeService2_caller_timeNUMBER单位:分钟
gender性别varchar2(100)01.男 02女
age年龄varchar2(100)/
complaint_level投诉重要性VARCHAR2(1000)1:普通,2:重要,3:重大
former_complaint_num交费金历史投诉总量NUMBER单位:次
former_complaint_fee历史执行补救费用交费金额NUMBER单位:分

4. 数据探索式分析

4.1 预测目标为套餐类型 service_type

  1. plt.figure(figsize=(10, 5))
  2. sns.countplot(data_df['service_type'])
  3. plt.title('套餐类型分布', fontsize=16, weight='bold')
  4. plt.show()

4.2 是否固移融合套餐 is_mix_service

4.3 在网时长 online_time 分布

4.4 当月总出账金额_月 1_total_fee

4.5 当月累计-流量 month_traffic 分布

  1. plt.figure(figsize=(15, 5))
  2. sns.distplot(df_4G[df_4G['month_traffic'] < 20000][c], kde=True, color='red')
  3. sns.distplot(df_2I2C[df_2I2C['month_traffic'] < 20000][c], kde=True, color='blue')
  4. plt.title('2I2C套餐 VS 4G套餐-当月累计-流量', fontsize=16, weight='bold')
  5. plt.show()

 4.6 连续超套 many_over_bill 分布

4.7 合约类型 contract_type 与 合约时长分布

4.8 是否承诺低消用户 is_promise_low_consume

4.9 网络口径用户 net_service 分布 

4.10 用户年龄 age 和性别 gender 分布

  1. # 异常数据清洗
  2. data_df['gender'] = data_df['gender'].map(lambda x: int(x) if x != '\\N' else 0)
  3. df_4G['gender'] = df_4G['gender'].map(lambda x: int(x) if x != '\\N' else 0)
  4. df_2I2C['gender'] = df_2I2C['gender'].map(lambda x: int(x) if x != '\\N' else 0)
  5. plt.figure(figsize=(15, 5))
  6. plt.subplot(121)
  7. sns.countplot(df_4G['gender'])
  8. plt.title('4G套餐-用户性别分布', fontsize=16, weight='bold')
  9. plt.subplot(122)
  10. sns.countplot(df_2I2C['gender'])
  11. plt.title('2I2C套餐-用户性别分布', fontsize=16, weight='bold')
  12. plt.show()

5. 电信套餐预测推荐模型

5.1 训练集、验证集和测试集划分

  1. all_y = data_df['service_type']
  2. del data_df['service_type']
  3. del data_df['user_id']
  4. all_x = data_df
  5. # 特征名称列表
  6. df_columns = data_df.columns.values
  7. print('===> feature count: {}'.format(len(df_columns)))
  8. X_train, X_test, y_train, y_test = train_test_split(all_x, all_y, test_size=0.1, random_state=42)
  9. X_train, X_valid, y_train, y_valid = train_test_split(X_train, y_train, test_size=0.1, random_state=42)
  10. print('train: {}, valid: {}, test: {}'.format(X_train.shape[0], X_valid.shape[0], X_test.shape[0]))
train: 602630, valid: 66959, test: 74399

5.2 决策树模型构建

  1. xgb_params = {
  2. 'eta': 0.1,
  3. 'colsample_bytree': 0.1,
  4. 'max_depth': 8,
  5. 'subsample': 0.1,
  6. 'lambda': 10,
  7. 'scale_pos_weight': 100,
  8. 'eval_metric': 'auc',
  9. 'objective': 'binary:logistic',
  10. 'nthread': -1,
  11. 'silent': 1,
  12. 'booster': 'gbtree'
  13. }
  14. model = xgb.train(dict(xgb_params),
  15. dtrain,
  16. evals=watchlist,
  17. verbose_eval=1,
  18. early_stopping_rounds=10,
[0]	train-auc:0.890915	valid-auc:0.888521
Multiple eval metrics have been passed: 'valid-auc' will be used for early stopping.

Will train until valid-auc hasn't improved in 10 rounds.
[1]	train-auc:0.918572	valid-auc:0.91634
[2]	train-auc:0.932513	valid-auc:0.930667
[3]	train-auc:0.966103	valid-auc:0.965251
[4]	train-auc:0.983685	valid-auc:0.983068 

5.3 特征重要程度分布

5.4 模型性能评估

  1. # predict train
  2. predict_train = model.predict(dtrain)
  3. train_auc = evaluate_score(predict_train, y_train)
  4. # predict validate
  5. predict_valid = model.predict(dvalid)
  6. valid_auc = evaluate_score(predict_valid, y_valid)
  7. # predict test
  8. predict_test = model.predict(dtest)
  9. test_auc = evaluate_score(predict_test, y_test)
  10. print('训练集 auc = {:.7f} , 验证集 auc = {:.7f} , 测试集 auc = {:.7f}\n'.format(
  11. train_auc, valid_auc, test_auc)
  12. )
训练集 auc = 0.9836853 , 验证集 auc = 0.9830685 , 测试集 auc = 0.9833130

5.5 ROC 曲线

        可以看出,构建的决策树模型具备很好的预测性能,测试集 auc 达到 98.33%,可以根据不同用户的不同消费行为,有效的推荐 2I2C套餐或4G套餐。

6. 总结

        本项目通过数据挖掘技术构建了基于用户消费行为的电信套餐个性化推荐模型,根据用户业务行为画像结果,分析出用户消费习惯及偏好,匹配用户最合适的套餐,提升用户感知,带动用户需求,从而达到用户价值提升的目标。

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。技术交流、源码获取认准下方 CSDN 官方提供的学长 QQ 名片 :)

精彩专栏推荐订阅:

1. Python 毕设精品实战案例
2. 自然语言处理 NLP 精品实战案例
3. 计算机视觉 CV 精品实战案例

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/寸_铁/article/detail/939012
推荐阅读
相关标签
  

闽ICP备14008679号