การทดสอบที่ระบบจัดการใช้เพื่อทำการทดสอบ A/B กับการเปลี่ยนแปลงโดยการสร้างแคมเปญทดสอบที่แก้ไขได้ตั้งแต่ 1 รายการขึ้นไปซึ่งทํางานควบคู่ไปกับแคมเปญควบคุมเดิม
เวิร์กโฟลว์นี้รองรับค่าต่อไปนี้
ExperimentType
SEARCH_CUSTOM: การทดสอบที่กําหนดเองซึ่งประกอบด้วยแคมเปญ SearchDISPLAY_CUSTOM: การทดสอบที่กําหนดเองซึ่งประกอบด้วยแคมเปญ DisplayHOTEL_CUSTOM: การทดสอบที่กําหนดเองซึ่งประกอบด้วยแคมเปญโรงแรมYOUTUBE_CUSTOM: การทดสอบที่กําหนดเองซึ่งประกอบด้วยแคมเปญวิดีโอPMAX_REPLACEMENT_SHOPPING: การทดสอบเพื่อดูประสิทธิภาพของแคมเปญ Shopping เมื่อเทียบกับ Performance Max
ตั้งค่า
การตั้งค่าการทดสอบที่ระบบจัดการมีขั้นตอนดังนี้
- สร้าง
Experiment - สร้างทรัพยากร
ExperimentArmสําหรับกลุ่มควบคุมและกลุ่มทดสอบ - แก้ไข
in_design_campaignsในกลุ่มทดสอบ
1. สร้างการทดสอบ
ขั้นตอนแรกในการทําการทดสอบโดยใช้ Google Ads API คือการสร้าง
Experiment ทรัพยากรนี้กําหนดข้อมูลสําคัญบางอย่างเกี่ยวกับการทดสอบที่คุณต้องการทํา คุณไม่ต้องระบุแคมเปญใดๆ ที่เกี่ยวข้องกับการทดสอบในขั้นตอนนี้
ภาพรวมของช่องสําคัญบางช่องสําหรับ Experiment มีดังนี้
name: การทดสอบแต่ละรายการต้องมีชื่อที่ไม่ซ้ำกันdescription: ช่องที่ไม่บังคับซึ่งคุณใช้เพื่ออ้างอิงในภายหลังได้ ไม่มีผลต่อวิธีที่การทดสอบทํางานsuffix: ระบบจะต่อท้ายชื่อแคมเปญทดสอบด้วยคําต่อท้ายเพื่อให้คุณแยกแยะแคมเปญทดสอบออกจากแคมเปญควบคุมได้ เราจะอธิบายแนวคิดเหล่านี้เพิ่มเติมใน ขั้นตอนที่ 2type: ประเภทการทดสอบที่จะทํา สําหรับการทดสอบที่ระบบจัดการ ให้ใช้SEARCH_CUSTOM,DISPLAY_CUSTOM,HOTEL_CUSTOM,YOUTUBE_CUSTOMหรือPMAX_REPLACEMENT_SHOPPINGstatus: เมื่อสร้างการทดสอบ ให้ตั้งค่าช่องนี้เป็น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ได้
- หากต้องการสร้างแคมเปญ PMax ใหม่ ให้เว้นช่อง
- เราขอแนะนําให้ทิ้งสถิติ 7 วันแรกจากการประเมินเพื่อให้แคมเปญมีเวลาสิ้นสุดระยะเริ่มต้นและระยะเรียนรู้
- เลื่อนระดับไม่ได้
YOUTUBE_CUSTOM:
- รองรับกลุ่มทดสอบสูงสุด 10 กลุ่ม
- หากต้องการทดสอบชิ้นงาน ให้ตั้งค่า
creative_asset_testing_infoในกลุ่มทดสอบ