企业级用户画像:用户购物性别模型-USG和决策树算法
絮叨两句:
博主是一名数据分析实习生,利用博客记录自己所学的知识,也希望能帮助到正在学习的同学们
人的一生中会遇到各种各样的困难和折磨,逃避是解决不了问题的,唯有以乐观的精神去迎接生活的挑战
少年易老学难成,一寸光阴不可轻。
最喜欢的一句话:今日事,今日毕
之前在如何了解K-Means聚类算法?这是博主为大家讲解的K-Means算法,并在基于不同的模型下使用K-Means进行开发RFM
,RFE
,PSM
三个标签
本篇博客为大家带来基于USG模型下使用决策树开发用户购物性别
USG模型引入
------------------USG(User Shopping Gender)
AI驱动的电商用户模型:性别属性是这样确定的
------------------首先带领大家了解一下,如何通过大数据来确定用户的真实性别
- 我们经常谈论的用户精细化运营,到底是什么?
-----简单来讲,就是将网站的每个用户标签化,制作一个属于他自己的网络身份证。然后,运用人员通过身份证来确定活动的投放人群,圈定人群范围,更为精准的用户培养和管理。当然,身份证最基本的信息就是姓名,年龄和性别,与现实不同的是,网络上用户填写的资料不一定完全准确,还需要进行进一步的确认和评估。
确定性别这件事很重要,简单举个栗子,比如店铺想推荐新品的Bra,如果粗糙的全部投放人群或者投放到不准确性别的人群,那后果可想而知了。下面来介绍一下具体的识别思路
用户画像需要的数据
用户平时在电商网站的购物行为
,浏览行为
,搜索行为
以及订单购买情况
都会被记录在案,探查其消费能力,兴趣等。数据归类后,一般来讲,可以通过三类数据对用户进行分群和定义。
- 1.用户信息
- 社会特征:马克思的人性观把人分为社会属性和自然属性。社会特征主要指的是人在社会上的阶级属性,当然也包括服从性、依赖性或者自觉性等,这是人类发展的必然的基本要求。
- 自然特征:也可以说成是人的生物性,通常来讲可以是食欲,物欲或者购买欲,自我保存能力。但不同人会有不同的自然特征,比如学习能力和逻辑思维等。
- 兴趣特征:对于电商来讲,主要是对某件商品,某个品牌或者品类的兴趣程度,如加购、浏览、收藏、搜索和下单行为。
- 消费特征:消费能力的评估,消费倾向的评估,能够判断用户的消费层级,是高消费力还是低消费力。
- 2.商品
- 商品属性:基本信息,品类,颜色尺码型号等。
- 商品定位:商品层级,是否为高中低端,商品类型倾向于哪类客户,区域或者其他的特征。 最后通过以上的信息来获取用户信息,判断其具体的画像特征,然后得到类似于酱紫的网络身份证。
- 通常,拿到数据后,我们会将每个环节进行拆解,落实到具体的行动策略上。大体可以根据以下流程进行模型的预估:
- 业务目标: 精准投放:针对已有产品,寻找某性别偏好的精准人群进行广告投放。
- 技术目标: 对用户购物性别识别:男性,女性,中性
- 解决思路:选择一种分类算法,建立机器学习算法模型,对模型进行应用
- 线上投放:对得到的数据进行小范围内的测试投放,初期不宜过大扩大投放范围
- 效果分析:对投放的用户进行数据分析,评估数据的准确性。若不够完美,则需要重新建模和测试
如何理解建模过程
重点来了,虽然能够通过用户的行为,购买和兴趣数据,了解用户的基本信息,但是仍然不清楚如何建模?用什么语言建模?
其实,购物性别的区分使用的是spark
,但是机器学习算法也有很多分类,包含逻辑回归,线性支持向量机,朴素贝叶斯模型和决策树。那么,又该如何选择呢?其中,决策树
的优点较多,主要是其变量处理灵活,不要求相互独立。可处理大维度的数据,不用预先对模型的特征有所了解。对于表达复杂的非线性模式和特征的相互关系,模型相对容易理解和解释。看起来决策树的方法最适合区分性别特征了,所以决定用决策树进行尝试。
什么是决策树?简单来讲,是通过训练数据来构建一棵用于分类的树,从而对未知数据进行高效分类。可以从下面的图了解决策树的工作原理。
构造决策树的步骤为:
- 通过训练数据来构建一棵用于分类的树,从而对未知数据进行高效分类。
以上步骤中,能够得出一个结论,在构建决策树的过程中,最重要的是如何找到最好的分割点。决策树值得注意的问题是过拟合问题,整个算法必须解决「如何停止分割」
和「如何选择分割」
两个关键问题。
最简单的做法就是设定树的深度或枝叶的最少样本量。但是,过少的样本量又不具有代表性,所以一般情况,可以使用交叉验证的方法。交叉验证就是可以使用一部分数据用于模型的训练,另一部分数据可以用来评估模型的性能。业内常用的划分方法是讲样本进行50/50分,60/40分或者80/20分。
模型确立过程
在建模前期,首要考虑的事情就是先确定指标,以及对样本的定义。购物性别指的是什么?通过哪些数据来确定购物性别,样本的准确性,如何验证数据的可信度等。
购物性别的定义
先看下图,具体的逻辑可从图中查看。一般来讲,用户填写的资料不一定真实,我们对他/她的性别数据持怀疑态度,所以,就需要其他数据进行辅助证明其性别。
订单数据能够真实反映用户的购买心态,预测购买行为,并且能够通过购买商品的所属类别,判断用户的购买倾向,最后得到性别特征类目。不过本文就不展开探讨甄别特征类目的区分方法了。
根据数据结果,最终,确认了购物性别的定义。分为:
- 购物性别男:N月购买的男性特征类目子下单数> N月购买的女性特征类目子下单数
- 购物性别女:N月购买的男性特征类目子下单数> N月购买的女性特征类目子下单数
- 购物性别中性:未下单男女特征类目
- N需要具体根据业务场景来定。
建模数据准备过程
本节是具体的操作过程,模型的实操阶段。一般来讲,不同模型的训练其实大体雷同。从技术上来讲,各家算法大多使用sparkmllib,不同点是所运算的模型都是针对于场景来定的。
在全部样本中,取80%的数据用于训练模型
在全部样本中,取20%的数据用户数据测试
这种方式可以更好的根据数据的规模,提高模型的准确性
模型效果分析
行业内当前采用数据挖掘、机器学习和推荐系统中的评测指标—准确率(Precision)、召回率(Recall),准确率是应用最广的数据指标,也很清晰易懂,以男性为例
准确率=命中的男性用户数量/所有预测男性数量,一般来讲,准确率可以评估模型的质量,他是很直观的数据评价,但并不是说准确度越高,算法越好。
召回率=命中的男性用户数量/所有男性数量,反映了被正确判定的正例占总的正例的比重。
模型建立完后,需根据模型的结果与预期的对比,进行调优
最后要说的
购物性别定义对于用户精准营销十分重要,疑难杂症,对症下药,才能出现更好的疗效。
对于新手来说,初期一定是对模型性能及效果分析不是很熟练,可先用小数据量进行测试, 走通全流程 建表要规范,方便后期批量删除,因为建模是个反复的过程。
根据各类参数的评估结果,以及人工经验选定的模型参数,建立模型。值得注意的是,决策树的深度不要过深,以防止过拟合的问题
决策树分类算法详解
决策树是最经典的机器学习模型之一。它的预测结果容易理解, 易于向业务部门解释,
预测速度快,可以处理类别型数据和连续型数据。在机器学习的数据挖掘类求职面试中,决策树是面试官最喜欢的面试题之一。
算法原理
快速体验
package cn.itcast.userprofile.up24.newexcavateimport org.apache.spark.ml.classification.{DecisionTreeClassificationModel, DecisionTreeClassifier}
import org.apache.spark.ml.evaluation.MulticlassClassificationEvaluator
import org.apache.spark.ml.feature.{IndexToString, StringIndexer, StringIndexerModel, VectorAssembler}
import org.apache.spark.ml.{Pipeline, PipelineModel}
import org.apache.spark.sql.types.DoubleType
import org.apache.spark.sql.{DataFrame, SparkSession}object UsgTest {def main(args: Array[String]): Unit = {//1.创建SParkSessionval spark: SparkSession = SparkSession.builder().appName("Usg").master("local").getOrCreate()val sparkContext = spark.sparkContextsparkContext.setLogLevel("WARN")import spark.implicits._//2.读取数据val iris_tree: DataFrame = spark.read.csv("file:///C:\\BigData\\UserPortraitSourceData\\resources\\用户画像2\\第三阶段\\03挖掘型标签\\数据集\\iris_tree.csv").toDF("Sepal_Length", "Sepal_Width", "Petal_Length", "Petal_Width", "Species").select('Sepal_Length cast DoubleType, 'Sepal_Width cast DoubleType, 'Petal_Length cast DoubleType, 'Petal_Width cast DoubleType, 'Species)
// iris_tree.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|*///3.对Species 进行处理val indexerModel: StringIndexerModel = new StringIndexer().setInputCol("Species").setOutputCol("label").fit(iris_tree)//4.处理特征val vectorAssembler: VectorAssembler = new VectorAssembler().setInputCols(Array("Sepal_Length", "Sepal_Width", "Petal_Length", "Petal_Width")).setOutputCol("features")//5.创建决策树val decisionTreeClassifier = new DecisionTreeClassifier().setFeaturesCol("features").setPredictionCol("prediction").setSeed(10).setMaxDepth(5)//6.还原标签val indexToString = new IndexToString().setInputCol("label").setOutputCol("Species_label")//7.划分训练集、测试集,var Array(trainData,testData)=iris_tree.randomSplit(Array(0.8,0.2))//8.使用Pipeline 进行计算val pipeline: Pipeline = new Pipeline().setStages(Array(indexerModel, vectorAssembler, decisionTreeClassifier, indexToString))//生成模型val model: PipelineModel = pipeline.fit(trainData)//测试val testDataModel = model.transform(testData)
// testDataModel.show()/*** +------------+-----------+------------+-----------+---------------+-----+-----------------+--------------+-------------+----------+---------------+* |Sepal_Length|Sepal_Width|Petal_Length|Petal_Width| Species|label| features| rawPrediction| probability|prediction| Species_label|* +------------+-----------+------------+-----------+---------------+-----+-----------------+--------------+-------------+----------+---------------+* | 4.3| 3.0| 1.1| 0.1| Iris-setosa| 0.0|[4.3,3.0,1.1,0.1]|[42.0,0.0,0.0]|[1.0,0.0,0.0]| 0.0| Iris-setosa|* | 4.5| 2.3| 1.3| 0.3| Iris-setosa| 0.0|[4.5,2.3,1.3,0.3]|[42.0,0.0,0.0]|[1.0,0.0,0.0]| 0.0| Iris-setosa|* | 4.9| 2.4| 3.3| 1.0|Iris-versicolor| 1.0|[4.9,2.4,3.3,1.0]| [0.0,0.0,1.0]|[0.0,0.0,1.0]| 2.0|Iris-versicolor|* | 5.0| 2.3| 3.3| 1.0|Iris-versicolor| 1.0|[5.0,2.3,3.3,1.0]|[0.0,28.0,0.0]|[0.0,1.0,0.0]| 1.0|Iris-versicolor|* | 5.1| 3.3| 1.7| 0.5| Iris-setosa| 0.0|[5.1,3.3,1.7,0.5]|[42.0,0.0,0.0]|[1.0,0.0,0.0]| 0.0| Iris-setosa|* | 5.1| 3.4| 1.5| 0.2| Iris-setosa| 0.0|[5.1,3.4,1.5,0.2]|[42.0,0.0,0.0]|[1.0,0.0,0.0]| 0.0| Iris-setosa|* | 5.1| 3.5| 1.4| 0.3| Iris-setosa| 0.0|[5.1,3.5,1.4,0.3]|[42.0,0.0,0.0]|[1.0,0.0,0.0]| 0.0| Iris-setosa|* | 5.1| 3.8| 1.5| 0.3| Iris-setosa| 0.0|[5.1,3.8,1.5,0.3]|[42.0,0.0,0.0]|[1.0,0.0,0.0]| 0.0| Iris-setosa|* | 5.2| 2.7| 3.9| 1.4|Iris-versicolor| 1.0|[5.2,2.7,3.9,1.4]|[0.0,28.0,0.0]|[0.0,1.0,0.0]| 1.0|Iris-versicolor|* | 5.2| 4.1| 1.5| 0.1| Iris-setosa| 0.0|[5.2,4.1,1.5,0.1]|[42.0,0.0,0.0]|[1.0,0.0,0.0]| 0.0| Iris-setosa|* | 5.4| 3.0| 4.5| 1.5|Iris-versicolor| 1.0|[5.4,3.0,4.5,1.5]|[0.0,28.0,0.0]|[0.0,1.0,0.0]| 1.0|Iris-versicolor|* | 5.5| 2.4| 3.7| 1.0|Iris-versicolor| 1.0|[5.5,2.4,3.7,1.0]|[0.0,28.0,0.0]|[0.0,1.0,0.0]| 1.0|Iris-versicolor|* | 5.5| 2.4| 3.8| 1.1|Iris-versicolor| 1.0|[5.5,2.4,3.8,1.1]|[0.0,28.0,0.0]|[0.0,1.0,0.0]| 1.0|Iris-versicolor|* | 5.6| 2.7| 4.2| 1.3|Iris-versicolor| 1.0|[5.6,2.7,4.2,1.3]|[0.0,28.0,0.0]|[0.0,1.0,0.0]| 1.0|Iris-versicolor|*///8. 验证结果val evaluator: MulticlassClassificationEvaluator = new MulticlassClassificationEvaluator().setLabelCol("label").setPredictionCol("prediction").setMetricName("accuracy")val Score = evaluator.evaluate(testDataModel)println("测试数据确认百分比:",Score)//(测试数据确认百分比:,0.9259259259259259)//9.查看决策树val decisionTreeClassificationModel = model.stages(2).asInstanceOf[DecisionTreeClassificationModel]println("Learned DecisionTreeClassificationModel:\n" + decisionTreeClassificationModel.toDebugString)/**Learned DecisionTreeClassificationModel:
DecisionTreeClassificationModel (uid=dtc_0f9b93f0b062) of depth 4 with 13 nodesIf (feature 1 <= 1.9)Predict: 0.0Else (feature 1 > 1.9)If (feature 3 <= 1.6)If (feature 1 <= 4.9)Predict: 1.0Else (feature 1 > 4.9)If (feature 0 <= 2.6)Predict: 2.0Else (feature 0 > 2.6)Predict: 1.0Else (feature 3 > 1.6)If (feature 1 <= 4.8)If (feature 0 <= 3.0)Predict: 2.0Else (feature 0 > 3.0)Predict: 1.0Else (feature 1 > 4.8)Predict: 2.0*/}}
以上就是USG模型介绍以及决策树算法原理
若有错误及时私信我,立马修改
如能帮助到你或对大数据有兴趣的可以关注一下,希望能点个赞支持一下谢谢!
企业级用户画像:用户购物性别模型-USG和决策树算法相关推荐
- 用户画像第四章(企业级360°用户画像_标签开发_挖掘标签_用户购物性别模型-USG)
用户购物性别模型-USG USG模型引入 USG(User Shopping Gender) 2.5.1.AI驱动的电商用户模型:性别属性是这样确定的 首先带领大家了解一下,如何通过大数据来确定用户的 ...
- 008产品设计的思考(创造思维+用户体验+用户画像+用户群体)
文章目录 一.产品优化创造思维如何培养 1.1 产品优化创造思维培养 二.用户体验设计原则 2.1 可见原则 2.2 场景贴切原则 2.3 可控原则 2.4 一致性原则 2.5 防错.防呆原则 2.6 ...
- 企业级用户画像: 用户活跃度模型-RFE
絮叨两句: 博主是一名数据分析实习生,利用博客记录自己所学的知识,也希望能帮助到正在学习的同学们 人的一生中会遇到各种各样的困难和折磨,逃避是解决不了问题的,唯有以乐观的精神去迎接生活的挑战 少年易老 ...
- 基于高校图书馆的用户画像、可视化、模型预测、推荐算法项目实现
需要本项目的可以私信博主获取源码及项目!!! 本研究基于高校图书馆的借阅信息.馆藏图书信息.读者入馆信息.用户信息等多维度的数据表,首先将不同年份的数据拼接在一起,按照时间维度进行整合,并保证数据维度 ...
- 用户画像 用户画像表
日萌社 人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新) 用户画像 总文章 ================ 用户画像 ...
- 大数据【企业级360°全方位用户画像】基于RFE模型的挖掘型标签开发
上一篇博客,已经为大家介绍了基于RFM(用户价值模型)的挖掘型标签开发过程(
- 用户画像——用户流失率的计算
目录 1.流失概率预测需求 2.特征工程-- 选择特征 3.特征工程-- 特征数据源 4.算法选择 4.1逻辑回归分类算法 4.1.1步骤 4.1.2 向量规范化 4.1.3 按照步骤写demo 4. ...
- 用户画像--用户标签
1.长期.短期 2.静态标签.动态标签 3.第一方标签.第三方标签
- 基于多模型融合的用户画像分析统计方法研究
摘 要 随着信息技术的快速发展和大数据技术的广泛应用,企业的营销和产品的设计,对精细化.精准化的要求越来越高.主流的电商平台.搜索引擎以及短视频平台均推出了基于用户画像的个性化推荐服务,这其中相当一 ...
最新文章
- 开发日记-20190813 关键词 读书笔记《Linux 系统管理技术手册(第二版)》DAY 22
- (巴什博弈 sg函数入门1) Brave Game -- hdu -- 1846
- mysql5.5索引,MySQL--5索引选择原则
- linux 关闭rsync服务器,linux下配置rsync服务器和实时同步
- H.264 NAL层解析
- 数据挖掘--非负矩阵分解
- uniapp选择图片压缩并上传
- 【黑灰产犯罪研究】恶意注册
- 树规? bzoj4007 战争调度
- Linux系统管理(一)基础管理
- 39岁了,我依然要谈梦想
- 安卓高德地图 - (附近信息点Poi与标记Marker2)
- 青龙-聚看点(稳定的毛)
- python中def _init_是什么意思_python3类中的def __init()__如何使用?
- 苹果手机备份有必要吗_旧手机里的便签能备份到新手机里吗?
- Github十大深度学习项目
- python内置库求复数的辐角_根据下列选项,回答 30~34 题: A.杜仲B.黄柏C.厚朴D.肉桂E.牡丹皮 第 30 题 断面较平坦,粉...
- 纪 ACM 退役-再回首
- android 阿拉伯语下的光标,android – 在EditText中的游标提示不是从右边开始的阿拉伯语...
- 关于数独游戏的实现(一)