首页 > 编程语言 >大数据【企业级360°全方位用户画像】之USG模型和决策树分类算法

大数据【企业级360°全方位用户画像】之USG模型和决策树分类算法

时间:2022-12-11 22:31:07浏览次数:65  
标签:USG 0.0 模型 0.2 用户 企业级 数据 360 决策树

        在之前的一篇博客​​《大数据【企业级360°全方位用户画像】之RFM模型和KMeans聚类算法》​​​中,博主为大家带来了KMeans聚类算法的介绍。并在之后,基于不同的模型开发标签,例如​​RFM​​​,​​RFE​​​,​​PSM​​,都使用到了KMeans算法。

        本篇博客,我们来认识一种叫做​​USG​​的模型,并为大家简单介绍下关于决策树算法原理和实现。

大数据【企业级360°全方位用户画像】之USG模型和决策树分类算法_数据


​USG模型引入​

        USG(User Shopping Gender)

1.1  AI驱动的电商用户模型

        首先带领大家了解一下,如何通过大数据来确定用户的真实性别

        我们经常谈论的用户精细化运营,到底是什么?简单来讲,就是将网站的每个用户标签化,制作一个属于他自己的网络身份证。然后,运用人员通过身份证来确定活动的投放人群,圈定人群范围,更为精准的用户培养和管理。当然,身份证最基本的信息就是姓名,年龄和性别,与现实不同的是,网络上用户填写的资料不一定完全准确,还需要进行进一步的确认和评估。

        确定性别这件事很重要,简单举个栗子,比如店铺想推荐新品的Bra,如果粗糙的全部投放人群或者投放到不准确性别的人群,那后果可想而知了。下面来介绍一下具体的识别思路。

大数据【企业级360°全方位用户画像】之USG模型和决策树分类算法_spark_02

1.1.1 用户画像需要的数据

        用户平时在电商网站的购物行为、浏览行为、搜索行为,以及订单购买情况都会被记录在案,探查其消费能力,兴趣等。数据归类后,一般来讲,可以通过三类数据对用户进行分群和定义。

大数据【企业级360°全方位用户画像】之USG模型和决策树分类算法_spark_03

1、用户信息

        社会特征:马克思的人性观把人分为社会属性和自然属性。社会特征主要指的是人在社会上的阶级属性,当然也包括服从性、依赖性或者自觉性等,这是人类发展的必然的基本要求。

        自然特征:也可以说成是人的生物性,通常来讲可以是食欲,物欲或者购买欲,自我保存能力。但不同人会有不同的自然特征,比如学习能力和逻辑思维等。

        兴趣特征:对于电商来讲,主要是对某件商品,某个品牌或者品类的兴趣程度,如加购、浏览、收藏、搜索和下单行为。

        消费特征:消费能力的评估,消费倾向的评估,能够判断用户的消费层级,是高消费力还是低消费力。

2、商品

        商品属性:基本信息,品类,颜色尺码型号等。

        商品定位:商品层级,是否为高中低端,商品类型倾向于哪类客户,区域或者其他的特征。最后通过以上的信息来获取用户信息,判断其具体的画像特征,然后得到类似于这样子的网络身份证。

大数据【企业级360°全方位用户画像】之USG模型和决策树分类算法_数据_04

        通常,拿到数据后,我们会将每个环节进行拆解,落实到具体的行动策略上。大体可以根据以下流程进行模型的预估:

大数据【企业级360°全方位用户画像】之USG模型和决策树分类算法_数据_05

        业务目标: 精准投放,针对已有产品,寻找某性别偏好的精准人群进行广告投放。

        技术目标: 对用户购物性别识别:男性,女性,中性

        解决思路:选择一种分类算法,建立机器学习算法模型,对模型进行应用

        线上投放:对得到的数据进行小范围内的测试投放,初期不宜过大扩大投放范围

        效果分析:对投放的用户进行数据分析,评估数据的准确性。若不够完美,则需要重新建模和测试。

1.1.2 如何理解建模过程

        重点来了,虽然能够通过用户的行为、购买和兴趣数据,了解用户的基本信息,但是仍然不清楚如何建模?用什么语言建模?其实,购物性别的区分使用的是spark,但是机器学习算法也有很多分类,包含逻辑回归,线性支持向量机,朴素贝叶斯模型和决策树。那么,又该如何选择呢?其中,决策树的优点较多,主要是其变量处理灵活,不要求相互独立。可处理大维度的数据,不用预先对模型的特征有所了解。对于表达复杂的非线性模式和特征的相互关系,模型相对容易理解和解释。看起来决策树的方法最适合区分性别特征了,所以决定用决策树进行尝试。

        什么是决策树?简单来讲,是通过训练数据来构建一棵用于分类的树,从而对未知数据进行高效分类。可以从下面的图了解决策树的工作原理。

大数据【企业级360°全方位用户画像】之USG模型和决策树分类算法_spark_06

        构造决策树的步骤为:

        通过训练数据来构建一棵用于分类的树,从而对未知数据进行高效分类。

        以上步骤中,能够得出一个结论,在构建决策树的过程中,最重要的是如何找到最好的分割点。决策树值得注意的问题是过拟合问题,整个算法必须解决「如何停止分割」和「如何选择分割」两个关键问题。

        最简单的做法就是设定树的深度或枝叶的最少样本量。但是,过少的样本量又不具有代表性,所以一般情况,可以使用交叉验证的方法。交叉验证就是可以使用一部分数据用于模型的训练,另一部分数据可以用来评估模型的性能。业内常用的划分方法是讲样本进行50/50分,60/40分或者80/20分。

1.1.3 模型确立过程

        在建模前期,首要考虑的事情就是先确定指标,以及对样本的定义。购物性别指的是什么?通过哪些数据来确定购物性别,样本的准确性,如何验证数据的可信度等

1.1.4 购物性别的定义

        先看下图,具体的逻辑可从图中查看。一般来讲,用户填写的资料不一定真实,我们对他/她的性别数据持怀疑态度,所以,就需要其他数据进行辅助证明其性别。

        订单数据能够真实反映用户的购买心态,预测购买行为,并且能够通过购买商品的所属类别,判断用户的购买倾向,最后得到性别特征类目。不过本文就不展开探讨甄别特征类目的区分方法了。

大数据【企业级360°全方位用户画像】之USG模型和决策树分类算法_决策树_07

        根据数据结果,最终,确认了购物性别的定义。分为:

        购物性别男:N月购买的男性特征类目子下单数> N月购买的女性特征类目子下单数

        购物性别女:N月购买的男性特征类目子下单数> N月购买的女性特征类目子下单数

        购物性别中性:未下单男女特征类目

        N需要具体根据业务场景来定。         

1.1.5 建模数据准备过程

        本节是具体的操作过程,模型的实操阶段。一般来讲,不同模型的训练其实大体雷同。从技术上来讲,各家算法大多使用sparkmllib,不同点是所运算的模型都是针对于场景来定的。

大数据【企业级360°全方位用户画像】之USG模型和决策树分类算法_数据_08

        在全部样本中,取80%的数据用于训练模型

        在全部样本中,取20%的数据用户数据测试

        这种方式可以更好的根据数据的规模,提高模型的准确性        

1.1.6 模型效果分析

        行业内当前采用数据挖掘、机器学习和推荐系统中的评测指标—准确率(Precision)、召回率(Recall),准确率是应用最广的数据指标,也很清晰易懂,以男性为例。

大数据【企业级360°全方位用户画像】之USG模型和决策树分类算法_spark_09

        准确率=命中的男性用户数量/所有预测男性数量,一般来讲,准确率可以评估模型的质量,他是很直观的数据评价,但并不是说准确度越高,算法越好。

        召回率=命中的男性用户数量/所有男性数量,反映了被正确判定的正例占总的正例的比重。模型建立完后,需根据模型的结果与预期的对比,进行调优。

1.1.7 回顾总结

        购物性别定义对于用户精准营销十分重要,疑难杂症,对症下药,才能出现更好的疗效。

        对于新手来说,初期一定是对模型性能及效果分析不是很熟练,可先用小数据量进行测试, 走通全流程建表要规范,方便后期批量删除,因为建模是个反复的过程。

        根据各类参数的评估结果,以及人工经验选定的模型参数,建立模型。值得注意的是,决策树的深度不要过深,以防止过拟合的问题。

​决策树分类算法详解​

2.1 概念入门

        在讲解其算法之前,我们需要掌握其常见的几个概念。

  • 数据

        “承载了信息的东西”才是数据。

  • 信息

        信息是用来消除随机不定性的东西。

  • 信息量

        这里涉及到两个计算公式,可以分别通过事件发生的数量和概率来获得信息量。计算出的信息量单位都是bit,也就是比特。

大数据【企业级360°全方位用户画像】之USG模型和决策树分类算法_决策树_10

        m 指的是可能的数量(几种可能性), I就是信息量

大数据【企业级360°全方位用户画像】之USG模型和决策树分类算法_决策树_11

        另一个公式

大数据【企业级360°全方位用户画像】之USG模型和决策树分类算法_决策树_12

        P指的是事件的概率

大数据【企业级360°全方位用户画像】之USG模型和决策树分类算法_数据_13

  • 信息熵

        信息的不确定性可以用熵来表示,即信息熵是信息杂乱程度的描述。

        越不确定,信息熵越大,越确定,信息熵越小

        计算信息熵的公式也有两个

大数据【企业级360°全方位用户画像】之USG模型和决策树分类算法_spark_14

        其中pi概率,Logpi  是信息量。

        另外一个公式是:

大数据【企业级360°全方位用户画像】之USG模型和决策树分类算法_数据_15

        信息熵的计算公式为:所有的事件发生的概率 * 事件的信息量的总和

大数据【企业级360°全方位用户画像】之USG模型和决策树分类算法_数据_16

        2个球队比赛的信息熵

大数据【企业级360°全方位用户画像】之USG模型和决策树分类算法_spark_17

        32个球队比赛的信息熵

大数据【企业级360°全方位用户画像】之USG模型和决策树分类算法_数据_18

  • 小结

大数据【企业级360°全方位用户画像】之USG模型和决策树分类算法_数据_19

  • 什么是信息增益??大数据【企业级360°全方位用户画像】之USG模型和决策树分类算法_数据_20        我们计算信息增益的大致过程如下:大数据【企业级360°全方位用户画像】之USG模型和决策树分类算法_spark_21

        上图中已经透露出,某个固定值与信息熵的差值便是这个位置的信息增益。

        但是这个固定值是怎么计算出来的呢?

        原来这个固定值指的是不参考任何特征,直接根据结果计算信息熵(整体的信息熵)。在下边有一个决策树的实例中会体现出计算的过程,大家可以留意下。

        再用这个固定值值 - 某一特征信息熵便得到了信息增益

大数据【企业级360°全方位用户画像】之USG模型和决策树分类算法_spark_22

        信息增益越大,数据越纯粹,这个判断,特征的位置越靠前。

        

2.2 算法原理

        先让我们来看这样几篇报道,对于决策树有一个大概的认知。

大数据【企业级360°全方位用户画像】之USG模型和决策树分类算法_数据_23

大数据【企业级360°全方位用户画像】之USG模型和决策树分类算法_决策树_24

        决策树是最经典的机器学习模型之一。它的预测结果容易理解, 易于向业务部门解释。预测速度快,可以处理类别型数据和连续型数据。在机器学习的数据挖掘类求职面试中,决策树是面试官最喜欢的面试题之一。

大数据【企业级360°全方位用户画像】之USG模型和决策树分类算法_决策树_25

大数据【企业级360°全方位用户画像】之USG模型和决策树分类算法_spark_26

大数据【企业级360°全方位用户画像】之USG模型和决策树分类算法_spark_27

大数据【企业级360°全方位用户画像】之USG模型和决策树分类算法_数据_28

大数据【企业级360°全方位用户画像】之USG模型和决策树分类算法_spark_29

大数据【企业级360°全方位用户画像】之USG模型和决策树分类算法_决策树_30

大数据【企业级360°全方位用户画像】之USG模型和决策树分类算法_决策树_31

大数据【企业级360°全方位用户画像】之USG模型和决策树分类算法_spark_32

大数据【企业级360°全方位用户画像】之USG模型和决策树分类算法_决策树_33

大数据【企业级360°全方位用户画像】之USG模型和决策树分类算法_决策树_34

大数据【企业级360°全方位用户画像】之USG模型和决策树分类算法_数据_35

大数据【企业级360°全方位用户画像】之USG模型和决策树分类算法_数据_36

大数据【企业级360°全方位用户画像】之USG模型和决策树分类算法_数据_37

大数据【企业级360°全方位用户画像】之USG模型和决策树分类算法_决策树_38

大数据【企业级360°全方位用户画像】之USG模型和决策树分类算法_数据_39

大数据【企业级360°全方位用户画像】之USG模型和决策树分类算法_决策树_40

2.3 快速体验

        之前我们在初次介绍KMeans聚类算法的时候,在最后利用该算法对鸢尾花数据集进行了聚类分析。看了本篇博客,学习了决策树分类算法,那我们也重拾起曾经的数据集,用Java来体验一波“决策树”的快感。

        需要注意的是,我们本次读取的数据集​​iris_tree.csv​​如下所示,想要数据集的朋友可以私信获取。

大数据【企业级360°全方位用户画像】之USG模型和决策树分类算法_数据_41

        具体代码:

import org.apache.spark.ml.{Pipeline, PipelineModel}
import org.apache.spark.ml.classification.{DecisionTreeClassificationModel, DecisionTreeClassifier}
import org.apache.spark.ml.evaluation.MulticlassClassificationEvaluator
import org.apache.spark.ml.feature.{StringIndexer, StringIndexerModel, VectorAssembler}
import org.apache.spark.sql.types.DoubleType
import org.apache.spark.sql.{DataFrame, Dataset, Row, SparkSession}

/*
* @Author: Alice菌
* @Date: 2020/7/2 15:03
* @Description:

用决策树对鸢尾花数据进行分类

*/
object IrisTree {

def main(args: Array[String]): Unit = {
// 监督学习如何实现
// 训练集,测试集如何使用
// 成功率(准确率)

// 1、初始化SparkSession
val spark: SparkSession = SparkSession.builder().appName("IrisTree").master("local[*]").getOrCreate()

// 设置日志级别
spark.sparkContext.setLogLevel("WARN")

// 导入隐式转换
import spark.implicits._

// 2、读取数据
val dataSource: DataFrame = spark.read
.csv("file:///E:\\iris_tree.csv")
.toDF("Sepal_Length", "Sepal_Width", "Petal_Length", "Petal_Width", "Species")
.select('Sepal_Length cast DoubleType, //字符串类型无法直接计算,需要将其传为doubleType
'Sepal_Width cast DoubleType,
'Petal_Length cast DoubleType,
'Petal_Width cast DoubleType,
'Species
)

//展示一些数据
dataSource.show()
//+------------+-----------+------------+-----------+-----------+
//|Sepal_Length|Sepal_Width|Petal_Length|Petal_Width| Species|
//+------------+-----------+------------+-----------+-----------+
//| 5.1| 3.5| 1.4| 0.2|Iris-setosa|
//| 4.9| 3.0| 1.4| 0.2|Iris-setosa|
//| 4.7| 3.2| 1.3| 0.2|Iris-setosa|
//| 4.6| 3.1| 1.5| 0.2|Iris-setosa|
//| 5.0| 3.6| 1.4| 0.2|Iris-setosa|
//| 5.4| 3.9| 1.7| 0.4|Iris-setosa|
//| 4.6| 3.4| 1.4| 0.3|Iris-setosa|

// 3、标签处理(数据不能直接使用,需要将最终的标签处理成数字。)
val SpeciesToLabel: StringIndexerModel = new StringIndexer()
.setInputCol("Species")
.setOutputCol("label")
.fit(dataSource)

//4、将特征数据处理成向量
val features: VectorAssembler = new VectorAssembler()
.setInputCols(Array("Sepal_Length", "Sepal_Width", "Petal_Length", "Petal_Width"))
.setOutputCol("features")

//5、初始化决策树,进行分类
val decisionTree: DecisionTreeClassifier = new DecisionTreeClassifier() //创建决策树对象
.setFeaturesCol("features") //设置特征列
.setPredictionCol("prediction") //设置预测后的列名
.setMaxDepth(4) //设置深度

//------查看----------

//6、构建一个 PipeLine 将 第3 4 5 步骤连起来
val pipeline: Pipeline = new Pipeline().setStages(Array(SpeciesToLabel,features,decisionTree))

//7、将原始数据拆分成训练集和测试集
//将数据切分成80%的训练集和20%的测试集
val Array(trainDatas,testDatas): Array[Dataset[Row]] = dataSource.randomSplit(Array(0.8,0.2))


//8、使用 PipLine 对训练集进行训练,使用测试集进行测试
//使用训练数据进行训练,得到一个模型
val model: PipelineModel = pipeline.fit(trainDatas)

//使用测试集进行测试
val testDF: DataFrame = model.transform(testDatas)
testDF.show()
//+------------+-----------+------------+-----------+---------------+-----+-----------------+--------------+-------------+----------+
//|Sepal_Length|Sepal_Width|Petal_Length|Petal_Width| Species|label| features| rawPrediction| probability|prediction|
//+------------+-----------+------------+-----------+---------------+-----+-----------------+--------------+-------------+----------+
//| 4.3| 3.0| 1.1| 0.1| Iris-setosa| 0.0|[4.3,3.0,1.1,0.1]|[38.0,0.0,0.0]|[1.0,0.0,0.0]| 0.0|
//| 4.4| 3.2| 1.3| 0.2| Iris-setosa| 0.0|[4.4,3.2,1.3,0.2]|[38.0,0.0,0.0]|[1.0,0.0,0.0]| 0.0|
//| 4.7| 3.2| 1.3| 0.2| Iris-setosa| 0.0|[4.7,3.2,1.3,0.2]|[38.0,0.0,0.0]|[1.0,0.0,0.0]| 0.0|
//| 4.9| 3.0| 1.4| 0.2| Iris-setosa| 0.0|[4.9,3.0,1.4,0.2]|[38.0,0.0,0.0]|[1.0,0.0,0.0]| 0.0|
//| 5.0| 2.0| 3.5| 1.0|Iris-versicolor| 1.0|[5.0,2.0,3.5,1.0]|[0.0,35.0,0.0]|[0.0,1.0,0.0]| 1.0|
//| 5.0| 3.2| 1.2| 0.2| Iris-setosa| 0.0|[5.0,3.2,1.2,0.2]|[38.0,0.0,0.0]|[1.0,0.0,0.0]| 0.0|
//| 5.1| 3.4| 1.5| 0.2| Iris-setosa| 0.0|[5.1,3.4,1.5,0.2]|[38.0,0.0,0.0]|[1.0,0.0,0.0]| 0.0|

//9、查看分类的成功的百分比
val evaluator: MulticlassClassificationEvaluator = new MulticlassClassificationEvaluator() //多类别评估器
.setLabelCol("label") //设置原始数据中自带的label
.setPredictionCol("prediction") //设置根据数据计算出来的结果“prediction”

val Score: Double = evaluator.evaluate(testDF) //将测试的数据集DF中自带的结果与计算出来的结果进行对比得到最终分数
println(">>>>>>>>>>>>>>>>>>>>>>> "+Score)
//>>>>>>>>>>>>>>>>>>>>>>> 0.9669208211143695

val decisionTreeClassificationModel: DecisionTreeClassificationModel = model.stages(2).asInstanceOf[DecisionTreeClassificationModel]
// 输出决策树
println(decisionTreeClassificationModel.toDebugString)

//DecisionTreeClassificationModel (uid=dtc_d936bd9c91b5) of depth 4 with 13 nodes
// If (feature 2 <= 1.9)
// Predict: 0.0
// Else (feature 2 > 1.9)
// If (feature 2 <= 4.7)
// If (feature 3 <= 1.6)
// Predict: 1.0
// Else (feature 3 > 1.6)
// Predict: 2.0
// Else (feature 2 > 4.7)
// If (feature 2 <= 4.9)
// If (feature 3 <= 1.5)
// Predict: 1.0
// Else (feature 3 > 1.5)
// Predict: 2.0
// Else (feature 2 > 4.9)
// If (feature 3 <= 1.6)
// Predict: 2.0
// Else (feature 3 > 1.6)
// Predict: 2.0


}
}

​结语​

        本篇博客博主地简单为大家介绍了一下用户画像项目中的​​USG​​​模型和机器学习中的​​决策树​​算法。后续会借助决策树,为大家带来如何在用户画像中开发用户购物性别的标签,敬请期待

标签:USG,0.0,模型,0.2,用户,企业级,数据,360,决策树
From: https://blog.51cto.com/u_15105906/5928817

相关文章