mipengine / mip-extensions

[Deprecated] MIP 组件包括官方组件和开发者自定义组件,请到 mip2-extensions 查看官方组件
https://www.mipengine.org/doc/3-widget/10-widgets.html
MIT License
116 stars 458 forks source link

Mip-experiment 设计文档 #348

Closed jennyliang220 closed 7 years ago

jennyliang220 commented 7 years ago

简介

mip-experiment是一个用于页面实验的组件。站长通过配置实验变量,达到展示不同页面内容样式的目的。支持通过url配置,强制显示某个实验效果。

功能

  1. 支持单个抽样的分组,支持配置单用户在实验期间体验是否统一(用户刷新是否会进不同的实验分组)
  2. 支持配置多个抽样,且配置抽样间是否互相影响(实验一的A组和实验B的A组同时展现)
  3. 支持url强制抽样

技术方案

img

  1. 前端抽样分组:用户第一次访问页面时,为用户分组,储存在cookie中。多次访问时,从cookie中查看用户分组。
  2. 前端标记,修改样式:为标记分组,给body加上mip-x-name="groupA"属性。站长通过css选择器来控制前端样式。
  3. 强制抽样:根据url中的hash获取强制抽样分组,跳过步骤1,直接标记分组。
  4. 统计:支持百度统计或mip-pixel统计。

技术细节

抽样分组:

从Cookie中读取实验分组。已存在分组的用户,直接标记分组。未存在分组的用户,使用math.random进行分组。

cookie:

使用mip-cookie组件,在cookie中储存用户的实验分组,支持多组实验同时进行。

url:

强制抽样,支持配置多组实验

统计方案:

一. 百度统计

使用百度统计的自定义变量api,将实验名和实验分组作为参数加入到统计请求中。具体需要和百度统计对一下技术方案。

二. mip-pix:使用mip-pix统计组件发请求

站长在使用mip-pix组件时加入mip-x-A={mip-x-A-group}参数,在组件中会将mip-x-A-group替换成mip-x-A的分组,拼出最终请求。

// mip-pix 用法
<mip-pix src="https://yourselfdomain/mipurl/tj.gif?
    t={TIME}&title={TITLE}&host={HOST}
    &mip-x-A={MIP-X-A}&mip-x-B={MIP-X-B}
    &from=baidu">
</mip-pix>

// 产生的mip-pix请求
https://yourselfdomain/mipurl/tj.gif?
    TIME=1483961727115&
    title=%E…%97%E6%AC%A2%E8%BF%8E&
    host=http%3A%2F%2F172.20.130.52%3A8014%2Ffixed1.html&
    from=baidu&
    mip-x-A=groupRed&
    mip-x-B=groupYellow

广告统计计费(重要!)

现有广告计费方式为:页面加载后算一次广告展示。页面广告在隐藏元素中或用户未看到广告也算一次展示。

在实验中,如果广告外层元素为display:none,则应该不计费。

站长使用

例如,站长需要针对广告位A进行抽样,40%显示广告M,40%显示广告N,20%不显示广告。

抽样配置

<mip-experiment>
    <script type="application/json">
    {
        "ad-A-exp": {
            "variants": {
                "showM": 40,
                "showN": 40
            }
        }
    }
    </script>
</mip-experiment>

css代码

/* 40%流量显示广告M */
body[amp-x-ad-A-exp="showM"] .wrapper-A .M {
    display: block;
}
body[amp-x-ad-A-exp="showM"] .wrapper-A .N {
    display: none;
}

/* 40%流量显示广告N */
body[amp-x-ad-A-exp="showN"] .wrapper-A .M {
    display: none;
}
body[amp-x-ad-A-exp="showN"] .wrapper-A .N {
    display: block;
}

/* 20%流量不显示广告 */
body .wrapper-A .M,
body .wrapper-A .N {
    display: none;
}

未来计划

  1. 修改mip-pix代码,支持统计
  2. 与百度统计合作,支持统计
  3. 广告统计计费方案确认
  4. cookie中确认是否可以增加mip-experiment=bWlwLWV4cC1BPWdyb3VwQSZtaXAtZXhwLUI9
  5. 编写用户分组,url抽样,cookie抽样逻辑
  6. 支持实验分组,AB两个实验分组具有相关性
momofan commented 7 years ago

大致方向和方案我没什么问题,但我先指出四点:一、pix 怎么等组件修改好了才发日志;二、文档中说的广告隐藏的问题如何解决计费问题;三、站长用这个来验证什么,是模块下的点击或者什么用户信息呢,这个得考虑清楚,还得结合百度统计的 click 日志等进行深度的细化;四、业界比较流行的抽样是什么样子的,是否可能还有用户各个维度特征,如果用户特征 mip 不知道,可能还需要和站长的服务器做下交流,这个感觉比较难不过可以作为后续的一个方向。

jennyliang220 commented 7 years ago

@momofan

  1. 可以直接新建<mip-pix>插入到文档中,增加&stats=ready参数。
  2. 方法一:网盟投放脚本中对display:none做处理。方法二:如果pix先执行,可以考虑暴力地把隐藏的mip-ad移除
  3. 确实需要和百度统计深度结合。
  4. 用户特征比较难取,可以考虑区分iphone,andriod, 手百,uc这种客户端特征