首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

一文看懂机器学习流程

关键时刻,第一时间送达!

定义问题

客户流失率问题是电信运营商面临得一项重要课题,也是一个较为流行的案例。根据测算,招揽新的客户比保留住既有客户的花费大得多(通常5-20倍的差距)。因此,如何保留住现在的客户对运营商而言是一项非常有意义的事情。 本文希望通过一个公开数据的客户流失率问题分析,能够带着大家理解如何应用机器学习预测算法到实际应用中。

当然, 实际的场景比本文例子复杂的多,如果想具体应用到项目, 还需要针对不同的场景和数据进行具体的分析。

从机器学习的分类来讲, 这是一个监督问题中的分类问题。 具体来说, 是一个二分类问题。 所有的数据中包括一些特征, 最后就是它的分类:流失或者在网。接下来我们就开始具体的处理。

分析数据

首先我们来导入数据, 然后查看数据的基本情况。

数据导入

通过pandas来导入csv, 然后我们来查看一下数据的基本情况

输出:

可以看到, 整个数据集有3333条数据, 20个维度, 最后一项是分类。

基本信息以及类型

我们可以打印一些数据, 对数据和取值有一个基本的理解。

输出:

我们可以看到, 数据集有20项特征,分别是州名, 账户长度, 区号, 电话号码, 国际计划,语音邮箱, 白天通话分钟数, 白天电话个数, 白天收费, 晚间通话分钟数,晚间电话个数, 晚间收费, 夜间通话分钟数,夜间电话个数, 夜间收费, 国际分钟数, 国际电话个数, 国际收费, 客服电话数,流失与否.

可以看到这里面有个人信息,应该可以看到有些信息与流失与否关系不大。 州名, 区号可以指明客户的位置, 和流失有关系么, 不知道, 具体位置如果不分类, 应该完全没有关系。 而州名, 也许某个州有了某个强劲的竞争对手? 这也是瞎猜, 暂时意义不大, 删除。

账号长度, 电话号码, 不需要

国际计划, 语音邮箱。 可能有关系, 先留着吧。

分别统计了白天, 晚间, 夜间的通话分钟, 电话个数, 收费情况。 这是重要信息保留

客服电话, 客户打电话投诉多那流失率可能会大。 这个是重要信息保留。

流失与否。 这是分类结果。

然后我们可以看一下数据的类型, 如下:

输出:

看见, 有int, float, object。 对于不是数据型的数据, 后面除非决策树等算法, 否则应该会转化成数据行。 所以我们把churn? 结果转化, 以及"Int'l Plan","VMail Plan", 这两个参数只有yes, no 两种, 所以也进行转化成01值。

描述性统计

describe() 可以返回具体的结果, 对于每一列。

数量 平均值 标准差 25% 分位 50% 分位数 75% 分位数 最大值 很多时候你可以得到NA的数量和比例。

TODO 对于非数据性的是没有返回的的

图形化理解你的数据

之前的一些信息, 只是一些很初步的理解, 但是对于机器学习算法来讲是不够的。 下面我们从几个维度去进一步理解你的数据。工具可以用数字表格, 也可以用图形(matplotlib) 这里画图较多。

特征自己的信息

特征和分类之间的关系

特征和特征之间的关系 -- 这里鉴于时间的关系, 有些关系并没有直接应用于算法本身, 但是在进一步的算法提升中是很有意义的, 这里更多的是一种展示。

特征本身的信息

我们先来看一下流失比例, 以及关于打客户电话的个数分布

很容易理解。

然后呢, 我们的数据的特点是对白天, 晚上, 夜间,国际都有分钟数, 电话数, 收费三种维度。 那么我们拿白天的来举例。

可以看到分布基本上都是高斯分布, 这也符合我们的预期, 而高斯分布对于我们后续的一些算法处理是个好消息。

特征和分类的关联

我们来看一下一些特征和分类之间的关联。 比如下面int plan

我们可以看到, 有国际电话的流失率较高。 猜测也许他们有更多的选择, 或者对服务有更多的要求。 需要特别对待。 也许你需要电话多收集一下意见了。

再来看一下

基本上可以看出, 打客户电话的多少和最终的分类是强相关的, 打电话3次以上的流失率比例急速升高。 这是一个非常关键的指标。

准备数据

好的, 我们已经看了很多,对数据有了一定的理解。 下面我们开始具体对数据进行操作。

去除无关列

首先, 根据对问题的分析, 我们做第一件事情, 去除三列无关列。 州名, 电话, 区号。

我们和下一步一起做

转化成数值类型

对于有些特征, 本身不是数值类型的, 这些数据是不能被算法直接使用的, 所以我们来处理一下

输出:

我们可以看到结果, 所有的数据都是数值型的, 而且除去了对我们没有意义的列。

scale 数据范围

我们需要做一些scale的工作。 就是有些属性的scale 太大了。

对于逻辑回归和梯度下降来说, 个属性的scale 差距太大, 会对收敛速度有很大的影响。

我们这里对所有的都做, 其实可以对一些突出的特征做这种处理。

输出:

其他的呢, 还可以考虑降维等各种方式。 但是再实际使用中, 我们往往首先做出一个模型, 得到一个参考结果, 然后逐步优化。 所以我们准备数据就到这里。

评估算法

我们会使用多个算法来计算结果, 然后选择较好的。 如下

可以看到什么呢, 看到SVM 和 CART 效果相对较好。

提升结果

提升的部分, 如何使用提升算法。 比如随机森林。 xgboost

可以看到, 这两种算法对单个算法的提升还是很明显的。 进一步的, 也可以继续调整tree的数目, 但是效果应该差不多了。

展示结果

这里展示了如何保存这个算法, 以及如何取出然后应用。

后记

本文展示了通过用户流失率问题, 如何把机器学习的预测过程应用到实际项目中。

从业务的角度, 这个只是一个demo性质的应用, 实际场景可能复杂的多。

从流程的角度, 通过对数据的分析可以进一步提升算法的性能, 对于某些的特征, 可以采取不同的处理方式。 比如缺失值的处理, 这里很完整, 就省去了这个步骤。

来自:开源中国

https://my.oschina.net/sizhe/blog/1594791

Python开发整理发布,转载请联系作者获得授权

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180123B0RTXA00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券