การทดสอบที่จัดการโดยระบบ

การทดสอบที่ระบบจัดการใช้เพื่อทำการทดสอบ A/B กับการเปลี่ยนแปลงโดยการสร้างแคมเปญทดสอบที่แก้ไขได้ตั้งแต่ 1 รายการขึ้นไปซึ่งทํางานควบคู่ไปกับแคมเปญควบคุมเดิม เวิร์กโฟลว์นี้รองรับค่าต่อไปนี้ ExperimentType

  • SEARCH_CUSTOM: การทดสอบที่กําหนดเองซึ่งประกอบด้วยแคมเปญ Search
  • DISPLAY_CUSTOM: การทดสอบที่กําหนดเองซึ่งประกอบด้วยแคมเปญ Display
  • HOTEL_CUSTOM: การทดสอบที่กําหนดเองซึ่งประกอบด้วยแคมเปญโรงแรม
  • YOUTUBE_CUSTOM: การทดสอบที่กําหนดเองซึ่งประกอบด้วยแคมเปญวิดีโอ
  • PMAX_REPLACEMENT_SHOPPING: การทดสอบเพื่อดูประสิทธิภาพของแคมเปญ Shopping เมื่อเทียบกับ Performance Max

ตั้งค่า

การตั้งค่าการทดสอบที่ระบบจัดการมีขั้นตอนดังนี้

  1. สร้าง Experiment
  2. สร้างทรัพยากร ExperimentArm สําหรับกลุ่มควบคุมและกลุ่มทดสอบ
  3. แก้ไข in_design_campaigns ในกลุ่มทดสอบ

1. สร้างการทดสอบ

ขั้นตอนแรกในการทําการทดสอบโดยใช้ Google Ads API คือการสร้าง Experiment ทรัพยากรนี้กําหนดข้อมูลสําคัญบางอย่างเกี่ยวกับการทดสอบที่คุณต้องการทํา คุณไม่ต้องระบุแคมเปญใดๆ ที่เกี่ยวข้องกับการทดสอบในขั้นตอนนี้

ภาพรวมของช่องสําคัญบางช่องสําหรับ Experiment มีดังนี้

  • name: การทดสอบแต่ละรายการต้องมีชื่อที่ไม่ซ้ำกัน
  • description: ช่องที่ไม่บังคับซึ่งคุณใช้เพื่ออ้างอิงในภายหลังได้ ไม่มีผลต่อวิธีที่การทดสอบทํางาน
  • suffix: ระบบจะต่อท้ายชื่อแคมเปญทดสอบด้วยคําต่อท้ายเพื่อให้คุณแยกแยะแคมเปญทดสอบออกจากแคมเปญควบคุมได้ เราจะอธิบายแนวคิดเหล่านี้เพิ่มเติมใน ขั้นตอนที่ 2
  • type: ประเภทการทดสอบที่จะทํา สําหรับการทดสอบที่ระบบจัดการ ให้ใช้ SEARCH_CUSTOM, DISPLAY_CUSTOM, HOTEL_CUSTOM, YOUTUBE_CUSTOM หรือ PMAX_REPLACEMENT_SHOPPING
  • status: เมื่อสร้างการทดสอบ ให้ตั้งค่าช่องนี้เป็น SETUP เมื่อเริ่มการทดสอบแล้ว ช่องนี้จะช่วยให้คุณตรวจสอบสถานะปัจจุบันได้
  • start_date และ end_date: ระบุเวลาที่การทดสอบควรเริ่มและสิ้นสุด
  • sync_enabled: ปิดใช้โดยค่าเริ่มต้น หากตั้งค่าเป็น true ระบบจะคัดลอกการเปลี่ยนแปลงที่เกิดขึ้นกับแคมเปญเดิมขณะที่การทดสอบกําลังทํางานไปยังแคมเปญการทดสอบโดยอัตโนมัติ ดูข้อมูลเพิ่มเติม

Java

private String createExperimentResource(GoogleAdsClient googleAdsClient, long customerId) {
  ExperimentOperation operation =
      ExperimentOperation.newBuilder()
          .setCreate(
              Experiment.newBuilder()
                  // Name must be unique.
                  .setName("Example Experiment #" + getPrintableDateTime())
                  .setType(ExperimentType.SEARCH_CUSTOM)
                  .setSuffix("[experiment]")
                  .setStatus(ExperimentStatus.SETUP)
                  .build())
          .build();

  try (ExperimentServiceClient experimentServiceClient =
      googleAdsClient.getLatestVersion().createExperimentServiceClient()) {
    MutateExperimentsResponse response =
        experimentServiceClient.mutateExperiments(
            Long.toString(customerId), ImmutableList.of(operation));
    String experiment = response.getResults(0).getResourceName();
    System.out.printf("Created experiment with resource name '%s'%n", experiment);
    return experiment;
  }
}
      

C#

/// <summary>
/// Creates the experiment.
/// </summary>
/// <param name="client">The Google Ads client.</param>
/// <param name="customerId">The customer ID for which the call is made.</param>
/// <returns>The resource name of the newly created experiment.</returns>
private static string CreateAnExperiment(GoogleAdsClient client, long customerId)
{
    // Get the ExperimentService.
    ExperimentServiceClient experimentService = client.GetService(
        Services.V24.ExperimentService);

    // Creates the experiment.
    Experiment experiment = new Experiment()
    {
        // Name must be unique.
        Name = $"Example Experiment #{ExampleUtilities.GetRandomString()}",
        Type = ExperimentType.SearchCustom,
        Suffix = "[experiment]",
        Status = ExperimentStatus.Setup
    };

    // Creates the operation.
    ExperimentOperation operation = new ExperimentOperation()
    {
        Create = experiment
    };

    // Makes the API call.
    MutateExperimentsResponse response = experimentService.MutateExperiments(
        customerId.ToString(), new[] { operation });

    // Displays the result.
    string experimentResourceName = response.Results.First().ResourceName;

    Console.WriteLine($"Created experiment with resource name " +
        $"'{experimentResourceName}'.");
    return experimentResourceName;
}

      

PHP

private static function createExperimentResource(
    ExperimentServiceClient $experimentServiceClient,
    int $customerId
): string {
    // Creates an experiment and its operation.
    $experiment = new Experiment([
        // Name must be unique.
        'name' => 'Example Experiment #' . Helper::getPrintableDatetime(),
        'type' => ExperimentType::SEARCH_CUSTOM,
        'suffix' => '[experiment]',
        'status' => ExperimentStatus::SETUP
    ]);
    $experimentOperation = new ExperimentOperation(['create' => $experiment]);

    // Issues a request to create the experiment.
    $response = $experimentServiceClient->mutateExperiments(
        MutateExperimentsRequest::build($customerId, [$experimentOperation])
    );
    $experimentResourceName = $response->getResults()[0]->getResourceName();
    print "Created experiment with resource name '$experimentResourceName'" . PHP_EOL;

    return $experimentResourceName;
}
      

Python

def create_experiment_resource(
    client: GoogleAdsClient, customer_id: str
) -> str:
    """Creates a new experiment resource.

    Args:
        client: an initialized GoogleAdsClient instance.
        customer_id: a client customer ID.

    Returns:
        the resource name for the new experiment.
    """
    experiment_operation: ExperimentOperation = client.get_type(
        "ExperimentOperation"
    )
    experiment: Experiment = experiment_operation.create

    experiment.name = f"Example Experiment #{uuid.uuid4()}"
    # We specify SEARCH_CUSTOM to create a standard search campaign experiment.
    # This type uses a standard draft-based workflow where the system automatically
    # creates a draft/in-design campaign for the treatment arm.
    experiment.type_ = client.enums.ExperimentTypeEnum.SEARCH_CUSTOM
    experiment.suffix = "[experiment]"
    experiment.status = client.enums.ExperimentStatusEnum.SETUP

    experiment_service: ExperimentServiceClient = client.get_service(
        "ExperimentService"
    )
    response: MutateExperimentsResponse = experiment_service.mutate_experiments(
        customer_id=customer_id, operations=[experiment_operation]
    )

    experiment_resource_name: str = response.results[0].resource_name
    print(f"Created experiment with resource name {experiment_resource_name}")

    return experiment_resource_name
      

Ruby

def create_experiment_resource(client, customer_id)
  operation = client.operation.create_resource.experiment do |e|
    # Name must be unique.
    e.name = "Example Experiment #{(Time.new.to_f * 1000).to_i}"
    e.type = :SEARCH_CUSTOM
    e.suffix = '[experiment]'
    e.status = :SETUP
  end

  response = client.service.experiment.mutate_experiments(
    customer_id: customer_id,
    operations: [operation],
  )

  experiment = response.results.first.resource_name
  puts "Created experiment with resource name #{experiment}."

  experiment
end
      

Perl

sub create_experiment_resource {
  my ($api_client, $customer_id) = @_;

  my $experiment = Google::Ads::GoogleAds::V24::Resources::Experiment->new({
    # Name must be unique.
    name   => "Example Experiment #" . uniqid(),
    type   => SEARCH_CUSTOM,
    suffix => "[experiment]",
    status => SETUP
  });

  my $operation =
    Google::Ads::GoogleAds::V24::Services::ExperimentService::ExperimentOperation
    ->new({
      create => $experiment
    });

  my $response = $api_client->ExperimentService()->mutate({
      customerId => $customer_id,
      operations => [$operation]});

  my $resource_name = $response->{results}[0]{resourceName};
  printf "Created experiment with resource name '%s'.\n", $resource_name;
  return $resource_name;
}
      

curl

2. สร้างกลุ่มทดสอบ

จากนั้นสร้างทรัพยากร ExperimentArm เพื่อกําหนด กลุ่มควบคุมและกลุ่มทดสอบสําหรับการทดสอบ คุณต้องสร้างกลุ่มทั้งหมดในคําขอเดียว

การทดสอบแต่ละรายการต้องมีกลุ่มควบคุม 1 กลุ่มและกลุ่มทดสอบตั้งแต่ 1 กลุ่มขึ้นไป กลุ่มควบคุมระบุแคมเปญพื้นฐานสําหรับการเปรียบเทียบ และกลุ่มทดสอบแต่ละกลุ่มจะส่งผลให้เกิดแคมเปญใหม่ที่คุณสามารถทําการเปลี่ยนแปลงเพื่อทดสอบได้

นอกจากนี้ คุณต้องระบุ traffic_split ซึ่งเป็นเปอร์เซ็นต์ของการเข้าชมที่ส่งไปยังแต่ละกลุ่ม ผลรวมของการแยกการเข้าชมในทุกกลุ่มต้องเป็น 100

Java

private String createExperimentArms(
    GoogleAdsClient googleAdsClient, long customerId, long campaignId, String experiment) {
  List<ExperimentArmOperation> operations = new ArrayList<>();
  operations.add(
      ExperimentArmOperation.newBuilder()
          .setCreate(
              // The "control" arm references an already-existing campaign.
              ExperimentArm.newBuilder()
                  .setControl(true)
                  .addCampaigns(ResourceNames.campaign(customerId, campaignId))
                  .setExperiment(experiment)
                  .setName("control arm")
                  .setTrafficSplit(40)
                  .build())
          .build());
  operations.add(
      ExperimentArmOperation.newBuilder()
          .setCreate(
              // The non-"control" arm, also called a "treatment" arm, will automatically
              // generate draft campaigns that you can modify before starting the experiment.
              ExperimentArm.newBuilder()
                  .setControl(false)
                  .setExperiment(experiment)
                  .setName("experiment arm")
                  .setTrafficSplit(60)
                  .build())
          .build());

  try (ExperimentArmServiceClient experimentArmServiceClient =
      googleAdsClient.getLatestVersion().createExperimentArmServiceClient()) {
    // Constructs the mutate request.
    MutateExperimentArmsRequest mutateRequest = MutateExperimentArmsRequest.newBuilder()
        .setCustomerId(Long.toString(customerId))
        .addAllOperations(operations)
        // We want to fetch the draft campaign IDs from the treatment arm, so the easiest way to do
        // that is to have the response return the newly created entities.
        .setResponseContentType(ResponseContentType.MUTABLE_RESOURCE)
        .build();

    // Sends the mutate request.
    MutateExperimentArmsResponse response =
        experimentArmServiceClient.mutateExperimentArms(mutateRequest);

    // Results always return in the order that you specify them in the request. Since we created
    // the treatment arm last, it will be the last result.  If you don't remember which arm is the
    // treatment arm, you can always filter the query in the next section with
    // `experiment_arm.control = false`.
    MutateExperimentArmResult controlArmResult = response.getResults(0);
    MutateExperimentArmResult treatmentArmResult = response.getResults(
        response.getResultsCount() - 1);

    System.out.printf("Created control arm with resource name '%s'%n",
        controlArmResult.getResourceName());
    System.out.printf("Created treatment arm with resource name '%s'%n",
        treatmentArmResult.getResourceName());

    return treatmentArmResult.getExperimentArm().getInDesignCampaigns(0);
  }
}
      

C#

/// <summary>
/// Creates the experiment arms.
/// </summary>
/// <param name="client">The Google Ads client.</param>
/// <param name="customerId">The customer ID for which the call is made.</param>
/// <param name="baseCampaignId">ID of the campaign for which the control arm is
/// created.</param>
/// <param name="experimentResourceName">Resource name of the experiment.</param>
/// <returns>The control and treatment arms.</returns>
private static (MutateExperimentArmResult, MutateExperimentArmResult)
    CreateExperimentArms(GoogleAdsClient client, long customerId, long baseCampaignId,
        string experimentResourceName)
{
    // Get the ExperimentArmService.
    ExperimentArmServiceClient experimentService = client.GetService(
        Services.V24.ExperimentArmService);

    // Create the control arm. The control arm references an already-existing campaign.
    ExperimentArmOperation controlArmOperation = new ExperimentArmOperation()
    {
        Create = new ExperimentArm()
        {
            Control = true,
            Campaigns = {
                ResourceNames.Campaign(customerId, baseCampaignId)
            },
            Experiment = experimentResourceName,
            Name = "Control Arm",
            TrafficSplit = 40
        }
    };

    // Create the non-control arm. The non-"control" arm, also called a "treatment" arm,
    // will automatically generate draft campaigns that you can modify before starting the
    // experiment.
    ExperimentArmOperation treatmentArmOperation = new ExperimentArmOperation()
    {
        Create = new ExperimentArm()
        {
            Control = false,
            Experiment = experimentResourceName,
            Name = "Experiment Arm",
            TrafficSplit = 60
        }
    };

    // We want to fetch the draft campaign IDs from the treatment arm, so the
    // easiest way to do that is to have the response return the newly created
    // entities.
    MutateExperimentArmsRequest request = new MutateExperimentArmsRequest
    {
        CustomerId = customerId.ToString(),
        Operations = { controlArmOperation, treatmentArmOperation },
        ResponseContentType = ResponseContentType.MutableResource
    };


    MutateExperimentArmsResponse response = experimentService.MutateExperimentArms(
        request
    );

    // Results always return in the order that you specify them in the request.
    // Since we created the treatment arm last, it will be the last result.
    MutateExperimentArmResult controlArm = response.Results.First();
    MutateExperimentArmResult treatmentArm = response.Results.Last();

    Console.WriteLine($"Created control arm with resource name " +
        $"'{controlArm.ResourceName}.");
    Console.WriteLine($"Created treatment arm with resource name" +
      $" '{treatmentArm.ResourceName}'.");
    return (controlArm, treatmentArm);
}

      

PHP

private static function createExperimentArms(
    GoogleAdsClient $googleAdsClient,
    int $customerId,
    int $campaignId,
    string $experimentResourceName
): string {
    $operations = [];
    $experimentArm1 = new ExperimentArm([
        // The "control" arm references an already-existing campaign.
        'control' => true,
        'campaigns' => [ResourceNames::forCampaign($customerId, $campaignId)],
        'experiment' => $experimentResourceName,
        'name' => 'control arm',
        'traffic_split' => 40
    ]);
    $operations[] = new ExperimentArmOperation(['create' => $experimentArm1]);
    $experimentArm2 = new ExperimentArm([
        // The non-"control" arm, also called a "treatment" arm, will automatically
        // generate draft campaigns that you can modify before starting the
        // experiment.
        'control' => false,
        'experiment' => $experimentResourceName,
        'name' => 'experiment arm',
        'traffic_split' => 60
    ]);
    $operations[] = new ExperimentArmOperation(['create' => $experimentArm2]);

    // Issues a request to create the experiment arms.
    $experimentArmServiceClient = $googleAdsClient->getExperimentArmServiceClient();
    $response = $experimentArmServiceClient->mutateExperimentArms(
        MutateExperimentArmsRequest::build($customerId, $operations)
            // We want to fetch the draft campaign IDs from the treatment arm, so the easiest
            // way to do that is to have the response return the newly created entities.
            ->setResponseContentType(ResponseContentType::MUTABLE_RESOURCE)
    );
    // Results always return in the order that you specify them in the request.
    // Since we created the treatment arm last, it will be the last result.
    $controlArmResourceName = $response->getResults()[0]->getResourceName();
    $treatmentArm = $response->getResults()[count($operations) - 1];
    print "Created control arm with resource name '$controlArmResourceName'" . PHP_EOL;
    print "Created treatment arm with resource name '{$treatmentArm->getResourceName()}'"
        . PHP_EOL;

    return $treatmentArm->getExperimentArm()->getInDesignCampaigns()[0];
}
      

Python

def create_experiment_arms(
    client: GoogleAdsClient,
    customer_id: str,
    base_campaign_id: str,
    experiment: str,
) -> str:
    """Creates a control and treatment experiment arms.

    Args:
        client: an initialized GoogleAdsClient instance.
        customer_id: a client customer ID.
        base_campaign_id: the campaign ID to associate with the control arm of
          the experiment.
        experiment: the resource name for an experiment.

    Returns:
        the resource name for the new treatment experiment arm.
    """
    operations: List[ExperimentArmOperation] = []

    campaign_service: CampaignServiceClient = client.get_service(
        "CampaignService"
    )

    # The "control" arm references an already-existing campaign.
    operation_1: ExperimentArmOperation = client.get_type(
        "ExperimentArmOperation"
    )
    exa_1: ExperimentArm = operation_1.create
    exa_1.control = True
    exa_1.campaigns.append(
        campaign_service.campaign_path(customer_id, base_campaign_id)
    )
    exa_1.experiment = experiment
    exa_1.name = "control arm"
    exa_1.traffic_split = 40
    operations.append(operation_1)

    # In standard campaign experiments, creating the treatment arm automatically
    # generates a draft campaign that you can modify before starting the experiment.
    operation_2: ExperimentArmOperation = client.get_type(
        "ExperimentArmOperation"
    )
    exa_2: ExperimentArm = operation_2.create
    exa_2.control = False
    exa_2.experiment = experiment
    exa_2.name = "experiment arm"
    exa_2.traffic_split = 60
    operations.append(operation_2)

    experiment_arm_service: ExperimentArmServiceClient = client.get_service(
        "ExperimentArmService"
    )
    request: MutateExperimentArmsRequest = client.get_type(
        "MutateExperimentArmsRequest"
    )
    request.customer_id = customer_id
    request.operations = operations
    # We want to fetch the draft campaign IDs from the treatment arm, so the
    # easiest way to do that is to have the response return the newly created
    # entities.
    request.response_content_type = (
        client.enums.ResponseContentTypeEnum.MUTABLE_RESOURCE
    )
    response: MutateExperimentArmsResponse = (
        experiment_arm_service.mutate_experiment_arms(request=request)
    )

    # Results always return in the order that you specify them in the request.
    # Since we created the treatment arm second, it will be the second result.
    control_arm_result: Any = response.results[0]
    treatment_arm_result: Any = response.results[1]

    print(
        f"Created control arm with resource name {control_arm_result.resource_name}"
    )
    print(
        f"Created treatment arm with resource name {treatment_arm_result.resource_name}"
    )

    return treatment_arm_result.experiment_arm.in_design_campaigns[0]
      

Ruby

def create_experiment_arms(client, customer_id, base_campaign_id, experiment)
  operations = []
  operations << client.operation.create_resource.experiment_arm do |ea|
    # The "control" arm references an already-existing campaign.
    ea.control = true
    ea.campaigns << client.path.campaign(customer_id, base_campaign_id)
    ea.experiment = experiment
    ea.name = 'control arm'
    ea.traffic_split = 40
  end
  operations << client.operation.create_resource.experiment_arm do |ea|
    # The non-"control" arm, also called a "treatment" arm, will automatically
    # generate draft campaigns that you can modify before starting the
    # experiment.
    ea.control = false
    ea.experiment = experiment
    ea.name = 'experiment arm'
    ea.traffic_split = 60
  end

  response = client.service.experiment_arm.mutate_experiment_arms(
    customer_id: customer_id,
    operations: operations,
    # We want to fetch the draft campaign IDs from the treatment arm, so the
    # easiest way to do that is to have the response return the newly created
    # entities.
    response_content_type: :MUTABLE_RESOURCE,
  )

  # Results always return in the order that you specify them in the request.
  # Since we created the treatment arm last, it will be the last result.
  control_arm_result = response.results.first
  treatment_arm_result = response.results.last

  puts "Created control arm with resource name #{control_arm_result.resource_name}."
  puts "Created treatment arm with resource name #{treatment_arm_result.resource_name}."

  treatment_arm_result.experiment_arm.in_design_campaigns.first
end
      

Perl

sub create_experiment_arms {
  my ($api_client, $customer_id, $base_campaign_id, $experiment) = @_;

  my $operations = [];
  push @$operations,
    Google::Ads::GoogleAds::V24::Services::ExperimentArmService::ExperimentArmOperation
    ->new({
      create => Google::Ads::GoogleAds::V24::Resources::ExperimentArm->new({
          # The "control" arm references an already-existing campaign.
          control   => "true",
          campaigns => [
            Google::Ads::GoogleAds::V24::Utils::ResourceNames::campaign(
              $customer_id, $base_campaign_id
            )
          ],
          experiment   => $experiment,
          name         => "control arm",
          trafficSplit => 40
        })});

  push @$operations,
    Google::Ads::GoogleAds::V24::Services::ExperimentArmService::ExperimentArmOperation
    ->new({
      create => Google::Ads::GoogleAds::V24::Resources::ExperimentArm->new({
          # The non-"control" arm, also called a "treatment" arm, will automatically
          # generate draft campaigns that you can modify before starting the
          # experiment.
          control      => "false",
          experiment   => $experiment,
          name         => "experiment arm",
          trafficSplit => 60
        })});

  my $response = $api_client->ExperimentArmService()->mutate({
    customerId => $customer_id,
    operations => $operations,
    # We want to fetch the draft campaign IDs from the treatment arm, so the
    # easiest way to do that is to have the response return the newly created
    # entities.
    responseContentType => MUTABLE_RESOURCE
  });

  # Results always return in the order that you specify them in the request.
  # Since we created the treatment arm last, it will be the last result.
  my $control_arm_result   = $response->{results}[0];
  my $treatment_arm_result = $response->{results}[1];

  printf "Created control arm with resource name '%s'.\n",
    $control_arm_result->{resourceName};
  printf "Created treatment arm with resource name '%s'.\n",
    $treatment_arm_result->{resourceName};
  return $treatment_arm_result->{experimentArm}{inDesignCampaigns}[0];
}
      

curl

ประเด็นสําคัญบางประการมีดังนี้

  • ต้องมีกลุ่มที่ตั้งค่า control เป็น true เพียง 1 กลุ่ม
  • traffic_split ต้องรวมกันได้ 100 ในทุกกลุ่ม
  • กลุ่มควบคุมต้องระบุแคมเปญเพียง 1 รายการในช่อง campaigns

3. แก้ไขแคมเปญทดสอบ

เมื่อคุณสร้างกลุ่มทดสอบ (โดยที่ control เป็น false) API จะสร้างแคมเปญร่างโดยอิงตามแคมเปญควบคุมและป้อนชื่อทรัพยากรในช่อง in_design_campaigns ของกลุ่มทดสอบโดยอัตโนมัติ คุณสามารถถือว่าแคมเปญที่อยู่ในระหว่างการออกแบบเหล่านี้เป็นแคมเปญปกติและแก้ไขด้วยการเปลี่ยนแปลงที่ต้องการทดสอบได้ แคมเปญควบคุมจะไม่ได้รับผลกระทบ การเปลี่ยนแปลงเหล่านี้จะกลายเป็นแคมเปญจริงที่แสดงได้เมื่อคุณกําหนดเวลาการทดสอบ

คุณต้องทําการเปลี่ยนแปลงแคมเปญที่อยู่ในระหว่างการออกแบบอย่างน้อย 1 รายการก่อนจึงจะกําหนดเวลาการทดสอบได้

หากต้องการดึงข้อมูล in_design_campaigns สําหรับกลุ่มทดสอบ คุณสามารถค้นหา GoogleAdsService ได้ดังนี้

SELECT experiment_arm.in_design_campaigns
FROM experiment_arm
WHERE experiment_arm.resource_name = "TREATMENT_ARM_RESOURCE_NAME"

กําหนดเวลาการทดสอบ

หลังจากสร้างการทดสอบและกลุ่มทดสอบ รวมถึงแก้ไขแคมเปญแบบร่างทดสอบ แล้ว คุณสามารถกําหนดเวลาการทดสอบโดยใช้ ExperimentService.ScheduleExperimentได้ การดําเนินการนี้เป็นการดําเนินการแบบไม่พร้อมกันซึ่งจะเปลี่ยนแคมเปญที่อยู่ในระหว่างการออกแบบให้เป็นแคมเปญจริงที่พร้อมแสดงเมื่อถึง start_date ของการทดสอบ ดูรายละเอียดเกี่ยวกับการจัดการการดําเนินการที่ใช้เวลานานได้ที่ ข้อผิดพลาดแบบไม่พร้อมกัน

รายงานการทดสอบ

เมื่อการทดสอบกําลังทํางาน คุณสามารถค้นหาเมตริกเพื่อเปรียบเทียบประสิทธิภาพได้ ดูรายละเอียดได้ที่คู่มือการรายงาน

เปลี่ยนไปใช้ เลื่อนระดับ หรือสิ้นสุดการทดสอบ

หลังจากปล่อยให้การทดสอบทํางานเป็นระยะเวลาที่เพียงพอแล้ว คุณสามารถเลือกที่จะสิ้นสุด, เลื่อนระดับ หรือจบการทดสอบโดยใช้ ExperimentService ได้

  • สิ้นสุด: หากต้องการหยุดการทดสอบโดยไม่ใช้การเปลี่ยนแปลง ให้ใช้ EndExperiment. แคมเปญทดสอบจะหยุดแสดง แต่จะไม่ถูกนําออก การดําเนินการนี้เป็นการดําเนินการแบบพร้อมกัน
  • เลื่อนระดับ: หากพอใจกับประสิทธิภาพของกลุ่มทดสอบและ ต้องการรวมการเปลี่ยนแปลงเข้ากับแคมเปญเดิม ให้ใช้ PromoteExperiment การดําเนินการนี้จะคัดลอกการเปลี่ยนแปลงจากกลุ่มทดสอบไปยังแคมเปญควบคุมและหยุดไม่ให้กลุ่มทดสอบแสดง การดําเนินการนี้เป็นการดําเนินการแบบไม่พร้อมกัน โปรดดูรายละเอียดที่ ข้อผิดพลาดแบบไม่พร้อมกัน หมายเหตุ: คุณเลื่อนระดับการทดสอบประเภท PMAX_REPLACEMENT_SHOPPING ไม่ได้
  • จบการทดสอบ: หากชอบการเปลี่ยนแปลงแต่ต้องการให้การเปลี่ยนแปลงแยกจาก แคมเปญเดิม ให้ใช้ GraduateExperiment การดําเนินการนี้จะเปลี่ยนแคมเปญทดสอบให้เป็นแคมเปญมาตรฐานที่เป็นอิสระซึ่งจะแสดงต่อไปนอกบริบทของการทดสอบ แคมเปญควบคุมจะไม่ได้รับการแก้ไข การดําเนินการนี้เป็นการดําเนินการแบบพร้อมกัน

ข้อกำหนดเฉพาะประเภท

PMAX_REPLACEMENT_SHOPPING:

  • ต้องมีกลุ่มทดสอบ 2 กลุ่ม (กลุ่มควบคุม 1 กลุ่มและกลุ่มทดสอบ 1 กลุ่ม)
  • กลุ่มควบคุมต้องระบุแคมเปญ Shopping 1 รายการในช่อง campaigns
  • สําหรับกลุ่มทดสอบ คุณมีตัวเลือก 2 ตัวเลือกในการตั้งค่าแคมเปญ Performance Max ดังนี้
    • หากต้องการสร้างแคมเปญ PMax ใหม่ ให้เว้นช่อง campaigns ของกลุ่มทดสอบว่างไว้ API จะสร้างแคมเปญที่อยู่ในระหว่างการออกแบบโดยอิงตามแคมเปญ Shopping ควบคุมโดยอัตโนมัติตามที่อธิบายไว้ใน ขั้นตอน 3
    • หากต้องการใช้แคมเปญ PMax ที่มีอยู่ ให้ระบุชื่อทรัพยากรของแคมเปญ PMax ในช่อง campaigns ของกลุ่มทดสอบ หากเลือก ตัวเลือกนี้ ระบบจะไม่สร้างแคมเปญที่อยู่ในระหว่างการออกแบบ และคุณสามารถข้าม ขั้นตอนที่ 3ได้
  • เราขอแนะนําให้ทิ้งสถิติ 7 วันแรกจากการประเมินเพื่อให้แคมเปญมีเวลาสิ้นสุดระยะเริ่มต้นและระยะเรียนรู้
  • เลื่อนระดับไม่ได้

YOUTUBE_CUSTOM:

  • รองรับกลุ่มทดสอบสูงสุด 10 กลุ่ม
  • หากต้องการทดสอบชิ้นงาน ให้ตั้งค่า creative_asset_testing_info ในกลุ่มทดสอบ