精华内容
下载资源
问答
  • 利用python进行用户行为分析

    千次阅读 多人点赞 2020-04-22 12:19:34
    文章目录用户行为分析什么是用户行为分析了解用户行为分析用户行为分析的目的用户行为分析指标实施用户行为分析行为事件分析用户留存分析漏斗模型分析行为路径分析福格模型分析AISAS模型数据集描述明确分析目的获得...

    用户行为分析


    这篇文章尝试着对由阿里提供的user_behavior_data_on_taobao_app公开数据集进行分析,期望通过此次分析能通推动产品迭代、实现精准营销,提供定制服务,驱动产品决策等,需要此数据的小朋友们可以前往天池下载,我也会将文中使用到的数据和源代码放在Github上以便下载: 点此访问Github
    想要进行精细化运营,围绕的中心永远是用户。用户研究的常用方法有:情境调查、用户访谈、问卷调查、A/B测试、可用性测试与用户行为分析。其中用户行为分析是用户研究的最有效方法之一。

    1、什么是用户行为分析

    1.1 了解用户行为分析

    用户行为分析是对用户在产品上的产生的行为及行为背后的数据进行分析,通过构建用户行为模型和用户画像,来改变产品决策,实现精细化运营,指导业务增长

    在产品运营过程中,对用户行为的数据进行收集、存储、跟踪、分析与应用等,可以找到实现用户自增长的病毒因素、群体特征与目标用户。从而深度还原用户使用场景、操作规律、访问路径及行为特点等。

    1.2 用户行为分析的目的

    对于互联网金融、新零售、供应链、在线教育、银行、证券等行业的产品而言,以数据为驱动的用户行为分析尤为重要。用户行为分析的目的是:推动产品迭代、实现精准营销,提供定制服务,驱动产品决策等。

    主要体现在以下几个方面:

    • 对产品而言,帮助验证产品的可行性,研究产品决策,清楚地了解用户的行为习惯,并找出产品的缺陷,以便需求的迭代与优化。
    • 对设计而言,帮助增加体验的友好性,匹配用户情感,细腻地贴合用户的个性服务,并发现交互的不足,以便设计的完善与改进。
    • 对运营而言,帮助裂变增长的有效性,实现精准营销,全面地挖掘用户的使用场景,并分析运营的问题,以便决策的转变与调整。

    1.3 用户行为分析指标

    对用户行为数据进行分析,关键是找到一个衡量数据的指标。根据用户行为表现,可以细分多个指标,主要分为三类:黏性指标、活跃指标和产出指标。

    • 粘性指标:主要关注用户周期内持续访问的情况,比如新用户数与比例、活跃用户数与比例、用户转化率、用户留存率、用户流失率、用户访问率。
    • 活跃指标:主要考察的是用户访问的参与度,比如活跃用户、新增用户、回访用户、流失用户、平均停留时长、使用频率等。
    • 产出指标:主要衡量用户创造的直接价值输出,比如页面浏览数PV、独立访客数UV、点击次数、消费频次、消费金额等。
      在这里插入图片描述
      在这里插入图片描述

    在这里插入图片描述
    这些指标细分的目的是指导运营决策,即根据不同的指标去优化与调整运营策略。简而言之,用户行为分析指标细分的根本目的有:一是增加用户的粘性,提升用户的认知度;二是促进用户的活跃,诱导用户的参与度;三是提高用户的价值,培养用户的忠诚度。

    1.4 实施用户行为分析

    确定好用户行为分析指标后,我们可以借助一些模型对用户行为的数据进行定性和定量的分析。

    常用的分析模型有:

    • 行为事件分析
    • 用户留存分析
    • 漏斗模型分析
    • 行为路径分析
    • 福格模型分析

    1.4.1 行为事件分析

    行为事件分析是根据运营关键指标对用户特定事件进行分析。通过追踪或记录用户行为事件,可以快速的了解到事件的趋势走向和用户的完成情况。

    作用:主要是解决用户是谁,从哪里来,什么时候来,干了什么事情,如何做的,归纳总结即为事件的定义遵循5W原则:Who、When、Where、What、How。主要用于研究某行为事件的发生对企业组织价值的影响以及影响程度。
    在这里插入图片描述
    在这里插入图片描述

    1.4.2 用户留存分析

    用户留存分析是一种用来分析用户参与情况与活跃程度的模型。通过留存量和留存率,可以了解用户的留存和流失状况。比如用次日留存、周留存、月留存等指标来衡量产品的人气或粘度。

    作用:

    用户留存一般符合40-20-10法则,即新用户的次日留存应该大于40%,周留存大于20%,月留存大于10%才符合业务标准。我们做用户留存分析主要验证是否达到既定的运营目标,进而影响下一步的产品决策。

    1.4.3 漏斗模型分析

    漏斗模型分析是用户在使用产品过程中,描述各个阶段中关键环节的用户转化和流失率情况。比如在日常活动运营中,通过确定各个环节的流失率,分析用户怎么流失、为什么流失、在哪里流失。找到需要改进的环节,要重点关注,并采取有效的措施来提升整体转化率。

    作用:

    漏斗模型分析可以验证整个流程的设计是否合理。通过对各环节相关转化率的比较,可以发现运营活动中哪些环节的转化率没有达到预期指标,从而发现问题所在,并找到优化方向。

    1.4.4 行为路径分析

    行为路径分析就是分析用户在产品使用过程中的访问路径。通过对行为路径的数据分析,可以发现用户最常用的功能和使用路径。并从页面的多维度分析,追踪用户转化路径,提升产品用户体验。
    不管是产品冷启动,还是日常活动营销,做行为路径分析首先要梳理用户行为轨迹。用户行为轨迹包括认知、熟悉、试用、使用到忠诚等。轨迹背后反映的是用户特征,这些特征对产品运营有重要的参考价值。

    在分析用户行为路径时,我们会发现用户实际的行为路径与期望的行为路径有一定的偏差。这个偏差就是产品可能存在的问题,需要及时对产品进行优化,找到缩短路径的空间。

    1.4.5 福格模型分析

    福格行为模型是用来研究用户行为原因的分析模型。福格行为模型用公式来简化就是B=MAT,即B=MAT。B代表行为,M代表动机,A代表能力,T代表触发。它认为要让一个行为发生,必须同时具备三个元素:动机、能力和触发器。因此可以借助福格行为模型来评估产品的合理性和能否达到预期目标。

    1.5 AISAS模型

    用户行为分析模型其实也是一种AISAS模型:Attention注意、Interest兴趣、Search搜索、Action行动、Share分享,也影响了用户行为决策。

    • Attention
      Attention是指我们要想获得一定的业绩,就要首先吸引客户的注意。如果没有客户的话,那后面的一切营销活动都会没有任何用武之地。想要吸引客户的注意,我们可以从多方面来下手,比如说通过互动营销这种办法来吸引到店消费。

    • Interest
      吸引住了客户之后,我们要想真正的留住这些客户,就要让客户对我们的产品产生一定的兴趣,让他们发自内心的想要购买我们的产品。这就要求我们在事先要对目标群体进行一定的市场调查,了解目标群体的痒点。

    • Search
      当目标群体对我们产生一定的兴趣之后,他们可能就会通过一些线上或者线下的渠道来搜集我们产品的信息,这个阶段就是搜索阶段。如果要想使客户对我们留下较好的印象,线上要注意搜索引擎优化,线下要做到优化服务、提升口碑。

    • Action
      如果客户经过一系列的调查之后对公司的产品较为满意的话,就会直接进行消费。在这个阶段里面促进订单成交的最主要的环节便是销售环节,所以会对销售能力有着较高的要求。

    • Share
      如果客户使用该企业的产品获得了较好的使用感受,他可能会和周围的人进行分享,向周围的人推荐该企业的产品,这也就是所谓的口碑传播。我们一定要重视口碑传播的重要作用,它的说服力能够秒杀一切营销活动。

    2、数据集描述

    字段描述
    user_id用户ID
    item_id商品ID
    behavior_type用户行为类别
    user_geohash用户地理位置
    item_category商品所属品类
    time用户行为发生的时间

    其中,用户行为类别包含点击、收藏、加购物车、支付四种类别,分别用数字1,2,3,4表示

    3、明确分析目的

    基于淘宝app平台数据,通过相关指标对用户行为进行分析,推动产品迭代、实现精准营销,提供定制服务,驱动产品决策等。

    3.1 获得相关指标:

    1. 总量
    2. 日pv
    3. 日uv

    3.2 用户消费行为分析

    1. 付费率
    2. 复购率

    3.3 通过漏斗模型进行用户行为分析

    3.4 RFM模型分析用户价值

    4、理解数据

    # 导入相关库
    import numpy as np
    import pandas as pd
    import matplotlib.pyplot as plt
    import seaborn as sns
    import plotly as py
    import plotly.graph_objects as go
    import csv
    import os
    
    pyplot = py.offline.plot
    
    os.getcwd()
    import warnings
    plt.rcParams["font.family"] = "SimHei"
    plt.rcParams["axes.unicode_minus"] = False
    plt.rcParams.update({"font.size":15})
    plt.style.use("seaborn-darkgrid")
    
    warnings.filterwarnings("ignore")
    os.chdir(r"F:\DataSets\user_behavior_data_on_taobao_app")
    
    # 数据读入
    dt = pd.read_csv("./tianchi_mobile_recommend_train_user.csv", dtype=str)
    # 查看数据情况
    dt.shape
    (12256906, 6)
    
    dt.columns
    Index(['user_id', 'item_id', 'behavior_type', 'user_geohash', 'item_category',
           'time'],
          dtype='object')
    
    dt.sample(5)
    user_iditem_idbehavior_typeuser_geohashitem_categorytime
    165895058382871166449719q9mas6137132014-12-06 15
    12147758270686562154335521NaN46252014-11-25 00
    5986570220606102396559401NaN7692014-12-08 11
    50042601279092051424803961NaN61302014-12-15 22
    7838152373577772537378131NaN30352014-12-04 19

    5、数据清洗

    5.1 缺失值处理

    5.1.1 统计缺失值

    统计缺失率

    # 统计缺失率
    dt.apply(lambda x: sum(x.isnull()) / len(x), axis=0)
    user_id          0.00000
    item_id          0.00000
    behavior_type    0.00000
    user_geohash     0.68001
    item_category    0.00000
    time             0.00000
    dtype: float64
    
    dt.user_geohash.isnull().sum()
    8334824
    

    从统计结果得知,存在缺失值的字段为user_geohash,缺失率为0.68001,共缺失8334824条,暂不做处理

    5.2 日期时间数据处理

    从抽样的5份数据看出,time字段包含日期及小时,这儿对日期与小时作拆分

    # 拆分time
    dt["date"] = dt["time"].str[0:10].str.strip()
    dt["hour"] = dt["time"].str[11:].str.strip()
    dt.sample()
    user_iditem_idbehavior_typeuser_geohashitem_categorytimedatehour
    8914805890963956156672195qoom0121892014-12-11 142014-12-1114

    5.3 更改数据类型

    # 查看数据类型
    dt.info()
    # dt.dtypes
    <class 'pandas.core.frame.DataFrame'>
    RangeIndex: 12256906 entries, 0 to 12256905
    Data columns (total 8 columns):
    user_id          object
    item_id          object
    behavior_type    object
    user_geohash     object
    item_category    object
    time             object
    date             object
    hour             object
    dtypes: object(8)
    memory usage: 748.1+ MB
    

    更改time、date为日期型数据,hour为int型数据

    # 更改time、date为日期型数据,hour为int型数据
    dt["date"] = pd.to_datetime(dt["date"])
    dt["time"] = pd.to_datetime(dt["time"])
    dt["hour"] = dt["hour"].astype("int")
    dt.info()
    <class 'pandas.core.frame.DataFrame'>
    RangeIndex: 12256906 entries, 0 to 12256905
    Data columns (total 8 columns):
    user_id          object
    item_id          object
    behavior_type    object
    user_geohash     object
    item_category    object
    time             datetime64[ns]
    date             datetime64[ns]
    hour             int32
    dtypes: datetime64[ns](2), int32(1), object(5)
    memory usage: 701.3+ MB
    

    5.4 异常值处理

    dt.sort_values(by="time", ascending=True, inplace=True)
    dt.reset_index(drop=True, inplace=True)
    dt.describe(include="all")
    user_iditem_idbehavior_typeuser_geohashitem_categorytimedatehour
    count12256906122569061225690639220821225690612256906122569061.225691e+07
    unique1000028769474575458891674431NaN
    top36233277112921337194ek6ke18632014-12-11 22:00:002014-12-12 00:00:00NaN
    freq31030144511550581105239324754797691712NaN
    firstNaNNaNNaNNaNNaN2014-11-18 00:00:002014-11-18 00:00:00NaN
    lastNaNNaNNaNNaNNaN2014-12-18 23:00:002014-12-18 00:00:00NaN
    meanNaNNaNNaNNaNNaNNaNNaN1.481799e+01
    stdNaNNaNNaNNaNNaNNaNNaN6.474778e+00
    minNaNNaNNaNNaNNaNNaNNaN0.000000e+00
    25%NaNNaNNaNNaNNaNNaNNaN1.000000e+01
    50%NaNNaNNaNNaNNaNNaNNaN1.600000e+01
    75%NaNNaNNaNNaNNaNNaNNaN2.000000e+01
    maxNaNNaNNaNNaNNaNNaNNaN2.300000e+01

    观察知并无异常数据

    6、数据分析

    6.1 总量

    # 用户总量
    totle_num = dt["user_id"].drop_duplicates().count()
    totle_num
    10000
    

    6.2 pv、uv分析

    • pv(访问量):PageView
    • uv(访客量):UniqueVisitor

    6.2.1 日访问分析

    日pv : 记录每天用户访问次数

    # 日pv : 记录每天用户访问次数
    pv_d = dt.groupby("date").count()["user_id"]
    pv_d.name="pv_d"
    pv_d
    date
    2014-11-18    366701
    2014-11-19    358823
    2014-11-20    353429
    2014-11-21    333104
    2014-11-22    361355
    2014-11-23    382702
    2014-11-24    378342
    2014-11-25    370239
    2014-11-26    360896
    2014-11-27    371384
    2014-11-28    340638
    2014-11-29    364697
    2014-11-30    401620
    2014-12-01    394611
    ...
    dtype: int64
    
    pv_d.index.name
    'date'
    

    日uv : 记录每日上线的用户数

    # 日uv : 记录每日上线的用户数
    uv_d = dt.groupby('date')["user_id"].apply(
        lambda x: x.drop_duplicates().count())
    uv_d.name = "uv_d"
    uv_d
    date
    2014-11-18    6343
    2014-11-19    6420
    2014-11-20    6333
    2014-11-21    6276
    2014-11-22    6187
    2014-11-23    6373
    2014-11-24    6513
    ...
    2014-12-18    6582
    Name: uv_d, dtype: int64
    

    合并uv_d与pv_d

    # 合并uv_d与pv_d
    pv_uv_d = pd.concat([pv_d, uv_d], axis=1)
    pv_uv_d.head()
    pv_duv_d
    date
    2014-11-183667016343
    2014-11-193588236420
    2014-11-203534296333
    2014-11-213331046276
    2014-11-223613556187
    # 查看pv_d与uv_d间的相关系数
    method = ["pearson", "spearman"]
    for i in method:
        corr = pv_uv_d.corr(method=i)
        print(f"{i}相关系数:{corr.iloc[0,1]:.3f}")
    pearson相关系数:0.921
    spearman相关系数:0.825
    

    访问量与访问用户间的pearson相关系数为0.921、spearman相关系数为0.825,表现为强相关性

    plt.rcParams["font.family"] = "SimHei"
    plt.figure(figsize=(16, 9))
    plt.subplot(211)
    plt.plot(pv_d,c="m",label="pv")
    plt.legend()
    plt.subplot(212)
    plt.plot(uv_d, c="c",label="uv")
    plt.legend()
    plt.suptitle("PV与UV变化趋势", size=25)
    
    plt.show()

    在这里插入图片描述

    通过图形我们很容易发现双十二期间,pv与uv同时到达峰值

    6.2.2 小时访问分析

    # pv_h 记录每天中各小时访问次数
    pv_h = dt.groupby(["date","hour"]).count()["user_id"]
    pv_h.name = "pv_h"
    pv_h.head()
    date        hour
    2014-11-18  0       13719
                1        7194
                2        5343
                3        3486
                4        2782
    Name: pv_h, dtype: int64
    

    uv_h 记录每天中各小时访问用户数

    # uv_h 记录每天中各小时访问用户数
    uv_h = dt.groupby(["date", "hour"])["user_id"].apply(lambda x: x.drop_duplicates().count())
    uv_h.name = "uv_h"
    uv_h.sample(5)
    date        hour
    2014-12-06  18      1128
    2014-12-17  21      1643
    2014-12-12  13      1832
    2014-12-05  2        144
    2014-12-03  21      1668
    Name: uv_h, dtype: int64
    

    合并uv_h与pv_h

    # 合并uv_h与pv_h
    pv_uv_h = pd.concat([pv_h, uv_h], axis=1)
    pv_uv_h.sample(5)
    pv_huv_h
    datehour
    2014-12-1321357471687
    2014-12-1622367461571
    2014-12-0920329121577
    2014-11-2720261781397
    2014-12-1417173071145
    pd.MultiIndex.to_frame(pv_h.index)
    # 查看pv_h与uv_h间的相关系数
    method = ["pearson", "spearman"]
    for i in method:
        corr = pv_uv_h.corr(method=i)
        print(f"{i}相关系数:{corr.iloc[0,1]:.3f}")
    pearson相关系数:0.929
    spearman相关系数:0.943
    

    访问量与访问用户间的pearson相关系数为0.929、spearman相关系数为0.943,表现出极强的相关性

    对某天不同时间的pv,uv变化趋势进行可视化

    # 对某天不同时间的pv,uv变化趋势进行可视化
    # 以2014-12-12为例
    plt.figure(figsize=(16, 9))
    plt.subplot(211)
    plt.plot(pv_h.loc["2014-12-09"].values.tolist(), lw=3, label="每小时访问量")
    plt.xticks(range(0, 24))
    plt.legend(loc=2)
    plt.subplot(212)
    plt.plot(uv_h.loc["2014-12-09"].values.tolist(), c="c", lw=3, label="每小时访问客户数")
    plt.suptitle("PV与UV变化趋势", size=22)
    plt.xticks(range(0, 24))
    plt.legend(loc=2)
    plt.show()

    在这里插入图片描述

    PV与UV呈相同的变化趋势,0-5点呈下降趋势,5-10逐渐增长,21时附近达到峰值,18点-0点为淘宝app用户活跃时间段

    6.3 不同行为类型用户PV分析

    计算不同行为的用户,在每小时的访问量

    # 计算不同行为的用户,在每小时的访问量
    d_pv_h = pd.pivot_table(columns="behavior_type",
                            index=["hour"],
                            data=dt,
                            values="user_id",
                            aggfunc=np.size)
    d_pv_h.sample(10)
    behavior_type1234
    hour
    1556223812010172897312
    1252991627667121703
    8374701784999703586
    1356151311694174197717
    1455824611695170677207
    048734111062141564845
    174763699754145155298
    1051596011185162037317
    213913933113834806
    945678110507129565707
    d_pv_h.rename(columns={"1": "点击", "2": "收藏", "3": "加购物车", "4": "支付"})
    behavior_type点击收藏加购物车支付
    hour
    048734111062141564845
    1252991627667121703
    213913933113834806
    39325022822480504
    47583220102248397
    58354520622213476
    6150356365137681023
    7272470588570441938
    8374701784999703586
    945678110507129565707
    1051596011185162037317
    1149367910918152577086
    125000369940150256956
    1356151311694174197717
    1455824611695170677207
    1556223812010172897312
    1654184611127163046930
    174763699754145155298
    1851707810342148235140
    1969603513952188536352
    2088566916599250217872
    21103048320397304698829
    22102726920343325048845
    2379775417705274346359
    plt.figure(figsize=(10, 4))
    sns.lineplot(data=d_pv_h, lw=3)
    plt.show()

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qQCTXUZv-1587527913387)(output_71_0.png)]

    plt.figure(figsize=(10, 4))
    sns.lineplot(data=d_pv_h.iloc[:, 1:], lw=3)
    plt.show()

    站可能有防盗链机制,建议将图片保存下来直接上传(img-t7kuQwSZ-1587527913389)(output_72_0.png)]

    用户行为类别1,2,3,4分别表示点击、收藏、加购物车、支付

    我们可以发现四种用户行为的波动情况基本一致,加购物车的数量高于收藏数

    计算各类行为间的流失率

    # 计算各类行为间的流失率
    d_pv_h["1-2流失率"] = (d_pv_h.iloc[:, 0] - d_pv_h.iloc[:, 1]) / d_pv_h.iloc[:, 0]
    d_pv_h["1-3流失率"] = (d_pv_h.iloc[:, 0] - d_pv_h.iloc[:, 2]) / d_pv_h.iloc[:, 0]
    d_pv_h["2-4流失率"] = (d_pv_h.iloc[:, 1] - d_pv_h.iloc[:, 3]) / d_pv_h.iloc[:, 1]
    d_pv_h["3-4流失率"] = (d_pv_h.iloc[:, 2] - d_pv_h.iloc[:, 3]) / d_pv_h.iloc[:, 2]
    d_pv_h
    behavior_type12341-2流失率1-3流失率2-4流失率3-4流失率
    hour
    0487341110621415648450.9773010.9709530.5620140.657742
    12529916276671217030.9751930.9734690.7286490.746275
    2139139331138348060.9762040.9724450.7565690.789776
    393250228224805040.9755280.9734050.7791410.796774
    475832201022483970.9734940.9703560.8024880.823399
    583545206222134760.9753190.9735110.7691560.784907
    61503563651376810230.9757180.9749390.7198030.728503
    72724705885704419380.9784010.9741480.6706880.724872
    83747017849997035860.9790530.9733920.5431270.640321
    9456781105071295657070.9769980.9716360.4568380.559509
    10515960111851620373170.9783220.9685960.3458200.548417
    11493679109181525770860.9778840.9690950.3509800.535557
    1250003699401502569560.9801210.9699520.3002010.537038
    13561513116941741977170.9791740.9689780.3400890.556978
    14558246116951706772070.9790500.9694270.3837540.577723
    15562238120101728973120.9786390.9692500.3911740.577072
    16541846111271630469300.9794650.9699100.3771910.574951
    1747636997541451552980.9795240.9695300.4568380.634998
    18517078103421482351400.9799990.9713330.5029970.653242
    19696035139521885363520.9799550.9729140.5447250.663077
    20885669165992502178720.9812580.9717490.5257550.685384
    211030483203973046988290.9802060.9704320.5671420.710230
    221027269203433250488450.9801970.9683590.5652070.727880
    23797754177052743463590.9778060.9656110.6408360.768207

    获取有支付行为的客户信息

    # 获取有支付行为的客户信息
    plt.figure(figsize=(10, 8))
    plt.subplot(211)
    sns.lineplot(data=d_pv_h.iloc[:, 4:6], lw=3)
    plt.subplot(212)
    sns.lineplot(data=d_pv_h.iloc[:, 6:], lw=3)
    plt.show()

    在这里插入图片描述

    我们能够看到在点击到加购物车和点击到收藏行为间的流失率基本稳定在97.7%左右;在10-15日期间从收藏到支付与从加购物车到支付的流失率较低。

    刚开始接触到这类指标,可能得不到多少有效的结论。但不用担心,数据收集和分析持续一段时间后,数据会稳定,你也会适应应用特有的数据分布模式。若是没有这个积累过程,就算面对一个用户严重流失的层次,你也可能完全说不出个所以然。

    在获得基线之后,我们可以将数据与基线比较,衡量改动。改进之后,重新收集相关数据。为积累足够访问量,收集过程需要相当时间。获得的数据能清楚地表明改动的效果:若改动后,用户流失比原来小了,那就说明改动成功。相反则需重新考虑设计。

    6.3 消费行为分析

    6.3.1 购买频次分析

    获取有支付行为的客户信息

    dt_buy = dt[dt.behavior_type=="4"]
    dt_buy.sample(5)
    user_iditem_idbehavior_typeuser_geohashitem_categorytimedatehour
    2495275101601722340474144NaN36282014-11-24 22:00:002014-11-2422
    44988181214566862639674084NaN98852014-11-30 14:00:002014-11-3014
    67558011449712195179994NaN56992014-11-19 22:00:002014-11-1922
    100870481377605551524600644NaN25132014-12-13 15:00:002014-12-1315
    1640944132039263282415794NaN114062014-11-22 19:00:002014-11-2219

    获取客户消费次数

    # 获取客户消费次数
    buy_c = dt_buy.groupby("user_id").size()
    buy_c.sample(10)
    user_id
    20487789     12
    3791755       1
    62871223      1
    61779777      2
    50698254      9
    134118557     6
    110374516    10
    94335711      2
    1344672       1
    48304965      2
    dtype: int64
    
    buy_c.describe()
    count    8886.000000
    mean       13.527459
    std        19.698786
    min         1.000000
    25%         4.000000
    50%         8.000000
    75%        17.000000
    max       809.000000
    dtype: float64
    

    从以上统计可以看出,用户平均购买次数为13.5次,标准差19.6,具有一定波动性。中位数是8次,75分位数是17次,说明用户购买次数大部分都在20次以下。而最大值是809次,这差别有点大。

    • 一般情况,消费类型的数据分布,大部分呈现的是长尾形态;绝大多数用户是低频次消费客群,但用户贡献率集中在少数分群里,符合二八法则。
    plt.hist(x=buy_c,bins=100)
    plt.show()

    在这里插入图片描述

    plt.hist(x=buy_c[buy_c.values<=30],bins=10)
    (array([2047., 1552., 1248.,  937.,  666.,  491.,  368.,  301.,  222.,
             172.]),
     array([ 1. ,  3.9,  6.8,  9.7, 12.6, 15.5, 18.4, 21.3, 24.2, 27.1, 30. ]),
     <a list of 10 Patch objects>)
    

    在这里插入图片描述

    6.3.2 日ARPPU分析

    ARPPU(average revenue per paying user)是指从每位付费用户身上获得的收入,即统计周期内,付费用户对产品产生的平均收入

    ARPPU = 总收入 / 付费用户数

    因数据集中没有消费金额信息,本次采用消费次数代替消费金额

    人均消费次数 = 消费总次数 / 消费总人次数

    # 人均消费次数 = 消费总次数 / 消费总人次数
    dt_arppu = dt[dt.behavior_type == "4"].groupby(
        ["date", "user_id"])["behavior_type"].count().reset_index().rename(
            columns={"behavior_type": "buy_count"})
    dt_arppu.sample(10)
    dateuser_idbuy_count
    231762014-12-0331419333
    206722014-12-01927805651
    7262014-11-18316638901
    98912014-11-24708915891
    101182014-11-24892610711
    466712014-12-17229813521
    205872014-12-01863235711
    250532014-12-04542147991
    157542014-11-28611140291
    186322014-11-30617544471
    dt_arppu.describe()
    buy_count
    count49201.000000
    mean2.443141
    std3.307288
    min1.000000
    25%1.000000
    50%1.000000
    75%3.000000
    max185.000000

    计算ARPPU

    # ARPPU = 每日消费总次数除以消费总人数
    ARPPU = pd.DataFrame(
        dt_arppu.groupby("date").sum()["buy_count"] /
        dt_arppu.groupby("date").count()["buy_count"]).rename(
            columns={"buy_count": "ARPPU"})
    ARPPU.describe()
    ARPPU
    count31.000000
    mean2.368446
    std0.296108
    min2.204384
    25%2.262436
    50%2.313460
    75%2.358159
    max3.913523
    ARPPU.plot()
    <matplotlib.axes._subplots.AxesSubplot at 0x1faa0a64518>
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RSZKIDMQ-1587527913395)(output_102_1.png)]

    绝大部分消费客户每天消费次数在3次以内,双十二期间达到峰值

    6.3.3 日ARPU情况分析

    ARPU值 (每用户平均收入,Average Revenue Per User) 就是指每用户平均收入。ARPU注重的是一个时间段内运营商从每个用户所得到的利润。很明显,高端的用户越多,ARPU越高。在这个时间段,从运营商的运营情况来看,ARPU值高说明利润高,这段时间效益好。它可以衡量产品的盈利和发展活力。

    ARPU = 消费总收入 / 用户数

    因数据集中没有消费金额信息,本次采用消费次数代替消费金额

    # 新增一列以便记录各行为次数
    dt["behavior_count"] = 1
    dt.sample(3)
    user_iditem_idbehavior_typeuser_geohashitem_categorytimedatehourbehavior_count
    10017159117929882313405220195rilhv103922014-12-13 11:00:002014-12-13111
    7263735111073682267278901NaN130412014-12-07 13:00:002014-12-07131
    4786992677598701797970041NaN129822014-12-01 07:00:002014-12-0171
    dt_arpu = dt.groupby(["date", "user_id", "behavior_type"
                          ])["behavior_count"].count().reset_index()
    dt_arpu.sample(10)
    dateuser_idbehavior_typebehavior_count
    3645142014-12-181100584961161
    3003292014-12-12876585011212
    3131302014-12-138599428721
    2938022014-12-1238915660187
    2245802014-12-0712396395933
    2181212014-12-0655305887151
    1976412014-12-049041408424
    445112014-11-218500412642
    3476882014-12-166106800832
    1744982014-12-031074710391143
    ARPU = dt_arpu.groupby("date").apply(
        lambda x: x[x.behavior_type == "4"].sum()/len(x.user_id.unique()))
    ARPU
    behavior_count
    date
    2014-11-180.588050
    2014-11-190.574143
    2014-11-200.546660
    2014-11-210.481358
    2014-11-220.577016
    2014-11-230.525184
    2014-11-240.526025
    2014-11-250.545426
    2014-11-260.562058
    2014-11-270.577135
    2014-11-280.519955
    2014-11-290.515906
    2014-11-300.566860
    2014-12-010.597341
    2014-12-020.552824
    2014-12-030.589977
    2014-12-040.565151
    2014-12-050.521282
    2014-12-060.508075
    2014-12-070.507007
    2014-12-080.520871
    2014-12-090.525282
    2014-12-100.483464
    2014-12-110.467943
    2014-12-121.975518
    2014-12-130.513282
    2014-12-140.522346
    2014-12-150.554590
    2014-12-160.560410
    2014-12-170.544182
    2014-12-180.544819
    ARPU.describe()
    behavior_count
    count31.000000
    mean0.585811
    std0.259981
    min0.467943
    25%0.520413
    50%0.544819
    75%0.566005
    max1.975518
    ARPU.plot()
    <matplotlib.axes._subplots.AxesSubplot at 0x1fa9ea20da0>
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8iq5pYOW-1587527913397)(output_113_1.png)]

    淘宝app活跃用户(有过操作行为的用户)在2014-11-18至2014-12-18这31天内,每天消费次数在0.5次上下波动,而在双十二期间到达峰值1,976,即平均每人双十二消费2次

    6.3.4 付费率

    付费率 = 消费人数 / 总用户数

    从此份数据中我们不嫩得到淘宝总用户数,故使用活跃用户总数代替总用户数

    # 从此份数据中我们不嫩得到淘宝总用户数,故使用活跃用户总数代替总用户数
    rate_pay = dt_arpu.groupby("date").apply(lambda x: x[
        x.behavior_type == "4"].count() / len(x.user_id.unique())).iloc[:, 1]
    rate_pay.plot()
    <matplotlib.axes._subplots.AxesSubplot at 0x1fa9f2a90b8>
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CUcfoqLa-1587527913398)(output_119_1.png)]

    rate_pay.describe()
    count    31.000000
    mean      0.241566
    std       0.050087
    min       0.210183
    25%       0.225660
    50%       0.235358
    75%       0.240304
    max       0.504793
    Name: user_id, dtype: float64
    

    在每天活跃用户群中,具有消费行为的占24%左右,双十二到达50%

    6.3.5 同一时间段用户消费次数分布

    pay_f = dt[dt.behavior_type=="4"].groupby(["user_id","date","hour"])["behavior_count"].sum()
    sns.distplot(pay_f)
    <matplotlib.axes._subplots.AxesSubplot at 0x1fa9d526588>
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sDi8sY72-1587527913399)(output_124_1.png)]

    pay_f.describe()
    count    65223.000000
    mean         1.842985
    std          2.295531
    min          1.000000
    25%          1.000000
    50%          1.000000
    75%          2.000000
    max         97.000000
    Name: behavior_count, dtype: float64
    
    pay_f.mode()
    0    1
    dtype: int64
    

    在同一小时段中,用户消费次数最多的为一次,75分位数为2次

    6.3.6 复购情况分析

    复购情况:存在两天及以上有购买行为,一天多次购买算作一次

    复购率 = 又复购行为的用户数 / 有购买行为的用户数

    6.3.6.1 复购率

    每个用户在不同日期购买总次数

    # 每个用户在不同日期购买总次数
    dt_rebuy = dt[dt.behavior_type == "4"].groupby('user_id')["date"].apply(
        lambda x: len(x.unique())).rename("rebuy_count")
    dt_rebuy.sample(5)
    user_id
    107209058    22
    112806422     5
    61966309     18
    13103318     13
    95839581      7
    Name: rebuy_count, dtype: int64
    
    print("复购率为:%.3f"%(dt_rebuy[dt_rebuy>=2].count()/dt_rebuy.count()))
    复购率为:0.872
    
    6.3.6.2 复购时间分析

    计算不同时间,不同用户的购买次数

    # 计算不同时间(天),不同用户的购买次数
    dt_buy_d = dt[dt.behavior_type == "4"].groupby(
        ["user_id", "date"])["behavior_count"].count().reset_index()
    dt_buy_d.sample(10)
    user_iddatebehavior_count
    39965763147852014-11-201
    20195233769072014-11-201
    125781317018132014-12-151
    128401322314472014-12-152
    86931217562452014-12-051
    46422931274872014-11-192
    32495565924372014-11-191
    59231149714082014-11-282
    45646910870672014-12-171
    27333422085242014-12-131

    不同用户购物时间间隔

    # 不同用户购物时间间隔
    dt_buy_d["d_diff"] = dt_buy_d.groupby("user_id").date.apply(
        lambda x: x.sort_values().diff(1)).map(lambda x:x.days)
    dt_buy_d.describe()
    behavior_countd_diff
    count49201.00000040315.000000
    mean2.4431413.732333
    std3.3072883.858599
    min1.0000001.000000
    25%1.0000001.000000
    50%1.0000002.000000
    75%3.0000005.000000
    max185.00000030.000000
    # 绘图
    dt_buy_d.iloc[:,-1].dropna().value_counts().plot(kind="bar")
    plt.xlabel("day_diff")
    plt.ylabel("count")
    Text(0, 0.5, 'count')
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-n2IyKSAj-1587527913400)(output_141_1.png)]

    不同用户平均复购时间

    # 不同用户平均复购时间
    sns.distplot(dt_buy_d.groupby("user_id").d_diff.mean().dropna())
    <matplotlib.axes._subplots.AxesSubplot at 0x1fae9d95c88>
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-e3oAdwWO-1587527913401)(output_143_1.png)]

    计算分位数

    dt_buy_d.quantile(np.linspace(0,1,11)).iloc[:,1]
    0.0     1.0
    0.1     1.0
    0.2     1.0
    0.3     1.0
    0.4     2.0
    0.5     2.0
    0.6     3.0
    0.7     4.0
    0.8     6.0
    0.9     9.0
    1.0    30.0
    Name: d_diff, dtype: float64
    

    80%的淘宝用户复购复购时间在6天以内

    6.4 漏斗流失分析

    dt_c = dt.groupby("behavior_type").size()
    dt_c
    behavior_type
    1    11550581
    2      242556
    3      343564
    4      120205
    dtype: int64
    
    print("从点击到收藏流失率为%.3f" % ((dt_c[0] - dt_c[1]) * 100 / dt_c[0]))
    从点击到收藏流失率为97.900
    
    print("从点击到加购物车流失率为%.3f" % ((dt_c[0] - dt_c[2]) * 100 / dt_c[0]))
    从点击到加购物车流失率为97.026
    
    print("从加购物车到支付流失率为%.3f" % ((dt_c[2] - dt_c[3]) * 100 / dt_c[2]))
    从加购物车到支付流失率为65.012
    
    print("从加收藏到支付流失率为%.3f" % ((dt_c[1] - dt_c[3]) * 100 / dt_c[2]))
    从加收藏到支付流失率为35.612
    

    6.5 用户价值RFM模型分析

    因数据集中无消费金额相关信息,因此此处仅对R、F两方面进行用户价值分析

    每位用户最近的购买时间

    # 参考时间
    from datetime import datetime
    datenow = datetime(2014, 12, 19)
    # 每位用户最近的购买时间
    recently_pay_time =  dt[dt.behavior_type == "4"].groupby("user_id").date.apply(
        lambda x: datenow - x.sort_values().iloc[-1])
    recently_pay_time = recently_pay_time.rename("recent")
    recently_pay_time = recently_pay_time.reset_index()
    recently_pay_time.recent = recently_pay_time.recent.map(lambda x: x.days)
    recently_pay_time.head(5)
    user_idrecent
    01000018781
    11000115623
    21000129681
    31000140601
    41000245293

    每位用户消费频率

    # 每位用户消费频率
    buy_freq = dt[dt.behavior_type == "4"].groupby("user_id").date.count().rename(
        "freq").reset_index()
    buy_freq.head()
    user_idfreq
    010000187836
    11000115623
    210001296815
    310001406024
    410002452926

    因为只有31天的数据,所以这儿只基于等频分段,简单的将R、F分为两个等级

    # 因为只有31天的数据,所以这儿只基于等频分段,简单的将R、F分为两个等级(分数越高越好)
    RFM = pd.merge(recently_pay_time,buy_freq,on="user_id",how="outer")
    RFM["R_value"] = pd.qcut(RFM["recent"],2,labels=["2","1"])
    RFM["F_value"] = pd.qcut(RFM["freq"],2,labels=["1","2"])
    RFM["RFM"] = RFM["R_value"].str.cat(RFM["F_value"])
    RFM.head()
    user_idrecentfreqR_valueF_valueRFM
    01000018781362222
    1100011562332121
    21000129681152222
    31000140601242222
    41000245293262222

    通过RFM对用户进行分组后,可对不同组别的客户拟制实施不同的营销方式

    7、总结

    7.1 pv、uv分析得知:

    7.1.1 日访问

    • 访问量与访问用户间,表现为强相关性
    • 双十二期间,pv与uv同时到达峰值

    7.1.2 小时访问

    • PV与UV呈相同的变化趋势,0-5点呈下降趋势,5-10逐渐增长,21时附近达到峰值,18点-0点为淘宝app用户活跃时间段

    7.1.3 不同行为类型用户PV分析

    我们能够看到在点击到加购物车和点击到收藏行为间的流失率基本稳定在97.7%左右;在10-15日期间从收藏到支付与从加购物车到支付的流失率较低。

    7.2 消费行为分析

    • 用户平均购买次数为13.5次,标准差19.6,具有一定波动性。中位数是8次,75分位数是17次,说明用户购买次数大部分都在20次以下。而最大值是809次,这差别有点大。
    • 一般情况,消费类型的数据分布,大部分呈现的是长尾形态;绝大多数用户是低频次消费客群,但用户贡献率集中在少数分群里,符合二八法则。

    7.2.1 ARPPU分析:

    • 绝大部分消费客户每天消费次数在3次以内,双十二期间达到峰值

    7.2.2 日ARPU情况分析

    • 淘宝app活跃用户(有过操作行为的用户)在2014-11-18至2014-12-18这31天内,每天消费次数在0.5次上下波动,而在双十二期间到达峰值1,976,即平均每人双十二消费2次

    7.3 付费情况

    • 在每天活跃用户群中,具有消费行为的占24%左右,双十二到达50%
    • 在同一小时段中,用户消费次数最多的为一次,75分位数为2次

    7.4 复购情况

    • 80%的淘宝用户复购复购时间在6天以内
    • 复购率为:0.872

    7.5 漏斗流失分析

    • 从点击到收藏流失率为97.900
    • 从点击到加购物车流失率为97.026
    • 从加购物车到支付流失率为65.012
    • 从加收藏到支付流失率为35.612

    7.6 RFM

    • 我们通过RFM将用户分为了多组,可对不同组别的客户拟制实施不同的营销方式

    以上是我对这份数据进行的一次探索分析,相信其中会有很多不足之处,欢迎有缘读到此篇文章的小朋友们批评指正

    如有能启发或帮助到你的地方,我将倍感荣幸。(●’◡’●)

    展开全文
  • 搭建用户行为分析系统(一)——概述 随着互利网时代多元化商业模式和细分市场的快速发展,众多行业面临着高昂的获客成本和高流失率的双重挑战,如何精准定位获客渠道?如何精细化运管,挖掘更大的用户价值?如何洞察...

    搭建用户行为分析系统(一)——概述

    随着互利网时代多元化商业模式和细分市场的快速发展,众多行业面临着高昂的获客成本和高流失率的双重挑战,如何精准定位获客渠道?如何精细化运管,挖掘更大的用户价值?如何洞察客户流失的真实原因?如何减少用户流失?如何通过数据洞察实现业务增长?如何有效了解你的用户?

    用户行为分析是什么(What)?

    用户行为分析,是指在获得网站或APP等平台访问量基本数据的情况下,对有关数据进行统计、分析,从中发现用户访问网站或APP等平台的规律,并将这些规律与网络营销策略等相结合,从而发现目前网络营销活动中可能存在的问题,并为进一步修正或重新制定网络营销策略提供依据。

    为什么要做用户行为分析(Why)?

    通过对用户行为监测获得的数据进行分析,可以让企业更加详细、清楚地了解用户的行为习惯,从而找出网站、推广渠道等企业营销环境存在的问题,有助于企业发掘高转化率页面,让企业的营销更加精准、有效,提高业务转化率,从而提升企业的广告收益。

    谢荣生,数极客 创始人:
    在PC互联网时代,网民的年增长率达到50%,随便建个网站就能得到大量流量; 在移动互联网早期,APP也经历了一波流量红利,获取一个客户的成本不到 1 元; 而近几年随着流量增长的红利消退,竞争越来越激烈,每个领域均有成百上千的同行竞争,获客成本也飙升到难以承受的水平,业务增长越来越慢甚至倒退。在如此高成本、高竞争的环境下,如果企业内部不能利用数据分析做好精细化运营,将产生巨大的资源浪费,势必会让企业的运营成本高涨,缺乏竞争力。 对于互联网平台来说,传统的数据分析主要针对结果类的数据进行分析,而缺乏对产生结果的用户行为过程的分析,因此数据分析的价值相对较局限,这也是为什么近几年很多企业感觉做了充分的数据分析,但却没有太大效果的原因。通过对用户行为的5W2H进行分析可以掌握用户从哪里来,进行了哪些操作,为什么流失,从哪里流失等等。从而提升提升用户体验,平台的转化率,用精细化运营使企业获得业务增长。

    《追本溯源·开启产品智能时代》
    在大数据时代下,行业领军者们正在尝试并努力探索数据对业务所带来的前所未有的潜力和重要意义,并逐步构建以用户为中心的产品管理体系。该场景下,产品经理需要充分运用数据驱动的理念和数据分析方法,深入洞察并全面了解用户行为,优化产品设计与运营,从而实现快速响应用户实际需求的敏捷产品迭代、不断改进产品功能、提供最佳用户体验、并辅助业务决策。

    总的来说:

    • 监控网站运营状态
    • 提升网站推广效果
    • 优化网站结构和体验

    怎么做用户行为分析(How)?

    这里是针对分析工具来说

    • 内外因素分析:
      该方法有助于快速定位问题。例如一款金融类产品UV下降,快速分析相关原因。内部可控因素:渠道变化、近期上线更新版本、内部不可控因素:公司战略变更、外部可控因素:淡旺季、外部不可控因素:监管。

    • 事件分析:
      事件维度:用户在产品中的行为以及业务过程。指标:具体的数值,访客、地址、浏览量(PV、UV)、停留时长。趋势分析:分析各个事件的趋势。通过事件分析,比如分析用户的在线时长、点击事件、下载事件等等,然后分析用户的行为。并且通过各类图标来分析用户的行为趋势,从而对用户的行为有初步的了解。

    • 试点分析:
      说白了就是,当发现一个问题之后,不要那么着急去解决,而是只想一个解决办法,然后灰度发布,如果灰度发布的人群数据比较好,那么就推往整个用户群。这是一种从一个具体问题拆分到整体影响,从单一解决方案找到一个规模化解决方案的方式。

    • 漏斗分析:
      漏斗模型是最常用的分析方法,可以广泛应用于流量监控、产品目标转化等日常数据运营工作中。要根据实际需要来确定是否有做漏斗分析的必要,比如用户注册过程、下单过程这些主要流程,就需要用漏斗模型来进行分析,尤其是需要分析用户在哪个环节流失最严重。

    • 留存分析:
      通过留存分析,分析用户的次日留存、次周留存、次月留存等等,次日留存率能够说明用户对这款产品是否有持续使用的兴趣,对于社交、游戏类产品来说,次日留存率非常重要。

    • 行为轨迹分析:
      只通过PV、UV 分析以及退出率分析是无法找到大部分用户是怎么去使用这款产品的。只有通过记录用户的行为轨迹,才能够关注用户真正如何去使用这款产品的。用户体验设计是对用户行为的设计,通过行为轨迹分析,能够帮助产品经理设计出来的产品直达用户内心。

    • A/B test:
      A/B test是一种产品优化方法,AB测试本质上是个分离式组间实验,将A与B两个不同的版本同时发往两个几乎一致的用户群,来观测这两个用户群的数据反馈。A/B test是一种“先验”的实验体系,属于预测型结论,与“后验”的归纳性结论差别巨大。A/B测试的目的在于通过科学的实验设计、采样样本代表性、流量分割与小流量测试等方式来获得具有代表性的实验结论,并确信该结论在推广到全部流量可信。

    • 点击分析:
      通过点击分析,能够直观地看出来在这个页面中,用户的注意力都集中在哪些地方,用户最常用的功能是什么。方便产品经理对用户行为形成整体的了解,有助于产品经理引导用户往自己想要的方向去操作。

    以上内容几乎来源于网络,不喜勿喷
    从网上copy这么多下来,主要是为了让大家对行为分析有个了解,知道是个什么东西。

    我后续文章内容主要针对这张图,来一步一步搭建一套简单的行为分析系统。

    这个才是这个专栏的重点部分!
    在这里插入图片描述

    展开全文
  • 数据分析之实战项目——电商用户行为分析

    万次阅读 多人点赞 2020-06-07 17:40:09
    电商用户行为分析 分析背景和目的 随着互联网和电商的发展,人们习惯于网上购物。在国内,电商平台深受欢迎,每年的双11,双12活动,大量的用户在淘宝平台浏览商品,或收藏或加入购物车或直接购买。通过对用户的行为...

    阅读之前看这里👉:博主是正在学习数据分析的一员,博客记录的是在学习过程中一些总结,也希望和大家一起进步,在记录之时,未免存在很多疏漏和不全,如有问题,还请私聊博主指正。
    博客地址:天阑之蓝的博客,学习过程中不免有困难和迷茫,希望大家都能在这学习的过程中肯定自己,超越自己,最终创造自己。

    一、分析背景和目的

    随着互联网和电商的发展,人们习惯于网上购物。在国内,电商平台深受欢迎,每年的双11,双12活动,大量的用户在淘宝平台浏览商品,或收藏或加入购物车或直接购买。通过对用户的行为分析,探索用户购买的规律,了解商品的受欢迎程度,结合店铺的营销策略,实现更加精细和精准的运营,让业务获得更好的增长。

    本数据来源:阿里天池数据集
    数据集介绍
    本数据集包含了2017年11月25日至2017年12月3日之间,有行为的约一百万随机用户的所有行为(行为包含点击、购买、加购、喜欢),每一行表示一条用户行为,由用户ID、商品ID、商品类目ID、行为类型和时间戳组成,并以逗号分隔。原数据集总共1亿以上数据集,数据量太大,本次分析导入约383万条数据,并在导入的过程中5个字段联合设置主键,导入过程中已经剔除了重复值。

    • 用户ID:整数类型,序列化后的用户ID;
    • 商品ID:整数类型,序列化后的商品ID;
    • 商品类目ID:整数类型,序列化后的商品所属类目ID
    • 行为类型:字符串,包括(“pv”:相当于点击,“buy”:商品购买,“cart”:将商品加入购物车,“fav”:收藏商品)
    • 时间戳:行为发生的时间戳

    工具:Mysql数据库,Navicat Premium 12,Excel

    二、分析框架和思路

    首先明确我们的分析的目的,是要对电商用户行为进行一个分析。那么应该主要从用户维度、产品维度、用户行为的维度,如下图所示:
    在这里插入图片描述

    2.1 用户维度

    在用户维度我们想要知道什么问题呢?了解用户购买的行为习惯
    需要哪些指标呢:
    PV、UV、平均访问量、跳失率等指标,分析用户最活跃的日期及活跃时段

    2.2 产品维度

    从成交量、人均购买次数、复购率等指标,探索用户对商品的购买偏好,了解商品的销售规律

    2.3用户行为维度

    从收藏转化率、购物车转化率、成交转化率,对用户行为从浏览到购买进行漏斗分析

    2.4用户价值维度(RFM)

    参照RFM模型,对用户进行分类,找出有价值的用户

    三、分析正文

    分析步骤如下:
    提出问题------理解数据------数据处理和清洗------构建模型------数据可视化

    3.1 提出问题

    • 用户最活跃的日期及时段
    • 用户对商品有哪些购买偏好
    • 用户行为间的转化情况
    • 用户分类,哪些是有价值的用户

    3.2 理解数据

    • 用户ID:整数类型,序列化后的用户ID;
    • 商品ID:整数类型,序列化后的商品ID;
    • 商品类目ID:整数类型,序列化后的商品所属类目ID
    • 行为类型:字符串,包括(“pv”:相当于点击,“buy”:商品购买,“cart”:将商品加入购物车,“fav”:收藏商品)
    • 时间戳:行为发生的时间戳
      在这里插入图片描述

    3.3数据处理和数据清洗

    3.3.1 列名重命名

    导入至Navicat的过程中将字段名更改为英文,方便编写SQL语言

    字段字段(中文名)
    UserID用户ID
    ItemID商品ID
    Category商品类目ID
    Behavior行为类型(pv,buy,cart,fav)
    time时间戳

    导入数据类型如下:
    在这里插入图片描述
    我们看到time的格式并不是标准的时间格式,所以需要对其进行处理。

    3.3.2 时间格式的处理

    • 原数据时间戳time字段部分使用的是整数型,需要转换为日期时间形式。添加字段datetime(日期时间)、time_date(日期)、time_hour(时间):
    alter table userbehavior add datetime datetime;
    alter table userbehavior add time_date varchar(255);
    alter table userbehavior add time_hour varchar(255);
    
    • 给添加的字段更新数据
    update userbehavior set datetime=from_unixtime(time);
    update userbehavior set time_date=mid(datetime,1,10);
    update userbehavior set time_hour=right(datetime,8);
    

    时间格式处理结果如下:
    在这里插入图片描述

    3.3.3 选择所需数据集

    • 选取时间为2017年11月25日至2017年12月3日的数据集
    delete from userbehavior where time_date < '2017-11-25' or time_date >'2017-12-03';
    
    • 对处理完的数据进行检验
    select max(time_date),min(time_date) from userbehavior;
    

    在这里插入图片描述
    我们可以看到数据范围正确

    • 检查是否有缺失值
    select count(UserID),count(ItemID),count(Category),count(Behavior),
    	   count(datetime),count(time),count(time_date),count(time_hour) 
    	   from userbehavior;
    

    在这里插入图片描述
    可以看到一共有3833385条数据,并且无缺失字段和缺失值。

    3.4 构建模型

    3.4.1用户购物情况整体分析

    • UV、PV和平均访问量
    select count(distinct UserID) "访客数",
    		(select count(*) from userbehavior where Behavior = "pv") "点击数",
    			ROUND((select count(*) from userbehavior where Behavior = "pv")/
    				count(distinct UserID), 2) "人均访问数" from userbehavior;
    

    在这里插入图片描述
    我们可以看到这段时间内的访客数为37376,点击数为3431904,人均访问数为91.82次。可以看出:
    在这9天中人均每天访问约9次,可见用户经常使用。

    • 用户跳出率
      用户跳出率的计算公式为:
      只 访 问 一 次 页 面 数 / 总 用 户 数 只访问一次页面数/总用户数 访/
      所以代码为:
    select 总用户数,只访问一次页面数,concat((只访问一次页面数 * 100) / (总用户数), "%") "跳出率"
    	  from  (select UserID,count(distinct UserID) "只访问一次页面数"  from userbehavior
    		       where UserID not in 
    				   (select distinct UserID from userbehavior where behavior ='fav')
    					 and UserID not in
    				   (select distinct UserID from userbehavior where behavior ='cart')
    					 and UserID not in 
    				   (select distinct UserID from userbehavior where behavior ='buy')) as a
    					 inner join (select UserID, count(distinct UserID) "总用户数" from userbehavior) as b
    					 on a.UserID = b.UserID
    

    在这里插入图片描述
    结果跳出率只有5.8754%,跳出率比较低,说明大部分用户都转到下一个页面了,用户愿意在此上花费时间和精力,去挑选自己的商品,收藏或者加入购物车以及购买。

    3.4.2用户活跃周期

    在这里插入图片描述
    (1)每日用户的点击量,访客数,收藏次数,加入购物车次数,购买次数

    select e.访客数,a.time_date,a.活跃点击量,b.收藏次数,c.加入购物车次数,d.购买次数 from
    		(select time_date, count(behavior) "活跃点击量"
    				from userbehavior
    				where behavior = "pv" group by time_date order by time_date) as a  inner join
    		(select time_date, count(behavior)  "收藏次数"
    				from userbehavior
    				where behavior = "fav" group by time_date order by time_date) as b inner join
    		(select time_date, count(behavior) "加入购物车次数"
    		from userbehavior
    		where behavior = "cart" group by time_date order by time_date) as c inner join
    		(select time_date, count(behavior) "购买次数"
    		from userbehavior
    		where behavior = "buy" group by time_date) as d  join
    		(select time_date,count(distinct UserID) "访客数" from userbehavior
    		group by time_date order by time_date) as e
    		on a.time_date = b.time_date
    		and b.time_date = c.time_date
    		and c.time_date = d.time_date
    		and d.time_date = e.time_date;
    

    此处还可以用case语句
    在这里插入图片描述
    在这里插入图片描述
    从图中可以看出所有的趋势随着日期变化基本一致。其中访客数在11月25日和12月2日有明显增加,同时点击量和其它指标也有所增加,分析知,这两天日期均为周六,说明在周六的用户使用频率和购物频率有所增加,可以针对周末多做一些运营或者商品推送和优化。
    (2)各个时间段内用户的行为

    select mid(time_hour,1,2) "时间",
    		sum(case when Behavior = "pv" then 1 else 0 end) "活跃点击量",
    		count(distinct UserID) "活跃用户数",
    		sum(case when Behavior = "fav" then 1 else 0 end) "收藏次数",
    		sum(case when Behavior = "cart" then 1 else 0 end) "加入购物车次数",
    		sum(case when Behavior = "buy" then 1 else 0 end) "购买次数"
    		from userbehavior group by mid(time_hour,1,2)
    

    在这里插入图片描述
    通过可视化图形观察其趋势和特征:
    在这里插入图片描述
    观察知,活跃点击量和访客数的趋势一致,在17-22时访客达到高峰,说明用户在下午和晚上经常访问APP,然后继续分析这些时间段内的购买情况:
    在这里插入图片描述
    可以观察到18-22时购买情况上升趋势明显,这个阶段人们倾向于做出购物决策,说明人们晚上做出购物决策的情况较多,这个时候人们有充足的时间进行商品挑选和加入购物车,也符合现代人们的生活作息。可以针对这个情况对晚上的商品进行更多的推送和其它运营策略。

    3.4.3用户对商品有哪些购买偏好

    (1)销量前十的商品和种类

    • 分析一下销量最好的商品
    select ItemID "商品编号",category "商品种类",count(behavior) "销量"
    		from userbehavior
    		where behavior = "buy" group by ItemID order by 销量 desc limit 10
    

    在这里插入图片描述
    通过对商品销量的分析,总销量最好的是商品3122135,所属种类为1516409。

    • 再分析一下销量最好的种类:

    在这里插入图片描述
    销量最好的种类编号是1464116,销量为1432。
    得到这些销量数据,我们可以针对性对销量好的商品和种类进行优化推广,权重提高等,当然还要分析销量好的种类是不是日常需求比较大的生活用品如米油等,还需要分析其销售额才能确定,部分商品虽然销量高但是销售额小,要综合判断。

    (2)人均购买次数和复购率分析

    • 人均购买次数
    select count(behavior) as 订单量,
    	   count(distinct UserID) as 用户数,
    	   count(behavior) / count(distinct UserID) as 人均购买次数
    	   from userbehavior
    	   where behavior = "buy"
    

    在这里插入图片描述
    可以看出人们的消费能力还是不错的,商品销售也不错,人均购买次数在3次左右。

    • 复购率
      复购率=购买2次及以上用户数/总购买用户数
    select 用户数,购买两次及以上用户数,concat(购买两次及以上用户数 * 100 / 用户数, "%") as 复购率
    		from(
    			select count(distinct UserID) as 用户数,
    				   (select count(*) as 购买两次及以上用户数 
    						   from (select count(UserID) as 重复购买数
    										from userbehavior 
    										where behavior = "buy"
    										group by UserID		
    										having count(UserID) > 1) as b) as 购买两次及以上用户数
    			from userbehavior
    			where behavior = "buy") as c
    

    在这里插入图片描述
    可以看出复购率较高,说明大多数人在消费以后还愿意继续购买。
    (3)经常消费的重点客户(次数和金额)

    select UserID,count(UserID) as 购买次数
    			from userbehavior
    			where behavior = "buy"
    			group by UserID
    			order by count(UserID) desc
    			limit 10
    

    在这里插入图片描述
    看出购买次数的前十客户,这部分客户需要重点关注,同时还要关注他们的消费金额和消费行为习惯等。

    3.4.4用户行为间的转化情况

    (1)用户行为转化漏洞分析

    select behavior as 用户行为,count(behavior) as 用户行为次数 
    		from userbehavior
    		group by behavior
    		order by count(behavior) desc
    

    在这里插入图片描述
    在这里插入图片描述
    由以上漏斗图分析知:用户从进入APP浏览页面,在购买环节的最终转化率为2%,用户在点击页面后用户流失巨大,从浏览到购买转化率如何。用户购买的路径主要有以下两种:
    在这里插入图片描述

    • 点击-收藏-购买的转化路径分析:
    select count(distinct a.UserID) "点击数",
    	   count(distinct b.UserID) "收藏数",
    	   count(distinct c.UserID) "购买数"
         from 
    	   (select distinct UserID,ItemID,Category,time from userbehavior where Behavior = "pv") as a 
    	   left join
    	   (select distinct UserID,ItemID,Category,time from userbehavior where Behavior = "fav") as b 
    	   on (a.UserID = b.UserID and a.ItemID = b.ItemID and a.Category = b.Category and a.time < b.time)
    	   left join
    	   (select distinct UserID,ItemID,Category,time from userbehavior where Behavior = "buy") as c
    	   on (b.UserID = c.UserID and b.ItemID = c.ItemID and b.Category = c.Category and b.time < c.time)	
    

    在这里插入图片描述
    在这里插入图片描述
    用户在浏览商品后,大约1/5的用户会进行收藏,然后收藏中的用户大约有13.26%的用户会进行购买。

    • 点击-加入购物车-购买的转化路径分析:
    select count(distinct a.UserID) "点击数",
    	   count(distinct b.UserID) "加入购物车数",
    	   count(distinct c.UserID) "购买数"
         from 
    	   (select distinct UserID,ItemID,Category,time from userbehavior where Behavior = "pv") as a 
    	   left join
    	   (select distinct UserID,ItemID,Category,time from userbehavior where Behavior = "cart") as b 
    	   on (a.UserID = b.UserID and a.ItemID = b.ItemID and a.Category = b.Category and a.time < b.time)
    	   left join
    	   (select distinct UserID,ItemID,Category,time from userbehavior where Behavior = "buy") as c
    	   on (b.UserID = c.UserID and b.ItemID = c.ItemID and b.Category = c.Category and b.time < c.time)	
    

    在这里插入图片描述
    在这里插入图片描述
    从上图可以看出用户浏览商品后,大概会有41.13%的用户加入购物车,比进行收藏的用户高很多,但是加入购物车后,只有17%左右的用户最终进行了购买,80%多的用户并没有进行购买,这个环节是需要我们去分析的。推测原因可能是:
    1.加入购物车是为了与不同店铺的同种产品进行比价;
    2.为了凑单,进行满减;
    3.先放着,过几天再购买;
    4.等活动优惠

    业务问题在点击后用户流失率较高,那么用户流失的原因是什么?
    淘宝推送是根据用户日常的浏览行为数据,比如日常搜索的关键词,收藏和加购的商品,已经关注的店铺,还有购买记录等,综合判断来给用户进行推送可能感兴趣的商品。如果淘宝的推送机制合理,那么推送的商品和用户需求的商品将会呈现较高的匹配度,从而用户最终的购买转化率也相应较高,从而推送的商品销量变高,变成热销商品;反之则较低,即表明用户流失严重。本次分析使用假设检验分析方法对用户流失原因进行分析。分析思路如下图所示:
    在这里插入图片描述
    提出假设:平台推送的商品和用户需求不匹配,导致用户在浏览过程中没有找到喜欢的商品,进而导致用户流失。
    收集证据:统计用户数量、商品数量、商品类别数和用户行为类型数等。

    select count(distinct UserID) as 用户数,
    	   count(distinct ItemID) as 商品数,
    	   count(distinct Category) as 商品类别,
    	   count(distinct behavior) as 用户行为类型
    	 from userbehavior		 
    

    在这里插入图片描述
    可以看到数据集中用户数有37376各,930317个商品,商品类型7106种,4种用户行为。
    表明数据集中类别丰富,商品数量和种类充足。
    在前面已经分析了用户对哪些商品有喜好,这里重点关注用户点击的商品和用户下单的商品之间的关系,是否支持我们的假设:平台推送的商品和用户需求不匹配

    • 商品点击量排名前十的商品种类:
    select Category 商品种类,count(Category) as 点击次数
    	from userbehavior
    		 where behavior = "pv"
    		 group by Category
    		 order by 点击次数 desc
    		 limit 10;
    

    在这里插入图片描述
    在这里插入图片描述

    • 商品点击量排名前十的商品:
    select  ItemID 商品ID,Category 商品所属种类, count(ItemID) as 点击次数
    		from userbehavior
    		where behavior = "pv"
    		group by ItemID
    		order by 点击次数 desc
    		limit 10;
    

    在这里插入图片描述
    在这里插入图片描述
    我们看到点击量中前十的商品中最多的是4756105,符合商品点击品类。然后有4个商品都属于3607361,说明这两个品类的商品比较受欢迎。商品id主要集中在812879,3845720,2331370这几个商品上。
    分析完点击量之后,分析一下热销的商品即可找出点击量与购买量之间的关系。

    • 查询点击量前十的购买率
    select distinct u3.ItemID 商品ID,
    		u3.点击次数,count(u1.ItemID) as 购买次数,
    		concat((count(u1.ItemID) * 100)  / u3.点击次数, "%") as 购买率
    	  from userbehavior u1,
    		(select ItemID,Category,count(ItemID) 点击次数
    		from userbehavior
    		where behavior = "pv"
    		group by ItemID
    		order by 点击次数 desc
    		limit 10) u3
    		where u1.ItemID = u3.ItemID
    		and behavior = "buy"
    		group by u3.ItemID
    		order by u3.点击次数 desc
    

    在这里插入图片描述
    在这里插入图片描述
    由上图我们可以看到点击最高的商品812879的购买率只有0.43%,而点击量排第五的商品购买率达到了4.43%。
    结论:假设成立
    通过以上分析,可以得出结论淘宝的推送机制不合理,推送的商品无法和用户的需求不匹配,导致用户在浏览过程中没有找到想要的商品,从而用户实际购买的转化率非常低,即用户流失严重。

    以上分析只从推送商品的点击率去分析,维度比较单一,还应该考虑到商品种类和其它因素的影响进一步进行论证和分析

    3.4.5用户价值分群(RFM模型)

    RFM模型是衡量客户价值和客户创利能力的重要工具。该模型通过客户的最近交易行为(Recency)、交易频率(Frequency)以及交易金额(Monetary)三项指标来描述该客户的价值状况。一般来说,会将这三项指标分成几个区间进行评分,通过计算评分找到有价值的用户,并对用户进行分类。
    最近一次消费(Recency):是指最近一次消费距离上一次消费之间的时间长短。它反映了客户对产品的态度以及对品牌价值的信任度,它关乎消费者的存留状况。
    消费频率(Frequency):是指某个特定时间内消费的次数。它直接反映了客户的忠诚度,消费频率越高,忠诚度就越高;忠诚度越高的客户数量越多,公司的竞争优势越强,市场份额越大。
    消费金额(Monetary):是指一定时间内消费某产品金额。它反映的是客户的价值,价值越高,给公司创造的利益就更大。
    在这里插入图片描述
    因为数据源里没有金额相关的信息,所以只通过R和F来对客户价值进行评分。
    R:用户最近一次的购买时间到12月3日的时间差表示用户最近一次消费间隔
    F:用户在11月25日到12月3日之间购买的次数表示用户消费频率
    M:本次数据集未包含相关字段,故不考虑

    (1)建立打分规格
    在这里插入图片描述
    (2)用户分类步骤
    1.计算R、F、M值
    2.给R、F、M按价值打分
    3.计算价值的平均值,得出R、F、M价值的高低,高于平均值打分为“高”,反之则“低”
    4.对比用户分类规则表,得出用户分类
    在这里插入图片描述

    • 计算R、F、M值
      看一下消费时间间隔R的得分
    create view score_R as
    select UserID,
    		(case when 购买天数 between 0 and 2 then 1
    		when 购买天数 between 3 and 4 then 2
    		when 购买天数 between 5 and 6 then 3
    		when 购买天数 between 7 and 8 then 4 else 0 end
    		)as 购买得分
    from
    		(select UserID,datediff(max(time_date),'2017-11-25')as 购买天数
    		from userbehavior
    		where behavior='buy'
    		group by UserID)as a
    		order by 购买得分 desc;
    

    在这里插入图片描述
    看一下购买频率F的得分:

    create view score_F as
    select UserID,
    		(case when 购买次数 between 0 and 18 then 1
    		when 购买次数 between 19 and 36 then 2
    		when 购买次数 between 37 and 54 then 3
    		when 购买次数 between 55 and 72 then 4 else 0 end 
    		)as 购买频率得分
    from
    		(select UserID,count(behavior)as 购买次数
    		from userbehavior
    		where behavior='buy'
    		group by UserID) b
    		order by 购买频率得分 desc;
    
    

    在这里插入图片描述
    通过上面两个步骤,从两个维度:最近购买时间及购买频率,分别给用户进行了评分。接下来用这两项的每一项平均值作为判断高于还是低于,比如重要价值用户,必须是两项的分值都比平均值要高,才能作为重要价值的用户。
    求两项评分的均值:
    在这里插入图片描述
    在这里插入图片描述
    将获得的两项评分分别和它们的均值进行比较,对客户进行分类:

    create view users_classify as
    select UserID,
    		(case when R>3 and F>1 then '重要价值用户'
    		when R>3 and F<=1 then '重要保持用户'
    		when R<=3 and F>1 then '重要发展用户'
    		when R<=3 and F<=1 then '一般价值用户' else 0 end 
    		)as 用户类型
    from
    		(select a.UserID,a.购买得分 as R,b.购买频率得分 as F
    		from score_R as a inner join score_F as b
    		on a.UserID=b.UserID) c;
    

    在这里插入图片描述
    用户类型计数:

    select count(用户类型)  from users_classify where 用户类型='重要价值用户';
    select count(用户类型)  from users_classify where 用户类型='重要保持用户';
    select count(用户类型)  from users_classify where 用户类型='重要发展用户';
    select count(用户类型)  from users_classify where 用户类型='一般价值用户';
    

    在这里插入图片描述
    对于重要价值用户,他们是最优质的用户,需要重点关注并保持, 应该提高满意度,增加留存;
    对于重要保持用户,他们最近有购买,但购买频率不高,可以通过活动等提高其购买频率;
    对于重要发展用户,他们虽然最近没有购买,但以往购买频率高,可以做触达,以防止流失;
    对于一般价值用户,他们最近没有购买,以往购买频率也不高,特别容易流失,所以应该赠送优惠券或推送活动信息,唤醒购买意愿。

    四、结论及建议

    1、平台的人均访问数为91.82次,跳出率为5.8754%,可见用户经常使用,用户粘性较高。
    2、访客数在11月25日和12月2日有明显增加,说明用户在周末比较活跃,应该在周末多进行一些促销活动促进销量。
    3、淘宝用户活跃黄金时间段一般在晚上20点到22点,然而在9-16点用户更倾向于狼吞虎咽般点击后直接购买,19点-23点用户更愿意慢慢品尝,在点击浏览后加入购物车或收藏。可在20点到22点进行推广和宣传活动,推送促销活动可设置在9点-16点,刺激消费。
    4、重点关注销量较高的商品和商品类别,如3122135,1464116这些品类,可推出爆款和个性化推荐。
    5、用户加入购物车或收藏商品说明已心仪商品,然而变现的转化率仅仅只有16%和13%,转化率并不高,建议个性化推送购物车降价或优惠活动或满减活动,显示剩余库存刺激消费。
    6、淘宝的推送机制不合理,推送的商品无法和用户的需求不匹配,导致用户在浏览过程中没有找到想要的商品,从而用户实际购买的转化率非常低,即用户流失严重。
    建议:

    • 建议通过发放优惠券、红包等形式,引导用户在点击浏览后将商品放入购物车或收藏,提高转化率;

    • 建议优化搜索和筛选功能,提高推送的针对性,让用户能够快速准确地找到目标商品;

    • 优化商品详情页和商品描述,增加类似商品比较功能,减少用户浏览选择时间。

    7、利用RFM模型对用户进行分群,用户主要集中在重要发展客户和一般价值客户,利用有限的资源抓住重要发展客户(潜力用户),重要挖掘其潜在价值。

    博主的其它数据分析实战项目看这里:
    数据分析项目实战—信用卡客户违约概率预测
    Kaggle数据分析入门之–酒店预订需求

    大佬们点个赞和收藏都是对博主的大力支持哦,谢谢大家动动自己的手指。
    在这里插入图片描述

    展开全文
  • 电子商务网站用户行为分析及服务推荐 背景 随着互联网和信息技术的迅速发展,电子商务、网上服务与交易等网络业务越来越普及,大量的信息聚集起来,形成了“海量”信息。用户想要从海量信息中快速准确地寻找到自己...

    电子商务网站用户行为分析及服务推荐

    • 背景
      • 随着互联网和信息技术的迅速发展,电子商务、网上服务与交易等网络业务越来越普及,大量的信息聚集起来,形成了“海量”信息。用户想要从海量信息中快速准确地寻找到自己感兴趣的信息已经变得越来越难了,在电子商务领域尤其如此。因此,信息过载的问题已经成为互联网技术中的一个重要难题。
      • 为了解决这个问题,搜索引擎诞生了,例如谷歌、百度。搜索引擎在一定程度上缓解了信息过载问题,用户通过输入关键字,搜索引擎就会返回给用户与输入的关键字相关的信息。可以想象,没有搜索引擎,用户一个网站一个网站去寻找信息那是一种怎样的局面。但是,搜索引擎也有很多无法解决的用户需求,例如用户想找到准确描述自己需求的关键词时,搜索引擎就无能为力了,毕竟它只是搜索而非理解。
      • 与搜索引擎不同,推荐系统不需要用户提供明确的需求,而是通过分析用户的历史行为,从而主动向用户推荐能够满足他们兴趣和需求的信息。因此,对于用户而言,推荐系统和搜索引擎是两个互补的工具。搜索引擎满足有明确目标用户的需求,而推荐系统帮助用户发现其感兴趣的内容。
      • 在电子商务领域推荐技术起到如下作用
        • 帮助用户找到其感兴趣的物品,节省用户时间,提升用户体验;
        • 提高用户对电子商务网站的忠诚度,如果推荐系统能够准确发现用户的兴趣点,并将合适的资源推荐给用户,用户就会对电子商务网站产生依赖,从而建立稳定的企业忠实顾客群。(这点淘宝是做得不错的)
    • 目标
      • 本案例的研究对象是北京某家法律网站,它是一家电子商务类的大型法律资讯网站,致力于为用户提供丰富的法律信息与专业咨询服务,并为律师与律师事务所提供卓有成效的互联网整合营销解决方案。随着其网站访问量增大,数据信息量也在大幅增加。用户在面对大量信息时无法从中获得自己需要的信息,对信息的使用效率越来越低。这种浏览大量无关信息的过程,使用户需要花费大量时间才能找到自己需要的信息,从而使得用户不断流失,给企业造成巨大的损失。
      • 为了能够更好地满足用户需求,依据其网站海量的数据,研究用户的兴趣偏好,分析用户的需求和行为,发现用户的兴趣点,从而引导用户发现自己的信息需求,将网页准确推荐给所需用户,帮助用户发现感兴趣但很难发现的网页信息。为用户提供个性化的服务,并且建立网站与用户之间的密切关系,让用户对推荐系统产生依赖,从而建立忠实顾客群,实现客户链式反应增值,提高消费满意度。
      • 目前网站已有一些热点推荐,但不足以满足用户需求。当用户访问网站页面时,系统会记录用户访问网站的日志。包括IP(已做数据脱敏处理)、用户访问时间、访问内容等记录。
      • 实现如下目标
        • 按地域研究用户访问时间、访问内容和访问次数等分析主题,深入了解用户对访问网站的行为和目的及关心的内容。
        • 借助大量用户访问记录,发现用户的访问行为习惯,对不同需求的用户进行相关的服务页面的推荐。
    • 分析
      • 本案例的目标是对用户进行推荐,即以一定的方式将用户与物品之间(本案例指网页)之间建立联系。为了更好地帮助用户从海量的数据中快速发现感兴趣的网页,在目前相对单一的推荐系统上进行补充,采用协同过滤算法进行推荐。
      • 由于用户访问网站的数据记录很多,如果对数据不进行分类处理,对所有记录直接采用推荐系统进行推荐,必然出现如下问题。
        • 数据量太大意味着物品数与用户数很多,在模型构建用户与物品的稀疏矩阵时,出现设备内存空间不够的情况,并且模型计算需要消耗大量的时间。
        • 用户区别很大,不同的用户关注的信息不一样,因此,即使能够得到推荐结果,其推荐效果也不会很好。
      • 为了避免出现上述问题,需要进行分类处理与分析。正常的情况下,需要对用户的兴趣爱好以及需求进行分类。因为在用户访问记录中,没有记录用户访问网页时间的长短,因此不容易判断用户的兴趣爱好。因此,本文根据用户浏览的网页信息进行分类处理,主要采用以下方法处理:以用户浏览网页的类型进行分类,然后对每个类型中的内容进行推荐。
      • 整个分析过程可以分为如下过程
        • 从系统中获取用户访问网站的原始记录。
        • 对数据进行多维度分析,包括用户访问内容,流失用户分析以及用户分类等分析。
        • 对数据进行预处理,包含数据去重、数据变换和数据分类等处理过程。
        • 以用户访问html后缀的网页为关键条件,对数据进行处理。
        • 对比多种推荐算法进行推荐,通过模型评价,得到比较好的智能推荐模型。通过模型对样本数据进行预测,获得推荐结果。
    • 处理过程
      • 数据获取
        • 因为本案例是以协同过滤算法为主导,其他的推荐算法为辅助,而协同过滤算法的特点就是通过历史数据找到相似的用户或者网页。因此,在数据抽取的过程中,尽可能选择大量的数据,这样可以降低推荐结果的随机性,提高推荐结果的准确性,能更好地发掘长尾网页中用户感兴趣的网页。
        • 以用户的访问时间为条件,选取三个月内(2015-02-21~2015-04-29)用户的访问数据作为原始数据集。每个地区的用户访问习惯以及兴趣爱好存在差异性,本案例抽取广州地区数据进行分析,共837453条记录,所含属性见数据集。
        • 虽然这个数据量对于“大数据”这个概念,并不算大,,但是这个数据量对于低配电脑还是颇有压力的。因此,本案例的处理过程,真正的、初步的体现了用Python处理大数据的味道。
        • 处理过程为:建立数据库—>导入数据(导入方法自行查阅,一般使用mysql的source命令)—>搭建Python的数据库操作环境—>对数据进行分析—>建立模型。其中,数据库为mariaDB(免费版本的MySQL)。安装数据库后导入案例的原始数据文件raw.sql就成功配置好了数据库平台。
          • 可能出现如下错误
            • ERROR 2005 (HY000): Unknown MySQL server host ‘10997107101114’ (0)
            • ERROR:
            • Can’t connect to the server
            • No connection. Trying to reconnect…
          • 解决方法
            • 修改my.ini文件中的max_allowed_packet = 640M,可能大小超过了
            • 命令行使用如下命令
              • mysql -u root -p 创建的数据库名 <C:\Users\16957\Desktop\data.sql --default-character-set=utf8
              • 在等待漫长的时间后成功导入了837450条数据
        • 在Python中,pandas可以利用read_sql()读取数据库,但是依赖于SQLAlchemy,而SQLAlchemy依赖于pymysql,所以需要安装这两个依赖包。(pip安装即可)
        • 在安装完成后,可以通过Python连接到数据库。为了方便处理数据,利用pandas。然而,pandas在读取数据时(无论什么格式,csv,tsv,xls,sql),都是将全部数据读入内存,因此在数据量大的时候,这是难以实现的。(因为内存容量是不够的)幸运的是,pandas提供了chunksize参数,可以让我们分块读取大数据文件。具体见github代码见 访问数据库.py
      • 数据探索
        • 网页类型分析
          • 作为第一步,针对原始数据中用户点击的网页类型进行统计,网页类型是指“网址类型”的前三位数字(本身有6-7位数字)。前面已经提到过,此处处理的要义在于“分块进行”,必要时可以使用多线程或者分布式计算。
          • 数据探索.py
          • 可以发现点击“咨询相关”(网页类型101的)最多,其次是“其他类型”(网页类型199的),然后是“知识相关”。可以得到用户点击页面类型的排行榜为:咨询相关、知识相关、其他方面的网页、法规(301)、律师相关(102)。可以初步得出相对于长篇的知识,用户更加偏向于查看咨询或者进行咨询。
          • 咨询类别内部进行统计分析,可以发现咨询内容页(101003)记录最多,其次是咨询列表页(101002)和咨询首页(101001)。综合上述初步结论,可以得出用户都喜欢通过浏览问题的方式找到自己需要的信息而不是以提问的方式或者查看长篇知识的方式得到所需信息。
          • 知识相关进行分析,因为只有一种类型(107001),所以利用网址进行分类,主要利用正则表达式进行匹配。代码见 数据探索.py
          • 其他方面进行分析,其中网址带有“?”的占了32%左右,其他咨询相关与法规专题占比达到43%,地区和律师占比26%。在网页分类中,已经存在了律师等分类,为什么还会存在于其他类别中呢,这是由于网页地址没有匹配到这种格式。
          • 通过对这三种分析,用户的一般使用情况为:咨询内容页、知识内容页、法规专题页、咨询经验(在线咨询页)。因此,在后续分析中选取占比最多的两类(咨询内容页和知识内容页)进行模型分析。
        • 点击次数分析
          • 统计分析原始数据用户浏览网页次数(以“真实IP”区分)的情况,见上面代码。
          • 可以看出,大约80%的用户(不超过3次)只提供了大约30%的浏览量(几乎满足二八定律)。在数据中,点击次数最大值为42790次,对其进行分析,发现是律师的浏览信息(通过律师助手进行判断)。
          • 对浏览次数达到7次以上的情况进行分析,大部分用户浏览8-100次。
          • 对浏览次数为1次的用户进行分析,问题咨询页占比78%,知识页占比15%,而且这些记录基本上是通过搜索引擎进入的。由此可以猜测两种可能:1)用户为流失用户,没有找到自己的需要;2)用户找到了自己想要的信息,因此直接退出。可以归结为跳出率,需要对这些网页进行针对用户的个性化推荐,帮助用户发现其感兴趣或者需要的网页,
          • 针对点击一次的用户浏览的网页进行统计分析,发现排名靠前的都是知识与咨询页面,因此可以猜测大量用户的关注都在知识和咨询上。
        • 网页排名
          • 通过查看各个页面的点击率,和通过搜索引擎进入后翻页的概率,从而决策。
      • 数据预处理
        • 数据清洗
          • 去除无用数据。
        • 数据变换
          • 识别翻页,对翻页进行还原。
        • 属性规约
          • 本案例需要的是用户与用户访问的网页,因此,删除其他属性。
      • 数据挖掘建模
        • 模型构建
          • 实际使用,一般多种推荐方法进行组合,得到推荐结果,组合可以并行或者串行,本案例采用并行组合。
          • 此部分数学逻辑较多,不一一赘述,可以查看代码。主要是协同过滤算法的代码。
          •   # -*- coding:utf-8-*-
              import numpy as np
              
              
              def Jaccard(a, b):
                  '''
                  自定义杰卡德相似系数函数,只对0-1矩阵有效
                  :param a:
                  :param b:
                  :return:
                  '''
                  return 1.0 * (a * b).sum() / (a + b - a * b).sum()
              
              
              class Recommender():
                  # 相似度矩阵
                  sim = None
              
                  def similarity(self, x, distance):
                      '''
                      计算相似度矩阵的函数
                      :param x:
                      :param distance:
                      :return:
                      '''
                      y = np.ones((len(x), len(x)))
                      for i in range(len(x)):
                          for j in range(len(x)):
                              y[i, j] = distance(x[i], x[j])
                      return y
              
                  def fit(self, x, distance=Jaccard):
                      '''
                      训练函数
                      :param x:
                      :param distance:
                      :return:
                      '''
                      self.sim = self.similarity(x, distance)
              
                  def recommend(self, a):
                      '''
                      推荐函数
                      :param a:
                      :return:
                      '''
                      return np.dot(self.sim, a) * (1 - a)
            
      • 后续处理
        • 对婚姻知识类建模评价。
    • 补充说明
      • 案例参考书《Python数据分析与挖掘实战》
      • 与原书有借鉴,但是较大改动代码
      • 修复了原书一些旧版本代码错误
      • 具体数据集和代码可以查看我的Github,欢迎star或者fork
    展开全文
  • 阿里天池:淘宝用户行为分析项目

    千次阅读 2020-06-28 14:44:08
    (在这里仅选用表名为 “tianchi_mobile_recommend_train_user” 中的数据,用作淘宝用户行为分析) 一、项目背景 本数据分析报告,以阿里天池的淘宝平台交易数据集为基础,通过行业指标对淘宝用户行为进行分析,...
  • 本文设计的移动互联网用户行为分析引擎通过云计算技术实现分布式并发的大规模计算能力,构建移动互联网端到端的大数据挖掘分析系统,实现对DPI和应用平台用户上网行为的偏好分析,提供个性化推荐服务,打通从数据...
  • 用户行为分析系统是指由第三方提供的集合了数据采集SDK、数据分析模型、分布式算法与存储架构的用户属性与行为事件数据分析的系统。比如国外MixPanel、Heap等,用户行为数据分析的前提是在前期埋点时打好扎实的基础...
  • 数据分析案例--淘宝用户行为分析

    千次阅读 2020-03-15 20:17:39
    一、项目背景 对淘宝用户行为进行分析,从而探索淘宝用户的行为模式,具体指标包括:日PV和日UV分析,付费率分析,复购行为分析,漏斗流失分析和用户价值RFM分布 二、数据来源 ...userId=1 三、提出问题 ...
  • 用户行为分析的指标及其意义

    万次阅读 2019-07-02 14:30:16
    “事件”这个概念在用户行为分析中是一个基本的单位,用户的行为都可以看成是一个个不同的事件,比如用户搜索是一个事件,在什么时间、什么平台上、哪一个ID、做了搜索、搜索的内容是什么,上述这一串行为组成了一个...
  • 用户行为分析

    千次阅读 2016-07-25 16:24:04
    用户行为轨迹 认知------->网站访问-------->IP、PV、人均页面访问量、访问来源 熟悉------->网站浏览、网站搜索--------->平均停留时长、跳出率、页面偏好、搜索访问次数占比 试用------->用户注册-...
  • 一、分析背景         对于很多互联网公司来说,流量和用户价值都是核心问题。根据产品生命周期理论,在产品发布初期,更多的关注点应该放在拉新上,只有足够的用户量级才能为公司提供发展的不...
  • 1 用户行为分析

    千次阅读 2019-02-26 10:57:31
    常见问题 项目会涉及到哪些技术? Nginx HDFS Flume MapReduce Scala Spark 可视化展示 需要会哪些编程语言? 具备Java基本知识 ...用户行为分析需要分析哪些内容? 你是谁? 你从哪里来 免费流...
  • 爬虫随机从CSDN博客取得800条用户行为数据,包含用户名、原创博客数、评论数、浏览量,试着从博客数,评论数,浏览量三个方面分析csdn的博主们的形象。 原创博客数 博主们的原创博客数并不是很多,50篇以下的占了70%...
  • 基于Spark的用户行为分析系统

    千次阅读 2020-06-20 13:44:31
    基于Saprk的用户行为分析系统源码下载 一、项目介绍   本项目主要用于互联网电商企业中使用Spark技术开发的大数据统计分析平台,对电商网站的各种用户行为(访问行为、购物行为、广告点击行为等)进行复杂的分析。...
  • 用户行为分析的指标体系

    千次阅读 2019-07-02 15:19:07
    作者:易观数字营销经理 赵岩...访问级指标,事件级指标,用户级指标。 预定义维度: 设备维度,地域维度,用户来源。 下面我们将分别介绍上述预定义指标体系和预定义维度的具体含义以及应用场景。 12个访问级指标(...
  • 实战|淘宝用户行为分析案例

    千次阅读 2020-03-03 20:57:45
    一、项目背景本数据报告以淘宝app平台为数据集,通过行业的指标对淘宝用户行为进行分析,从而探索淘宝用户的行为模式,具体指标包括:日PV和日UV分析,付费率分析,复购行为分析,漏斗流失分析...
  • 几种常用用户行为分析模型简述

    千次阅读 2020-04-26 20:00:57
    一、常见用户行为分析模型 在数据分析的大框架下,通过对用户行为监测获得的数据进行分析研究的行为归结于用户行为分析用户行为分析可以让产品更加详细、清楚地了解用户的行为习惯,从而找...
  • 数据分析实战之淘宝用户行为分析(5) -数据分析报告 数据分析实战之淘宝用户行为分析(4) -用户购买行为分析 数据分析实战之淘宝用户行为分析(3) -用户行为路径分析 数据分析实战之淘宝用户行为分析(2) -用户行为...
  • 淘宝APP用户行为分析

    千次阅读 2019-07-01 14:12:44
    淘宝APP的功能日益复杂,但都离不开最基本的收藏、购物车和购买功能,本文利用sql对淘宝用户行为数据进行分析,通过用户行为分析业务问题。 一. 提出问题 本次分析的目的是想通过对淘宝用户...
  • python基于淘宝历史数据的用户行为分析

    千次阅读 多人点赞 2020-03-25 22:53:58
      1、项目背景与分析说明    1)项目背景    2)数据和字段说明    3)分析的维度    4)电商常用分析方法    5)什么是漏斗分析?   2、导入相关库   3、数据预览、数据预处理    1)计算...
  • 基于spark的电商用户行为分析项目

    千次阅读 2019-08-06 20:49:55
    - 新增用户和总用户分析用户数据和总用户数据 platform、date、browser - new_install_user计算规则:计算launch事件中,uuid的唯一个数。 - total_user计算规则:同一个维度,前一天的总用户+当天新增用户。 - ...
  • 用户行为分析系统

    万次阅读 热门讨论 2017-12-28 17:29:57
    第四页是用户分析,有点单调,欲扬顿挫嘛,整个项目就像是一片作文,总要有单调的地方,才能烘托出其他的页面的高逼格 ### 第五页,最后一页是一个华丽的收尾,是普通图表形式的升华,全部用数据显示,是为了...
  • 基于用户行为分析的推荐算法

    千次阅读 2019-06-28 09:35:19
    文章目录基于用户行为分析的推荐算法用户行为数据简介用户行为分析用户活跃度和物品流行度的分布用户活跃度和物品流行度的关系实验设计和算法测评数据集实验设计评测指标基于领域的算法基于用户的协同过滤算法 ...
  • 当企业进入数据化管理阶段之后,就不得不对用户进行行为数据分析,当然其他的包括用户画像、趋势分析等等,都是现在企业经常要进行的营销分析,因此选一个好的数据分析工具是很重要的。 而现在的数据分析工具越来越...
  • 电商平台用户行为分析

    千次阅读 2019-12-13 11:42:38
    电商平台用户行为分析 近年,诸多电商平台逐渐扩大规模,瓜分市场,电商平台不再一家独大。而拥有一定用户基础的平台需要保有一席之地,就需要分析用户行为,找出提高盈利水平的方法。以淘宝为例,对用户行为进行...
  • 电商网站用户行为分析 项目需求 1.用户整体购物情况怎样? 统计数据集中总的用户数,商品数,商品类别数,用户行为数。 核心指标如PV,UV,跳出率,复购率,留存率等分别是多少? 2.用户的购物行为情况。 3.统计出...
  • 一、背景介绍 1、问题描述 本文主要研究对象是某家法律网站,这是家电子商务类大型法律资讯...低效的信息供给是无法满足用户需求的,容易流失客户,基于此背景寻求用户行为分析及服务推荐系统开发。 问题目标分析...
  • 用户行为分析过程 说明 本次数据分析基于阿里云天池数据集(用户行为数据集),使用转化漏斗,对常见电商分析指标,包括转化率,PV,UV,复购率等进行分析,分析过程中使用Python进行数据的清洗,清洗后的数据导入...
  • 数据分析-淘宝用户行为分析

    千次阅读 2019-10-02 12:04:43
    一、项目背景和目的 ...userId=1,通过此项目学习电商数据分析的指标与数据分析的基本方法。 二、分析维度 根据现有数据及分析目的,从四个维度进行分析: ...以PV、UV、平均访问量、跳失率等指标,分析用户最活跃的...
  • 课程名称:Spark大型项目实战:电商用户行为分析大数据平台(高端大数据项目实战课程)价值2250元课程目录:一、大数据集群搭建第1讲-课程介绍第2讲-课程环境搭建:CentOS 6.4集群搭建第3讲-课程环境搭建:hadoop-...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 430,152
精华内容 172,060
关键字:

用户行为分析