精华内容
下载资源
问答
  • “提高外贸开发信打开率系列文章“:外贸开发信打开率提高60%方法1:客户源 外贸开发信就是外贸业务员把自己公司的产品、服务、优势等通过邮件、信函发送给潜在的国外客户,希望建立合作关系,共同发展,潜在的国外...

    “提高外贸开发信打开率系列文章“:外贸开发信打开率提高60%方法1:客户源

    外贸开发信就是外贸业务员把自己公司的产品、服务、优势等通过邮件、信函发送给潜在的国外客户,希望建立合作关系,共同发展,潜在的国外客户收到邮件、信函后,如有意向,则会与外贸业务员进行进一步的沟通、谈判,最终确立购买合同。

    外贸开发信第一步找到精确的客户源,如果客户源不精确,开发信不管怎么发,收效甚微!其实就是真正找到您的潜在客户、目标客户。这就涉及到找客户的思路及方法。

    EmailCamel整理了网络上找客户的思路和方法,在此抛砖引玉,希望能帮助到看文章的读者。

    思路:

    1. 行业分析:了解你产品所在行业的产业链结构,涉及到哪些参与者、都是什么角色,那么这些参与者就可能是你的潜在客户,找到参与者就找到你的客户

    2. 产品分析:产品有哪些关键词,你的潜在客户会通过什么词来搜索你的产品,这个比较适合有官网,通过SEO来主动吸引客户,客户主动询盘

    3. 竞品分析:了解有哪些竞争对手,他们是怎么找客户的,通过竞争对手涉及到的找客户渠道、关键词设置、引流渠道等

    4. 市场分析:市场有多大,其实就是你的产品所在行业的参与者及购买力如何

    以上是大的方向,具体的思路有两种

    1. 被动开发客户,比如做一个官网,通过SEO、Google广告等引流,客户主动询盘

    2. 主动开发客户,比如通过google自己搜索
     

    方法:

    这里的方法就是获客渠道

    1. 官网作为平台,各种方法引流,客户主动询盘

    2. 阿里巴巴等平台

    3. 展会

    4. 数据:海关数据、航运数据等

    5. 客户开发软件
     

    小结:“提高外贸开发信打开率系列文章“:外贸开发信打开率提高60%方法1:客户源. 外贸开发信第一步找准客户源

    EmailCamel海外邮件群发-外贸邮件群发-外贸EDM详细介绍

    展开全文
  • SSH客户关系管理系统代码 付数据库 安装说明等 适合新手做练习 分为两部分 在我空间 可以部署的 本人部署成功 如有问题请内我 ID是QQ
  • 1在开始找客户时你首先要做的工作是把自己要推销的产品摸索透要尽量多得去掌握产品的一些知识因为这些知识都会帮助你克服在业务工作中遇到的困难试想一个对自己产品不了解的人如何去说服别人购买你的产品呢然而缺少...
  • 关于客户(销售员该如何找客户才好) 1、旧时指以租佃为生的人家。2、旧时指外地迁来的住户。(以上两条详见下文)。3、工厂企业或经纪人称...教你怎样寻找客户源(销售员该如何找客户才好) 刚入行的销售员,首先要

    关于客户(销售员该如何找客户才好)

    1、旧时指以租佃为生的人家。2、旧时指外地迁来的住户。(以上两条详见下文)。3、工厂企业或经纪人称来往的主顾;客商。4、在网络的通信方式中,指服务的请求方。5、在客户关系管理中,客户是对企业产品和服务有特定需求的群体,它是企业经营活动得以维持的根本保证。6、客户是服务请求方。

    教你怎样寻找客户源(销售员该如何找客户才好)

    刚入行的销售员,首先要面对客户在哪里的问题?就是干了多年的销售员遇到新的产品,特别是新出现的产品,有时连行业都分不清楚。比如:我做了十多年的销售,当开始做品牌的客户关系管理系统这个项目时,就拿不准是要去哪里找代理商渠道,后来通过向同行的学习,探讨慢慢的摸索出了方向。还有就是随着科技的发展,一些跨行业,综合性能的产品会越来越多,渠道方向就涉及到好多路径,同时还要考虑到哪方面的渠道更适合等方面因素,这就为销售员提出了新的问题。那么,我们在寻找客户的过程中应注意些什么呢?

    一、普遍寻找法

    这种方法也称逐户寻找法或者地毯式寻找法。其方法的要点是,在业务员特定的市场区域范围内,针对特定的群体,用上门、邮件或者电话、电子邮件等方式对该范围内的组织、家庭或者个人无遗漏地进行寻找与确认的方法。比如,将某市某个居民新村的所有家庭作为普遍寻找对象,将上海地区所有的宾馆、饭店作为地毯式寻找对象等。

    普遍寻找法有以下的优势:

    1、地毯式的铺开不会遗漏任何有价值的客户;

    2、寻找过程中接触面广、信息量大、各种意见和需求、客户反应都可能收集到,是分析市场的一种方法;

    3、让更多的人了解到自己的企业。

    当然其缺点也是很明显的:

    1、成本高、费时费力;

    2、容易导致客户的抵触情绪。

    因此,如果活动可能会对客户的工作、生活造成不良的干扰,一定要谨慎进行。

    普遍寻找法可以采用业务员亲自上门、邮件发送、电话、与其他促销活动结合进行的方式展开。

    二、广告寻找法

    这种方法的基本步骤是:(1)向目标顾客群发送广告;(2)吸引顾客上门展开业务活动或者接受反馈。例如,通过媒体发送某个减肥器具的广告,介绍其功能、购买方式、地点、代理和经销办法等,然后在目标区域展开活动。

    广告寻找法的优点是:

    1、传播信息速度快、覆盖面广、重复性好;

    2、相对普遍寻找法更加省时省力;

    其缺点是需要支付广告费用、针对性和及时反馈性不强。

    三、介绍寻找法

    这种方法是业务员通过他人的直接介绍或者提供的信息进行顾客寻找,可以通过业务员的熟人、朋友等社会关系,也可以通过企业的合作伙伴、客户等由他们进行介绍,主要方式有电话介绍、口头介绍、信函介绍、名片介绍、口碑效应等。

    利用这个方法的关键是业务员必须注意培养和积累各种关系,为现有客户提供的满意的服务和可能的帮助,并且要虚心地请求他人的帮助。口碑好、业务印象好、乐于助人、与客户关系好、被人信任的业务员一般都能取得有效的突破。

    介绍寻找客户法由于有他人的介绍或者成功案例和依据,成功的可能性非常大,同时也可以降低销售费用,减小成交障碍,因此业务员要重视和珍惜。

    四、资料查阅寻找法

    我们一直认为,业务员要有强的信息处理能力,通过资料查阅寻找客户既能保证一定的可靠性,也减小工作量、提高工作效率,同时也可以最大限度减少业务工作的盲目性和客户的抵触情绪,更重要的是,可以展开先期的客户研究,了解客户的特点、状况,提出适当的客户活动针对性策略等。

    需要注意的是资料的时效性和可靠性,此外,注意对资料(行业的或者客户的)日积月累往往更能有效地展开工作。

    业务员经常利用的资料有:有关政府部门提供的资料、有关行业和协会的资料、国家和地区的统计资料、企业黄页、工商企业目录和产品目录、电视、报纸、杂志、互联网等大众媒体、客户发布的消息、产品介绍、企业内刊等等,而互联网信息虽广而多,但是还是要到一些可信专业的网站上进行相关的资料搜集,比如有关政府部门的资料就是去一些当地的政府部门网站,有关行业和协会的资料就去自己行业协会的网站上去,其他的资料以此类推,找最权威的网站,相关性高,找到的资料才会准确。

    一些有经验的业务员,在出发和客户接触之前,往往会通过大量的资料研究对客户做出非常充分的了解和判断。

    五、委托助手寻找法

    这种方法在国外用得比较多,一般是业务员在自己的业务地区或者客户群中,通过有偿的方式委托特定的人为自己收集信息,了解有关客户和市场、地区的情报资料等等,这优点象香港**使用“线民”,在国内的企业,笔者也见过,就是业务员在企业的中间商中间,委托相关人员定期或者不定期提供一些关于产品、销售的信息。

    另一种方式是,老业务员有时可以委托新业务员从事这方面的工作,对新业务员也是一个有效的锻炼。

    六、客户资料整理法

    这种方法本质上属于“资料查阅寻找法”,但是,也有其特殊性,我们强调客户资料管理,因为其重要性十分突出,现有的客户、与企业联系过的单位、企业举办活动(如公关、市场调查)的参与者等等,他们的信息资料都应该得到良好的处理和保存,这些资料积累到一定的程度,就是一笔财富,在市场营销精耕细作的今天,这尤为重要,这同时也要得力于CRM客户关系管理系统,处理、管理繁杂的客户资料为企业,为个人带来了多大的帮助。现在难以想象如果一个企业没有用到CRM客户关系管理系统或者是OA会变得多么糟糕,如果面对你繁多的客户需要管理还没用到类似工具的话,那你是out了。

    举个最简单的例子,某个家庭,第一代洗衣机购买的是“小天鹅双桶洗衣机”、第二代洗衣机是“小天鹅全自动洗衣机”、第三代洗衣机是“小天鹅滚筒式洗衣机”,你如果要做到真正让客户的三代洗衣机都用“小天鹅”,客户的资料和客户的精细服务就是必不可少的。开个玩笑的话,小天鹅可以提出一个营销内部口号:“让小天鹅在顾客家里代代相传”。

    七、交易会寻找法

    国际国内每年都有不少交易会,如广交会、高交会、中小企业博览会等等,这是一个绝好的商机,要充分利用,交易会不仅实现交易,更重要的是寻找客户、联络感情、沟通了解。奥联的一个客户的老总,参加了今年的广交会回来,向全体员工宣布一个惊人的好消息:“我有足够的信心向大家保证:今年我们的销售收入可以增加2个亿!”,其成效明显主要原因之一是因为其产品的特殊性,但是更重要的是企业已经全面学会和掌握了这个有效的途径。

    八、咨询寻找法

    一些组织,特别是行业组织、技术服务组织、咨询单位等,他们手中往往集中了大量的客户资料和资源以及相关行业和市场信息,通过咨询的方式寻找客户不仅是一个有效的途径,有时还能够获得这些组织的服务、帮助和支持,比如在客户联系、介绍、市场进入方案建议等方面。我们就曾经为一个国外企业进入中国市场提出合作建议方案,寻找合作者甚至参与项目论证等方面提供过一揽子服务。

    九、企业各类活动寻找法

    企业通过公共关系活动、市场调研活动、促销活动、技术支持和售后服务活动等,一般都会直接接触客户,这个过程中对客户的观察、了解、深入的沟通都非常有力,也是一个寻找客户的好方法。

    有效地寻找客户方法远远不止这些,应该说,是一个随时随地的过程。一般信息处理过程是:“所有目标对象-接触和信息处理-初选―精选―重点潜在客户―客户活动计划”。

    展开全文
  • 源自:数据分析不是个事儿作者:启方客户流失是所有与消费者挂钩行业都会关注的点。因为发展一个新客户是需要一定成本的,一旦客户流失,成本浪费不说,挽回一个客户的成本更大。今天分享一个用户流失...

    源自:数据分析不是个事儿

    作者:启方

    客户流失是所有与消费者挂钩行业都会关注的点。因为发展一个新客户是需要一定成本的,一旦客户流失,成本浪费不说,挽回一个客户的成本更大。

    今天分享一个用户流失预测,以电信行业为例。

    所以,电信行业在竞争日益激烈当下,如何挽留更多用户成为一项关键业务指标。为了更好运营用户,这就要求要了解流失用户的特征,分析流失原因,预测用户流失,确定挽留目标用户并制定有效方案。

    一、提出问题

    1、哪些用户可能会流失?

    2、流失概率更高的用户有什么共同特征?

    二、理解数据

    1、采集数据
    本数据集来自DF ,数据源地址:
    https://www.datafountain.cn/dataSets/35/details#

    本数据集描述了电信用户是否流失以及其相关信息,共包含7044条数据,共20个字段,介绍下各个字段:

    • customerID :用户ID。

    • gender:性别。(Female & Male)

    • SeniorCitizen :老年人 (1表示是,0表示不是)

    • Partner :是否有配偶 (Yes or No)

    • Dependents :是否经济独立 (Yes or No)

    • tenure :客户的职位(0-72,共73个职位)

    • PhoneService :是否开通电话服务业务 (Yes or No)

    • MultipleLines:是否开通了多线业务(Yes 、No or No phoneservice 三种)

    • InternetService:是否开通互联网服务 (No, DSL数字网络,fiber optic光纤网络 三种)

    • OnlineSecurity:是否开通网络安全服务(Yes,No,No internetserive 三种)

    • OnlineBackup:是否开通在线备份业务(Yes,No,No internetserive 三种)

    • DeviceProtection:是否开通了设备保护业务(Yes,No,No internetserive 三种)

    • TechSupport:是否开通了技术支持服务(Yes,No,No internetserive 三种)

    • StreamingTV:是否开通网络电视(Yes,No,No internetserive 三种)

    • StreamingMovies:是否开通网络电影(Yes,No,No internetserive 三种)

    • Contract:签订合同方式 (按月,一年,两年)

    • PaperlessBilling:是否开通电子账单(Yes or No)

    • PaymentMethod:付款方式(bank transfer,credit card,electronic check,mailed check)

    • MonthlyCharges:月费用

    • TotalCharges:总费用

    • Churn:该用户是否流失(Yes or No)

    2、导入数据


    3、查看数据集信息

    三、数据清洗

    1、查找缺失值

    数据集中有5174名用户没流失,有1869名客户流失,数据集不均衡。

    2、查看数据类型

    TotalCharges表示总费用,这里为对象类型,需要转换为float类型

    3、转换类型

    再次查找缺失值:

    这里存在11个缺失值,由于数量不多我们可以直接删除这些行

    4、处理缺失值

    5、数据归一化处理

    四、数据可视化呈现

    1、查看流失客户占比


    由图中结果可以看出,流失客户占整体客户的26.6%。

    2、性别、老年人、配偶、亲属对流客户流失率的影响

    性别、老年人占比结果

    配偶、亲属占比结果

    可以看出,男性与女性用户之间的流失情况基本没有差异,而在老年用户中流失占比明显比非老年用户更高,在所有数据中未婚与已婚人数基本持平,但未婚中流失人数比已婚中的流失人数高出了快一倍,从经济独立情况来看,经济未独立的用户流失率要远远高于经济独立的用户。

    3、提取特征

    4、构造相关性矩阵

    5、使用热地图显示相关系数

    结论:

    从上图可以看出,互联网服务、网络安全服务、在线备份业务、设备保护业务、技术支持服务、网络电视和网络电影之间存在较强的相关性,多线业务和电话服务之间也有很强的相关性,并且都呈强正相关关系。

    6、使用one-hot编码

    7、电信用户是否流失与各变量之间的相关性

    由图上可以看出,变量gender 和 PhoneService 处于图形中间,其值接近于 0 ,这两个变量对电信客户流失预测影响非常小,可以直接舍弃。

    8、网络安全服务、在线备份业务、设备保护业务、技术支持服务、网络电视、网络电影和无互联网服务对客户流失率的影响

    由上图可以看出,在网络安全服务、在线备份业务、设备保护业务、技术支持服务、网络电视和网络电影六个变量中,没有互联网服务的客户流失率值是相同的,都是相对较低。

    这可能是因为以上六个因素只有在客户使用互联网服务时才会影响客户的决策,这六个因素不会对不使用互联网服务的客户决定是否流失产生推论效应。

    9、签订合同方式对客户流失率的影响

    由图上可以看出,签订合同方式对客户流失率影响为:按月签订 > 按一年签订 > 按两年签订,这可能表明,设定长期合同对留住现有客户更有效。

    10、付款方式对客户流失率的影响

    由图上可以看出,在四种支付方式中,使用Electronic check的用户流流失率最高,其他三种支付方式基本持平,因此可以推断电子账单在设计上影响用户体验。

    五、数据预处理

    由前面结果可知,CustomerID表示每个客户的随机字符,对后续建模不影响,我这里选择删除CustomerID列;gender 和 PhoneService 与流失率的相关性低,可直接忽略。

    对客户的职位、月费用和总费用进行去均值和方差缩放,对数据进行标准化:

    使用箱线图查看数据是否存在异常值:

    由以上结果可以看出,在三个变量中不存在明显的异常值。

    查看对象类型字段中存在的值:

    综合之前的结果来看,在六个变量中存在No internet service,即无互联网服务对客户流失率影响很小,这些客户不使用任何互联网产品,因此可以将No internet service 和 No 是一样的效果,可以使用 No 替代 No internet service。

    使用Scikit-learn标签编码,将分类数据转换为整数编码:

    六、构建模型

    1、建立训练数据集和测试数据集

    2、选择机器学习算法

    3、训练模型

    4、评估模型

    召回率(recall)的含义是:原本为对的当中,预测为对的比例(值越大越好,1为理想状态)
    精确率、精度(precision)的含义是:预测为对的当中,原本为对的比例(值越大越好,1为理想状态)
    F1分数(F1-Score)指标综合了Precision与Recall的产出的结果

    F1-Score的取值范围从0到1的,1代表模型的输出最好,0代表模型的输出结果最差。

    综上所述,在10种分类算法中朴素贝叶斯(Naive Bayes)的F1分数最大为63.31%,所以使用朴素贝叶斯模型效果最好。

    七、实施方案

    八、结论

    通过上述分析,我们可以大致勾勒出容易流失的用户特征:

    老年用户与未婚且经济未独立的青少年用户更容易流失。

    电话服务对用户的流失没有直接的影响。

    提供的各项网络服务项目能够降低用户的流失率。

    签订合同越久,用户的留存率越高。

    采用electronic check支付的用户更易流失。

    针对上述诊断结果,可有针对性的对此提出建议:
    推荐老年用户与青少年用户采用数字网络,且签订2年期合同(可以各种辅助优惠等营销手段来提高2年期合同的签订率),若能开通相关网络服务可增加用户粘性,因此可增加这块业务的推广,同时考虑改善电子账单支付的用户体验。

    最后,分享源码:

    # coding: utf-8
    
    
    # # 电信客户流失预测
    
    
    # ## 1、导入数据
    
    
    # In[1]:
    
    
    import numpy as np
    import pandas as pd 
    import os
    
    
    
    
    # In[2]:
    
    
    # 导入相关的包
    import matplotlib.pyplot as plt
    import seaborn as sns
    from pylab import rcParams
    import matplotlib.cm as cm
    
    
    import sklearn
    from sklearn import preprocessing
    from sklearn.preprocessing import LabelEncoder               # 编码转换
    from sklearn.preprocessing import StandardScaler
    from sklearn.model_selection import StratifiedShuffleSplit
    
    
    from sklearn.ensemble import RandomForestClassifier          # 随机森林
    from sklearn.svm import SVC, LinearSVC                       # 支持向量机
    from sklearn.linear_model import LogisticRegression          # 逻辑回归
    from sklearn.neighbors import KNeighborsClassifier           # KNN算法
    from sklearn.naive_bayes import GaussianNB                   # 朴素贝叶斯
    from sklearn.tree import DecisionTreeClassifier              # 决策树分类器
    from xgboost import XGBClassifier
    from catboost import CatBoostClassifier
    from sklearn.ensemble import AdaBoostClassifier
    from sklearn.ensemble import GradientBoostingClassifier     
    
    
    from sklearn.metrics import classification_report, precision_score, recall_score, f1_score
    from sklearn.metrics import confusion_matrix
    from sklearn.model_selection import GridSearchCV
    from sklearn.metrics import make_scorer
    from sklearn.ensemble import VotingClassifier
    
    
    from sklearn.decomposition import PCA
    from sklearn.cluster import KMeans
    from sklearn.metrics import silhouette_score
    
    
    import warnings
    warnings.filterwarnings('ignore')
    
    
    get_ipython().magic('matplotlib inline')
    
    
    
    
    # In[3]:
    
    
    # 读取数据文件
    telcom=pd.read_csv(r"F:\data\WA_Fn-UseC_-Telco-Customer-Churn.csv")
    
    
    
    
    # ## 2、查看数据集信息
    
    
    # In[4]:
    
    
    telcom.head(10)
    
    
    
    
    # In[5]:
    
    
    # 查看数据集大小
    telcom.shape
    
    
    
    
    # In[6]:
    
    
    # 获取数据类型列的描述统计信息
    telcom.describe()
    
    
    
    
    # ## 3、数据清洗
    
    
    # In[7]:
    
    
    # 查找缺失值
    pd.isnull(telcom).sum()
    
    
    
    
    # In[8]:
    
    
    telcom["Churn"].value_counts()
    
    
    
    
    # 数据集中有5174名用户没流失,有1869名客户流失,数据集不均衡。
    
    
    # In[9]:
    
    
    telcom.info()
    
    
    
    
    # TotalCharges表示总费用,这里为对象类型,需要转换为float类型  
    
    
    # In[10]:
    
    
    telcom['TotalCharges']=telcom['TotalCharges'].convert_objects(convert_numeric=True) # convert_numeric=True表示强制转换数字(包括字符串),不可转换的值变为NaN
    telcom["TotalCharges"].dtypes
    
    
    
    
    # In[11]:
    
    
    # 再次查找是否存在缺失值
    pd.isnull(telcom["TotalCharges"]).sum()
    
    
    
    
    # 这里存在11个缺失值,由于数量不多我们可以直接删除这些行
    
    
    # In[12]:
    
    
    # 删除缺失值所在的行
    telcom.dropna(inplace=True)
    telcom.shape
    
    
    
    
    # In[13]:
    
    
    # 数据归一化处理
    # 对Churn 列中的值 Yes和 No分别用 1和 0替换,方便后续处理
    telcom['Churn'].replace(to_replace = 'Yes', value = 1,inplace = True)
    telcom['Churn'].replace(to_replace = 'No', value = 0,inplace = True)
    telcom['Churn'].head()
    
    
    
    
    # In[14]:
    
    
    telcom['Churn'].replace(to_replace='Yes', value=1, inplace=True)
    telcom['Churn'].replace(to_replace='No',  value=0, inplace=True)
    telcom['Churn'].head()
    
    
    
    
    # ## 4、数据可视化呈现
    
    
    # In[15]:
    
    
    # 查看流失客户占比
    """
    画饼图参数:
    labels  (每一块)饼图外侧显示的说明文字
    explode  (每一块)离开中心距离
    startangle  起始绘制角度,默认图是从x轴正方向逆时针画起,如设定=90则从y轴正方向画起
    shadow   是否阴影
    labeldistance label  绘制位置,相对于半径的比例, 如<1则绘制在饼图内侧
    autopct   控制饼图内百分比设置,可以使用format字符串或者format function
         '%1.1f'指小数点前后位数(没有用空格补齐)
    pctdistance 类似于labeldistance,指定autopct的位置刻度
    radius   控制饼图半径
    """
    churnvalue=telcom["Churn"].value_counts()
    labels=telcom["Churn"].value_counts().index
    
    
    rcParams["figure.figsize"]=6,6
    plt.pie(churnvalue,labels=labels,colors=["whitesmoke","yellow"], explode=(0.1,0),autopct='%1.1f%%', shadow=True)
    plt.title("Proportions of Customer Churn")
    plt.show()
    
    
    
    
    # In[16]:
    
    
    # 性别、老年人、配偶、亲属对流客户流失率的影响
    f, axes = plt.subplots(nrows=2, ncols=2, figsize=(10,10))
    
    
    plt.subplot(2,2,1)
    gender=sns.countplot(x="gender",hue="Churn",data=telcom,palette="Pastel2") # palette参数表示设置颜色,这里设置为主题色Pastel2
    plt.xlabel("gender")
    plt.title("Churn by Gender")
    
    
    plt.subplot(2,2,2)
    seniorcitizen=sns.countplot(x="SeniorCitizen",hue="Churn",data=telcom,palette="Pastel2")
    plt.xlabel("senior citizen")
    plt.title("Churn by Senior Citizen")
    
    
    plt.subplot(2,2,3)
    partner=sns.countplot(x="Partner",hue="Churn",data=telcom,palette="Pastel2")
    plt.xlabel("partner")
    plt.title("Churn by Partner")
    
    
    plt.subplot(2,2,4)
    dependents=sns.countplot(x="Dependents",hue="Churn",data=telcom,palette="Pastel2")
    plt.xlabel("dependents")
    plt.title("Churn by Dependents")
    
    
    
    
    # In[17]:
    
    
    # 提取特征
    charges=telcom.iloc[:,1:20]
    # 对特征进行编码
    """
    离散特征的编码分为两种情况:
    1、离散特征的取值之间没有大小的意义,比如color:[red,blue],那么就使用one-hot编码
    2、离散特征的取值有大小的意义,比如size:[X,XL,XXL],那么就使用数值的映射{X:1,XL:2,XXL:3}
    """
    corrDf = charges.apply(lambda x: pd.factorize(x)[0])
    corrDf .head()
    
    
    
    
    # In[18]:
    
    
    # 构造相关性矩阵
    corr = corrDf.corr()
    corr
    
    
    
    
    # In[19]:
    
    
    # 使用热地图显示相关系数
    '''
    heatmap    使用热地图展示系数矩阵情况
    linewidths 热力图矩阵之间的间隔大小
    annot      设定是否显示每个色块的系数值
    '''
    plt.figure(figsize=(20,16))
    ax = sns.heatmap(corr, xticklabels=corr.columns, yticklabels=corr.columns, 
                     linewidths=0.2, cmap="YlGnBu",annot=True)
    plt.title("Correlation between variables")
    
    
    
    
    # 结论:从上图可以看出,互联网服务、网络安全服务、在线备份业务、设备保护业务、技术支持服务、网络电视和网络电影之间存在较强的相关性,多线业务和电话服务之间也有很强的相关性,并且都呈强正相关关系。
    
    
    # In[20]:
    
    
    # 使用one-hot编码
    tel_dummies = pd.get_dummies(telcom.iloc[:,1:21])
    tel_dummies.head()
    
    
    
    
    # In[21]:
    
    
    # 电信用户是否流失与各变量之间的相关性
    plt.figure(figsize=(15,8))
    tel_dummies.corr()['Churn'].sort_values(ascending = False).plot(kind='bar')
    plt.title("Correlations between Churn and variables")
    
    
    
    
    # 由图上可以看出,变量gender 和 PhoneService 处于图形中间,其值接近于 0 ,这两个变量对电信客户流失预测影响非常小,可以直接舍弃。
    
    
    # In[22]:
    
    
    # 网络安全服务、在线备份业务、设备保护业务、技术支持服务、网络电视、网络电影和无互联网服务对客户流失率的影响
    covariables=["OnlineSecurity", "OnlineBackup", "DeviceProtection", "TechSupport", "StreamingTV", "StreamingMovies"]
    fig,axes=plt.subplots(nrows=2,ncols=3,figsize=(16,10))
    for i, item in enumerate(covariables):
        plt.subplot(2,3,(i+1))
        ax=sns.countplot(x=item,hue="Churn",data=telcom,palette="Pastel2",order=["Yes","No","No internet service"])
        plt.xlabel(str(item))
        plt.title("Churn by "+ str(item))
        i=i+1
    plt.show()
    
    
    
    
    # 由上图可以看出,在网络安全服务、在线备份业务、设备保护业务、技术支持服务、网络电视和网络电影六个变量中,没有互联网服务的客户流失率值是相同的,都是相对较低。
    # 
    # 这可能是因为以上六个因素只有在客户使用互联网服务时才会影响客户的决策,这六个因素不会对不使用互联网服务的客户决定是否流失产生推论效应。
    
    
    # In[23]:
    
    
    # 签订合同方式对客户流失率的影响
    sns.barplot(x="Contract",y="Churn", data=telcom, palette="Pastel1", order= ['Month-to-month', 'One year', 'Two year'])
    plt.title("Churn by Contract type")
    
    
    
    
    # 由图上可以看出,签订合同方式对客户流失率影响为:按月签订 > 按一年签订 > 按两年签订,这可能表明,设定长期合同对留住现有客户更有效。
    
    
    # In[24]:
    
    
    # 付款方式对客户流失率的影响
    plt.figure(figsize=(10,5))
    sns.barplot(x="PaymentMethod",y="Churn", data=telcom, palette="Pastel1", order= ['Bank transfer (automatic)', 'Credit card (automatic)', 'Electronic check','Mailed check'])
    plt.title("Churn by PaymentMethod type")
    
    
    
    
    # 由图上可以看出,在四种支付方式中,使用Electronic check的用户流流失率最高,其他三种支付方式基本持平,因此可以推断电子账单在设计上影响用户体验。
    
    
    
    
    
    
    
    
    # ## 5、数据预处理
    
    
    # 由前面结果可知,CustomerID表示每个客户的随机字符,对后续建模不影响,我这里选择删除CustomerID列;gender 和 PhoneService 与流失率的相关性低,可直接忽略。
    
    
    # In[26]:
    
    
    telcomvar=telcom.iloc[:,2:20]
    telcomvar.drop("PhoneService",axis=1, inplace=True)
    
    
    # 提取ID
    telcom_id = telcom['customerID']
    
    
    telcomvar.head()
    
    
    
    
    # In[27]:
    
    
    # 对客户的职位、月费用和总费用进行去均值和方差缩放,对数据进行标准化
    """
    标准化数据,保证每个维度的特征数据方差为1,均值为0,使得预测结果不会被某些维度过大的特征值而主导。
    """
    scaler = StandardScaler(copy=False)
    # fit_transform()的作用就是先拟合数据,然后转化它将其转化为标准形式
    scaler.fit_transform(telcomvar[['tenure','MonthlyCharges','TotalCharges']])
    
    
    
    
    # In[28]:
    
    
    # tranform()的作用是通过找中心和缩放等实现标准化
    telcomvar[['tenure','MonthlyCharges','TotalCharges']]=scaler.transform(telcomvar[['tenure','MonthlyCharges','TotalCharges']])
    
    
    
    
    # In[29]:
    
    
    # 使用箱线图查看数据是否存在异常值
    plt.figure(figsize = (8,4))
    numbox = sns.boxplot(data=telcomvar[['tenure','MonthlyCharges','TotalCharges']], palette="Set2")
    plt.title("Check outliers of standardized tenure, MonthlyCharges and TotalCharges")
    
    
    
    
    # 由以上结果可以看出,在三个变量中不存在明显的异常值
    
    
    # In[30]:
    
    
    # 查看对象类型字段中存在的值
    def uni(columnlabel):
        print(columnlabel,"--" ,telcomvar[columnlabel].unique())  # unique函数去除其中重复的元素,返回唯一值
    
    
    telcomobject=telcomvar.select_dtypes(['object'])
    for i in range(0,len(telcomobject.columns)):
        uni(telcomobject.columns[i])
    
    
    
    
    # 综合之前的结果来看,在六个变量中存在No internet service,即无互联网服务对客户流失率影响很小,这些客户不使用任何互联网产品,因此可以将No internet service 和 No 是一样的效果,可以使用 No 替代 No internet service
    
    
    # In[31]:
    
    
    telcomvar.replace(to_replace='No internet service', value='No', inplace=True)
    telcomvar.replace(to_replace='No phone service', value='No', inplace=True)
    for i in range(0,len(telcomobject.columns)):
        uni(telcomobject.columns[i])
    
    
    
    
    # In[32]:
    
    
    # 使用Scikit-learn标签编码,将分类数据转换为整数编码
    def labelencode(columnlabel):
        telcomvar[columnlabel] = LabelEncoder().fit_transform(telcomvar[columnlabel])
    
    
    for i in range(0,len(telcomobject.columns)):
        labelencode(telcomobject.columns[i])
    
    
    for i in range(0,len(telcomobject.columns)):
        uni(telcomobject.columns[i])
    
    
    
    
    # ## 6、构建模型
    
    
    # ### (1)建立训练数据集和测试数据集
    
    
    # In[33]:
    
    
    """
    我们需要将数据集拆分为训练集和测试集以进行验证。
    由于我们所拥有的数据集是不平衡的,所以最好使用分层交叉验证来确保训练集和测试集都包含每个类样本的保留人数。
    交叉验证函数StratifiedShuffleSplit,功能是从样本数据中随机按比例选取训练数据(train)和测试数据(test)
    参数 n_splits是将训练数据分成train/test对的组数,可根据需要进行设置,默认为10
    参数test_size和train_size是用来设置train/test对中train和test所占的比例
    参数 random_state控制是将样本随机打乱
    """
    X=telcomvar
    y=telcom["Churn"].values
    
    
    sss=StratifiedShuffleSplit(n_splits=5, test_size=0.2, random_state=0)
    print(sss)
    print("训练数据和测试数据被分成的组数:",sss.get_n_splits(X,y))
    
    
    
    
    # In[34]:
    
    
    # 建立训练数据和测试数据
    for train_index, test_index in sss.split(X, y):
        print("train:", train_index, "test:", test_index)
        X_train,X_test=X.iloc[train_index], X.iloc[test_index]
        y_train,y_test=y[train_index], y[test_index]
    
    
    
    
    # In[35]:
    
    
    # 输出数据集大小
    print('原始数据特征:', X.shape,
          '训练数据特征:',X_train.shape,
          '测试数据特征:',X_test.shape)
    
    
    print('原始数据标签:', y.shape,
          '   训练数据标签:',y_train.shape,
          '   测试数据标签:',y_test.shape)
    
    
    
    
    # ### (2)选择机器学习算法
    
    
    # In[36]:
    
    
    # 使用分类算法,这里选用10种分类算法
    Classifiers=[["Random Forest",RandomForestClassifier()],
                 ["Support Vector Machine",SVC()],
                 ["LogisticRegression",LogisticRegression()],
                 ["KNN",KNeighborsClassifier(n_neighbors=5)],
                 ["Naive Bayes",GaussianNB()],
                 ["Decision Tree",DecisionTreeClassifier()],
                 ["AdaBoostClassifier", AdaBoostClassifier()],
                 ["GradientBoostingClassifier", GradientBoostingClassifier()],
                 ["XGB", XGBClassifier()],
                 ["CatBoost", CatBoostClassifier(logging_level='Silent')]  
    ]
    
    
    
    
    # ### (3)训练模型
    
    
    # In[37]:
    
    
    Classify_result=[]
    names=[]
    prediction=[]
    for name,classifier in Classifiers:
        classifier=classifier
        classifier.fit(X_train,y_train)
        y_pred=classifier.predict(X_test)
        recall=recall_score(y_test,y_pred)
        precision=precision_score(y_test,y_pred)
        class_eva=pd.DataFrame([recall,precision])
        Classify_result.append(class_eva)
        name=pd.Series(name)
        names.append(name)
        y_pred=pd.Series(y_pred)
        prediction.append(y_pred)
    
    
    
    
    # ### (4)评估模型
    
    
    # In[38]:
    
    
    # 评估模型
    """
    召回率(recall)的含义是:原本为对的当中,预测为对的比例(值越大越好,1为理想状态)
    精确率、精度(precision)的含义是:预测为对的当中,原本为对的比例(值越大越好,1为理想状态)
    F1分数(F1-Score)指标综合了Precision与Recall的产出的结果
    F1-Score的取值范围从0到1的,1代表模型的输出最好,0代表模型的输出结果最差。
    """
    
    
    names=pd.DataFrame(names)
    names=names[0].tolist()
    result=pd.concat(Classify_result,axis=1)
    result.columns=names
    result.index=["recall","precision","f1score"]
    result
    
    
    
    
    # 综上所述,在10种分类算法中朴素贝叶斯(Naive Bayes)的F1分数最大为63.31%,所以使用朴素贝叶斯模型效果最好。
    
    
    # ## 7、实施方案
    
    
    # 预测数据集特征(由于没有提供预测数据集,这里选取后10行作为需要预测的数据集)
    pred_X = telcomvar.tail(10)
    
    
    # 提取customerID
    pre_id = telcom_id.tail(10)
    
    
    # 使用朴素贝叶斯方法,对预测数据集中的生存情况进行预测
    model = GaussianNB()
    model.fit(X_train,y_train)
    pred_y = model.predict(pred_X)
    
    
    # 预测结果
    predDf = pd.DataFrame({'customerID':pre_id, 'Churn':pred_y})
    predDf
    

         精 彩 文 章 

    END
    最后说个题外话,相信大家都知道视频号了,随着灰度范围扩大,越来越多的小伙伴都开通了视频号。小詹也开通了一个视频号,会分享互联网那些事、读书心得与副业经验,欢迎扫码关注,和小詹一起向上生长!「没有开通发布权限的尽量多互动,提升活跃度可以更快开通哦」
    
    
    展开全文
  • 摘要:Java源码,初学实例,IDL Java IDL使用实例代码,通过例子你将了解如何引入要使用的包,本应用的stub类,要使用CORBA的名字服务,使用CORBA服务,声明客户应用类,建立ORB对象,args为客户程序启动时的命令行...
  • ROS代码阅读(1):切入点

    千次阅读 2017-09-17 15:49:40
    ROS机器人操作系统是一个机器人软件平台,它能为...阅读ROS操作系统代码,将代码下载下来后,需要找到一个切入点,层层深入阅读。 在ROS官网教程中,第一段示例应用代码如下,本文以此为依据,找到解析ROS的切入点。

    ROS机器人操作系统是一个机器人软件平台,它能为异质计算机集群提供类似操作系统的功能。
    其源代码可以按照网页kinetic/Installation/Source中的步骤下载。

    阅读ROS操作系统源代码,将代码下载下来后,需要找到一个切入点,层层深入阅读。
    在ROS官网教程中,第一段示例应用代码如下,想以此为依据,找到解析ROS的切入点。

    #include "ros/ros.h"
    #include "std_msgs/String.h"
    #include <sstream>
    
    int main(int argc, char **argv)
    {
      ros::init(argc, argv, "talker");
      ros::NodeHandle n;
      ros::Publisher chatter_pub = n.advertise<std_msgs::String>("chatter", 1000);
      ros::Rate loop_rate(10);
      int count = 0;
      while (ros::ok())
      {
        std_msgs::String msg;
        std::stringstream ss;
        ss << "hello world " << count;
        msg.data = ss.str();
        ROS_INFO("%s", msg.data.c_str());
        chatter_pub.publish(msg);
        ros::spinOnce();
        loop_rate.sleep();
        ++count;
      }
      return 0;
    }

    上述代码一开始首先进行ROS环境的初始化,调用了ros::init()函数和创建了ros::NodeHandle类的对象。

      ros::init(argc, argv, "talker");
      ros::NodeHandle n;

    从ROS官网教程中的示例代码可以看到,无论是创建消息发布/订阅者(publisher/subscriber)还是创建服务/客户节点(service and client),都需要使用这两行代码。因此,计划从这两行代码切入,对ROS进行解析。

    经查看源代码,ros::init()函数和ros::NodeHandle类的定义,包括创建消息发布/订阅者(publisher/subscriber),还有创建服务/客户节点(service and client)相关的函数和类,都在源代码的

    src/ros_comm/roscpp

    目录下。文件夹结构如下:

    .
    ├── include
    │   └── ros
    │       └── transport
    ├── msg
    ├── rosbuild
    │   └── scripts
    ├── src
    │   ├── libros
    │   │   └── transport
    │   └── roscpp
    └── srv

    其中,include/ros目录下是关键的头文件,src/libros目录下是关键的.cpp文件。

    后续,我将以ros::init()函数和ros::NodeHandle类为切入,逐步解析src/ros_comm/roscpp下的代码。

    ros::init()的解析请关注下一篇博客ROS程序的初始化——从ros:init()出发

    展开全文
  • 我自从写了上一篇文章后,立刻有不少人来。许多人一上来就是:我的销售不力,怎么提高,给个痛快话。我不是营销高手,当然无法...我还是先把客户关系管理的三个大词摆上来(加深印象、溯本求):客户获取、客户转换
  • 网上了很多的帖子,试了N种办法都没有成功~后来灵感一闪,在启动过程按上下键,出现了选择内核版本的界面(不按不显示),发现有两个版本,因为默认会进去比较新的版本,所以我手动选择了第二个,居然成功起来了!...
  • 程序员要学会读代码

    万次阅读 多人点赞 2014-01-25 19:44:57
    我们必须阅读别人的代码,因为我们只有理解了那些代码之后才能把我们自己的事情做好。请你不要害怕阅读代码——不管它看起来有多么可怕,也不管它会把你带向何方,跟它去吧!
  • ZBilling NET代码

    2021-03-18 14:28:14
    ZBilling网是一个免费的ASP.NET MVC的计费解决方案,不仅为网站建设者和自由职业者,大家都在寻找一个重复计费软件。 ZB是你正在寻找最好的选择:订阅计费软件;周期性计费软件;...客户服务管理; RETAI
  • BW系列之数据

    千次阅读 2016-12-14 09:53:52
    BW系列之数据
  • 如何看懂代码--(分析代码方法)

    万次阅读 多人点赞 2018-01-12 16:40:26
    不管是参考也好,从开源抓下来研究也好,为了了解箇中含意,在有限的时间下,不免会对庞大的代码解读感到压力。  网路上有一篇关于分析看代码的方法,做为程式设计师的您,不妨参考看看,  换个角度来分析。 也...
  • ubuntu制作apt

    2017-09-28 11:42:00
    工作中给客户部署经常没有外网,这个时候我们就需要自己建立apt仓库。 安装并配置web server 首先需要一个web server,常用的nginx 、apache httpd 等均可。 这里我们以nginx为例。 安装: apt install nginx ...
  • 毕业设计的论文客户信息管理系统,做的不是很好,有配套的代码在资源中,需要的自己
  • 几个星期以前,我拼命的寻找一个能够通过COM... 在开始一个工程以前,首先你得确信客户机和服务器组件都是适应C++的程序,其次,你必须知道怎样设置你的客户机和服务器。 关键字:atl,dll,object,interface,接口,对象
  • 通过weblogic配置log4jdbc数据,在项目中使用该数据,输出sql 说一下配置: 服务器weblogic 项目使用的是spring管理Bean,数据配置也是基于Spring的dbcp数据,并且用log4jdbc进行sql日志打印,采用...
  • NET 客户信息管理系统

    2013-04-05 11:04:43
    NET客户信息管理系统+oracle数据库+代码+系统论文+操作录像+详细解释! 用户管理+产品库+资源管理+客户信息管理+人性化的界面! 没有GUG+代码注释!
  • 业务类型的正向审计通常从前端页面开始,因为页面会有系统中大部分功能展示,出功能所对应的URL就是我们所审计数据流的输入点,某系统修改个人资料处存在平行越权。在客户现场审计大部分情况是没有
  • spring 动态创建数据

    2018-05-24 12:08:25
    由于不断有新的客户加入,所以要求,项目根据主数据库中的信息,来动态创建数据。 解决方案: spring提供了一个类,AbstractRoutingDataSource,可以创建多个数据库,并在几个数据库中进行切换。建议读者在读...
  • 新闻也会是于飞本人未来想要涉及到的领域,希望能通过本文积累一些人脉客户。给我带来利益。想改变一部分网络推广er的一些观念,可以适当的为自己谋取利益,互利共赢。 新闻诠释 新闻是指符合搜索引擎新闻...
  • SPRING动态数据使用方法

    千次阅读 2013-09-21 17:39:15
    因项目需要,需要使用动态数据,什么叫动态数据,就是数据是由客户动态选择的,不仅仅有一个。这就意味在后台会配置多个数据。   我们的系统有很多版本,不同版本开发在不同的数据库上,但是系统需要的...
  • 程序上传后直接可以使用,所有查询页面客户可以直接插入广告!middlead.js里的是首页中上部的720宽的广告位,topad.js里面是全站顶部广告位,此源码是不小心当的别人的源码,跟大家分享一下,正在类似源码的朋友...
  • 购物网站系统代码网页模板正式版

    千次下载 热门讨论 2009-12-03 11:13:42
    网上商城购物网站系统代码,网上开店系统网页模板正式版,您还在为苦苦寻找一套适合的购物系统而烦恼吗?您是否觉得单一色彩、风格的购物系统已经让您厌倦不堪?您是否想过只须用鼠标轻轻一点,整站风格即会变幻无穷...
  • 读Joone代码有感

    千次阅读 2013-06-20 15:50:11
    而我是先大致搞清楚神经网络的大致流程和BP的基本算法,然 后一些开源的神经网络框架来学习,直接搞应用,最后在理论和数学不懂的地方再去查资料学习。结果发现这种方法很好,最起码很能调动我学习这些深奥知识的 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 119,321
精华内容 47,728
关键字:

怎样寻找客户源