其他

预测性客户分析之推荐触达客户的最佳渠道(Part 2)

2018-03-10 数据猿

【数据猿导读】 企业如何获取客户?他们需要遵循哪些步骤?首先,企业需要识别他们的市场以及潜在客户。然后,企业需要通过合适的广告或优惠来触达潜在客户,这需要有效和高效的沟通渠道


作者 | TalkingData

官网 | www.datayuan.cn

微信公众号ID | datayuancn


一、蚂蚁金服研发“黑科技”,可通过眼纹识别区分同卵多胞胎

近日,蚂蚁金服旗下的金融级生物识别技术品牌“蚂蚁佐罗”对外宣布,已经研发成功了全国首个“眼纹识别技术”。据悉,该技术可在实验室场景下,通过对眼白上的血管排布进行提取分析,从而使用户享受到生物识别的便利,甚至连长相极端相似的同卵多胞胎也可精准识别。


你会变成我的客户吗


企业如何获取客户?他们需要遵循哪些步骤?


首先,企业需要识别他们的市场以及潜在客户。企业需要识别他们并且将他们作为潜在客户。然后,企业需要通过合适的广告或优惠来触达潜在客户,这需要有效和高效的沟通渠道。企业应该吸引潜在客户去访问在线站点并且查看他们产品和服务。


当潜在客户对产品发生兴趣时,企业应该让客户参与进来,回答他们的问题,并且给出报价来协助他们购买产品。


高倾向潜客


我们有一个产品,例如一个高端的笔记本电脑。谁是更有可能购买我们产品的客户?是那些有家庭和体面收入的中年人?还是那些收入比较低的大学生?这个推论是基于他们的人口统计学特性得来的。所有营销部门面临的第一个巨大挑战就是识别出更有可能购买产品的潜在客户。


这个用例的目标是给我们营销部门识别出的潜在客户生成一个购买倾向评分。倾向评分可以是二进制表示的0或者1,或者可以更好一些,它可以是个从0到1中的连续数值。我们需要使用什么样的数据呢?在这个阶段,唯一可用的数据集是潜在客户的人口统计学特性,比如年龄、薪水、家庭等属性。


关于事件,这些潜在客户可能已经参与或还没参与到我们企业的任何活动当中,因此事件数据变为了可选的数据。使用它的一种方式是用二进制的标识,比如潜客是否浏览过我们的网站:


他/她是否回复过我们的电子邮件?


他/她是否对我们的企业或者产品发过推文?


当然,所有这些历史数据都会打上过去活动最终效果的标签。我们该使用什么样的算法来尝试?我们可以使用回归来生成一个倾向评分或者使用朴素贝叶斯分类来给出一个转化为购买的可能性。



理想情况下,我们希望得分在0和1之间。用这个模型来对我们的潜在客户进行评分。然后营销部门可以整理这个清单,根据分数将其清除或根据分数生成一个top X的列表。


那么这样做的价值是什么呢?我们可以定期执行此用例,或者当我们的市场部准备了一个潜在客户列表。我们使用以前的数据来建立倾向模型,然后基于该模型,我们为每个潜在客户生成一个分数。然后,我们的营销部门将使用这些信息想潜在客户提供优惠和促销。


推荐触达的最佳渠道


一旦我们有一个潜在客户名单,我们需要决定如何与他们进行最佳的沟通。有多种渠道可供使用,例如电话、电子邮件、手机、互联网或者社交媒体上的定向广告。


但不同的人对不同的媒体有不同的反应。有人喜欢关注他收到的营销电子邮件,总会点击并阅读;有的人则相反,他会将这些电子邮件过滤到垃圾文件夹中;也有人倾向于在网页浏览中点击基于其近期搜索推送的弹窗广告。


这个用例的目标是推荐联系潜在客户的最佳渠道。很多媒介以这种方式去锁定客户,因为这样能够获得最高的关注度并且获得最高的投入产出比。那我们该使用什么数据呢?与潜客相关的数据最为常见,我们还应该使用以往成功的营销活动的数据,在这些营销活动中,我们通过特定渠道、触达了特定潜在客户并实现了潜客转化。


这些数据告诉我们哪些人通过哪些渠道转化。利用这些数据,我们可以构建一个模型去预测未来潜客的触达渠道,随后用这个模型对潜客的未来行为进行预测。


我们将要使用什么算法呢?这是一个经典的分类问题,因此我们会采用以前的相关算法去实验其精确度。我们利用过去的数据构建了一个模型,为每个潜在的客户推荐一个进行触达的媒介。



那么这么做的价值是什么呢?我们将会使用过去的数据去构建一个分类模型,用这个模型去对每个潜在客户预测最佳的触达渠道。这将会帮助我们的营销团队去设置针对性的活动,帮助他们通过特定的渠道触达特定的潜在客户。


按照访客购买倾向提供聊天


我们有网上的销售代表随时准备与访问者建立联系,并且吸引客户购买我们的产品。但是通常我们有太多的网站访问者,而且他们大部分是只看不买的人。我们希望我们的销售代表只与那些真正想要购买的访客进行聊天,我们不想浪费我们销售代表的时间。


想象一下,客户比较产品,例如笔记本电脑。这意味着他/她做了决策吗?他/她开始阅读商品评论,他对购买是认真的吗?他/她正在查看我们的售后保证条款,这意味着他/她做了决策吗?我们如何判断呢?


这个用例的目标是根据客户在我们网站上的实时行为,反复预测一个客户的购买倾向。当客户在我们网站进行活动时,我们想要持续计算和修正倾向得分。这个用例的数据源是潜客的属性数据以及潜在客户在访问我们网站时进行的活动数据,包括他检出的产品,他的相关行为。例如,是否查看过评论?比较过商品?对售后保障是否有兴趣?这些是通过在浏览器上的网页点击事件来衡量的。


我们需要使用每个潜在客户过去每次的访问数据,以及访问的最终结果,比如他是否进行了购买。



朴素贝叶斯将会是最适合的算法,因为它提供了一个概率分数。我们会使用过去的数据,包括客户的人口统计学数据、网站行为数据,利用朴素贝叶斯算法构建一个倾向性模型。然后我们使用这个倾向性模型去预测我们现在网站的访问者的购买倾向性。那么,这么做的价值是什么呢?我们基于过去的数据构建一个离线模型去根据一个客户在网站的行为建立一个倾向分。


当一个新的潜客访问我们的网站时,网站点击事件会被持续收集。每次当一个新的事件被收集时,例如查看评论或者比较商品,模型会根据收集到的数据进行运行而重新计算一个倾向分。当倾向分达到特定的阈值时,在线商店可以做出决定去触发聊天,这是我们可以通过原型来验证的东西。


我将会给大家展示如何用Python实现这个用例。


我们将会实现实时预测我们网站访问用户的倾向评分的用例。当访问者到我们的网站时,他们开始浏览产品并且检出不同的链接。我们想要做的是基于他们的活动,实时预测他们的倾向评分,决定我们是否需要提供他们在线聊天。


如下是客户浏览的样例数据:



这个数据包含不同用户过去的所有的会话的信息,它包含一个session id,以及一系列的布尔型变量,这些变量将会变为我们的特征变量。这些布尔型变量是根据访客的行为而生成的1或者0。


images的含义是访问者是否浏览过产品的图片,reviews代表访问者是否真正浏览过产品的评论。类似的,我们有FAQ、specs、shipping、bought_together、comparison of products等等属性。最终,有一个目标变量,代表着访客最终是否购买了产品或者没有购买产品。这将会是我们用户构建这个模型的数据集。


在真实世界,如果我们想要获得真正高精度的预测,我们需要一个非常巨大的数据集。我们从输入一系列python库,以及输入browsing.csv到一个叫做prospect_data的dataframe开始。


`from pandas import Series, DataFrame
import pandas as pd
import numpy as np
import os
import matplotlib.pylab as plt
from sklearn.model_selection  import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import classification_report
import sklearn.metrics
prospect_data = pd.read_csv("browsing.csv")
prospect_data.dtypes`


然后我们会看一下数据类型,确认数据是否被正确装载。


SESSION_ID int64
IMAGES int64
REVIEWS int64
FAQ int64
SPECS int64
SHIPPING int64
BOUGHT_TOGETHER int64
COMPARE_SIMILAR int64
VIEW_SIMILAR int64
WARRANTY int64
SPONSORED_LINKS int64
BUY int64
dtype: object


这份数据包含用户在他浏览网站过程中点击的不同的链接的信息。这是用于构建模型的过去的数据。


Session ID:浏览web会话的唯一ID。


Buy:潜在用户在结束时是否购买了商品。


其他列: 0或者1表示潜在用户是否访问了特定的页面或者进行了特定的活动。



#对数据进行汇总统计分析

prospect_data.describe()



为此,我们将在这个课程中使用纯粹的测试条方法,我们将按照70/30的比例进行分割。我们会检查比例大小是否与我们预期的一致,350比150应该是正确的。紧接着,我们将进入模型构建过程。我们使用sklearn库中含有的naive_bayes算法——高斯naive_bayes。我们首先创建naive_bayes分类器,然后使用拟合方法构建模型,将其应用于训练预测分析以及训练目标中。


进行关联分析


prospect_data.corr()[‘BUY’]

SESSION_ID 0.026677
IMAGES 0.046819
REVIEWS 0.404628
FAQ -0.095136
SPECS 0.009950
SHIPPING -0.022239
BOUGHT_TOGETHER -0.103562
COMPARE_SIMILAR 0.190522
VIEW_SIMILAR -0.096137
WARRANTY 0.179156
SPONSORED_LINKS 0.110328
BUY 1.000000
Name: BUY, dtype: float64


观察上边的关联信息,我们可以看到一些特征比如REVIEWS、BRO_TOGETHER、COMPARE_SIMILIAR、WARRANTY 和SPONSORED_LINKS与目标变量有一定的关联性。我们将会减少特征去使用这些变量。


#Drop columns with low correlation
predictors = prospect_data[[‘REVIEWS’,’BOUGHT_TOGETHER’,’COMPARE_SIMILAR’,’WARRANTY’,’SPONSORED_LINKS’]]
targets = prospect_data.BUY


训练和测试分片 


我们现在将把数据按照70:30切分为训练集和测试机,去构建和验证模型。


pred_train, pred_test, tar_train, tar_test = train_test_split(predictors, targets, test_size=.3)
print( “Predictor — Training : “, pred_train.shape, “Predictor — Testing : “, pred_test.shape )
Predictor - Training :  (350, 5) Predictor - Testing :  (150, 5)


构建模型和检查准确度


from sklearn.naive_bayes import GaussianNB
classifier=GaussianNB()
classifier=classifier.fit(pred_train,tar_train)
predictions=classifier.predict(pred_test)
#Analyze accuracy of predictions
sklearn.metrics.confusion_matrix(tar_test,predictions)
array([[76, 18],
      [24, 32]])
sklearn.metrics.accuracy_score(tar_test, predictions)
0.71999999999999997


我们可以做一个概率预测来显示一个潜在客户购买产品的概率,而不是做一个Yes/No的预测。


pred_prob=classifier.predict_proba(pred_test)
pred_prob[0,1]
0.35088586866049354


如上的概率可以理解为有35%的可能性这个潜在客户会购买产品。


实时预测


实时预测现在模型已经构建好了,让我们将它用在实时预测上。当我们的客户开始一个个访问我们的页面时,我们收集访问的列表然后用它来计算概率。当每一个点击进来时,我们都会做预测。


潜在客户刚刚来到我们的网站,因此没有有用的点击。让我们计算他的概率,传递的数组应该包含REVIEWS、BOUGHT_TOGETHER、COMPARE_SIMILAR、WARRANTY和SPONSORED_LINKS的值,所以这个数字在开始所有的值都是0。


browsing_data = np.array([0,0,0,0,0]).reshape(1, -1)
print(“New visitor: propensity :”,classifier.predict_proba(browsing_data)[:,1]
New visitor: propensity : [ 0.03961746]


因此最初的概率是4%。现在假设客户在相似的商品做了比较,数组的值中包含了一个1,因此新的概率将会是:


browsing_data = np.array([0,0,1,0,0]).reshape(1, -1)
print(“After checking similar products: propensity :”,classifier.predict_proba(browsing_data)[:,1] )
After checking similar products: propensity : [ 0.09898671]


概率值上升到了接近10%。紧接着,他查看了评论。


browsing_data = np.array([1,0,1,0,0]).reshape(1, -1)
print(“After checking reviews: propensity :”,classifier.predict_proba(browsing_data)[:,1] )
After checking reviews: propensity : [ 0.57538836]


这个时候概率值超过了50%。我们可以设置一个触发我们和客户聊天的阈值。我们持续地将这个概率与之进行比较,去决定我们是否需要弹出对话框。


这个例子告诉我们如何实时地利用预测分析,去决定一个潜客是否具有高的转化倾向,从而给销售代表弹出一个对话框。


所以,请记住,当这些人继续进来时,倾向是否总是上升并不重要,它甚至可能会下降,这一切都取决于数据是如何。 这样,我们可以随时决定何时提供聊天窗口。


作者:Ryan Aminollahi

原文:https://towardsdatascience.com/predictive-customer-analytics-part-ii-the-customer-acquisition-process-sample-use-case-59a52bc8796

译者:TalkingData研发副总裁 闫志涛



金猿榜往期的获奖名单,将会在峰会现场隆重发布,期待我们的见面👇



您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存