You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Cosine similarity能否用于数值、分类等非文本数据?附超市客户场景问题

余弦相似度计算购物数据相似度的方案及拓展方法

余弦相似度的适用范围

余弦相似度本身支持数值型数据的相似度计算,分类型数据无法直接代入,需要先经过编码处理转换为数值向量后即可使用。

针对你的超市购物数据的具体实现步骤

第一步:数据预处理

你的样例数据如下:

CustID  Gender  online  milk    bread   egg diapers  
234        1    1        0        1     1     0
235        2    1        0        1     0     0
234        1    0        1        0     0     1
234        1    0        0        1     0     1
238        3    0        0        0     0     0
239        1    0        1        1     0     1
240        2    1        0        0     1     1
  • 分类型字段Gender是无序分类,不能直接用1/2/3的数值计算,会引入错误的顺序权重,需要做独热编码:Gender=1转为[1,0,0]、Gender=2转为[0,1,0]、Gender=3转为[0,0,1]
  • 其余online/milk/bread等int64类型的二值字段可以直接作为向量维度使用
  • 最终单条购物记录会被转为8维数值向量,比如第一条234的记录对应向量为[1,0,0,1,0,1,1,0]

第二步:余弦相似度计算

余弦相似度的计算公式为:
cosθ = (A·B) / (||A|| × ||B||)
其中A·B是两个向量的点积,||A||、||B||分别是两个向量的模长,计算结果取值范围为[-1,1],数值越接近1代表两条记录的相似度越高。

同一客户多条记录的相似度计算方案

针对类似CustID=234有3条购物记录的情况,按你的需求可以选两种处理方式:

  • 若要对比单条购物行为的相似性:直接提取该客户的所有记录对应的向量,两两计算余弦相似度即可。比如234的第一条线上买面包鸡蛋的记录,和第二条线下买牛奶尿布的记录,计算出来的相似度约为0.29,说明两次购物行为差异很大
  • 若要对比客户整体消费行为的相似性:先对单个客户的所有记录做聚合,生成用户级的统计向量(比如统计该用户线上消费次数占比、各商品的购买次数、性别编码),再用聚合后的向量计算余弦相似度

其他适用的相似度计算方法推荐

  • 杰卡德相似度:最适配你当前的二值特征为主的场景,计算两个向量共同为1的维度占所有至少有一个为1的维度的比例,对二值特征的相似性判断比余弦相似度更准确
  • 汉明距离:统计两个向量对应位置取值不同的数量,数量越少相似度越高,适合分类特征占比更高的数据集
  • 欧氏距离:如果后续加入消费金额、购买数量等非二值的数值特征,欧氏距离可以直观衡量两个向量的空间差异,也可以转换为相似度指标使用
  • 皮尔逊相关系数:如果需要衡量消费行为的趋势一致性(比如两个用户是否都是线上偏好购买食品、线下偏好购买日用品),皮尔逊系数比余弦相似度更适配这类需求

内容的提问来源于stack exchange,提问作者Sajid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 10:00:04