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

您所在的位置:网站首页 电信套餐推荐学生用 基于机器学习的电信套餐个性化推荐模型的设计与实现

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

2024-07-13 18:57| 来源: 网络整理| 查看: 265

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

1. 项目简介

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

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

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

2. 功能组成

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

3. 数据读取与预处理 data_df = pd.read_csv('./dataset/train_all.csv') def contains_null(dataframe): missing_df = dataframe.isnull().sum(axis=0).reset_index() missing_df.columns = ['column_name', 'missing_count'] missing_df['missing_rate'] = 1.0 * missing_df['missing_count'] / dataframe.shape[0] missing_df = missing_df[missing_df.missing_count > 0] missing_df = missing_df.sort_values(by='missing_count', ascending=False) return missing_df contains_null(data_df) 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单位:MBmany_over_bill连续超套VARCHAR2(500)1-是,0-否contract_type合约类型VARCHAR2(500)ZBG_DIM.DIM_CBSS_ACTIVITY_TYPEcontract_time合约时长VARCHAR2(500)/is_promise_low_consume是否承诺低消用户VARCHAR2(500)1.是 0.否net_service网络口径用户VARCHAR2(500)20AAAAAA-2Gpay_times交费次数NUMBER单位:次pay_num交费金额NUMBER单位:元last_month_traffic上月结转流量NUMBER单位:MBlocal_trafffic_month月累计-本地数据流量NUMBER单位:MBlocal_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 plt.figure(figsize=(10, 5)) sns.countplot(data_df['service_type']) plt.title('套餐类型分布', fontsize=16, weight='bold') plt.show()

4.2 是否固移融合套餐 is_mix_service

4.3 在网时长 online_time 分布

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

4.5 当月累计-流量 month_traffic 分布 plt.figure(figsize=(15, 5)) sns.distplot(df_4G[df_4G['month_traffic'] < 20000][c], kde=True, color='red') sns.distplot(df_2I2C[df_2I2C['month_traffic'] < 20000][c], kde=True, color='blue') plt.title('2I2C套餐 VS 4G套餐-当月累计-流量', fontsize=16, weight='bold') 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 分布 # 异常数据清洗 data_df['gender'] = data_df['gender'].map(lambda x: int(x) if x != '\\N' else 0) df_4G['gender'] = df_4G['gender'].map(lambda x: int(x) if x != '\\N' else 0) df_2I2C['gender'] = df_2I2C['gender'].map(lambda x: int(x) if x != '\\N' else 0) plt.figure(figsize=(15, 5)) plt.subplot(121) sns.countplot(df_4G['gender']) plt.title('4G套餐-用户性别分布', fontsize=16, weight='bold') plt.subplot(122) sns.countplot(df_2I2C['gender']) plt.title('2I2C套餐-用户性别分布', fontsize=16, weight='bold') plt.show()

5. 电信套餐预测推荐模型 5.1 训练集、验证集和测试集划分 all_y = data_df['service_type'] del data_df['service_type'] del data_df['user_id'] all_x = data_df # 特征名称列表 df_columns = data_df.columns.values print('===> feature count: {}'.format(len(df_columns))) X_train, X_test, y_train, y_test = train_test_split(all_x, all_y, test_size=0.1, random_state=42) X_train, X_valid, y_train, y_valid = train_test_split(X_train, y_train, test_size=0.1, random_state=42) 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 决策树模型构建 xgb_params = { 'eta': 0.1, 'colsample_bytree': 0.1, 'max_depth': 8, 'subsample': 0.1, 'lambda': 10, 'scale_pos_weight': 100, 'eval_metric': 'auc', 'objective': 'binary:logistic', 'nthread': -1, 'silent': 1, 'booster': 'gbtree' } model = xgb.train(dict(xgb_params), dtrain, evals=watchlist, verbose_eval=1, 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 模型性能评估 # predict train predict_train = model.predict(dtrain) train_auc = evaluate_score(predict_train, y_train) # predict validate predict_valid = model.predict(dvalid) valid_auc = evaluate_score(predict_valid, y_valid) # predict test predict_test = model.predict(dtest) test_auc = evaluate_score(predict_test, y_test) print('训练集 auc = {:.7f} , 验证集 auc = {:.7f} , 测试集 auc = {:.7f}\n'.format( train_auc, valid_auc, test_auc) ) 训练集 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 精品实战案例



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3