精华内容
下载资源
问答
  • 淘宝用户行为数据集

    2019-01-05 15:34:43
    3182257条数据,可做推荐系统,数据分析 它包含字段(id, uid,age,gender,item_id, behavior_type, item_category, date, province) //1....10.统计各省男女用户数量(gender 0:男 1:女 2:未知)
  • 利用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将用户分为了多组,可对不同组别的客户拟制实施不同的营销方式

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

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

    展开全文
  • 本文设计的移动互联网用户行为分析引擎通过云计算技术实现分布式并发的大规模计算能力,构建移动互联网端到端的大数据挖掘分析系统,实现对DPI和应用平台用户上网行为的偏好分析,提供个性化推荐服务,打通从数据...

    2基于云计算的系统总体设计方案
    2.1系统总体技术架构
    本文设计的移动互联网用户行为分析引擎通过云计算技术实现分布式并发的大规模计算能力,构建移动互联网端到端的大数据挖掘分析系统,实现对DPI和应用平台用户上网行为的偏好分析,提供个性化推荐服务,打通从数据采集、分析到服务提供、营销执行的全过程。
    系统通过FTP服务器获取数据,在接口层采用分布式计算与批量处理相结合的方式,将大数据存入Hbase数据库中,支持海量数据和非结构化数据的存储,数据入库之后利用Hive进行整合层和汇总层的ETL处理,再基于MapReduce计算框架设计大数据分析模型,最后通过Hive数据库将结果导入前端展现数据库。在数据处理层,利用Hbase , Hive的优势进行海量数据的存储和处理,考虑到前端展现要求的灵活性,采用关系型数据库MySQL作为前端展现。系统总体技术架构如图1所示。

    2.2系统总体拓扑和功能分布
    系统的总体拓扑如图2所示,系统由一台服务器作为Hadoop平台和Hbase的主节点服务器,其他服务器为Hadoop平台和Hbase、的从节点服务器,从节点服务器的数量可根据系统处理需求动态扩展。主节点服务器主要负责从节点服务器任务和流量的分配,并对从节点服务器的执行状态进行监控,多台从节点服务器在主节点服务器的控制下执行具体的任务。
    主节点服务器的软件功能架构如图3所示,各模块具体介绍如下。

    (1)任务管理与调度模块
    集中式的任务调度控制台,提供任务的创建、调整和删除等功能,通过业务类型选择、执行周期设置等,定义应用的处理逻辑;自动控制数据抽取、数据整理到数据建模、模型运行、结果输出等过程,根据任务设置的激活处理条件,自动加载任务运行,系统提供任务的暂停、恢复以及优先级管理功能。
    (2)大数据入库与预处理组件
    将DPI用户的上网行为、应用平台的用户行为和内容信息等大数据,及时导入用户行为分析引擎系统,作为数据分析和模型挖掘的数据源。
    (3)大数据用户行为分析模型组件
    基于汇聚到系统中的海量移动互联网用户行为数据,利用MapReduce计算框架构建用户行为分析模型资源池,快速分析用户的偏好、社会关系信息,且支持多类业务实现精准的内容推荐。
    从节点服务器的软件结构与主节点服务器基本相同,区别主要在于从节点服务器不需要部署任务管理和调度模块。

    3大数据入库组件设计
    移动互联网用户行为分析引擎的数据来源主要有两类:应用平台数据和DPI数据。两类数据源的特点不同:应用平台的数据主要集中在一个访问行为表上,每天一个文件,每个文件的大小为GB级;而DPI数据的特点是大量的小文件,每个文件大小在10MB以内,但文件来源频率快,一般2min就有好几个文件,一个省份累计1天的数据量可达1TB。针对上述不同的数据源特点,系统采用不同的技术方案,具体介绍如下。
    (1)应用平台数据入库
    应用平台采用每天批量入库一次的方式,文件大小为GB级。大文件的入库,适合Hadoop平台的使用场景,考虑到使用MapReduce分布式处理的Hbase、入库方式效率不高,系统对该方式进行了优化,采用MapReduce分布式处理结合批量入库的方式。
    由于Hadoop通常使用的TextInputFormat类,在map中读取到的是文件的一行记录。因此,系统使用NLineInputFormat类实现在MapReduce中的批量入库。通过使用NLineInputFormat类,每个分片有N行记录,通过参数的配置,每次可读取文件的N行记录,那么可以在map中直接执行批量入库的操作,效率相对较高。
    (2)DPI数据入库
    由于DPI的行为数据是大量来源频率很快的小文件.

    在Hadoop平台下处理小文件采取的措施通常如下。
    ·利用SequenceFile、将小文件打包上传,可从源头避免小文件产生,但无论是Hadoop shell还是MapReduce,都不能进行灵活读取。
    ·使用HAR将HDFS中的小文件打包归档(从HDFS),可减少既有HDFS中的小文件数量,但HAR文件读取性能差。
    ·Hadoop append可直接追加数据到相同文件中,但每个小文件的大小不同,同时考虑每天的DPI日志有峰值和低谷,对文件数量的控制和处理来说有一定的麻烦。
    ·Flume , FlumeNG , Scribe,可通过中间层汇聚数据的办法减少小文件数量,但FlumeNG和Scribe都不能很好地传输压缩文件。
    通过以上分析可以看到,上述4种方式均存在一定的缺点,因此针对DPI数据的特征,采用Hadoop平台的CombineFileInputFormat类方式,即通过继承CombineFile InputFormat,实现CreateRecordReader,同时设置数据分片的大小,通过这种方式实现DPI大数据的入库。

    4大数据用户行为分析模型组件设计
    大数据用户行为分析模型组件提供多个在Hadoop分布式平台上运行的分析模型,其功能结构及其与其他组件的关系如图4所示

    本组件主要由以下几个模块组成。
    ·模型参数调整:提供对模型算法中的变量设定、参数调整、样本空间规模设置等功能。
    ·模型评估:提供创建模型校验任务,将实际数据与模型计算结果进行比对.输出模型校验指标.进行模型校验和模型有效性评价。
    ·多业务数据关联分析模型:对用户的互联网行为和爱游戏业务平台的行为进行关联分析,判断DPI用户上网行为偏好与在应用平台上的行为偏好是否存在关联关系,采用关联算法找出其中存在的规则,并将规则固化到系统中,从而有助于交叉营销。
    ·个性化推荐模型:以协同过滤技术和内容推荐技术为主,采用混合推荐技术,综合考虑来自产品内容和用户两个维度的影响,按照综合相似度向用户推荐相应的信息,实现用户动态推荐算法
    ·文木挖掘模型:对文木内容(如网页)通过预处理去除噪声(如网页导航栏、页首、页尾、广告等小相关内容),提取出文木主体部分,根据文木(网页)分类标准构造标注语料库,通过分类训练算法进行模型训练和机器学习,建立文木(网页)人工智能分类模型。
    · DPI访问偏好模型:基于网页内容分类,通过用户访问网页分析,计算用户WeI)访问兴趣偏好
    ·DPI应用偏好模型:基于DPI采集数据,通过应用知识库识别应用,计算用户应用兴趣偏好
    ·应用平台用户偏好模型:依据用户在应用平台上的各种操作行为,找出用户对应用平台各种内容的偏好规律。
    ·社交关系挖掘模型:社交关系挖掘包括用户社交图谱和兴趣图谱的构建。社交图谱通过用户的位置轨迹进行挖掘分析,建立用户之间的好友等社交关系;兴趣图谱基于用户偏好模型,计算用户偏好的相似度,得到与用户兴趣最相近的邻居集合,建立用户之间的相同兴趣爱好关系。
    以上模型的建模过程中很多用到了MapReduce计算框架。在MapReduce计算框架中,每个MapReduce作业主要分为两个阶段:map阶段和reduce阶段,分别用map函数和reduce函数实现。map函数对一个

    展开全文
  • 淘宝关于用户行为的数据分析

    万次阅读 多人点赞 2019-08-30 01:12:33
    userId=1     ... 用户在网上购物会产生了一系列的行为,个人的一次行为用户个人来说仅仅是一次简单的操作,但他所代表的是一大类人群对商品的一类交互行为。我们通过追踪...

    数据来源于:https://tianchi.aliyun.com/dataset/dataDetail?dataId=46&userId=1

         ~~~~      用户在网上购物会产生了一系列的行为,个人的一次行为对用户个人来说仅仅是一次简单的操作,但他所代表的是一大类人群对商品的一类交互行为。我们通过追踪和记录用户的一系列包括点击、收藏、加入购物车、下单、付款等行为,以监控和研究商品购买过程中的问题与异常点的发掘,迅速锁定需要重点关注的用户,有利于运营方的精准运营并且对业务有更正确的理解和判断。

         ~~~~      本数据集来源于天池关于淘宝APP在某一个月中的数据,数据包含了用户所浏览、收藏、加入购物车、和购买商品的行为,以及所对应的时间和商品种类。首先对数据进行整体的分析。

         ~~~~      首先调用分析过程用到的包

    import pandas as pd
    import numpy as np
    import matplotlib.pyplot as plt
    import seaborn as sns
    from datetime import timedelta
    import random
    from sklearn.cluster import KMeans
    from sklearn.preprocessing import StandardScaler
    

    读取数据

    df = pd.read_csv('tianchi_mobile_recommend_train_user.csv')
    df.head()
    

    image.png
         ~~~~      数据总共包含了六列,依次为用户id、商品id、用户行为类型、用户地理位置、商品大类id、时间。其中用户行为类型中1代表点击(当做pv),2代表collect(收藏),3代表cart(加入购物车)

    在本次用户行为数据分析中,根据数据主要关注以下几个方面:
    1)用户进行用户行为的时间趋势,熟悉用户行为的时间模式;
    2)从pv到buy的路径分析,各个环节中的转化率分析,为精准运营作参考;
    3)用户典型路径挖掘,一个购买过程中会产生多少次用户行为,以及购买路径的先后顺序;
    4)根据用户特征进行聚类,根据不同类型用户进行行为分析,有利于锁定目标用户。
    以下是整个分析过程
    ##数据处理

    #对时间特征处理,添加每日时间段,星期特征
    df.time = pd.to_datetime(df['time']) 
    df['daily'] = df['time'].dt.time
    df['weekday'] = df['time'].dt.weekday
    df['date'] = df['time'].dt.date
    #将用户行为用特定行为名称描述
    behavior = {1:'pv',2:'collect',3:'cart',4:'buy'}
    df['behavior_type'] = df['behavior_type'].replace([1,2,3,4],['pv','collect','cart','buy'])
    del df['user_geohash'] #删除地理位置数据,在本次分析中不会用到
    

    ##数据分析
    ####1)时间维度上的分析

    table_time = df.groupby(['daily','behavior_type']).size().unstack()
    table_time1 = df.pivot_table(index='daily',columns='behavior_type',aggfunc='count',margins=True,margins_name='Sum')
    table_time1 = table_time1['date']
    
    table_time.plot.bar(stacked=False,rot=45,figsize=(16,7))
    plt.figure(figsize=(16,7))
    sns.barplot(x=table_time1.index[:-1],y = table_time1['Sum'][:-1])
    plt.xticks(rotation=45)
    

    根据每日不同时间段进行汇总统计,在处于白天的时间,用户行为相对比较平稳,而从下午五点开始,用户行为激增并且一直持续到晚上十一点之前,表明在晚上是用户发生用户行为的高峰期。但是由于pv量显著高于其他用户行为的发生,因此需要根据不同行为进行研究。
    image.png

    image.png

    for i in table_time1.columns:
        plt.figure(figsize=(16,7))
        sns.barplot(x=table_time1.index,y = table_time1[i])
        plt.xticks(rotation=45)
    

    下载 (1).png

    下载 (2).png

    下载 (3).png

    下载.png
         ~~~~      可以看出,点击、收藏、加入购物车的数量都在晚上存在明显的提升,但是相对而言在购买上晚上的提升没有其他用户行为显著。这方面我认为可能存在以下解释:首先晚上可能用户有大量的时间来上app进行浏览等,但并不一定会立马下单付款;而在白天当中有部分需求来自于工作日常的需要,能够使得订单量增多。

    接下来对一个月整个的情况进行分析

    table_date = df.groupby(['date','behavior_type']).size().unstack()
    table_date.plot(rot=45,figsize=(16,7))
    
    for i in behavior:
        plt.figure(figsize=(16,7))
        plt.subplot(4,1,behavior.index(i)+1)
        
        table_date[i].plot(rot=45)
        plt.ylabel('Count of '+ i)
        plt.axhline(table_date[i].mean(),linestyle='--',color='r')
    

    下载 (8).png

    下载 (9).png

    下载 (10).png

    下载 (11).png

         ~~~~      可以看到双12这天用户行为暴增,其中buy是双十二之前都属于非常平稳然后在这一天全部激增,而在当时没有像现在这样存在双十一之前便可以预定付尾款的形式,因此所有购买行为全部会堆积到这一天。在12月初,收藏量便逐步增加,表明进入12月便开始了活动的预热。而加入购物差以及点击则在双十二前三日左右开始上升。
         ~~~~      从这些数据可以粗略地了解当时的情景,并且能够有效为以后的活动运营提供一些建议,重点研究活动期间数据可以为后续提供指导,针对活动数据可以分析预热阶段收藏,加入购物车后在双十二的购买率,活动发放的优惠与购买率的联系等等。

    接下来针对每周分析用户行为数据

    table_week = df.groupby(['weekday','behavior_type']).size().unstack().reset_index()
    table_week['weekday'] = table_week['weekday'].replace([0,1,2,3,4,5,6],['星期日','星期一','星期二','星期三','星期四','星期五','星期六'])
    table_week = table_week.set_index('weekday')
    table_week.plot.bar(rot=0,figsize=(16,7))
    
    week_withoutpv = table_week.loc[:,['buy','collect','cart']]
    week_withoutpv.plot.bar(rot=0,figsize=(16,7))
    

    下载 (12).png

    下载 (13).png

         ~~~~      从图中可以看出在工作日当中pv量高于周末时候,这与原本预想的不太一样。双十二当天为星期四,对结果也造成了一定影响,可以看出星期四的购买量显著高于其余时刻,而当天收藏量减少也与双十二为星期四有关。

    从时间维度我们可以得出以下几点:
    1.用户对商品的浏览,收藏,加入购物一般在晚上7点到11点最多,但是在这期间购买量并没有比白天有显著的提升;
    2.双十一活动促销明显改变了一段时间内的用户行为,根据活动类型使得双十二之前几天的用户浏览、收藏、加入购物车行为猛增,而在双十二当天购买量成倍数增长。
    3.非工作日的购买量低于工作日。
    对工作日白天晚上进行观察

    ####2)用户行为路径分析

    def road_pv_buy(df,datetime):
        df1 = df.groupby([datetime,'behavior_type']).size().unstack()
        convs = []
        for i in range(len(df1.index)):
            pv2collect = df1.iloc[i,:]['collect']/df1.iloc[i,:]['pv']
            pv2cart= df1.iloc[i,:]['cart']/df1.iloc[i,:]['pv']
            collect2cart = df1.iloc[i,:]['cart']/df1.iloc[i,:]['collect']
            collect2buy = df1.iloc[i,:]['buy']/df1.iloc[i,:]['collect']
            cart2buy = df1.iloc[i,:]['buy']/df1.iloc[i,:]['cart']
            conv = [pv2collect,pv2cart,collect2cart,collect2buy,cart2buy]
            convs.append(conv)
        data = pd.DataFrame(convs,index = df1.index,columns = ['pv2collect','pv2cart','collect2cart','collect2buy','cart2buy'])
        return data
    
    dict_road = road_pv_buy(df,'daily')
    dict_road = road_pv_buy(df,'daily')
    dict_road.loc[:,['collect2buy','cart2buy']].plot(figsize=(14,5)) 
    plt.ylabel('conversion rate',size = 15)
    
    plt.figure(figsize=(10,7))
    dict_road.loc[:,['pv2collect','pv2cart','pv2buy']].plot(figsize=(14,5))
    plt.ylabel('conversion rate',size = 15)
    

    下载 (14).png

    下载 (15).png

         ~~~~      路径上做了粗略的分析,并没有考虑collect和cart之间的先后顺序,用户点击商品之后可能收藏,可能加入购物车都当成一类。
         ~~~~      可以看到,从早上八点开始购买率上涨,随后在中午达到顶峰,然后下降直到下午五六点,在工作时期,由于企业公司的需求使得购买率上升,也许这时候用户往往选择的是他们需要的东西,在这期间如何迅速满足用户的需求是商品所应该关注的。在晚上,购买率下降,而收藏率,加入购物车的转化率上升,在大部分用户处于休息期间时候,浏览可能补充或者额外的东西是重点,这时候商品不仅仅关注需要方面,还需要根据不同商品研究这段期间用户的购买习惯从而发掘出规律,以对商品属性做指导。

    dict_road_week = road_pv_buy(df,'weekday')
    dict_road_week
    

    同样由于受到双十二的影响,用户购买率远高于其余日期。

    def road_finding(df):
        pv2col = 0
        pv2cart = 0
        col2cart = 0
        cart2col = 0
        pv2buy = 0
        item_dict = defaultdict(list)
        data = df.sort_values(['user_id','date']).reset_index()
        cur = data['user_id'][0]
        count = 0
        for i in range(len(data)):
            #print(data['user_id'][i])
            if data['user_id'][i] == cur:
                behave = data['behavior_type'][i]
                if behave == 'pv':
                    count+=1
                if item_dict[data['item_id'][i]]:
                    if len(item_dict[data['item_id'][i]]) == 1 and list(item_dict[data['item_id'][i]])[0] == 'pv':
                        if behave == 'collect':
                            pv2col += 1
                        if behave == 'cart':
                            pv2cart += 1
                        if behave == 'buy':
                            pv2buy += 1
                    item_dict[data['item_id'][i]] = item_dict[data['item_id'][i]].add(data['behavior_type'][i])
                
                else:                 
                    item_dict[data['item_id'][i]] = set([data['behavior_type'][i]])
            else:
                item_dict = defaultdict(list)
                cur = data['user_id'][i]
                item_dict[data['item_id'][i]] = set([data['behavior_type'][i]])
        return [pv2col,pv2cart,pv2buy,count]
       
    
    sample = random.sample(users,500)
    dft = df[df['user_id'].isin(sample)]
    road = road_finding(dft)
    road 
    

    [5214, 6639, 2102, 556358]
    [5949, 7607, 2206, 620156]
    [4889, 6252, 2219, 555777]
         ~~~~      由于之前是对路径作粗略地分析,这里做了更细致的处理,例如点击之后是收藏还是加入购物车;随机采取500个用户的样进行分析,这里可以发现用户点击之后若有后续行为则大部分是加入购物车,然后是加入收藏和购买。仍然有部分商品用户是点击浏览之后直接购买的,在实际中可以着重研究购买的这类产品是什么以及它们的特性,通过对产品的优化以及精准运营能够加强这部分的转化。另外还可以对收藏到购买以及加入购物到购买的转化分析,有利于监控业务以及精细化运营。

    #用户在购买一个大类之前会加入多少个收藏和购物车
    def before_buy(df):
        users = set(df['user_id'].unique())
        con = []
        for i in users:
            dfi = df[df['user_id'] == i]
            
            dfi_buy = dfi[dfi['behavior_type'] == 'buy'].groupby('item_category').size().reset_index().rename(columns = {0:'buy_count'})
            dfi_pv = dfi[dfi['behavior_type'] == 'pv'].groupby('item_category').size().reset_index().rename(columns = {0:'pv_count'})
            dfi_tol = pd.merge(dfi_buy,dfi_pv,how = 'outer',on='item_category').reset_index()
            dfi_tol = dfi_tol.fillna(0)
            con.append(dfi_tol)
        cons = pd.concat(con,axis=0,ignore_index=True)
        cons_ = cons.groupby('item_category').sum().reset_index()
        cons_['conv'] = cons_['buy_count']/cons_['pv_count']
        
        return cons_
    before_buy = before_buy(dft)
    

         ~~~~      在用户购买一件商品之前会进行许多类似的点击收藏等行为,每个商品之间差别会比较大,因此在实际中需要针对某一商品进行深入的分析。
         ~~~~      由于数据包含了不同种类的各种商品,因此无法进行更为精准的分析。从已有的分析可以看出,用户收藏加入购物车购买的行为仅占到总共的2.5%左右,大部分的用户行为还是对商品点击进行详情页访问,因此怎么加强点击到其他用户行为的转化是一个重点。APP可以优化商品推荐以及精准搜索使得用户能用更少的选择获得心仪的商品。另外,可以观察不同类型人群了解不同类型人群用户行为路径的差异,对转化率异常的人群进行调整。

    repurchase=df.groupby(['item_id','user_id']).count()['behavior_type']
    for i in range(1,10):
        repurchase_rate = len(repurchase[repurchase>i])/len(repurchase)
        print('重复',i,'次购买率:',repurchase_rate)
    repurchase[repurchase>10].sort_values(ascending=False)
    重复 1 次购买率: 0.7151618637804401
    重复 2 次购买率: 0.3232069613544463
    重复 3 次购买率: 0.16125676992744037
    重复 4 次购买率: 0.09330871722569953
    重复 5 次购买率: 0.06594886517837788
    重复 6 次购买率: 0.04777055386668897
    重复 7 次购买率: 0.03652283042281216
    重复 8 次购买率: 0.02849066249276708
    重复 9 次购买率: 0.022771321964350028
    
    item_id    user_id  
    343684208  5950556      128
    127427928  59659116     124
    41577581   8440456      120
    320987891  71142425     113
    109259240  123842164    112
    353142251  31663890     102
    113797961  70240139     101
    25330046   137175187     99
    343109466  82448685      99
    

         ~~~~      71%的商品都存在重复购买的现象,而当月重复购买四次以上的比例便只有9%左右了。最高的重复购买能够达到128次,这些相当高次数的购买极有可能是企业公司等的行为,这同时也可以作为筛选用户的一个特征。另外,这类商品的属性以及形式是否能给与其他商品借鉴也是一个值得注意的点。

    repurchase_cate = df.groupby(['item_category','item_id','user_id']).count()['behavior_type'].sort_values('item_category')
    repurchase_cate = repurchase_cate.reset_index()
    high_repeat = list(repurchase_cate[repurchase_cate['behavior_type']>80]['item_category'])
    num  = defaultdict(int)
    lengths  = defaultdict(list)
    for i in high_repeat:
        length = len(repurchase_cate[repurchase_cate['item_category']==i])
        lengths[i] = length
        num[i] += 1
    value = []
    for i in high_repeat:
        value.append(num[i]/lengths[i])
    result = pd.Series(value,index=high_repeat)
    result
    231     0.00036
    436     0.00019
    895     0.00018
    1838    0.00005
    1863    0.00001
    1863    0.00001
    2953    0.00006
    3381    0.00003
    4296    0.00007
    4830    0.00012
    5027    0.00002
    5027    0.00002
    5232    0.00002
    5395    0.00003
    5689    0.00002
    5894    0.00002
    5894    0.00002
    6000    0.00002
    6513    0.00001
    6977    0.00011
    7767    0.00010
    10392   0.00003
    10703   0.00015
    10894   0.00002
    12090   0.00010
    12658   0.00120
    12658   0.00120
    13230   0.00002
    13230   0.00002
    13230   0.00002
    

         ~~~~      筛选一些购买次数超过80次所处的大类,这类购买次数超过80次的商品在大类中所占的比列都非常低,因此并不存在由于大类下品种少所造成的选择不足。对于商家商品来说,分析这些商品的特性(属性,价格,品牌,优惠等)并且进行针对性分析相信能够带来销售量的提升。
    ####3)留存率与活跃度分析

    #留存率分析,某日的留存率为用户在当日后N天的仍然在线的用户
    def retention(df,n):
        date = pd.Series(df.date.unique()).sort_values()[:-n] 
               
        retention_rates = []
        user = []
        for i in date:
            new_user = set(df[df.date == i]['user_id'].unique()) - set(user)
            user.extend(new_user)
            user_n = df[df.date == i+timedelta(n)]['user_id'].unique()
            a = 0
            for j in user_n:
                if j in new_user:
                    a+=1
            #print(a,len(new_user))
            retention_rate = a/len(new_user)
            retention_rates.append(retention_rate)
            #print(len(retention_rates),len(date))
        total_retention_rate = pd.Series(retention_rates,index=date)
        return total_retention_rate
        
    def au(df,datetime):
        #定义活跃度
        group = df.groupby('behavior_type').count().reset_index()
        user_id = list(set(df.user_id))
        user = len(user_id)
        pv_mean = float(group[group.behavior_type == 'pv']['user_id']/user)
        coll_mean = float(group[group.behavior_type == 'collect']['user_id']/user)
        cart_mean = float(group[group.behavior_type == 'cart']['user_id']/user)
        buy_mean =float(group[group.behavior_type == 'buy']['user_id']/user)
        user_group = df.groupby(['user_id','behavior_type'])['daily'].count().reset_index()
        au_users = []
        
        for i in range(user):
            #计算pv_mean和buy_mean,大于两倍buy_mean和4倍pv_mean的定义为活跃用户
            user_group_i = user_group[user_group['user_id'] == user_id[i]]
            if not list(user_group_i[user_group_i['behavior_type']=='pv']['daily']): 
                continue
            pv_mean_i = float(user_group_i[user_group_i['behavior_type']=='pv']['daily'])
            if not list(user_group_i[user_group_i['behavior_type']=='buy']['daily']): continue
            buy_mean_i = float(user_group_i[user_group_i['behavior_type']=='buy']['daily'])
            if pv_mean_i > (pv_mean * 2):
                au_users.append(user_id[i])
            else:
                if buy_mean_i > (2* buy_mean): au_users.append(user_id[i])
                #筛选活跃用户
        df_au = df[df['user_id'].isin(au_users)]
        
        #计算活跃用户每个时间段的比例
        date1 = pd.Series(df[datetime].unique())
        data1 = df.groupby(datetime)['user_id'].nunique().reset_index()
        data2 = df_au.groupby(datetime)['user_id'].nunique().reset_index()
        data2 = data2.rename(columns = {'user_id':'user_id_au'})
        
        data3 = pd.merge(data1,data2,on=datetime)
        
        data3['activity_rate'] = data3['user_id_au']/data3['user_id']
        return data3
    
    retention3 = retention(df,3)
    retention7 = retention(df,7)
    au_user_date = au(df,'date')
    

    3日留存率
    image.png
    7日留存率
    image.png
    每日活跃用户比例
    image.png

    (放宽活跃用户条件)
    image.png
         ~~~~      从留存率和活跃度可以得到以下启示:由于数据是一段截取数据,因此前一两天记录的用户可能大多数都是经常上APP的用户,所以留存较高,还从中间的数据可以看出留存率一般维持到40%到50%之间,而双十二作为活动日,大部分新用户都会在这天上线,所对应的留存率也较高。从活跃用户比例可以看出平均每日的活跃度在27%-28%,而双十二当天活跃用户比例下降到24.8%,表明这天普通用户的比例增多。通过更改活跃用户(放宽条件)的定义可以看出,双十二活跃用户比例下降更为明显,针对此类现象,重点研究是活动的某种属性刺激了非活跃用户在双十二这天的用户行为,例如优惠,玩法等。

    ####4)用户聚类

    def cluster(df):
        #根据购买行为
        data_behavior = df.groupby(['user_id','behavior_type']).count()['item_id'].unstack().reset_index()
        data_behavior = data_behavior.fillna(0)
        data_behavior1 = data_behavior.copy()
        
        data_behavior1.iloc[:,1:] = standscaler.fit_transform(data_behavior1.iloc[:,1:])
        #根据购买时间,1:week(k=3);2:每日时间点(k=3)
        data_daily = df.groupby(['user_id','daily']).count()['item_id'].unstack().reset_index()
        data_daily = data_daily.fillna(0)
        kmeans = KMeans(n_clusters = 3,max_iter = 300,tol = 0.001,init = 'k-means++')
        kmeans.fit(data_daily.iloc[:,1:])
        y_daily = kmeans.labels_
        
        data_week = df.groupby(['user_id','weekday']).count()['item_id'].unstack().reset_index()
        data_week = data_week.fillna(0)
        kmeans = KMeans(n_clusters = 3,max_iter = 300,tol = 0.001,init = 'k-means++')
        kmeans.fit(data_week.iloc[:,1:])
        y_week = kmeans.labels_
        
        data_behavior1['daily_feature'] = y_daily/3
        data_behavior1['weekday_feature'] = y_week/3
        data_behavior['daily_feature'] = y_daily
        data_behavior['weekday_feature'] = y_week
        
        kmeans = KMeans(n_clusters = 6,max_iter = 300,tol = 0.001,init = 'k-means++')
        kmeans.fit(data_behavior1.iloc[:,1:])
        data_behavior['cluster'] = kmeans.labels_
        return data_behavior
    

         ~~~~      在这里我先对聚类用到特征进行了筛选,首先选取了用户四类发生的次数,然后通过每日用户操作以及每周用户操作的用户行为预先做了聚类并将结果用作最终聚类的特征(根据聚类肘部规则将这两者都预先分为了3类),在最终聚类之前作了自定义的标准化操作,聚类类别设置为6类。

    n = 6
    pd.set_option('display.float_format', lambda x: '%.3f' % x)
    for i in range(n):
        data_i = data_behavior_total[data_behavior_total['cluster'] == i]
        data_i_behavior =  data_i[['pv','collect','cart','buy']]
        print('第',i+1,'个类别人数为:',len(data_i))
        print('第',i+1,'个类别用户行为次数的平均值为:',data_i_behavior.mean())
        print('第',i+1,'个类别用户时间维度类别平均:',data_i[['daily_feature','weekday_feature']].mean())
    print('总平均值为:',data_behavior_total[['pv','collect','cart','buy']].mean(),data_behavior_total[['daily_feature','weekday_feature']].mean())
    
    #结果如下:1 个类别人数为: 12821 个类别用户行为次数的平均值为: behavior_type
    pv        1633.161
    collect     36.981
    cart        43.646
    buy         17.5631 个类别用户时间维度类别平均: behavior_type
    daily_feature     0.541
    weekday_feature   0.4422 个类别人数为: 562 个类别用户行为次数的平均值为: behavior_type
    pv        4523.696
    collect     63.547
    cart       377.321
    buy         92.8212 个类别用户时间维度类别平均: behavior_type
    daily_feature     1.429
    weekday_feature   1.3573 个类别人数为: 23 个类别用户行为次数的平均值为: behavior_type
    pv        22922.000
    collect    2767.500
    cart        177.500
    buy          33.0003 个类别用户时间维度类别平均: behavior_type
    daily_feature     2.000
    weekday_feature   2.0004 个类别人数为: 3444 个类别用户行为次数的平均值为: behavior_type
    pv        3113.215
    collect     41.205
    cart       152.328
    buy         37.9304 个类别用户时间维度类别平均: behavior_type
    daily_feature     1.148
    weekday_feature   1.0585 个类别人数为: 1535 个类别用户行为次数的平均值为: behavior_type
    pv        5199.196
    collect    266.164
    cart        62.483
    buy         21.3495 个类别用户时间维度类别平均: behavior_type
    daily_feature     1.634
    weekday_feature   1.5296 个类别人数为: 31636 个类别用户行为次数的平均值为: behavior_type
    pv        462.948
    collect    12.396
    cart       12.813
    buy         5.7136 个类别用户时间维度类别平均: behavior_type
    daily_feature     0.017
    weekday_feature   0.004
    
    总平均值为: behavior_type
    pv        1144.722
    collect     37.036
    cart        39.507
    buy         13.226
    
    daily_feature     0.296
    weekday_feature   0.251
    
    #将结果可视化出来
    plt.figure(figsize = (16,7))
    sns.barplot(x=plot['cluster'],y=plot['value'],hue='behavior_type',data = plot)
    
    plt.figure(figsize = (16,7))
    sns.barplot(x='cluster',y='value',hue='behavior_type',data = plot[plot['behavior_type'] != 'pv'])
    
    plt.figure(figsize = (16,7))
    sns.barplot(x='cluster',y='value',hue='behavior_type',data = plot[plot['behavior_type'] == 'buy'])
    
    plot.groupby('cluster').count()['user_id'].plot.bar(rot = 0)
    plt.ylabel('Number of Class ')
    

    下载 (16).png

    下载 (17).png

    下载 (20).png

    下载 (19).png

         ~~~~      可以看出用户类别所占比例最高的为第一类和最后一类,人数分别是1282和3163,这两类人群都是属于用户行为较少的,并且最后一类的平均购买也远低于平均值,从而拉低了总体的平均值,第一类用户的购买仅高于最后一类。由此可以知道绝大部分用户都属于这一部分用户,可以类比与2/8法则中对应的8。
         ~~~~      其次是第四类和第五类用户,人数分别是344,155。第四类用户加入购物车多而收藏少,第五类用户点击和收藏多而加入购物车少。
         ~~~~       最后人数最少的为第二类和第三类用户,人数分别为56和2人。第二类用户用户行为较多,并且更为重要的是其购买行为明显高于其他类型的用户,可以说这类用户属于高价值用户,高价值需要与其建立稳固的关系,维持活跃度并且及时阻止流失。第三类属于比较极端型的类型,他们的点击浏览行为特别高但是并没有带来所匹配的购买量。
         ~~~~       这里用的是随机选取的5000名用户的分类,当数据量增大时,每个群体的特征会更加明显。这样的用户分群能够为业务分析、运营、管理提供更多的信息,有利于精细化运营,并且能够从用户行为上迅速地抓住目标用户。

    总结:

    1)抓住用户的行为习惯,根据不同类型用户精准运营,进行个性化推荐;
    2)根据时间维度进行有效地拉新促活活动,以及老用户的访问。根据复购率来刺激用户的持续消费,根据留存监控用户的持续用户行为,防止流失并且对用户行为给与一定的刺激;
    3)对高价值用户需要提供优惠策略使其保持活跃度,针对不同用户行为人群制定针对性策略从而刺激进一步的用户行为,针对不活跃用户以及大部分的低购买用户采取相应措施刺激或者提高活跃度。

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

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

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

    用户行为分析是什么(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这么多下来,主要是为了让大家对行为分析有个了解,知道是个什么东西。

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

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

    展开全文
  • 电商用户行为数据分析

    万次阅读 多人点赞 2019-05-15 20:00:54
    本文针对淘宝app的运营数据,以行业常见指标对用户行为进行分析,包括 一、提出问题 1.电商常用分析体系 2.电商常用分析指标 3.本次分析的业务问题以及分析逻辑 本次想通过对淘宝用户行为数据的分析,解决...
  • 爬虫随机从CSDN博客取得800条用户行为数据,包含用户名、原创博客数、评论数、浏览量,试着从博客数,评论数,浏览量三个方面分析csdn的博主们的形象。 原创博客数 博主们的原创博客数并不是很多,50篇以下的占了70%...
  • 阿里天池:淘宝用户行为分析项目

    千次阅读 2020-06-28 14:44:08
    本数据分析报告,以阿里天池的淘宝平台交易数据集为基础,通过行业指标对淘宝用户行为进行分析,从而探索电商行业用户行为模式,并提出优化建议。 具体指标包括:PV、UV、付费率、复购率、漏斗流失分析、用户价值...
  • 淘宝APP用户行为分析

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

    千次阅读 多人点赞 2021-01-21 21:00:00
    【面试题】小红书月活跃用户数已经过亿,用户在小红书上通过文字、图片、视频笔记分享生活,并创建相关商品链接,吸引相同爱好的用户进行收藏购买,用户的消费有什么行为特征呢?(小红书面试题)现有...
  • 数据分析之实战项目——电商用户行为分析

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

    千次阅读 多人点赞 2020-03-25 22:53:58
    user_id:用户身份 item_id:商品id behavior_type:用户行为类型(包括点击、收藏、加入购物车、支付四种行为,分别用数字1、2、3、4表示) user_geohash:地理位置 item_category:品类id(商品所属的分类) time:...
  • 实战|淘宝用户行为分析案例

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

    千次阅读 2017-07-24 13:05:11
    如果你正在构建一个带有流星的SaaS产品,可能会出现的一个特性是跟踪用户和客户如何与你的产品交互。...“跟踪”的行为是什么?像“追踪”这样的术语,在涉及用户隐私的问题上,会产生很多负面的联想
  • 用户行为分析系统是指由第三方提供的集合了数据采集SDK、数据分析模型、分布式算法与存储架构的用户属性与行为事件数据分析的系统。比如国外MixPanel、Heap等,用户行为数据分析的前提是在前期埋点时打好扎实的基础...
  • 数据分析-淘宝用户行为分析

    千次阅读 2019-10-02 12:04:43
    一、项目背景和目的 ...userId=1,通过此项目学习电商数据分析的指标与数据分析的基本方法。 二、分析维度 根据现有数据及分析目的,从四个维度进行分析: ...以PV、UV、平均访问量、跳失率等指标,分析用户最活跃的...
  • 用户画像—打用户行为标签

    万次阅读 2018-09-12 10:19:17
    用户画像的应用流程从原始的数据输入到模型应用可分为5块(图1),包括将操作型环境数据经ETL后集中存储在数据仓库,之后经过对数据的建模、挖掘、分析建立用户画像模型,最终将建好用户画像的数据接口调用到BI报表...
  • 用户行为日志概述

    千次阅读 2018-10-17 15:44:30
    什么是用户行为日志呢?其实也叫做用户行为轨迹,流量日志等。简单来说,就是用户每次访问网站产生的行为数据(访问,浏览,搜索,点击等)。基本上,只要你访问了任何一个网站,该网站都会有你的行为记录。 当然,...
  • 淘宝APP用户行为数据分析案例(附python代码及注释)

    千次阅读 多人点赞 2020-01-06 14:16:27
    淘宝APP用户行为数据分析案例 一.分析背景与目的 1.1背景与数据限制 电商平台的最核心的功能就是为买卖双方提供高效和体验良好的交易服务。得益于算法技术的发展,淘宝APP给买方提供了搜索、推荐及广告等系统和...
  • 基于Spark的用户行为分析系统

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

    千次阅读 2019-08-06 15:12:23
    该项目的数据集来源于天池,是由阿里巴巴提供的一个淘宝用户行为数据集,其中包含了2017年11月25日至2017年12月3日之间,一百万个随机用户的所有用户行为(行为包括点击、购买、加购、收藏)数据,有关每个字段的...
  • 数据分析案例--淘宝用户行为分析

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

    万次阅读 2020-09-22 07:00:00
    用户行为简介用户行为分析主要关心的指标可以概括如下:哪个用户在什么时候做了什么操作在哪里做了什么操作,为什么要做这些操作,通过什么方式,用了多长时间等问题,总结出来就是WHO,WHEN,...
  • 六种常见的「用户行为」分析方法

    千次阅读 2020-04-10 23:20:24
    日常的用户行为分析中,常用的六大分析方法有:行为事件分析页面点击分析用户行为路径分析用户健康度分析漏斗模型分析用户画像分析用户分析能够更好地了解用户的行为习惯,发现产品在推广、拉新、用户...
  • 用户行为分析的指标及其意义

    万次阅读 2019-07-02 14:30:16
    什么是用户行为用户行为由最简单的五个元素构成,我们可以简单地记为3W2H:时间(When)、地点(Where)、人物(Who)、交互(Interaction)、交互的内容。 “事件”这个概念在用户行为分析中是一个基本的单位,...
  • 如何利用用户行为数据进行推荐

    千次阅读 2018-09-29 10:12:57
    大家好,今天我针对推荐系统理论-利用用户行为数据进行推荐,为大家带来这篇文章。希望能搞帮助到大家。下图为本篇文章的概括。 1、用户行为数据 用户行为数据在网站上最简单的存在形式就是日志,比如用户在电子...
  • 用户行为分析过程 说明 本次数据分析基于阿里云天池数据集(用户行为数据集),使用转化漏斗,对常见电商分析指标,包括转化率,PV,UV,复购率等进行分析,分析过程中使用Python进行数据的清洗,清洗后的数据导入...
  • 利用用户行为数据进行推荐

    千次阅读 2018-05-29 18:46:39
    基于用户行为数据的推荐系统已经非常流行了,今天我们就来介绍三种基本的推荐方法:基于邻域的算法、隐语义模型和基于图的模型。1. 用户行为数据 用户行为数据在网站上最简单的存在形式就是日志。用户行为在个性化...
  • 几种常用用户行为分析模型简述

    千次阅读 2020-04-26 20:00:57
    一、常见用户行为分析模型 在数据分析的大框架下,通过对用户行为监测获得的数据进行分析研究的行为归结于用户行为分析。用户行为分析可以让产品更加详细、清楚地了解用户的行为习惯,从而找...
  • 愉悦的一周又要开始了,本周菌哥打算用几期文章为大家分享一个之前在B站自学的一个项目——基于flink的电商用户行为数据分析。本期我们先对项目整体功能和模块做一个介绍。       &...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 995,317
精华内容 398,126
关键字:

用户行为