客户流失分析预测案例 -- 机器学习项目基础篇(7)

客户流失

它是指现有的客户、用户、订阅者或任何类型的回头客停止与公司开展业务或结束与公司的关系。

客户流失的类型

  • 合同客户流失:当客户签订了服务合同并决定取消服务时,例如有线电视,SaaS。
  • 自愿流失:当用户自愿取消服务时,例如手机连接。
  • 非合同流失:当客户未签订服务合同并决定取消服务时,例如零售商店中的消费者忠诚度。
  • 非自愿流失:当客户在没有任何请求的情况下发生流失时,例如信用卡过期。

自愿流失的原因

  • 缺乏使用
  • 服务差
  • 更优惠的价格

导入电信客户流失数据集

# Import required libraries
import numpy as np
import pandas as pd
  
# Import the dataset
dataset = pd.read_csv('telcochurndata.csv')
  
# Glance at the first five records
dataset.head()
  
# Print all the features of the data
dataset.columns

在这里插入图片描述
在这里插入图片描述

电信客户流失数据集的探索性数据分析

查找数据集中的流失者和非流失者的数量:

# Churners vs Non-Churners
dataset['Churn'].value_counts()

在这里插入图片描述
按流失率对数据进行分组并计算平均值,以确定流失者是否比非流失者拨打更多的客户服务电话:

# Group data by 'Churn' and compute the mean
print(dataset.groupby('Churn')['Customer service calls'].mean())

在这里插入图片描述
好耶!也许不足为奇的是,流失者似乎比非流失者打更多的客户服务电话。

找出一个州是否比另一个州有更多的流失者。

# Count the number of churners and non-churners by State
print(dataset.groupby('State')['Churn'].value_counts())

在这里插入图片描述
虽然California 是美国人口最多的州,但在我们的数据集中,来自California 的客户并不多。例如,Arizona (AZ)有64个客户,其中4个最终流失。相比之下,California有更高数量(和百分比)的客户流失。这对一个公司来说是非常有用的信息。

探索数据可视化:了解变量如何分布

# Import matplotlib and seaborn
import matplotlib.pyplot as plt
import seaborn as sns
  
# Visualize the distribution of 'Total day minutes'
plt.hist(dataset['Total day minutes'], bins = 100)
  
# Display the plot
plt.show()

在这里插入图片描述
可视化客户流失者和非流失者之间的客户服务呼叫差异

# Create the box plot
sns.boxplot(x = 'Churn',
            y = 'Customer service calls',
            data = dataset,
            sym = "",                  
            hue = "International plan") 
# Display the plot
plt.show()

在这里插入图片描述
看起来那些确实流失的客户最终会留下更多的客户服务电话,除非这些客户也有国际计划,在这种情况下,他们留下更少的客户服务电话。这种类型的信息对于更好地理解客户流失的驱动因素非常有用。现在是时候学习如何在建模之前预处理数据了。

电信客户流失数据的预处理

许多机器学习模型对数据如何分布做出了某些假设。其中一些假设如下:

  • 特征呈正态分布
  • 特征的比例相同
  • 特征的数据类型为数值

在电信公司流失数据中,Churn, Voice mail plan和International plan是二进制特征,可以很容易地转换为0和1。

# Features and Labels
X = dataset.iloc[:, 0:19].values
y = dataset.iloc[:, 19].values # Churn
  
# Encoding categorical data in X
from sklearn.preprocessing import LabelEncoder
  
labelencoder_X_1 = LabelEncoder()
X[:, 3] = labelencoder_X_1.fit_transform(X[:, 3])
  
labelencoder_X_2 = LabelEncoder()
X[:, 4] = labelencoder_X_2.fit_transform(X[:, 4])
  
# Encoding categorical data in y
labelencoder_y = LabelEncoder()
y = labelencoder_y.fit_transform(y)

使用One hot encoding的编码状态功能

# Removing extra column to avoid dummy variable trap
X_State = pd.get_dummies(X[:, 0], drop_first = True)
  
# Converting X to a dataframe
X = pd.DataFrame(X)
  
# Dropping the 'State' column
X = X.drop([0], axis = 1)
  
# Merging two dataframes
frames = [X_State, X]
result = pd.concat(frames, axis = 1, ignore_index = True)
  
# Final dataset with all numeric features
X = result

创建训练集和测试集

# Splitting the dataset into the Training and Test sets
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, 
                                                    test_size = 0.2, 
                                                    random_state = 0)

缩放训练集和测试集的特征

# Feature Scaling
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)

在训练集上训练随机森林分类模型

# Import RandomForestClassifier
from sklearn.ensemble import RandomForestClassifier
  
# Instantiate the classifier
clf = RandomForestClassifier()
  
# Fit to the training data
clf.fit(X_train, y_train)

预测

# Predict the labels for the test set
y_pred = clf.predict(X_test)

评估模型性能

# Compute accuracy
from sklearn.metrics import accuracy_score
  
accuracy_score(y_test, y_pred)

在这里插入图片描述
混淆矩阵

from sklearn.metrics import confusion_matrix
print(confusion_matrix(y_test, y_pred))

在这里插入图片描述
从混淆矩阵中,我们可以计算以下度量:

  • 真阳性(TP)= 51
  • 真阴性(TN)= 575
  • 假阳性(FP)= 4
  • 假阴性(FN)= 37
  • 精确率= TP/(TP+FP)= 0.92
  • 召回= TP/(TP+FN)= 0.57
  • 准确度=(TP+TN)/(TP+TN+FP+FN)= 0.9385

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/60578.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

PHP正则绕过解析

正则绕过 正则表达式PHP正则回溯PHP中的NULL和false回溯案例案例1案例2 正则表达式 在正则中有许多特殊的字符,不能直接使用,需要使用转义符\。如:$,(,),*,,.,?,[,,^,{。 这里大家会有疑问:为啥小括号(),这个就需要两个来转义&a…

XSS漏洞原理及利用跨站请求伪造CSRF

XSS漏洞原理及利用&跨站请求伪造CSRF XSS一、案例二、什么是XSS三、XSS危害四、XSS的分类4.1、反射型XSS4.1.1、介绍4.1.2、利用过程 4.2、存储型XSS4.2.1、介绍4.2.2、利用过程4.2.3、案例 4.3、DOM型XSS4.3.1、介绍4.3.2、常用的DOM方法4.3.3、案例4.3.3.1、代码分析4.3.…

Linux上安装Keepalived,多台Nginx配置Keepalived(保姆级教程)

目录 一、yum安装 第一步:下载 第二步:编辑Keepalived配置文件(第一台) 第三步:编辑Keepalived配置文件(第二台) 第四步:我们在本机利用cmd ping一下 一、yum安装 第一步&…

IDEA基础使用

IDEA基础使用 1、IDEA中显示用法和用户截图展示有调用显示无调用显示 对应方法 2、如何找出项目中所有不被调用方法截图展示对应方法 3、常用代码(Code)说明及快捷键:4、未完待续待日后更新。。。总结:欢迎指导,也祝码友们代码越来越棒,技术越…

元素2D转3D 椭圆形旋转实现

椭圆旋转功能展示 transform-style: preserve-3d;(主要css代码) gif示例(背景图可插入透明以此实现边框线的旋转) 导致的无法点击遮挡问题可以参考我的另一个文章 穿透属性-----------------------css穿透属性 实时代码展示

【FAQ】在Linux中使用curl访问EasyCVR,返回报错Unauthorized的原因排查

EasyCVR可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安防视频监控的能力,比如:视…

HCIE-Datacom真题和机构资料

通过认证验证的能力 具备坚实的企业网络跨场景融合解决方案理论知识,能够使用华为数通产品及解决方案进行企业园区网络、广域互联网络及广域承载网络的规划、建设、维护及优化,能够胜任企业网络全场景专家岗位(包括客户经理、项目经理、售前…

CBCGPRibbon 添加背景图片

resource.h中声明资源的ID:ID_RIBBON_BACKIMAGE rc文件中添加png图片路径: ID_RIBBON_BACKIMAGE PNG DISCARDABLE "res\\bkribbon.png" 代码中添加下测: //添加背景图片 m_wndRibbonBar.SetBackgroundImage(ID_RIB…

使用公式与格式控制Excel快速实现计划甘特图

项目中都会遇到做任务计划的需求,有的客户要求需要有甘特图的形式本文介绍如何使用excel 单元格实现甘特图显示,调整任务时间自动填充单元格填色实现甘特图效果。废话不多说,先看效果。 准备工作先创建两列开始时间与完成时间,这…

EMD经验模态分解介绍

EMD概述 其实一种信号分解方法,是一种自适应的数据处理方法,适合非线性和非平稳时间序列的分析和研究,其本质是对数据序列或信号的平稳化处理。 将上面6个信号叠加如下: 就是6个简单信号叠加,形成一个复杂信号。 核心…

Java精品项目系统第151期大学生校园帮系统打包(编号S063)

Java精品项目系统第151期大学生校园帮系统打包(编号S063) 大家好,小辰今天给大家介绍一个基于Spring Springboot MyBatis实现的大学生校园帮系统,演示视频文章末尾公众号对号查询观看即可 文章目录 Java精品项目系统第151期大学…

flink1.17 eventWindow不要配置processTrigger

理论上可以eventtime processtime混用,但是下面代码测试发现bug,输入一条数据会一直输出. flink github无法提bug/问题. apache jira账户新建后竟然flink又需要一个账户,放弃 bug复现操作 idea运行代码后 往source kafka发送一条数据 a,1,1690304400000 可以看到无限输出…

etcd

文章目录 etcd单机安装设置键值对watch操作读取键过往版本的值压缩修订版本lease租约(过期机制)授予租约撤销租约keepAlive续约获取租约信息 事务基于etcd实现分布式锁原生实现官方 concurrency 包实现 服务注册与发现Go 操作 Etcd 参考 etcd etcd 是一…

计算机网络-三种交换方式

计算机网络-三种交换方式 电路交换(Circuit Switching) 电话交换机接通电话线的方式称为电路交换从通信资源分配的角度来看,交换(Switching)就是按照某种方式动态的分配传输线路的资源 电话交换机 为了解决电话之间通信两两之间连线过多,所以产生了电话…

原型模式(Prototype)

原型模式是一种创建型设计模式,使调用方能够复制已有对象,而又无需使代码依赖它们所属的类。当有一个类的实例(原型),并且想通过复制原型来创建新对象时,通常会使用原型模式。 The Prototype pattern is g…

解决Pycharm下opencv代码提示问题

解决Pycharm下opencv代码提示问题 新安装了opencv-python4.7.0.72版本,在pycharm中导入cv2后没有代码提示,解决方法如下: 解决方案 我使用的是miniconda环境,opencv安装的路径为:C:\Env\miniconda3\envs\compute\Li…

Vue3和TypeScript项目-移动端兼容

1 全局安装typescript 2 检测安装成功 3 写的是ts代码,但是最后一定要变成js代码,才能在浏览器使用 这样就会多一个js文件 3 ts语法 数组语法 对象语法 安装vue3项目 成功后进入app。安装依赖。因为我们用的是脚手架,要引入东西的时候不需要…

python的下载和安装步骤,python下载安装教程3.10.0

大家好,给大家分享一下python下载安装教程3.10.0,很多人还不知道这一点。下面详细解释一下。现在让我们来看看! 第一步:下载Python安装包 在Python的官网 www.python.org 中找到最新版本的Python安装包,点击进行下载&a…

【Java】UWB高精度工业人员安全定位系统源码

基于VueSpring boot前后端分离架构开发的一套UWB技术高精度定位系统源码。 UWB高精度人员定位系统提供实时定位、电子围栏、轨迹回放等基础功能以及各种拓展功能,用户可根据实际需要任意选择搭配拓展功能。该系统简易部署,方便使用,实时响应。UWB高精度定…

【小沐学前端】GitBook制作在线电子书、技术文档(gitbook + Markdown + node)

文章目录 1、简介1.1 工具简介1.2 使用费用 2、安装2.1 安装node2.2 安装gitbook 3、测试3.1 编辑文档3.2 编译工程3.3 预览工程 结语 1、简介 官网地址: https://www.gitbook.com/1.1 工具简介 什么是 GitBook? GitBook 是一个现代文档平台&#xff…