微信小程序可以做视频网站吗,网站开发发送短信,wordpress vr,推广网站加盟目录 7.1 什么是用户画像7.2 标签系统7.2.1 标签分类方式7.2.2 多渠道获取标签 7.3 用户画像数据特征7.3.1 常见的数据形式7.3.2 文本挖掘算法7.3.3 嵌入式表示7.3.4 相似度计算方法 7.4 用户画像应用 因此只基于某个层面的数据便可以产生部分个体面像#xff0c;可用于从特定… 目录 7.1 什么是用户画像7.2 标签系统7.2.1 标签分类方式7.2.2 多渠道获取标签 7.3 用户画像数据特征7.3.1 常见的数据形式7.3.2 文本挖掘算法7.3.3 嵌入式表示7.3.4 相似度计算方法 7.4 用户画像应用 因此只基于某个层面的数据便可以产生部分个体面像可用于从特定角度形容群体乃至个体的大致差异。说了这么多那这些和本章要探讨的用户面像有什么关系呢首先要明确用户面像里的用户是谁数据收集方即产品提供方往往开发出某件产品供人使用这些使用者便是数据收集方的用户数据收集方为了推广产品同时持续维护和改善用户体验便需要对由用户操作而产生的数据进行挖掘以期从中发现群体乃至个体的行为偏好形成数据层面上的所谓面像。
7.1 什么是用户画像
在机器学习中提到的用户面像通常是基于给定的数据对用户属性以及行为进行描述然后提取用户的个性化指标再以此分析可能存在的群体共性并落地应用到各种业务场景中。
7.2 标签系统
用户面像的核心其实就是给用户 “打标签”即标签化用户的行为特征企业通过用户面像中的标签来分析用户的社会属性、生活习惯、消费行为等信息然后进行商业应用。
构建一个标签系统成为企业赋能更多业务的关键标签系统也是本节要详细介绍的内容具体从三个方面来展开分别是标签分类方式、多渠道获取标签和标签体系框架。
7.2.1 标签分类方式
如下图所示通过分析一个用户的特征来展示标签分类方式。 7.2.2 多渠道获取标签
根据标签获取方式可以把标签分为事实类标签、规则类标签和模型类标签三种。标签获取方式也可以看作特征获取方式借助这三种方式从原始数据中提取能够表现用户特点、商品特点或者数据特点的特征。 事实类标签 事实类标签最容易获取直接来源于原始数据比如性别、年龄、会员等级等字段。当然也可以对原始数据进行简单的统计后提取事实标签比如用户行为次数、消费总额。 规则类标签 规则类标签使用广泛是由运营人员和数据人员经过共同协商而设定的多个规则生成的标签其特点是直接有效灵活、计算复杂度低和可解释度高主要用作较为直观和清晰的用户相关标签例如地域所属、家庭类型、年龄层等。使用到的技术知识主要是数理统计类知识例如基础统计、数值分层、概率分布、均值分析、方差分析等。 如下图所示主要对单一或者多种指标进行逻辑运算、函数运算等运算生成最终的规则类标签这里分为用户行为、用户偏好和用户价值三部分感兴趣的话可对用户进行更深层次的刻面。 模型类标签 模型类标签是经过机器学习和深度学习等模型处理后二次加工生成的洞察性标签。比如预测用户状态、预测用户信用分、划分兴趣人群和对评论文本进行分类等经过这些处理得到的结果就是模型类标签。其特点是综合程度高、复杂程度高绝大部分标签需要先有针对性地构建相应的挖掘指标体系然后依托经典数学算法或模型进行多指标间的综合计算方能得到模型类标签常常需要多种算法一起组合来建模。 如下图所示基于模型类标签可以使用 RFM 模型来衡量用户价值和用户创利能力、对用户行为信息建模预测用户生命周期变化情况、通过模型预测用户信用评分、使用图嵌入或用户分层模型划分兴趣人群。除此之外还有很多通过模型来得到标签的方法。
对标签的分类和获取有了初步了解后我们可以将其串联起来形成基本的标签体系框架包括从底层数据的提取到业务应用赋能。
如下图所示可以看出整个标签体系框架分为四个部分数据源、标签管理、标签层级分类和标签服务赋能。 7.3 用户画像数据特征
无论是构建用户面像还是进行算法竞赛数据都是产生效益的核心。一般而言用户面像的数据来源为用户数据、商品数据和渠道数据比如从电商网站和微信平台可以获取用户的交易数据、行为数据等从平台用户系统可以获取用户属性数据。
这些数据的存在形式多样通过对数据形式的理解可以进行统计、编码和降维等处理来提取有效特征然后用这些特征构造我们需要的标签。本节我们将介绍常见的数据形式以及用户面像相关竞赛的一些特征提取方法。
7.3.1 常见的数据形式
在各式各样的竞赛当中数据的形态和格式是多种多样的本节以用户画像为例将数据的有关字段大致分为数值型变量、类别型变量、多值型变量以及文本型变量四种常见的数据形式每种变量都有对应的处理方式。需要强调的是这些变量都是针对用户层面的即所有样本数据以用户为唯一主键进行区分且每个用户只有一条记录之所以这样举例是因为通常基于用户面像的机器学习模型所需的数据是以用户池的形式呈现的对用户的标签进行对应的特征学习。
实际竞赛中给的数据可能十分复杂甚至是以打点记录的方式描述用户的行为这时候往往还需要参赛者构建提取用户特征这涉及更深的应用技巧。
数值型变量 最常见的一种数值型变量是连续型变量指的是具有数值大小含义的变量比如下图所示的年龄、身高、体重等其他如消费金额、流量累计等。 类别型变量 类别型变量是指具有类别标识的变量比如性别、 籍贯、所在城市等这类变量记录了用户的固有属性如下图所示。 多值型变量 多值型变量是指用户在某个维度具有多个取值的变量比如兴趣爱好、穿衣风格、看过的电影等这类变量由于其特殊结构无法直接应用到模型中需要借助特别的数据结构如稀疏矩阵进行处理如下图所示。 文本型变量 文本型变量如下图所示是指利用文本记录的变量比如用户对某件商品或者某次购物的评论等。处理这类变量需要用到自然语言处理的一些工具比如中文分词工具 jieba 等。
7.3.2 文本挖掘算法
对于基础的原始数据比如经常出现的用户标签集合、购物评价等除了常见的统计特征外还能够基于文本挖掘算法进行特征提取同时对原始数据进行预处理和清洗以达到匹配和标识用户数据的效果。本节将会对常见的文本挖掘算法 LSA、PLSA 和 LDA 进行介绍这三种均为无监督学习方法。 LSA LSA潜在语义分析 是一种非概率主题模型与词向量有关主要用于文档的话题分析其核心思想是通过矩阵分解的方式来发现文档与词之间基于话题的语义关系。具体地将文档集表示为词-文档矩阵对词-文档矩阵进行 SVD(奇异值分解从而得到话题向量空间以及文档在话题向量空问的表示。 LSA 的具体使用也非常简单我们以 2020 腾讯广告算法大赛中的数据为例首先构造用户点击的广告素材 ID 序列 (creative_id)然后进行 TF-IDF 计算最后经过 SVD 得到结果实现代码如下 from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.decomposition import TruncatedSVD
from sklearn.pipeline import Pipeline
# 提取⽤户点击序列
docsdata_df.groupby([user_id])[creative_id].agg(lambda x: .join(x)).reset_index()[creative_id]
# tfidf svd
tfidf TfidfVectorizer()
svd TruncatedSVD(n_components100)
svd_transformer Pipeline([(tfidf, tfidf), (svd, svd)])
lsa_matrix svd_transformer.fit_transform(documents)PLSA PLSA概率潜在语义分析模型其实是为了克服 LSA 模型潜在存在的一些缺点而提出的。PLSA 模型通过一个生成模型来为 LSA 赋予概率意义上的解释。该模型假设每一篇文档都包含一系列可能的潜在话题文档中的每一个单词都不是凭空产生的而是在潜在话题的指引下通过一定的概率生成的。 LDA LDA潜在狄利克雷分布是一种概率主题模型与词向量无关可以将文档集中每篇文档的主题以概率分布的形式给出。通过分析一批文档集抽取出它们的主题分布就可以根据主题分布进行主题聚类或文本分类。同时它是一种典型的词袋模型即一篇文档由一组相互独立的词构成词与词之间没有先后顺序关系。
7.3.3 嵌入式表示
毫不夸张地说任何可以形成网络结构的东西都可以有嵌入表示Embedding并且嵌入表示可以将高维稀疏特征向量转换成低维稠密特征向量来表示。嵌入表示这个概念最初在 NLP 领域被广泛应用现在已经扩展到了其他应用比如电商平台。电商平台将用户的行为序列视作由一系列单词组成的句子比如用户点击序列和购买商品序列经过训练后得到关于商品的嵌入向量。这里主要介绍经典的 Word2Vec 以及网络表示学习中的 DeepWalk 方法。 词嵌入 Word2Vec Word2Vec 在竞赛中被经常使用能够带来意想不到的效果掌握其原理非常关键。Word2Vec 根据上下文之间的关系去训练词向量有两种训练模式分别为 Skip-Gram跳字模型和 CBOW连续词袋模型两者的主要区别为在于输入层和输出层的不同。简单来说Skip-Gram 是用一个词语作为输入来预测它的上下文CBOW 是用一个词语的上下文作为输入来预测这个词语本身。 如下图所示Word2Vec 实质上是只有一个隐藏层的全连接神经网络用来预测与给定单词关联度大的单词。模型词汇表的大小是每个隐藏层的维度是 N N N相邻神经元之问的连接方式是全连接。下图中的输入层是把一个词被转化成的独热向量即给定一个单词然后把此单词转化为 { x 1 , x 2 , x 3 , ⋯ , x V } \{ x_1,x_2,x_3, \cdots, x_V \} {x1,x2,x3,⋯,xV} 序列这个序列中只有一个值为 1 1 1其他均为 0 0 0通过输入层和隐藏层之问的权重矩阵 W V × N W_{V \times N} WV×N将序列在隐藏层进行简单的映射隐藏层和输出层之问存在一个权重矩阵 W N × V ′ W_{N \times V} WN×V′通过计算得出词汇表中每个单词的得分最后使用 softmax 激活函数输出每个单词的概率结果。 如下图所示Skip-Gram 根据当前单词预测给定的序列或上下文。假设输入的目标单词为 x k x_k xk定义的上下文窗口大小为 c c c对应的上下文为 { y 1 , y 2 , ⋯ , y c } \{ y_1, y_2, \cdots, y_c \} {y1,y2,⋯,yc}这些 y y y 是相互独立的。 如下图所示为 CBOW 的模型结构定义上下文窗口大小为 c c c上下文单词为 { x 1 , x 2 , ⋯ , x c } \{ x_1, x_2, \cdots, x_c \} {x1,x2,⋯,xc}通过上下文单词来对当前的单词进行预测对应的目标单词为 y y y。 Word2vec 使用起来非常方便直接调用 gensim 包即可需要注意的是几个具体参数比如窗口大小、模型类型选择、生成词向量长度等等。 对于 Skip-Gram 和 CBOW 的选择大致可以基于以下三点CBOW 在训练时要比 Skip-Gram 快很多因为 CBOW 是基于上下文来预测这个单词本身只需把窗口内的其他单词相加作为输入进行预测即可不管窗口多大都只需要一次计算相较于 Skip-GramCBOW 可以更好地表示常见单词Skip-Gram 在少量的训练集中也可以表示稀有单词或者短语。 图嵌入 DeepWalk 在很多场景下数据对象除了存在序列关系还存在图或者网络的结构关系而 Word2vec 仅能提取序列关系下的嵌入表示不能跨越原本的序列关系获取图相关的信息。为了能从 “一维” 关系跨越到 “二维” 关系图嵌入 (Graph Embedding 成为了新的的研究方向其中最具影响的是 DeepWalk。 如下图所示DeepWalk 算法主要包括三个部分首先生成图网络比如通过用户点击序列或购买商品序列来构造商品图网络就是把序列中前后有关联的商品用线连接起来并作为图的边商品则作为点这样某个商品点就可以关联大量的领域商品然后基于图网络进行随机游走 (random walk获取网络中节点与节点的共现关系根据游走长度生成商品序列最后把产生的序列当作句子输入到 Skip-Gram 进行词向量的训练得到商品的图嵌入表示。 为了方便理解下面给出 DeepWalk 的代码描述 def deepwalk_walk(walk_length, start_node):walk [start_node]while len(walk) walk_length:cur walk[-1]try:cur_nbrs item_dict[cur]walk.append(random.choice(cur_nbrs))except:breakreturn walkdef simulate_walks(nodes, num_walks, walk_length):walks []for i in range(num_walks):random.shuffle(nodes)for v in nodes:walks.append(deepwalk_walk(walk_lengthwalk_length, start_nodev))return walksif __name__ __main__:
# 第⼀步⽣成图⽹络省略
# 构建item_dict 保存图中的节点关系即字典结构存储key 为节点value 为领域
# 第⼆步通过DeepWalk ⽣成商品序列
nodes [k for k in item_dict] # 节点集合
num_walks 5 # 随机游⾛轮数
walk_length 20 # 随机游⾛⻓度
sentences simulate_walks(nodes, num_walks, walk_length) # 序列集合
# 第三步通过Word2Vec 训练商品词向量
model Word2Vec(sentences, size64, window5, min_count3, seed2020)对于 Word2Vec 的衍生 ltem2Vec 以及更多图嵌入方法比如 LINE、Node2Vec 和 SDNE 都是很值得研究的。从传统的 Word2vec 到推荐系统中的嵌入表示再到如今逐渐向图嵌入过渡这些嵌入方式的应用都非常广泛。 7.3.4 相似度计算方法
基于相似度计算的特征提取有欧式距离、余弦相似度、Jaccard 相似度等有助于提取用户、商品和文本的相似度。当已经获取了 用户和商品的嵌入表示、文本的分词表示及各类稀疏表示后可以对些向量表示进行相似度的计算。基于相似度计算在用户分层聚类、个性化推荐或广告投放等应用中一直被广泛使用。 欧氏距离 欧式距离是最易于理解的一种距离计算方式是二维、三维或多维空间中两点之问的距离公式。在 n n n 维空问中对于向量 A [ a 1 , a 2 , ⋯ , a n ] , B [ b 1 , b 2 , ⋯ , b n ] A [a_1, a_2, \cdots, a_n], \ B [b_1, b_2, \cdots, b_n] A[a1,a2,⋯,an], B[b1,b2,⋯,bn]其公式如下 d ( A , B ) ∑ i 1 n ( a i , b i ) 2 d(A, B) \sqrt{\sum_{i1}^n (a_i, b_i)^2} d(A,B)i1∑n(ai,bi)2 欧氏距离的代码如下 def EuclideanDistance(dataA, dataB):# np.linalg.norm ⽤于范数计算默认是⼆范数相当于平⽅和开根号return 1.0 / ( 1.0 np.linalg.norm(dataA - dataB))余弦相似度 首先样本数据的夹角余弦并不是真正几何意义上的夹角余弦实际上前者只不过是借用后者的名字变成了代数意义上的 “夹角余弦”用于衡量样本向量之间的差异。夹角越小余弦值越接近于 1 1 1反之则趋近于 − 1 -1 −1。上面的向量 A 和向量 B 之间的夹角余弦公式如下 c o s θ ∑ i 1 n ( a i × b i ) ∑ i 1 n a i 2 × ∑ i 1 n b i 2 cos \theta \frac{\sum_{i1}^n (a_i \times b_i)}{\sqrt{\sum_{i1}^n a_i^2} \times \sqrt{\sum_{i1}^n b_i^2}} cosθ∑i1nai2 ×∑i1nbi2 ∑i1n(ai×bi)余弦相似度的代码实现如下 def Cosine(dataA, dataB):sumData np.dot(dataA, dataB)denom np.linalg.norm(dataA) * np.linalg.norm(dataB)# 归⼀化到[0,1] 区间return ( 1 - sumData / denom ) / 2Jaccard 相似度 Jaccard 相似度一般用于度量两个集合之间的差昇大小其思想为两个集合共有的元素越多二者就越相似。为了控制其取值范国我们可以增加一个分母也就是两个集合拥有的所有元素。集合 C、集合 D 的 Jaccard 相似度公式如下 J ( C , D ) ∣ C ∩ D ∣ ∣ C ∪ D ∣ ∣ C ∩ D ∣ ∣ C ∣ ∣ D ∣ − ∣ C ∩ D ∣ J(C, \ D) \frac{|C \cap D|}{|C \cup D|} \frac{|C \cap D|}{|C| |D| - |C \cap D|} J(C, D)∣C∪D∣∣C∩D∣∣C∣∣D∣−∣C∩D∣∣C∩D∣Jaccard 相似度的代码实现如下 def Jaccard(dataA, dataB):A_len, B_len len(dataA), len(dataB)C [i for i in dataA if i in dataB]C_len len(C)return C_len / ( A_len B_len - C_len)更多相似度计算方法有皮尔逊相关系数 (Pearson correlationcoefficient)、修正余弦相似度 (Adjusted Cosine Similarity、汉明距离 (Hamming distance、曼哈顿距离(Manhattan distance、莱文斯坦距离 (Levenshtein distance等。 7.4 用户画像应用
用户分析精准营销风控领域