# DataMining **Repository Path**: cshuaichen/DataMining ## Basic Information - **Project Name**: DataMining - **Description**: 2019数据挖掘期末大作业 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2020-06-29 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # DataMining 2019数据挖掘期末大作业 ## 作业题目 面向电信行业存量用户的智能套餐个性化匹配模型 ## 作业背景 近年来,电信运营商推出大量的电信套餐用以满足用户的差异化需求,面对种类繁多的套餐,如何选择最合适的一款对于运营商和用户来说都至关重要,尤其是在电信市场增速放缓,存量用户争夺愈发激烈的大背景下。针对电信套餐的个性化推荐问题,通过数据挖掘技术构建基于用户消费行为的电信套餐个性化推荐模型,根据用户业务行为画像结果,分析出用户消费习惯及偏好,匹配用户最合适的套餐,提升用户感知,带动用户需求,从而达到用户价值提升的目标。 ## 作业任务 根据所提供的用户结构化数据,如用户属性(个人基本信息、用户画像信息等)、业务属性、消费习惯及偏好等,基于本学期所学知识构建一个分类模型,为用户选择最适合的套餐。 ## 数据说明 data文件夹下包含训练集 train.csv,用来训练模型;测试集 test.csv,用来测试模型性能;提交示例文件 submit_sample.csv。 ### 训练集 train.csv 训练集提供了用户相关的数据,包括数值型、二元型(bianry)和类别型(categorical),各字段的含义如下: | 字段 | 中文名 | 数据类型 | 说明 | |:----:|:------:|:-------:|:----:| |service_type|套餐类型|类别型|0:23G融合,1:2I2C,2:2G,3:3G,4:4G| |is_mix_service|是否固移融合套餐|二元型|1.是 0.否| |online_time|在网时长|数值型|单位:月| |1_total_fee|当月总出账金额_月|数值型|单位:元| |2_total_fee|当月前1月总出账金额_月|数值型|单位:元| |3_total_fee|当月前2月总出账金额_月|数值型|单位:元| |4_total_fee|当月前3月总出账金额_月|数值型|单位:元| |month_traffic|当月累计-流量|数值型|单位:MB| |many_over_bill|连续超套|二元型|1-是,0-否| |contract_type|合约类型|类别型|- | |contract_time|合约时长|数值型|- | |is_promise_low_consume|是否承诺低消用户|二元型|1.是 0.否| |net_service| 网络口径用户|类别型|-| |pay_times|交费次数|数值型|单位:次| |pay_num|交费金额|数值型|单位:元| |last_month_traffic|上月结转流量|数值型|单位:MB| |local_trafffic_month|月累计-本地数据流量|数值型|单位:MB| |local_caller_time|本地语音主叫通话时长|数值型|单位:分钟| |service1_caller_time|套外主叫通话时长|数值型|单位:分钟| |service2_caller_time|上一月超套餐时长|数值型|单位:分钟| |gender|性别|类别型|1:男 2:女| |age|年龄|数值型|-| |complaint_level|投诉重要性|类别型|1:普通,2:重要,3:重大| |former_complaint_num|交费金历史投诉总量|数值型|单位:次| |former_complaint_fee|历史执行补救费用交费金额|数值型|单位:分| |**current_service**|**向用户推荐的套餐**|-|**这个是训练数据的标签!**| |**user_id**|**用户ID**|-|**用户编码,标识用户的唯一字段**| ### 测试集 test.csv 测试集的字段和训练集相同,为了评估方便,测试集的标签(即current_service)也提供了。但是**这并不意味着可以拿测试集和训练集一起参与训练!在训练的时候测试集应该是不可见的。请大家不要作弊!** ### 提交示例 submit_sample.csv 模型训练完成后,在测试集 test.csv上对用户进行套餐类型预测,并生成一个预测结果文件。格式如submit_sample.csv一样,共两列,分别为“用户编号”和“预测的用户套餐类型”。 ## 评价指标 本次作业采用macro-f1进行评分,评分越高的同学期末大作业的分数也更高。具体的计算方法如下: 1. 针对每个用户套餐类别,分别统计TP(预测答案正确),FP(错将其他类预测为本类),FN(本类标签预测为其他类标); 2. 通过第一步的统计值计算每个类别下的precision和recall,计算公式如下: ![img_1](./img/img_1.png) 3. 通过第二步计算结果计算每个类别下的F1-score,计算方式如下: ![img_2](./img/img_2.png) 4. 通过第三步求得的各个类别下的F1-score 求均值,得到最后的评测结果,计算方式如下: ![img_3](./img/img_3.png) 为了方便同学们评估模型,本次作业提供了一个评测脚本evaluate.py来帮助大家计算score,使用的时候需要指定测试集test.csv和预测结果submit_pred.csv的路径。使用示例: ``` python evaluate.py --true test.csv --pred submit_pred.csv ``` ## 作业要求 1. 利用本学期所学知识设计一个**套餐类型预测模型**,使得在测试集 test.csv上的macro-f1得分尽可能高;(提示:macro-f1得分将会作为大作业得分的主要依据) 2. 完成**数据挖掘大作业实验报告**,包含但不限于以下内容:实验背景、实验要求、数据描述、数据分析、数据处理(特征工程设计)、模型设计、调参实验、实验结果与分析等; 3. 在**17周周日(12月29号)**前将**源代码**、**测试集预测结果文件**和**实验报告**打包成zip压缩包,压缩包命名格式为:*数据挖掘大作业-学号-姓名-班级*,并发送到作业提交邮箱。邮件标题命名和压缩包命名要求一致。 ## 作业分析 本次作业的重点应该放在特征工程上,如何选择有效的特征,并在原始特征上如何设计新的特征(如两个特征的交互(相加相减)等),是提分的关键。大家可以先试着把全部特征都输入模型当中,跑一份baseline的结果,然后再尝试特征工程。此外,大家还可以尝试一些在比赛中比较常用的基于集成学习的模型,比如说randomforest、GBDT、xgboost、LightGBM等等。 ## FAQ - Q: 在网时长online_time的单位是什么? A:月 - Q:service2_caller_time:是什么意思? A:上一月超套餐时长 - Q:service2_caller_time上一月超套餐时长是包含长途短途和漫游吗? A:套餐外通话视时长,因此不一定包含长短途漫游 - Q:many_over_bill:连续几个月超餐会被标识为连续超餐? A:4个月 - Q:合约类型contract_type是哪几类? A: |合约类型编码|合约类型描述| |:---------:|:-----------| |1|预付话费送手| |2 |购手机送话费| |3 |存费送费 | |4 |单卡 | |5 |总部其他活动| |6 |存话费送业务(送语音)| |7 |存话费送业务(送流量)| |8 |存话费送业务(送短信)| |9 |存费送业务(不能区分赠送业务的类型)| |10| 存费送礼品| |11| 存费送积分| |12| 合约惠机终端| |13| 订业务送手机| - Q:合约时长contract_time的意思是什么? A:合约到期剩余时长 - Q:发布的数据里面的current_service字段是什么?有没有对应的套餐文字介绍? A:套餐类型。暂无文字介绍。 - Q:月累计本地数据流量和月累计流量区别是? A:月累计流量含有漫游长途国际等流量使用 - Q:当月前X月总额什么意思? A:第X个月的出账收入 - Q:service1_caller_time和service2_caller_time区别是什么? A:上一月超套餐时长,以及上两个月超套餐时长 - Q:former_complaint_num这个字段的意思是用户向经营方投诉的次数吗? A:历史投诉总量 - Q:former_complaint_fee这个字段是经营方对用户的补偿金额吗? A:历史执行补救费用 - Q:online_time是什么意思? A:在网时长 - Q:训练集的数据在网时长,是不是就是用户新换套餐后,新套餐的在网时长?为什么旧用户在网最长才十几天呢? A:都是旧套餐。在网时长是指入网以来的时间,以月为单位,训练集有的采集数据有异常。 - Q:pay_num和pay_times的关系是什么? A:交费金额,交费次数 - Q:性别字段gender 值为0是什么意思? A:1男2女,0未知