本人经过作者同意,公布了:BDCI2018面向电信行业存量用户的智能套餐个性化匹配模型数据竞赛top1解决方案和代码。该方案利用已有的用户属性(如个人基本信息、用户画像信息等)、终端属性(如终端品牌等)、业务属性、消费习惯及偏好匹配用户最合适的套餐,对用户进行推送,完成后续个性化服务。

(最终排名1/2546)

赛题介绍

1.赛题名称

面向电信行业存量用户的智能套餐个性化匹配模型

2.赛题网址:

https://www.datafountain.cn/competitions/311/details

3.赛题背景

主办方:中国计算机学会 & 中国联通研究院

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

套餐的个性化推荐,能够在信息过载的环境中帮助用户发现合适套餐,也能将合适套餐信息推送给用户。解决的问题有两个:信息过载问题和用户无目的搜索问题。各种套餐满足了用户有明确目的时的主动查找需求,而个性化推荐能够在用户没有明确目的的时候帮助他们发现感兴趣的新内容。

4.赛题任务

此题利用已有的用户属性(如个人基本信息、用户画像信息等)、终端属性(如终端品牌等)、业务属性、消费习惯及偏好匹配用户最合适的套餐,对用户进行推送,完成后续个性化服务。

具体任务见赛题网址:

https://www.datafountain.cn/competitions/311/details

团队介绍

崔世文BAT某厂数据工程师,kaggle grand master称号

包梦蛟某985硕士,kaggle master称号

黄钟山:某航天研究所副主任设计师,kaggle master称号

潘斐阳:某少年班成员,博士,kaggle master称号

唐维:某985硕士,BAT某厂offer

团队成绩:1/2546 (最终排名)

赛题方案

1.数据探索与评价指标

图1:类别和类别的计数观察

我们可以看到此问题是一个多分类问题,对应着有11种套餐,其中他们的分布较为不均匀。作为一个典型的多分类为题,其评价指标为macro-f1

首先针对每个套餐类别,统计分别统计TP(预测答案正确),FP(错将其他类预测为本类),FN(本类标签预测为其他类标)。通过第一步的统计值计算每个类别下的precision和recall,计算公式如下:

计算结果计算每个类别下的F1-score,计算方式如下:

然后通过第三步求得的各个类别下的F1-score求均值,得到最后的评测结果,计算方式如下:

以下是关于原始特征和标签相关性的观察图表:

图2:service_type和类别的相关性观察

我们可以得到一个明显的规律,如图2所示,service_type可以将套餐分为两个部分,这两部分是没有交叉的,其中一类有8个,另外一类有3个。这给我们比赛带来一个思路是,可以分模型预测,在最后的实验中我们也通过此取得了提升。

图3:年龄的分布

我们可以看到对于年龄来讲,基本上符合电信用户群体的分布,但是有很多0岁的异常值,对于异常值,我们尝试了替换service_typpe字段对应的均值和使用原始值两种方法。最终选取了原始值,我们认为默认年龄在不同套餐中的转换率呈现了分布差异。

图3:性别的分布

我们观察到性别中有0 的缺省值,对于这部分,我们使用了两种方法处理,一种是填充service_type对应字段的众数,和原始值。最终我们选取了原始值,我们认为默性别在不同套餐中的转换率呈现了分布差异。

同时我们注意观察训练集和测试集是否同分布:

图4:同分布观察

我们观察到gender字段出现了不同分布的情况的,我们采取了归一化处理的方法,将因为数据清洗质量造成的不同分布消除。

2.特征工程

1) 关联规则

关联规则是形如X-->Y的蕴涵式,其中,XY分别称为关联规则的先导(antecedent或

left - hand -side, )和后继(consequent或right - hand - side,RHS) 。其中,关联规则XY,存在支持度和信任度。

有一个著名的笑话就是,在一家超市里,有一个有趣的现象:尿布和啤酒赫然摆在一起出售。但是这个奇怪的举措却使尿布和啤酒的销量双双增加了。这不是一个笑话,而是发生在美国沃尔玛连锁店超市的真实案例,并一直为商家所津津乐道。受max-encoding的方法的启发,我们对有关联关系的话费字段,1_total_fee2_total_fee, 3_total_fee, 4_total_fee四个字段的构建关联规则,这样可以利用整体信息,对话费字段这个强特征进行降维编码。使得其数据更加具有代表性。这种特征对结果也有很强的正反馈。我们提取了话费的最频繁二项集,把一月的话费对应的话费作为特征使用。

其实这里有更好的方式,对于对偶形式的数据也更通用,大家可以结合DeepWalknove2vecLineSDNE的思路想一下。

2) 业务特征

业务特征的部分,我们深入研究了联通的套餐消费场景,从比赛的一开始,首先就通过联通官网以及消费论坛认真的开始调研工作,深入了解了联通的各种套餐特点和用户群差别。通过熟悉套餐的特性,我们可以为各种特定用户群推荐适宜他们的套餐,比如腾讯天王卡玩腾讯游戏看腾讯视频不花钱是深度腾讯用户的福音,蚂蚁大宝卡则可以赠送2g无差别流量给高流量消费者。联通传统套餐的各种优惠活动,比如预充值冲100返流量和话费,适合平时那些流量和话费不够用的用户,充值返话费则适合那些薅羊毛的用户。对此我们针对用户的流量和通话做了一系列特征,比例、差值,求和等,力求尽可能的描绘出一幅用户画像。

提出了以下几种针对业务的特征:

1.     话费减去16元是否是整数

2.     流量的有效数字是否是27的整数倍

3.     话费的有效数字能否被15乘除

4.     话费是否是整数(用户可能未超套餐)

5.     连续两个月套餐的差值能否被5,10,15,27,30等计费单元整除

6.     四个月话费的最小值

7.     计算流量的平均单价

8.     计算通话时间的平均单价

9.     等等…

3) 引导学习

在机器学习中,针对不同阶段的同源数据,通常有迁移学习和直接拼接数据的方法来利用数据,可以利用不同分布的数据提升结果。迁移学习直接对预测概率编码为被迁移模型的特征,可以保证同分布,但是不能充分利用数据;拼接充分利用数据,但是出来的结果不能同分布;为此,我们提出一种称为“引导学习”的方法。

结构化数据的迁移学习方法:用不同分布的数据训练得到模型,预测出来的概率作为新任务的特征编码。与一般迁移学习不同的是,嫁接学习强调利用因时间演化或者采样造成的分布产生变化的同源数据。因为被一名植物分类学家在比赛中最先使用,因此也被戏称为“嫁接学习”。

在比赛过程中我们对各种数据迁移方法进行了比较,首先是全部初赛数据的迁移学习,但是效果并不显著。于是我们考虑增加复赛数据一起训练作为贝叶斯正则项,效果非常好。我们更深入的研究复赛数据的添加方式。如下:

1.直接将初赛和复赛数据拼接

2.拼接后将初复赛数据增加一列特征标注是否为复赛数据

3.拼接后将网络套餐和传统套餐分别训练。

通过训练的结果可以看到:直接得到的结果里第2项最好,因为它通过特征标注保证了在这个模型里初赛和复赛数据有各自的分布;将输出的结果用于迁移则第1项最好,因为这个模型更加关注数据本身的影响而不考虑一同训练两组数据不同。实验结果如下表所示:

表2:各种迁移学习方法对比

迁移方法

Leaderboard分数

原始拼接

0.8327

标注拼接

0.8397

拼接分类训练

0.8385

其中验证集只选用与目标同源的数据,这也是贝叶斯正则项的另一来源。我们把加了贝叶斯正则项的方法称为引导学习,在比赛结果中效果显著。

复现方法

1.代码和数据集

代码和数据集可以在百度云下载:

链接:https://pan.baidu.com/s/1HurD8IU-SWyeYdxqOjyEqg

提取码:m1yg

如果被和谐请回复“联通套餐”获取新网址。

备注:

作者曾在github公布过代码:

https://github.com/PPshrimpGo/BDCI2018-ChinauUicom-1st-solution

经过我和作者的沟通,在百度云上增加了github里没有的数据集和windows下的简易执行文件,建议到百度云下载

2.复现方法

复现环境:Ubuntu16.04,python3.6,lightgbm 2.1.1,numpy 1.14.3,pandas 0.23.1,scikit_learn 0.19.1,xgboost 0.72.1

  • 将初赛训练集文件夹的train_all.csv复制到input文件夹,并更名为train_old.csv,将复赛训练集的train_2.csvtest_2.csv复制到input文件夹,并更名为train.csvtest.csv

  • 运行命令:pip3 install -r requirements.txt

  • chmod +x run_top1.sh

  • chmod +x run_perfect.sh

  • ./run_top1.sh (复现leaderboard第一,双志强2673CPU复现时间:8小时47分)

  • ./run_perfect.sh (完美复现,这一步有时间再进行吧,需要24小时,建议不用运行了)

    windows下复现方法:

  • 根据run_top1.sh的命令内容一步一步执行,这个步骤相对麻烦。如果仅仅为了学习,作者提供了一个简易版本:使用作者提供的简易执行代码一键运行(直接使用联通baseline文件夹的代码,含数据集):

  • python baseline.py

    运行时间两小时即可复现跟比赛成绩相近的结果。

总结

本方案利用已有的用户属性(如个人基本信息、用户画像信息等)、终端属性(如终端品牌等)、业务属性、消费习惯及偏好匹配用户最合适的套餐,对用户进行推送,完成后续个性化服务。不仅适合联通,方案经过适当修改,也适合其他电信运营商使用。

分享是一种美德-感谢崔世文团队的开源分享,期待广大的机器学习爱好者开源自己的代码,为广大的初学者提供便利。

欢迎加入免费星球,获取最前沿认知和精英理念

扫码领取资料

开源-BDCI2018面向电信行业存量用户的智能套餐个性化匹配模型Top1解决方案和代码...相关推荐

  1. 开源-BDCI2018面向电信行业存量用户的智能套餐个性化匹配模型Top1解决方案和代码

    来源 本人经过作者同意,公布了:BDCI2018面向电信行业存量用户的智能套餐个性化匹配模型数据竞赛top1解决方案和代码.该方案利用已有的用户属性(如个人基本信息.用户画像信息等).终端属性(如终端 ...

  2. 面向电信行业存量用户的智能套餐个性化匹配模型(top6)

    1.赛题链接:面向电信行业存量用户的智能套餐个性化匹配模型 2.赛题任务: 利用已有的用户属性(如个人基本信息.用户画像信息等).终端属性(如终端品牌等).业务属性.消费习惯及偏好匹配用户最合适的套餐 ...

  3. CCF大数据竞赛-面向电信行业存量用户的智能套餐个性化匹配模型

    题目:面向电信行业存量用户的智能套餐个性化匹配模型(2018 CCF-大数据竞赛(联通研究院举办) ) 网址:https://www.datafountain.cn/competitions/311/ ...

  4. CCF BDCI面向电信行业存量用户的智能套餐个性化匹配模型解题方案

    参考源码:Top2方案 原始数据 问题主要是根据如下的数据所进行的11类分类问题. 字段 中文名 数据类型 说明 USERID 用户ID VARCHAR2(50) 用户编码,标识用户的唯一字段 cur ...

  5. 一种面向电信行业基站数据的数据采集系统的设计与实现

    一种面向电信行业基站数据的数据采集系统的设计与实现 1,项目简介 本论文来源于上海电信应急指挥平台.上海电信应急指挥平台主要是采集上海所有基站的一些与应急相关的实时数据,将这些数据做统计分析工作之后, ...

  6. 机器学习入门的百科全书-2018年“机器学习初学者”公众号文章汇总

    "机器学习初学者"公众号于2018年9月由黄海广博士开设,自开通以来,受到广大机器学习爱好者广泛好评.在2019年的第一个工作日,将2018年发布的所有文章进行归类汇总. 机器学习 ...

  7. 良心推荐:机器学习入门资料汇总及学习建议(2018版)--黄海广

    机器学习初学者公众号自从2018年10月开设以来,发表了不少机器学习入门的宝贵资料,受到广大机器学习爱好者的好评,本文对2018年本站发过的文章进行分类和汇总,以便初学者更好地学习.(作者:黄海广) ...

  8. 深度学习试题_初学者入门宝典-机器学习入门资料汇总及学习建议(2018版)

    机器学习初学者公众号自从2018年10月开设以来,发表了不少机器学习入门的宝贵资料,受到广大机器学习爱好者的好评,本文对2018年本站发过的文章进行分类和汇总,以便初学者更好地学习. 机器学习入门,初 ...

  9. 【吐血推荐】机器学习/深度学习入门资料汇总及学习建议【入门必看】

    机器学习入门,初学者遇到的问题非常多,但最大的问题就是: 资料太多!!!看不完!!!不知道如何取舍!!! 一.机器学习的数学基础 正规的机器学习数学基础主要有: 数学分析(微积分),线性代数,概率论, ...

最新文章

  1. 在撤销“本地修改”之后再恢复
  2. 下载java后缀的文件闪退_关于jarfile 打开闪退问题
  3. JAVA结课_一点心情,写java结课考试之前
  4. UWP通过机器学习加载ONNX进行表情识别
  5. mysql route mycat_mycat
  6. Maven常用命令-创建Java项目
  7. 利用ScriptEngineManager实现字符串公式灵活计算
  8. 快速上手系列:传智播客Java基础笔记
  9. 字母冒泡法排序c语言,C语言冒泡排序法的实现(升序排序法)
  10. 基于JAVA超市商品管理系统计算机毕业设计源码+系统+lw文档+部署
  11. hprose php,hprose和swoole区别
  12. 一个中国码农在硅谷求职的实用经历
  13. java基于ssm的自助旅游管理系统
  14. 远程IO模块16DO开关量输出采集远程模块
  15. linux 添加用户、权限
  16. 严打“霸座”“扒车门”!去年12月以来已有12人被行拘
  17. 阿里巴巴集团增持阿里影业股权完成交割
  18. C/C++/Java/Go/Rust,Python喊你来打擂:3秒钟内统计出小于1亿的素数个数
  19. 被讨厌的勇气----读书笔记
  20. Android 状态栏样式设置

热门文章

  1. Java初学者 定义水仙花类和判断闰年
  2. Unix/Linux fork/exec的前世今生
  3. Node微信公众号开发 - 定时获取最新文章同步到MySQL数据库
  4. java设置界面边框,Java 设置Word页边距、页面大小、页面方向、页面边框
  5. iosxib 设置图片_iOS使用xcode可视化图像编辑功能进行图片拉伸
  6. auc到多少有意义_为什么医学中的AUC可以代表药物进入血液循环的量
  7. C语言:使用for语句计算n的阶乘
  8. 有机元素分析基本构成及其工作原理
  9. AI语音克隆,轻松get
  10. leetcode70 爬楼梯