电信公司churn数据客户流失k近邻(knn)模型预测分析

简介: 电信公司churn数据客户流失k近邻(knn)模型预测分析

Data background

A telephone company is interested in determining which customer characteristics are useful for predicting churn, customers who will leave their service.

The data set  is Churn . The fields are as follows:

 

State

 discrete.

account length

 continuous.

area code

 continuous.

phone number

 discrete.

international plan

 discrete.

voice mail plan

 discrete.

number vmail messages

 continuous.

total day minutes

 continuous.

total day calls

 continuous.

total day charge

 continuous.

total eve minutes

 continuous.

total eve calls

 continuous.

total eve charge

 continuous.

total night minutes

 continuous.

total night calls

 continuous.

total night charge

 continuous.

total intl minutes

 continuous.

total intl calls

 continuous.

total intl charge

 continuous.

number customer service calls

 continuous.

churn

 Discrete

Data Preparation and Exploration

 

1. 查看数据概览
2. 
3. ##      state      account.length    area.code        phone.number
4. ##  WV     : 158   Min.   :  1.0   Min.   :408.0    327-1058:   1
5. ##  MN     : 125   1st Qu.: 73.0   1st Qu.:408.0    327-1319:   1
6. ##  AL     : 124   Median :100.0   Median :415.0    327-2040:   1
7. ##  ID     : 119   Mean   :100.3   Mean   :436.9    327-2475:   1
8. ##  VA     : 118   3rd Qu.:127.0   3rd Qu.:415.0    327-3053:   1
9. ##  OH     : 116   Max.   :243.0   Max.   :510.0    327-3587:   1
10. ##  (Other):4240                                   (Other)  :4994
11. ##  international.plan voice.mail.plan number.vmail.messages
12. ##   no :4527           no :3677       Min.   : 0.000
13. ##   yes: 473           yes:1323       1st Qu.: 0.000
14. ##                                     Median : 0.000
15. ##                                     Mean   : 7.755
16. ##                                     3rd Qu.:17.000
17. ##                                     Max.   :52.000
18. ##
19. ##  total.day.minutes total.day.calls total.day.charge total.eve.minutes
20. ##  Min.   :  0.0     Min.   :  0     Min.   : 0.00    Min.   :  0.0
21. ##  1st Qu.:143.7     1st Qu.: 87     1st Qu.:24.43    1st Qu.:166.4
22. ##  Median :180.1     Median :100     Median :30.62    Median :201.0
23. ##  Mean   :180.3     Mean   :100     Mean   :30.65    Mean   :200.6
24. ##  3rd Qu.:216.2     3rd Qu.:113     3rd Qu.:36.75    3rd Qu.:234.1
25. ##  Max.   :351.5     Max.   :165     Max.   :59.76    Max.   :363.7
26. ##
27. ##  total.eve.calls total.eve.charge total.night.minutes total.night.calls
28. ##  Min.   :  0.0   Min.   : 0.00    Min.   :  0.0       Min.   :  0.00
29. ##  1st Qu.: 87.0   1st Qu.:14.14    1st Qu.:166.9       1st Qu.: 87.00
30. ##  Median :100.0   Median :17.09    Median :200.4       Median :100.00
31. ##  Mean   :100.2   Mean   :17.05    Mean   :200.4       Mean   : 99.92
32. ##  3rd Qu.:114.0   3rd Qu.:19.90    3rd Qu.:234.7       3rd Qu.:113.00
33. ##  Max.   :170.0   Max.   :30.91    Max.   :395.0       Max.   :175.00
34. ##
35. ##  total.night.charge total.intl.minutes total.intl.calls total.intl.charge
36. ##  Min.   : 0.000     Min.   : 0.00      Min.   : 0.000   Min.   :0.000
37. ##  1st Qu.: 7.510     1st Qu.: 8.50      1st Qu.: 3.000   1st Qu.:2.300
38. ##  Median : 9.020     Median :10.30      Median : 4.000   Median :2.780
39. ##  Mean   : 9.018     Mean   :10.26      Mean   : 4.435   Mean   :2.771
40. ##  3rd Qu.:10.560     3rd Qu.:12.00      3rd Qu.: 6.000   3rd Qu.:3.240
41. ##  Max.   :17.770     Max.   :20.00      Max.   :20.000   Max.   :5.400
42. ##
43. ##  number.customer.service.calls     churn
44. ##  Min.   :0.00                   False.:4293
45. ##  1st Qu.:1.00                   True. : 707
46. ##  Median :1.00
47. ##  Mean   :1.57
48. ##  3rd Qu.:2.00
49. ##  Max.   :9.00
50. ##
51.

从数据概览中我们可以发现没有缺失数据,同时可以发现电话号 地区代码是没有价值的变量,可以删去

 

Examine the variables graphically

 

 

从上面的结果中,我们可以看到churn为no的样本数目要远远大于churn为yes的样本,因此所有样本中churn占多数。

 

从上面的结果中,我们可以看到除了emailcode和areacode之外,其他数值变量近似符合正态分布。

1. ##  account.length    area.code     number.vmail.messages total.day.minutes
2. ##  Min.   :  1.0   Min.   :408.0   Min.   : 0.000        Min.   :  0.0
3. ##  1st Qu.: 73.0   1st Qu.:408.0   1st Qu.: 0.000        1st Qu.:143.7
4. ##  Median :100.0   Median :415.0   Median : 0.000        Median :180.1
5. ##  Mean   :100.3   Mean   :436.9   Mean   : 7.755        Mean   :180.3
6. ##  3rd Qu.:127.0   3rd Qu.:415.0   3rd Qu.:17.000        3rd Qu.:216.2
7. ##  Max.   :243.0   Max.   :510.0   Max.   :52.000        Max.   :351.5
8. ##  total.day.calls total.day.charge total.eve.minutes total.eve.calls
9. ##  Min.   :  0     Min.   : 0.00    Min.   :  0.0     Min.   :  0.0
10. ##  1st Qu.: 87     1st Qu.:24.43    1st Qu.:166.4     1st Qu.: 87.0
11. ##  Median :100     Median :30.62    Median :201.0     Median :100.0
12. ##  Mean   :100     Mean   :30.65    Mean   :200.6     Mean   :100.2
13. ##  3rd Qu.:113     3rd Qu.:36.75    3rd Qu.:234.1     3rd Qu.:114.0
14. ##  Max.   :165     Max.   :59.76    Max.   :363.7     Max.   :170.0
15. ##  total.eve.charge total.night.minutes total.night.calls total.night.charge
16. ##  Min.   : 0.00    Min.   :  0.0       Min.   :  0.00    Min.   : 0.000
17. ##  1st Qu.:14.14    1st Qu.:166.9       1st Qu.: 87.00    1st Qu.: 7.510
18. ##  Median :17.09    Median :200.4       Median :100.00    Median : 9.020
19. ##  Mean   :17.05    Mean   :200.4       Mean   : 99.92    Mean   : 9.018
20. ##  3rd Qu.:19.90    3rd Qu.:234.7       3rd Qu.:113.00    3rd Qu.:10.560
21. ##  Max.   :30.91    Max.   :395.0       Max.   :175.00    Max.   :17.770
22. ##  total.intl.minutes total.intl.calls total.intl.charge
23. ##  Min.   : 0.00      Min.   : 0.000   Min.   :0.000
24. ##  1st Qu.: 8.50      1st Qu.: 3.000   1st Qu.:2.300
25. ##  Median :10.30      Median : 4.000   Median :2.780
26. ##  Mean   :10.26      Mean   : 4.435   Mean   :2.771
27. ##  3rd Qu.:12.00      3rd Qu.: 6.000   3rd Qu.:3.240
28. ##  Max.   :20.00      Max.   :20.000   Max.   :5.400
29. ##  number.customer.service.calls
30. ##  Min.   :0.00
31. ##  1st Qu.:1.00
32. ##  Median :1.00
33. ##  Mean   :1.57
34. ##  3rd Qu.:2.00
35. ##  Max.   :9.00

Relationships between variables

从结果中我们可以看到两者之间存在显著的正相关线性关系。

 

Using the statistics node, report

1. ##                               account.length    area.code
2. ## account.length                  1.0000000000 -0.018054187
3. ## area.code                      -0.0180541874  1.000000000
4. ## number.vmail.messages          -0.0145746663 -0.003398983
5. ## total.day.minutes              -0.0010174908 -0.019118245
6. ## total.day.calls                 0.0282402279 -0.019313854
7. ## total.day.charge               -0.0010191980 -0.019119256
8. ## total.eve.minutes              -0.0095913331  0.007097877
9. ## total.eve.calls                 0.0091425790 -0.012299947
10. ## total.eve.charge               -0.0095873958  0.007114130
11. ## total.night.minutes             0.0006679112  0.002083626
12. ## total.night.calls              -0.0078254785  0.014656846
13. ## total.night.charge              0.0006558937  0.002070264
14. ## total.intl.minutes              0.0012908394 -0.004153729
15. ## total.intl.calls                0.0142772733 -0.013623309
16. ## total.intl.charge               0.0012918112 -0.004219099
17. ## number.customer.service.calls  -0.0014447918  0.020920513
18. ##                               number.vmail.messages total.day.minutes
19. ## account.length                        -0.0145746663      -0.001017491
20. ## area.code                             -0.0033989831      -0.019118245
21. ## number.vmail.messages                  1.0000000000       0.005381376
22. ## total.day.minutes                      0.0053813760       1.000000000
23. ## total.day.calls                        0.0008831280       0.001935149
24. ## total.day.charge                       0.0053767959       0.999999951
25. ## total.eve.minutes                      0.0194901208      -0.010750427
26. ## total.eve.calls                       -0.0039543728       0.008128130
27. ## total.eve.charge                       0.0194959757      -0.010760022
28. ## total.night.minutes                    0.0055413838       0.011798660
29. ## total.night.calls                      0.0026762202       0.004236100
30. ## total.night.charge                     0.0055349281       0.011782533
31. ## total.intl.minutes                     0.0024627018      -0.019485746
32. ## total.intl.calls                       0.0001243302      -0.001303123
33. ## total.intl.charge                      0.0025051773      -0.019414797
34. ## number.customer.service.calls         -0.0070856427       0.002732576
35. ##                               total.day.calls total.day.charge
36. ## account.length                   0.0282402279     -0.001019198
37. ## area.code                       -0.0193138545     -0.019119256
38. ## number.vmail.messages            0.0008831280      0.005376796
39. ## total.day.minutes                0.0019351487      0.999999951
40. ## total.day.calls                  1.0000000000      0.001935884
41. ## total.day.charge                 0.0019358844      1.000000000
42. ## total.eve.minutes               -0.0006994115     -0.010747297
43. ## total.eve.calls                  0.0037541787      0.008129319
44. ## total.eve.charge                -0.0006952217     -0.010756893
45. ## total.night.minutes              0.0028044650      0.011801434
46. ## total.night.calls               -0.0083083467      0.004234934
47. ## total.night.charge               0.0028018169      0.011785301
48. ## total.intl.minutes               0.0130972198     -0.019489700
49. ## total.intl.calls                 0.0108928533     -0.001306635
50. ## total.intl.charge                0.0131613976     -0.019418755
51. ## number.customer.service.calls   -0.0107394951      0.002726370
52. ##                               total.eve.minutes total.eve.calls
53. ## account.length                    -0.0095913331     0.009142579
54. ## area.code                          0.0070978766    -0.012299947
55. ## number.vmail.messages              0.0194901208    -0.003954373
56. ## total.day.minutes                 -0.0107504274     0.008128130
57. ## total.day.calls                   -0.0006994115     0.003754179
58. ## total.day.charge                  -0.0107472968     0.008129319
59. ## total.eve.minutes                  1.0000000000     0.002763019
60. ## total.eve.calls                    0.0027630194     1.000000000
61. ## total.eve.charge                   0.9999997749     0.002778097
62. ## total.night.minutes               -0.0166391160     0.001781411
63. ## total.night.calls                  0.0134202163    -0.013682341
64. ## total.night.charge                -0.0166420421     0.001799380
65. ## total.intl.minutes                 0.0001365487    -0.007458458
66. ## total.intl.calls                   0.0083881559     0.005574500
67. ## total.intl.charge                  0.0001593155    -0.007507151
68. ## number.customer.service.calls     -0.0138234228     0.006234831
69. ##                               total.eve.charge total.night.minutes
70. ## account.length                   -0.0095873958        0.0006679112
71. ## area.code                         0.0071141298        0.0020836263
72. ## number.vmail.messages             0.0194959757        0.0055413838
73. ## total.day.minutes                -0.0107600217        0.0117986600
74. ## total.day.calls                  -0.0006952217        0.0028044650
75. ## total.day.charge                 -0.0107568931        0.0118014339
76. ## total.eve.minutes                 0.9999997749       -0.0166391160
77. ## total.eve.calls                   0.0027780971        0.0017814106
78. ## total.eve.charge                  1.0000000000       -0.0166489191
79. ## total.night.minutes              -0.0166489191        1.0000000000
80. ## total.night.calls                 0.0134220174        0.0269718182
81. ## total.night.charge               -0.0166518367        0.9999992072
82. ## total.intl.minutes                0.0001320238       -0.0067209669
83. ## total.intl.calls                  0.0083930603       -0.0172140162
84. ## total.intl.charge                 0.0001547783       -0.0066545873
85. ## number.customer.service.calls    -0.0138363623       -0.0085325365


如果把高相关性的变量保存下来,可能会造成多重共线性问题,因此需要把高相关关系的变量删去。

Data Manipulation

从结果中可以看到,total.day.calls和total.day.charge之间存在一定的相关关系。
特别是voicemial为no的变量之间存在负相关关系。

 

Discretize (make categorical) a relevant numeric variable  

 

 

 

对变量进行离散化

 

construct a distribution of the variable with a churn overlay

construct a histogram of the variable with a churn overlay

 

 

Find a pair of numeric variables which are interesting with respect to churn.

从结果中可以看到,total.day.calls和total.day.charge之间存在一定的相关关系。

Model Building

特别是churn为no的变量之间存在相关关系。

 

1. ##                                 Estimate Std. Error t value Pr(>|t|)
2. ## (Intercept)                    0.3082150  0.0735760   4.189 2.85e-05 ***
3. ## stateAL                        0.0151188  0.0462343   0.327 0.743680
4. ## stateAR                        0.0894792  0.0490897   1.823 0.068399 .
5. ## stateAZ                        0.0329566  0.0494195   0.667 0.504883
6. ## stateCA                        0.1951511  0.0567439   3.439 0.000588 ***
7. ## international.plan yes         0.3059341  0.0151677  20.170  < 2e-16 ***
8. ## voice.mail.plan yes           -0.1375056  0.0337533  -4.074 4.70e-05 ***
9. ## number.vmail.messages          0.0017068  0.0010988   1.553 0.120402
10. ## total.day.minutes              0.3796323  0.2629027   1.444 0.148802
11. ## total.day.calls                0.0002191  0.0002235   0.981 0.326781
12. ## total.day.charge              -2.2207671  1.5464583  -1.436 0.151056
13. ## total.eve.minutes              0.0288233  0.1307496   0.220 0.825533
14. ## total.eve.calls               -0.0001585  0.0002238  -0.708 0.478915
15. ## total.eve.charge              -0.3316041  1.5382391  -0.216 0.829329
16. ## total.night.minutes            0.0083224  0.0695916   0.120 0.904814
17. ## total.night.calls             -0.0001824  0.0002225  -0.820 0.412290
18. ## total.night.charge            -0.1760782  1.5464674  -0.114 0.909355
19. ## total.intl.minutes            -0.0104679  0.4192270  -0.025 0.980080
20. ## total.intl.calls              -0.0063448  0.0018062  -3.513 0.000447 ***
21. ## total.intl.charge              0.0676460  1.5528267   0.044 0.965254
22. ## number.customer.service.calls  0.0566474  0.0033945  16.688  < 2e-16 ***
23. ## total.day.minutes1medium       0.0502681  0.0160228   3.137 0.001715 **
24. ## total.day.minutes1short        0.2404020  0.0322293   7.459 1.02e-13 ***

 

从结果中看,我们可以发现 state  total.intl.calls   、number.customer.service.calls 、 total.day.minutes1medium 、    total.day.minutes1short    的变量有重要的影响。

Use K-Nearest-Neighbors (K-NN) algorithm to develop a model for predicting Churn

1. ##         Direction.2005
2. ## knn.pred   1   2
3. ##        1 760  97
4. ##        2 100  43
5. 
6. 
7. [1] 0.803


混淆矩阵(英语:confusion matrix)是可视化工具,特别用于监督学习,在无监督学习一般叫做匹配矩阵。矩阵的每一列代表一个类的实例预测,而每一行表示一个实际的类的实例。
1. ##         Direction.2005
2. ## knn.pred   1   2
3. ##        1 827 104
4. ##        2  33  36
5. 
6. 
7. 
8. [1] 0.863

 

从测试集的结果,我们可以看到准确度达到86%。

 

Findings  

 

我们可以发现 ,total.day.calls和total.day.charge之间存在一定的相关关系。特别是churn为no的变量之间存在相关关系。同时我们可以发现 state  total.intl.calls   、number.customer.service.calls 、 total.day.minutes1medium、    total.day.minutes1short    的变量有重要的影响。同时我们可以发现,total.day.calls和total.day.charge之间存在一定的相关关系。最后从knn模型结果中,我们可以发现从训练集的结果中,我们可以看到准确度有80%,从测试集的结果,我们可以看到准确度达到86%。说明模型有很好的预测效果。

相关文章
|
2天前
|
缓存 算法 搜索推荐
Java中的算法优化与复杂度分析
在Java开发中,理解和优化算法的时间复杂度和空间复杂度是提升程序性能的关键。通过合理选择数据结构、避免重复计算、应用分治法等策略,可以显著提高算法效率。在实际开发中,应该根据具体需求和场景,选择合适的优化方法,从而编写出高效、可靠的代码。
15 6
|
14天前
|
算法
基于模糊PI控制算法的龙格库塔CSTR模型控制系统simulink建模与仿真
本项目基于MATLAB2022a,采用模糊PI控制算法结合龙格-库塔方法,对CSTR模型进行Simulink建模与仿真。通过模糊控制处理误差及变化率,实现精确控制。核心在于将模糊逻辑与经典数值方法融合,提升系统性能。
|
14天前
|
存储 算法
基于HMM隐马尔可夫模型的金融数据预测算法matlab仿真
本项目基于HMM模型实现金融数据预测,包括模型训练与预测两部分。在MATLAB2022A上运行,通过计算状态转移和观测概率预测未来值,并绘制了预测值、真实值及预测误差的对比图。HMM模型适用于金融市场的时间序列分析,能够有效捕捉隐藏状态及其转换规律,为金融预测提供有力工具。
|
26天前
|
并行计算 算法 测试技术
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面,旨在通过综合策略提升程序性能,满足实际需求。
57 1
|
1月前
|
机器学习/深度学习 人工智能 算法
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
手写数字识别系统,使用Python作为主要开发语言,基于深度学习TensorFlow框架,搭建卷积神经网络算法。并通过对数据集进行训练,最后得到一个识别精度较高的模型。并基于Flask框架,开发网页端操作平台,实现用户上传一张图片识别其名称。
91 0
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
|
1月前
|
机器学习/深度学习 人工智能 算法
基于深度学习的【蔬菜识别】系统实现~Python+人工智能+TensorFlow+算法模型
蔬菜识别系统,本系统使用Python作为主要编程语言,通过收集了8种常见的蔬菜图像数据集('土豆', '大白菜', '大葱', '莲藕', '菠菜', '西红柿', '韭菜', '黄瓜'),然后基于TensorFlow搭建卷积神经网络算法模型,通过多轮迭代训练最后得到一个识别精度较高的模型文件。在使用Django开发web网页端操作界面,实现用户上传一张蔬菜图片识别其名称。
94 0
基于深度学习的【蔬菜识别】系统实现~Python+人工智能+TensorFlow+算法模型
|
1月前
|
存储 编解码 负载均衡
数据分片算法
【10月更文挑战第25天】不同的数据分片算法适用于不同的应用场景和数据特点,在实际应用中,需要根据具体的业务需求、数据分布情况、系统性能要求等因素综合考虑,选择合适的数据分片算法,以实现数据的高效存储、查询和处理。
|
1月前
|
机器学习/深度学习 人工智能 算法
青否数字人声音克隆算法升级,16个超真实直播声音模型免费送!
青否数字人的声音克隆算法全面升级,能够完美克隆真人的音调、语速、情感和呼吸。提供16种超真实的直播声音模型,支持3大AI直播类型和6大核心AIGC技术,60秒快速开播,助力商家轻松赚钱。AI讲品、互动和售卖功能强大,支持多平台直播,确保每场直播话术不重复,智能互动和真实感十足。新手小白也能轻松上手,有效规避违规风险。
|
1月前
|
存储 缓存 算法
分布式缓存有哪些常用的数据分片算法?
【10月更文挑战第25天】在实际应用中,需要根据具体的业务需求、数据特征以及系统的可扩展性要求等因素综合考虑,选择合适的数据分片算法,以实现分布式缓存的高效运行和数据的合理分布。
|
1月前
|
分布式计算 Java 开发工具
阿里云MaxCompute-XGBoost on Spark 极限梯度提升算法的分布式训练与模型持久化oss的实现与代码浅析
本文介绍了XGBoost在MaxCompute+OSS架构下模型持久化遇到的问题及其解决方案。首先简要介绍了XGBoost的特点和应用场景,随后详细描述了客户在将XGBoost on Spark任务从HDFS迁移到OSS时遇到的异常情况。通过分析异常堆栈和源代码,发现使用的`nativeBooster.saveModel`方法不支持OSS路径,而使用`write.overwrite().save`方法则能成功保存模型。最后提供了完整的Scala代码示例、Maven配置和提交命令,帮助用户顺利迁移模型存储路径。