友盟+搜索

{{errorMsg}}

自定义事件

自定义事件类型说明

友盟为用户提供了自定义事件的功能,用于追踪用户行为,记录行为发生的具体细节。 我们提供了两种自定义事件的形式:计数事件、计算事件。

计数事件

计数事件统计事件的发生次数、独立用户数、事件时长及事件各参数的发生次数、时长。

事件ID 事件名称 发生次数 独立用户数
click 按钮点击 5881 931
play 播放 6322 1003
shop 进入商店 2318 335

针对play(播放)事件,还可以追踪到更细节的参数,如:

参数=style(歌曲类型)

参数值 发生次数 次数占比
轻音乐 5500 20.6%
摇滚 2778 10.4%
民歌 1335 5%

参数=singer(歌手)

参数值 发生次数 次数占比
刘若英 7985 23%
梁静茹 6323 18.2%
周杰伦 5572 16%

计数事件主要是以事件ID+参数+参数值为统计项,统计相应的PV、UV,其本质是针对字符串信息的计数。随着移动开发者运营的不断深入,这个方法的局限性逐渐显露。

如,一款拍照美化类应用,想了解相册的使用次数及每次打开相册的照片浏览张数。那么,以打开相册为事件,浏览张数为普通参数,可以得到如下报表:

参数值 发生次数 次数占比
1 217623 15.9%
2 171438 12.5%
3 122709 8.9%
4 93647 6.8%
5 74712 5.4%
6 60622 4.4%
7 49559 3.6%

虽然能得到照片浏览的张数,但这张报表的可读性较差。如果想了解平均每人浏览多少张照片,大多数人浏览多少张照片等信息还需运营人员进一步加工和整理。

类似的情景还有:

  • 一款游戏,想了解每天多少人购买道具,以及购买道具的金币消耗值;
  • 一款电商类应用,想了解每天多少人购买商品,以及消费额;
  • 一款媒体类应用,想了解每天多少人浏览内容,以及浏览内容的数量;

等等。

计算事件

程序中的某些事件,如登录、分享、下载等,是定性变量(categorical variable),对应的统计项是字符串类型。开发者只需了解它们发生的次数及独立用户数,使用计数事件即可满足。

还有一些事件,如上面提到的支付金额、内容浏览数量等是连续变量,对应的统计项是数值类型。开发者需要查看这些事件的数值分布特征,这就需要使用计算事件。

计算事件可以解决的一些问题:
(1)对某个参数值求和
(2)计算某个参数值的单次均值及单用户均值
(3)近似得到某个参数值的概率分布函数[1]  
(4)近似得到某个参数值的累计分布函数[2]

其中,
概率分布函数由**p%分位数取值**近似估计。按次数(人数)的分位数取值,即单次(单设备)的参数值从小到大排列后第p%的取值。
累计分布函数由**p%累计值贡献**近似估计。按次数(人数)的累计值贡献,即单次(单设备)的取值小于某数的所有次数(设备)的累计值贡献了总体累计值的p%

以游戏中的“道具购买”事件为例,如果想了解道具购买的情况,可以这样上报自定义事件
itemsBuy(itemId=001, payment=50)
itemsBuy(itemId=003, payment=25)
itemsBuy(itemId=012, payment=20)
...

使用计算事件,可以得到如下报表:

购买次数 购买人数 购买金额 单次购买金额 人均购买金额
1100 1000 54980 50 55

人均购买金额为55元,这是否意味着大部分玩家的购买额都在50-60元之间呢?回答这个问题,需要进一步了解人均购买金额的分布情况:


图1

从图1不难发现,80%的玩家购买金额在40元以下,大部分玩家的消费额是较低的。存在少量玩家(20%)不惜消耗重金购买道具,这部分玩家的人均购买金额为80元,而他们的消费总额占到了全部玩家累计购买金额的40%(图2)。


图2

在产品运营的过程中,应该更重视这部分高消费玩家的体验,给予及时的响应和回馈。而对剩余玩家,我们了解到他们的消费力在20-40元区间内,可以根据这个数据合理定价,开展适当的促销活动。

由上可知,针对计算事件,除了统计常规的发生次数、人数,还需做出定量的分析,才能更准确的了解用户的行为,为产品运营和决策提供帮助。

配置

使用计算事件需要
1. 集成友盟统计分析SDK,并配置自定义事件 — 计算事件
2. 在友盟后台创建事件id,选择类型为计算事件

SDK集成

我们通过将ekv事件的某参数标记成数值型来实现对计算事件的统计,您可以通过如下方式配置数值型参数:

Android平台

如果您的SDK是5.2.2版本以前,调用以下方法集成数值型自定义事件

public static void onEvent(Context context, String id, HashMap<String,String> m, int value){
m.put("__ct__", String.valueOf(value));
MobclickAgent.onEvent(context, id, m);
}
如果您的SDK是>=5.2.2版本,调用以下方法集成数值型事件
MobclickAgent.onEventValue(Context context, String id, Map<String,String> m, int du)

id 为事件ID
map 为当前事件的属性和取值
du 为当前事件的数值,取值范围是-2,147,483,648 到 +2,147,483,647 之间的有符号整数,即int 32整型,如果du数据值超过该范围,会造成数据丢包,影响数据统计的准确性。

iOS平台

    -(void)umengEvent:(NSString *)eventId attributes:(NSDictionary *)attributes number:(NSNumber *)number{
    NSString *numberKey = @"__ct__";
    NSMutableDictionary *mutableDictionary = [NSMutableDictionary dictionaryWithDictionary:attributes];
    [mutableDictionary setObject:[number stringValue] forKey:numberKey];
    [MobClick event:eventId attributes:mutableDictionary];
}

Demo: [self umengEvent:@"production" attributes:@{@"name" : @"iPad",@"color" : @"black"} number:@(10)];

WindowsPhone和RT平台

    public static void onEvent(string id, System.Collections.Generic.Dictionary<string, string> kv, long value)
        {
            try
            {
                if (kv == null)
                    kv = new System.Collections.Generic.Dictionary<string, string>();
                 if (kv.ContainsKey("__ct__"))
                {
                    kv["__ct__"] = value.ToString();
                }
                else
                {
                    kv.Add("__ct__", value.ToString());
                }
                 UmengSDK.UmengAnalytics.onEvent(id, kv);
            }
            catch (Exception)
            {
            }
        }

注意:
1.每个事件只能有一个__ct__ 字段,即每个事件只能统计一个数值型参数。
2.__ct__ 字段的取值是不超过32位的int型。

后台设置

如果要使用数值型的参数,请在后台添加自定义事件时,选择“计算事件”的事件类型。

查看

入口1:在事件列表页面点击“查看”进入某事件的详情报表中。若为计算事件,会默认显示该事件的数值型参数报表。

入口2:在事件详情页快速切换同一事件的数值型及字符串型参数的报表

FAQ

Q:为什么有的事件有字符串型和数值型两页报表?
A:对于计数事件,仍是原来的一页报表,即事件消息数和参数取值分布。
对于计算事件,字符串型报表页仍展示原来的事件消息数和参数取值分布;数值型报表页展示数值型的事件消息数、数值型参数的取值分布及累计贡献值分布。

Q:计算事件在数值型报表页和字符串型报表页中的事件消息数为何会不相等?
A:有的事件在发生时不一定会触发所有的参数。只要触发了数值型参数,那么这次消息在数值型报表中的事件消息数中会被计算;只要触发了字符串型参数,那么这次消息在字符串型报表中的事件消息数中会被计算。一次事件可能在数值型参数和字符串型参数的事件消息数中同时被计算。

Q:如果同一个事件传了2个数值型参数,会怎样?
A:每个事件只能有一个__ct__ 字段,如果同时统计了多个数值型参数,则后面的调用会将前面的结果覆盖,最终只回传一个数值结果。

Q:自定义事件在使用时有哪些限制?
A:自定义事件至多传递10个参数,且每个事件只能传递一个数值型参数。 自定义事件和参数名的长度不能超过64个字符;字符型参数值的长度不能超过256个字符,数值型参数的取值不能超过32位的int型;字符型参数至多传递1000个不同取值。

1 概率分布函数:描述参数值在某个确定的取值点附近的可能性的函数。
2 累计分布函数:参数值落在某个区域之内的概率则为概率密度函数在这个区域上的积分。当概率密度函数存在时,累计分布函数是概率密度函数的积分。