《十周成为数据分析师》笔记——业务线 第九节 商品画像与产品关联分析体系实战

《十周成为数据分析师》笔记——业务线 第九节 商品画像与产品关联分析体系实战,第1张

《十周成为数据分析师》笔记——业务线 第九节 商品画像与产品关联分析体系实战

互联网业务数据分析报告及用户分层模型
  • 一、商品画像体系
    • 1、什么是商品画像体系
    • 2、商品画像体系的数据来源
    • 3、商品画像体系的应用
      • (1)曝光价格分析
      • (2)商品review评分分布分析
      • (3)商品排名分布趋势
      • (4)商品标题词频分析
        • a.静态分析——柱状图、词云图
        • b.动态分析——倒序动态排列
        • c.动态分析——正序动态排列
  • 二、商品画像体系
    • 1、产品关联度分析
    • 2、购物篮分析
      • (1)步骤一:计算不同商品的交易频次
      • (2)步骤二:根据最低支持度筛选商品
      • (3)步骤三:计算不同组合的交易频次
      • (4)步骤四:根据最低支持度筛选组合(最低支持度为50%)
      • (5)步骤五:计算不同组合的交易频次(三种商品)
      • (6)根据最低支持度筛选组合(最低支持度为50%)
    • 3、购物篮分析的应用
    • 4、产品定位分析
  • 课后思考:如果对review文本进行词频分析,那么动态词频分析与静态词频分析的结果意味着什么意思呢?

一、商品画像体系 1、什么是商品画像体系

商品画像可以简单理解成是海量数据的标签,根据商品不同属性的差异,将它们区分为不同的类型,然后每种类型中抽取出典型特征,赋予名称、价格、类别等描述。
用户画像是将用户数据标签化,即通过给用户打标签得到用户画像,帮助理解自己的用户;商品画像是对于全市场、全竞争对手的所有商品进行全面分析。二者之间的分析方法也是存在差异的,例如词频分析更多常见于商品画像分析中。

2、商品画像体系的数据来源

平台数据来源(以亚马逊为例)——前台抓取
搜索前台搜索dress,前台展示的所有数据均可抓取(爬虫程序、爬虫采集器、第三方数据分析工具如helium10),能抓取的具体数据:曝光商品数量、商品曝光详细信息(商品图片、价格、评分、评分数、优惠信息等)、商品详情页数据(列表、主图、品牌、标题、详细价格、尺码、五点描述、关联商品推荐、变体数量信息、商品价格段位、商品排名信息、商品详情页和网址中的商品ASIN信息、Q&A)

3、商品画像体系的应用 (1)曝光价格分析
  • 数据维度说明
  • 数据清洗及有效数据筛选
    删除评分数为-1的异常数据
  • 商品曝光价格分布分析

    在以dress为关键词的搜索结果下,便宜的商品占比较小,→进入市场时,价格不要定在[4.99,14.79]间,价格在(14.79,24.59]的商品较多,比较合理,(24.59,34.39]区间的商品最多,价格偏高但仍然数量众多,说明商品质量够好并想冲击高客单价市场,可以尝试这个定价区间。作为市场调研方,价格尽量选择数量最靠前的两个。
  • 商品曝光价格趋势分析
    曝光价格累计平均数:按序列计算曝光价格的累计平均数

    如果作为一个有效商品链接,必须要努力将商品冲到前10页,排在前面的才能提高曝光。
(2)商品review评分分布分析


评分在[0,0.2]间的数量最多——2749件商品(刚上架无销量)几乎没有评价;
评分在(3.8,4]、……(4.8,5]区间的评分数量不呈正态分布,(4.8,5]数量很多的一个原因可能是有的商品只有1-2个评价且为好评,另一个原因可能是评价数量少+刷评的后果。

通过优化应当维持评分在3.8往上。

评分数取决于历史销量×留评率,从宏观上来看,意味着历史销量的分布,在dress这个类目中,历史销量总体而言符合长尾分布,但也有一些差异,头部位置有数量低的,尾部位置也有数量高的,表明dress是竞争性比较强的一个类目

头部效应不明显,但不意味可以随意进入这个市场,排名前100的竞争也很激烈……

一般而言,因为新品(无销量无review)的出现整体趋势是往下降的;

前20名商品的评分累计平均数波动比较剧烈,整体评分还是比较高,而往后几十名商品突降,然后上升后再趋稳。
解释:头部商品存在明显的营销、刷评、推广等,将短时间内将评分提高(评分数量不多的商品可以通过短时间的刷屏等手段提高评分);排在19-100的商品质量还算不错,但评分数量较多,刷评这种手段无法提高评分;中尾部可以通过控评提高评分。

(3)商品排名分布趋势

对“Clothing, Shoes & Jewelry”的排名进行分析,由于其排名范围过大(几~几百万),图表可读性较差,于是取对数。

大部分商品销量不高,较高的销量需要将产品再类目中排名稳定在月两万名以内(对应对数值10)

(4)商品标题词频分析 a.静态分析——柱状图、词云图

将标题中不同词汇出现的频率进行搜索排序以及出现频率的关联性分析。
搜索排序前100的商品词频分析中top20的词汇如下:

  • 出现频率最高的关键词为dress,因为dress本身属于产品词+类目词+流量词,搜索关键词也是dress,出现频率高的原因是理所当然的;
  • 排第二的是women’s,一般而言买裙子的人群是女士,但少部分商品链接没有加这个词;
  • 排第三的词汇是sleeve,出现的频率是42,搜索排序前100的商品有一半左右的商品卖点包括袖子,否则不会写到标题中;
  • 排第四的词汇是party,是一个场景词,频率37次,说明很多裙子适合party穿,通常是休闲裙;
  • 排第五的是maxi长裙;排第六的是一个冷门词;排第七的是一个v领,流行设计;排第八的是long,有两种搭配(long dress,long sleeve),如果想要更精准的分析,可以将关键词组合进行分析;第九、第十的print和floral都是印花的意思;排第十一的词汇short与long同理;排第十二的elegant优雅……
    可以通过商品标题的词频分析可以找到热销款在标题编辑上的规律/特殊性,如sleeve、party、maxi,如果商品可以使用这些词则可以使用。但如何使用则需要关键词优化(买家需求+卖家竞争两个角度考虑),确定合适的关键词搭配。

    宏观的词频分析,即对搜索抓取得到的19152个商品标题进行词频分析。
  • 排第一的仍然是dress,但与前100商品的词频分析结果不同,dress出现的频率与商品数不同,说明有些商品没有使用dress,但不意味着其他商品链接只出现一次dress——前100的词频分析中dress占比为8.61%,而这里的比例提高到了9.53%,并且出现的频率本身下降了,说明top100的商品标题更加精简(不是简单,而是恰到好处),因为dress出现的数量更多的同时在标题里的比例并不是很高,说明top100的商品用了一些其他关键词来替代了dress这个名词,因此导致top100的词频分析中dress的出现频率高而比例低;但在宏观分析中,dress出现的频率低而比例高,原因有两个,一是存在部分商家重复使用了dress这个,二是存在商家的商品标题设置得过于简单,甚至SKU不恰当,没有详细描述好商品卖点。
  • 在宏观排序中,出现了排第五的介词with,没有实质意义,这样的词应当出现在五点描述中,但不应该出现在标题中(不符合用户的搜索习惯),说明包含大量运营经验能力不足的卖家(top100词频分析中就没有这种无意义的词语),体现了中小型卖家与头部卖家的差异。

    通过柱状图对比,排序前100商品的词频分析top20间频率差距没有那么大,而宏观分析中频率差距更大,长尾效应更加明显。
  • 根据搜索排序前100与前19152的商品词频分析中TOP20词汇的出现比例柱状图,milumia这个词在排序前100商品中比例较大,而在前19152商品中比例极小,说明milumia这个词很有可能是一个品牌专用词。
  • 大部分清洗下,头部卖家和新生卖家的差距很大,除了dress和women’s、long、casual几个词外,大部分头部卖家的关键词比例更高,说明其有一套自己的运营策略。
    因此,通过商品标题的词频分析,可以发现当前的关键词策略是否符合整体市场趋势。
b.动态分析——倒序动态排列


右下角代表排序的波动,有些词随着排列的增加排序逐渐靠前,可以观察到类目市场的卖点迭代更新趋势:刚上架的商品其搜索排序肯定很低(销量评论都很低),由倒序动态排列可以发现这样的一个新品/卖点对应的某个词汇出现的频率会比较高,比如这里的long,随着搜索排序从后往前的增加其搜索频率的增长速度比较快,原因是long可以对应long dress和long sleeve,只有在冷的时候才会穿,而抓到这个词语的时候是在夏天,很多商家就会将秋冬比较畅销的商品先逐渐上架,对应动态排列图上就可以看见部分相关联的卖点词汇增长速度加快——下一个卖点,市场上已经有卖家在这么 *** 作了。

c.动态分析——正序动态排列


在排名前100搜索商品的排序中,long这个词语一开始并没有一个很高的排名,但随着rank数逐步增多,使用long的卖家数量逐渐增多,符合认知。
正序排列主要看头部卖家的运营策略,动态排序主要是看市场的变化。

二、商品画像体系 1、产品关联度分析

关联分析是发现交易数据库中不同商品(项)之间的联系,主要应用于电商网站推荐、线下零售门店商品摆放等场景中。
关联规则:

  • 支持度(support):数据集中包含某几个特定项的概率。比如在1000次的商品交易中同时出现了A和B的次数是50次,那么此关联的支持度为5%。
  • 置信度(confidence):在数据集中已经出现A时,B发生的概率,置信度的计算公式是 :A与B同时出现的概率/A出现的概率。
  • 提升度(lift):就是在购买A产品这个条件下购买B产品的可能性与没有这个条件下购买B产品的可能性之比(置信度/无条件概率)。即P(B|A)/P(B)
    一般而言,提升度如果小于1,则该推荐规则不应该被使用。
2、购物篮分析

业界一般将单个客户一次购买商品的总和称为一个购物篮,购物篮分析就是针对商品的相关性分析。因为最初这种关联分析主要是在超市应用广泛,所以也称为“购物篮分析”。
购物篮分析要点:

  • 找到正确的物品组合
  • 找到用户对应不同组合的购买时间
  • 找到用户对应不同组合的购买顺序
    Apriori算法(先验算法):

    Apriori是先验算法,假设子集S出现了k次,那么任何包含S的其它子集只会小于或等于k次。反之如果S不满足最小的支持度,则任何包含S的子集也不会满足,这时包含S的子集就可以忽略计算了。因此,Apriori属于一种剪枝算法。
    案例:
(1)步骤一:计算不同商品的交易频次

(2)步骤二:根据最低支持度筛选商品

一共6个订单,设置最低支持度为50%,意味着最低出现3次以上,筛选后:

(3)步骤三:计算不同组合的交易频次


(4)步骤四:根据最低支持度筛选组合(最低支持度为50%)

(5)步骤五:计算不同组合的交易频次(三种商品)

(6)根据最低支持度筛选组合(最低支持度为50%)

3、购物篮分析的应用


选中商品列,插入数据透视表,可以得到所有商品的交易数量。
销量排行前20的商品销售情况:

将各商品的交易数量除以所有商品的交易数量之和,可以得到各商品的数量及销量占比:

这就得到了单一维度商品的支持度,设置最低支持度……
python处理过程:
输入商品零售数据→Apriori算法处理→是否满足条件:支持度≥最小支持度(2%),置信度≥最小置信度(35%)→输出关联规则→程序运行结束

from numpy import *
 
def loadDataSet():
    return [['a', 'c', 'e'], ['b', 'd'], ['b', 'c'], ['a', 'b', 'c', 'd'], ['a', 'b'], ['b', 'c'], ['a', 'b'], ['a', 'b', 'c', 'e'], ['a', 'b', 'c'], ['a', 'c', 'e']]
 
def createC1(dataSet):
    C1 = []
    for transaction in dataSet:
        for item in transaction:
            if not [item] in C1:
                C1.append([item])
    C1.sort()
    # 映射为frozenset唯一性的,可使用其构造字典
    return list(map(frozenset, C1))     
    
# 从候选K项集到频繁K项集(支持度计算)
def scanD(D, Ck, minSupport):
    ssCnt = {}
    for tid in D:   # 遍历数据集
        for can in Ck:  # 遍历候选项
            if can.issubset(tid):  # 判断候选项中是否含数据集的各项
                if not can in ssCnt:
                    ssCnt[can] = 1  # 不含设为1
                else:
                    ssCnt[can] += 1  # 有则计数加1
    numItems = float(len(D))  # 数据集大小
    retList = []  # L1初始化
    supportData = {}  # 记录候选项中各个数据的支持度
    for key in ssCnt:
        support = ssCnt[key] / numItems  # 计算支持度
        if support >= minSupport:
            retList.insert(0, key)  # 满足条件加入L1中
            supportData[key] = support  
    return retList, supportData
 
def calSupport(D, Ck, min_support):
    dict_sup = {}
    for i in D:
        for j in Ck:
            if j.issubset(i):
                if not j in dict_sup:
                    dict_sup[j] = 1
                else:
                    dict_sup[j] += 1
    sumCount = float(len(D))
    supportData = {}
    relist = []
    for i in dict_sup:
        temp_sup = dict_sup[i] / sumCount
        if temp_sup >= min_support:
            relist.append(i)
# 此处可设置返回全部的支持度数据(或者频繁项集的支持度数据)
            supportData[i] = temp_sup
    return relist, supportData
 
# 改进剪枝算法
def aprioriGen(Lk, k):
    retList = []
    lenLk = len(Lk)
    for i in range(lenLk):
        for j in range(i + 1, lenLk):  # 两两组合遍历
            L1 = list(Lk[i])[:k - 2]
            L2 = list(Lk[j])[:k - 2]
            L1.sort()
            L2.sort()
            if L1 == L2:  # 前k-1项相等,则可相乘,这样可防止重复项出现
                # 进行剪枝(a1为k项集中的一个元素,b为它的所有k-1项子集)
                a = Lk[i] | Lk[j]  # a为frozenset()集合
                a1 = list(a)
                b = []
                # 遍历取出每一个元素,转换为set,依次从a1中剔除该元素,并加入到b中
                for q in range(len(a1)):
                    t = [a1[q]]
                    tt = frozenset(set(a1) - set(t))
                    b.append(tt)
                t = 0
                for w in b:
                    # 当b(即所有k-1项子集)都是Lk(频繁的)的子集,则保留,否则删除。
                    if w in Lk:
                        t += 1
                if t == len(b):
                    retList.append(b[0] | b[1])
    return retList

def apriori(dataSet, minSupport=0.2):
# 前3条语句是对计算查找单个元素中的频繁项集
    C1 = createC1(dataSet)
    D = list(map(set, dataSet))  # 使用list()转换为列表
    L1, supportData = calSupport(D, C1, minSupport)
    L = [L1]  # 加列表框,使得1项集为一个单独元素
    k = 2
    while (len(L[k - 2]) > 0):  # 是否还有候选集
        Ck = aprioriGen(L[k - 2], k)
        Lk, supK = scanD(D, Ck, minSupport)  # scan DB to get Lk
        supportData.update(supK)  # 把supk的键值对添加到supportData里
        L.append(Lk)  # L最后一个值为空集
        k += 1
    del L[-1]  # 删除最后一个空集
    return L, supportData  # L为频繁项集,为一个列表,1,2,3项集分别为一个元素

# 生成集合的所有子集
def getSubset(fromList, toList):
    for i in range(len(fromList)):
        t = [fromList[i]]
        tt = frozenset(set(fromList) - set(t))
        if not tt in toList:
            toList.append(tt)
            tt = list(tt)
            if len(tt) > 1:
                getSubset(tt, toList)
 
def calcConf(freqSet, H, supportData, ruleList, minConf=0.7):
    for conseq in H:  #遍历H中的所有项集并计算它们的可信度值
        conf = supportData[freqSet] / supportData[freqSet - conseq]  # 可信度计算,结合支持度数据
        # 提升度lift计算lift = p(a & b) / p(a)*p(b)
        lift = supportData[freqSet] / (supportData[conseq] * supportData[freqSet - conseq])
 
        if conf >= minConf and lift > 1:
            print(freqSet - conseq, '-->', conseq, '支持度', round(supportData[freqSet], 6), '置信度:', round(conf, 6),
                  'lift值为:', round(lift, 6))
            ruleList.append((freqSet - conseq, conseq, conf))
 
# 生成规则
def gen_rule(L, supportData, minConf = 0.7):
    bigRuleList = []
    for i in range(1, len(L)):  # 从二项集开始计算
        for freqSet in L[i]:  # freqSet为所有的k项集
            # 求该三项集的所有非空子集,1项集,2项集,直到k-1项集,用H1表示,为list类型,里面为frozenset类型,
            H1 = list(freqSet)
            all_subset = []
            getSubset(H1, all_subset)  # 生成所有的子集
            calcConf(freqSet, all_subset, supportData, bigRuleList, minConf)
    return bigRuleList
 
if __name__ == '__main__':
    dataSet = data_translation
    L, supportData = apriori(dataSet, minSupport = 0.02)
    rule = gen_rule(L, supportData, minConf = 0.35)

部分结果汇总表格:

购买一种商品的顾客占全部顾客的比率,反映的是全品类的关联能力。行业参考值为40%,该值越小越好,越小说明关联能力越强。
应用:亚马逊电商平台的相关商品推荐、B站/淘宝/京东电商平台的相关商品推荐

4、产品定位分析


一般而言通过四象限分析法来完成产品定位。
明星产品意味着拥有较高的相对市场占有率和较高的销售增长率,所以如果A产品是明星产品,B产品与A关联性很高,则B很可能也是明星产品。
金牛类产品相对市场占有率高,销售增长率较低,一般属于成熟期或者衰退期,需要减缓衰退过程或者延长成熟期的时间。
瘦狗类产品销售增长率高但相对市场占有率低,一般需要提高利润率,但需要很长的时间来提高市场占有率,需要进行替代品分析,找到竞品,让瘦狗类产品能替代竞品。

课后思考:如果对review文本进行词频分析,那么动态词频分析与静态词频分析的结果意味着什么意思呢?

对review文本可以从两种顺序进行词频分析,第一种是按照review时间排序进行词频分析,第二种是按照review受欢迎程度进行词频分析。

正序:随着不同词序列的上升,意味着某些词被使用的频率越来越高,很可能是最新产生的review比较喜欢用的词汇。

倒序:展现了哪些词汇能引起消费者的共鸣,属于趋势性词汇,如果与正序前列中的词汇重合,则可以运用。

静态词云图适合展现整体词频分析。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/zaji/5669925.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存