<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>实验与增长 on Saiga</title>
    <link>http://localhost:1313/categories/%E5%AE%9E%E9%AA%8C%E4%B8%8E%E5%A2%9E%E9%95%BF/</link>
    <description>Recent content in 实验与增长 on Saiga</description>
    <generator>Hugo</generator>
    <language>zh-cn</language>
    <managingEditor>wuwenzen@outlook.com (wuwj)</managingEditor>
    <webMaster>wuwenzen@outlook.com (wuwj)</webMaster>
    <lastBuildDate>Thu, 20 Apr 2023 00:00:00 +0000</lastBuildDate>
    <atom:link href="http://localhost:1313/categories/%E5%AE%9E%E9%AA%8C%E4%B8%8E%E5%A2%9E%E9%95%BF/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>前端视角下的 A/B Test：埋点、分流与验证</title>
      <link>http://localhost:1313/posts/2023-04-20-ab-testing-in-frontend/</link>
      <pubDate>Thu, 20 Apr 2023 00:00:00 +0000</pubDate><author>wuwenzen@outlook.com (wuwj)</author>
      <guid>http://localhost:1313/posts/2023-04-20-ab-testing-in-frontend/</guid>
      <description>&lt;p&gt;「做个 A/B 实验看看」这句话听起来很轻松，真正落地时会发现：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;指标怎么算？&lt;/li&gt;&#xA;&lt;li&gt;实验人群怎么分？&lt;/li&gt;&#xA;&lt;li&gt;前端要怎么接入实验配置？&lt;/li&gt;&#xA;&lt;li&gt;实验结束之后，代码怎么收口？&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;这篇文章从前端的角度，讲一次相对完整的 A/B 实验闭环。&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;1-先确定为什么要做这个实验&#34;&gt;1. 先确定：为什么要做这个实验？&lt;/h2&gt;&#xA;&lt;p&gt;我们当时的实验目标是：&lt;strong&gt;提高某投资流程的转化率&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;p&gt;假设是：&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;把原本一个超长的单页表单拆成多步引导，是否能提高「填写完成率」。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;因此：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;实验对象：访问该流程的真实用户；&lt;/li&gt;&#xA;&lt;li&gt;对照组：看到旧版「单页表单」；&lt;/li&gt;&#xA;&lt;li&gt;实验组：看到新版「多步引导」；&lt;/li&gt;&#xA;&lt;li&gt;观测指标：完成率、平均耗时、中途流失位置等。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;只有先把这些定义清楚，后续埋点和分流才有方向。&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;2-埋点设计先有指标再谈实现&#34;&gt;2. 埋点设计：先有指标，再谈实现&lt;/h2&gt;&#xA;&lt;p&gt;这次我们重点关心几个指标：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;code&gt;flow_enter&lt;/code&gt;：进入流程的人数；&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;flow_complete&lt;/code&gt;：完成流程的人数；&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;step_view&lt;/code&gt;：在多步表单中，每一步的曝光；&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;step_error&lt;/code&gt;：每一步表单提交失败次数。&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;在前端埋点上做了几件事：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;所有埋点带上 &lt;code&gt;experiment_id&lt;/code&gt; 和 &lt;code&gt;variant&lt;/code&gt;（A / B）；&lt;/li&gt;&#xA;&lt;li&gt;关键事件使用统一的 &lt;code&gt;event_name&lt;/code&gt; + &lt;code&gt;event_params&lt;/code&gt; 格式；&lt;/li&gt;&#xA;&lt;li&gt;尽量避免把业务逻辑硬编码到埋点名里。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;示例：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-ts&#34; data-lang=&#34;ts&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;track&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;flow_enter&amp;#39;&lt;/span&gt;, {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;experimentId&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;exp_split_form_v1&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;variant&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;currentVariant&lt;/span&gt;, &lt;span style=&#34;color:#75715e&#34;&gt;// &amp;#39;A&amp;#39; 或 &amp;#39;B&amp;#39;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;});&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;track&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;step_view&amp;#39;&lt;/span&gt;, {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;experimentId&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;exp_split_form_v1&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;variant&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;currentVariant&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;step&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;1&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;});&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;track&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;flow_complete&amp;#39;&lt;/span&gt;, {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;experimentId&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;exp_split_form_v1&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;variant&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;currentVariant&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;});&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;&#xA;&lt;h2 id=&#34;3-分流让实验公平且可控&#34;&gt;3. 分流：让实验「公平」且可控&lt;/h2&gt;&#xA;&lt;h3 id=&#34;31-基本原则&#34;&gt;3.1 基本原则&lt;/h3&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;同一用户体验稳定&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;被分到 A 组，就一直看 A；&lt;/li&gt;&#xA;&lt;li&gt;避免一次访问是 A，刷新变 B。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;分配近似均匀&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
