A/B 测试

如果电子邮件投放有多个内容,并且想了解哪个版本对目标用户群影响最大,可以将不同版本发送给某些收件人,然后选择成功率最高的版本并发送给其他收件人。

在此用例中,我们将通过定位工作流来比较两个电子邮件投放内容。 消息和文本在两个投放中是相同的:只更改布局。

目标人口分为三个:两个测试组和剩余人口。 投放的不同版本将发送到每个测试组。 在投放之后,在收集最佳打开速率的结果之前配置5天的等待时间。 得分最高的投放的内容随后由脚本恢复,并发送给未用作测试组的人群。

请注意,将决定哪个投放最佳的标准可能会根据您的需要而更改。 可以是开放率、点击率、订阅率、反应性等。

此外,此用例中详细介绍的测试只涉及两个投放,但您可以根据需要测试任意多个版本。 只需向工作流中添加活动。

要创建A/B测试,请应用以下步骤:

第1步:创建定位工作流

您需要在活动的​Targeting and Workflows​选项卡中创建工作流。 它由​Query​活动、链接到两个​Email delivery​活动的​Split​活动、Wait​活动、JavaScript code​活动和​Delivery​活动组成。

  1. 如果尚未创建活动,请创建此区域(有关详细信息,请参阅此部分)。

  2. 转到 Targeting and Workflows 选项卡。

  3. 更改现有工作流的标签或单击​Add​以创建新工作流(有关详细信息,请参阅此部分)。

  4. 使用鼠标将活动拖放到工作流图中,包括​QueryTarget​选项卡)、SplitTarget​选项卡)、两个​Email deliveriesDeliveries​选项卡)、Wait​活动(Flow Control​选项卡)、JavaScript code​活动(Actions​选项卡)和​Delivery​活动(Actions​选项卡)。

第2步:配置填充示例

配置查询活动

  • 多次-单击​Query​活动。

  • 单击​Edit query​链接,然后选择要目标的收件人。

  • 将​Query​活动链接到​Split​活动。

配置拆分活动

此活动允许您创建多个人群:接收投放A的投放B,以及剩余人口。 使用随机选择,您只能目标每个投放的一部分人口。

  1. 创建人口A:

    • 多次-单击​Split​活动。

    • 在现有选项卡中,将标签更改为填充A。

    • 选择​Limit the selected records​选项。

    • 单击​Edit​链接,选择​Activate random sampling,然后单击​Next

    • 将阈值设置为10%,然后单击​Finish

  2. 创建人口B:

    • 单击​Add​为人口B创建新选项卡。

    • 将人口限制为以前的10%。

  3. 创建剩余人口:

    • 转到 General 选项卡。

    • 选择 Generate complement

    • 更改标签以指定此填充不包括A和B,然后单击​OK​以关闭活动。

第3步:创建两个投放模板

我们现在想创建两个投放模板。 每个模板都将在链接到​Split​活动的​Email delivery​活动中引用。 有关更多信息,请参阅此](…/…/delivery/using/about-templates.md)章节[。

  1. 转到​Resources > Delivery template​文件夹。

  2. 重复​Email​投放模板。

  3. 创建要用于投放A的内容。

  4. 重复此过程以为投放B创建模板。

第4步:在工作流中配置投放

下一步是配置投放。 它们的目标是前一阶段创造的三个人口:步骤2:配置填充示例。 前两个投放允许您向群体A和B发送不同的内容。第三个投放用于未接收A和B的群体。其内容将由脚本计算,并且与A或B相同,具体取决于打开率最高的群体。 我们需要为第三个投放配置等待期,以了解投放A和B的结果。这就是为什么第三个投放包括​Wait​活动。

  1. 转到​Split​活动,将用于填充A的过渡链接到工作流中已有的电子邮件投放之一。

  2. 多次-单击投放以打开它。

  3. 使用下拉列表,选择投放A的模板。

  4. 单击​Continue​视图投放,然后保存它。

  5. 将用于人口B的​Split​活动的过渡链接到第二个电子邮件投放。

  6. 打开投放,在投放B中选择模板,然后保存投放。

  7. 将用于剩余人口的过渡链接到​Wait​活动。

  8. 打开​Wait​活动并配置5天的等待期。

  9. 将​Wait​活动链接到​JavaScript code​活动。

第5步:创建脚本

投放内容的选择将由脚本计算。 此脚本以最高打开率恢复有关投放的信息,并将内容复制到最终投放。

脚本的示例

以下脚本可以像在定位工作流中一样使用。 有关详细信息,请参阅实施

 // query the database to find the winner (best open rate)
   var winner = xtk.queryDef.create(
     <queryDef schema="nms:delivery" operation="get">
       <select>
         <node expr="@id"/>
         <node expr="@label"/>
         <node expr="[@operation-id]"/>
         <node expr="[@workflow-id]"/>
       </select>
       <where>
         <condition expr={"@FCP=0 and [@workflow-id]= " + instance.id}/>
       </where>
       <orderBy>
         <node expr="[indicators/@estimatedRecipientOpenRatio]" sortDesc="true"/>
       </orderBy>
     </queryDef>).ExecuteQuery()
   
   // create a new delivery object and initialize it by doing a copy of
   // the winner delivery
   var delivery = nms.delivery.create()
   delivery.Duplicate("nms:delivery|" + winner.@id)

   // append 'final' to the delivery label
   delivery.label = winner.@label + " final"

   // link the delivery to the operation to make sure it will be displayed in
   // the campaign dashboard. This attribute needs to be set manually here since 
   // the Duplicate() method has reset it to its default value => 0
   delivery.operation_id = winner.@["operation-id"]
   delivery.workflow_id = winner.@["workflow-id"]

   // adjust some delivery parameters to make it compatible with the 
   // "Prepare and start" option selected in the Delivery tab of this activity
   delivery.scheduling.validationMode = "manual"
   delivery.scheduling.delayed = 0
 
   // save the delivery in database
   delivery.save()
 
   // store the new delivery Id in event variables
   vars.deliveryId = delivery.id

有关脚本的详细说明,请参阅脚本的详细信息

实现

  1. 打开​JavaScript code​活动。

  2. 脚本示例中提供的脚本复制到​JavaScript code​窗口中。

  3. 在​Label​字段中,输入脚本的名称,即

    <%= vars.deliveryId %>
    

  4. 关闭​JavaScript code​活动。

  5. 保存您的工作流。

脚本的详细信息

本节详细介绍了脚本的各个部分及其操作模式。

  • 脚本的第一部分是查询。 使用​queryDef​命令,您可以从​NmsDelivery​表中恢复通过执行定位工作流创建的投放,并根据其估计的打开率对它们进行排序,然后恢复来自打开率最高的投放的信息。

    // query the database to find the winner (best open rate)
       var winner = xtk.queryDef.create(
         <queryDef schema="nms:delivery" operation="get">
           <select>
             <node expr="@id"/>
             <node expr="@label"/>
             <node expr="[@operation-id]"/>
           </select>
           <where>
             <condition expr={"@FCP=0 and [@workflow-id]= " + instance.id}/>
           </where>
           <orderBy>
             <node expr="[indicators/@estimatedRecipientOpenRatio]" sortDesc="true"/>
           </orderBy>
         </queryDef>).ExecuteQuery()
    
  • 打开率最高的投放重复。

     // create a new delivery object and initialize it by doing a copy of
     // the winner delivery
    var delivery = nms.delivery.create()
    delivery.Duplicate("nms:delivery|" + winner.@id)
    
  • 修改复制投放的标签,并将单词​final​添加到该标签中。

    // append 'final' to the delivery label
    delivery.label = winner.@label + " final"
    
  • 投放被复制到活动仪表板。

    // link the delivery to the operation to make sure it will be displayed in
    // the campaign dashboard. This attribute needs to be set manually here since 
    // the Duplicate() method has reset it to its default value => 0
    delivery.operation_id = winner.@["operation-id"]
    delivery.workflow_id = winner.@["workflow-id"]
    
    // adjust some delivery parameters to make it compatible with the 
    // "Prepare and start" option selected in the Delivery tab of this activity
    delivery.scheduling.validationMode = "manual"
    delivery.scheduling.delayed = 0
    
  • 投放保存在数据库中。

    // save the delivery in database
    delivery.save()
    
  • 复制投放的唯一标识符存储在工作流变量中。

    // store the new delivery Id in event variables
    vars.deliveryId = delivery.id
    

其他选择条件

以上示例允许您根据电子邮件打开率选择投放的内容。 您可以根据其他投放特定指标调整它:

  • 最佳点击吞吐量:[indicators/@recipientClickRatio],
  • 最高反应率(打开电子邮件并在邮件中单击):[indicators/@reactivity],
  • 最低投诉率:[indicators/@refusedRatio]
  • 最高转化率:[indicators/@transactionRatio],
  • 接收消息后访问的页数:[indicators/@totalWebPage],
  • 最低退订率:[indicators/@optOutRatio],
  • 交易金额:[indicators/@amount]

第6步:定义最终投放

创建脚本以选择A/B测试入选方后,您可以定义最终投放的参数。

  1. 将​JavaScript code​活动连接到其余​Delivery​活动。

  2. 打开​Delivery​活动。

  3. 取消选中​Generate an outbound transition​选项,以使用此活动完成工作流。

  4. 保留其他选项的默认值。

准备在过渡中指定的投放(通过​Javascript Code​活动定义)后,您便可以批准该并开始发送,如下一步所述。

第7步:启动工作流

  1. 单击​Start​工作流。

  2. 通过目标仪表板批准投放A和B的活动和内容。

  3. 确认投放。

  4. 等到5天期间结束,了解在投放开始结果后计算了哪些内容。

    在这种情况下,选择模板B。

  5. 确定第三个投放的内容后,批准该目标和该内容。

第8步:分析结果

发送测试投放后,您可以检查已将其发送到的收件人以及是否已打开它们。

  • 要查找哪些收件人是目标投放,请通过活动仪表板打开一个,然后单击​Delivery​选项卡。

  • 要了解投放是否已打开,请转至​Tracking​选项卡。

  • 与其他投放比较。

在我们的例子中,投放B的公开率最高。 这意味着内容B将用于最终投放。

在此页面上