Thử nghiệm do hệ thống quản lý được dùng để thử nghiệm A/B các thay đổi bằng cách tạo một hoặc nhiều
chiến dịch thử nghiệm có thể sửa đổi, chạy song song với chiến dịch đối chứng ban đầu.
Quy trình làm việc này được hỗ trợ cho các giá trị
ExperimentType sau:
SEARCH_CUSTOM: Thử nghiệm tuỳ chỉnh bao gồm các chiến dịch tìm kiếm.DISPLAY_CUSTOM: Thử nghiệm tuỳ chỉnh bao gồm các chiến dịch Hiển thị.HOTEL_CUSTOM: Thử nghiệm tuỳ chỉnh bao gồm các chiến dịch khách sạn.YOUTUBE_CUSTOM: Một thử nghiệm tùy chỉnh bao gồm các chiến dịch Video.PMAX_REPLACEMENT_SHOPPING: Thử nghiệm để kiểm tra hiệu suất của chiến dịch Mua sắm so với chiến dịch Tối đa hoá hiệu suất.
Thiết lập
Quy trình thiết lập thử nghiệm do hệ thống quản lý bao gồm các bước sau:
- Tạo
Experiment. - Tạo tài nguyên
ExperimentArmcho nhóm đối chứng và nhóm thử nghiệm. - Sửa đổi
in_design_campaignstrong nhóm can thiệp.
1. Tạo thử nghiệm
Bước đầu tiên để chạy thử nghiệm bằng Google Ads API là tạo một
Experiment. Tài nguyên này xác định thông tin chính về thử nghiệm mà bạn muốn chạy. Bạn không chỉ định bất kỳ chiến dịch nào liên quan đến
thử nghiệm ở bước này.
Sau đây là thông tin tổng quan về một số trường chính cho Experiment:
name: Mỗi thử nghiệm phải có một tên riêng biệt.description: Một trường không bắt buộc mà bạn có thể dùng để tham chiếu sau này. Không ảnh hưởng đến cách chạy thử nghiệm.suffix: Hậu tố được thêm vào cuối tên của chiến dịch thử nghiệm để bạn có thể phân biệt chiến dịch thử nghiệm với chiến dịch đối chứng. Những khái niệm này được giải thích thêm trong bước 2.type: Loại thử nghiệm cần chạy. Đối với các thử nghiệm do hệ thống quản lý, hãy sử dụngSEARCH_CUSTOM,DISPLAY_CUSTOM,HOTEL_CUSTOM,YOUTUBE_CUSTOMhoặcPMAX_REPLACEMENT_SHOPPING.status: Khi tạo thử nghiệm, hãy đặt trường này thànhSETUP. Sau này, khi bạn bắt đầu thử nghiệm, trường này sẽ cho bạn biết trạng thái hiện tại.start_datevàend_date: Chỉ định thời điểm bắt đầu và kết thúc thử nghiệm.sync_enabled: Tắt theo mặc định. Nếu bạn đặt thànhtrue, thì những thay đổi đối với chiến dịch gốc trong khi thử nghiệm đang chạy sẽ tự động được sao chép sang chiến dịch thử nghiệm. Để biết thêm thông tin, hãy xem bài viết về tính năng đồng bộ hoá chiến dịch trong Trung tâm trợ giúp của Google Ads.
Java
private String createExperimentResource(GoogleAdsClient googleAdsClient, long customerId) { ExperimentOperation operation = ExperimentOperation.newBuilder() .setCreate( Experiment.newBuilder() // Name must be unique. .setName("Example Experiment #" + getPrintableDateTime()) // 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. .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#
private static string CreateExperimentResource(GoogleAdsClient client, long customerId) { // Get the ExperimentService. ExperimentServiceClient experimentService = client.GetService( Services.V26.ExperimentService); // Creates the experiment. Experiment experiment = new Experiment() { // Name must be unique. Name = $"Example Experiment #{ExampleUtilities.GetRandomString()}", // We specify SearchCustom 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. 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}" # 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. 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::V26::Resources::Experiment->new({ # Name must be unique. name => "Example Experiment #" . uniqid(), type => SEARCH_CUSTOM, suffix => "[experiment]", status => SETUP }); my $operation = Google::Ads::GoogleAds::V26::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. Tạo nhóm thử nghiệm
Tiếp theo, hãy tạo tài nguyên ExperimentArm để xác định nhóm đối chứng và nhóm thử nghiệm cho thử nghiệm. Bạn phải tạo tất cả các nhánh trong một yêu cầu duy nhất.
Mỗi thử nghiệm phải có đúng một nhóm đối chứng và một hoặc nhiều nhóm thử nghiệm. Nhóm đối chứng xác định chiến dịch căn bản để so sánh và mỗi nhóm can thiệp sẽ tạo ra một chiến dịch mới, nơi bạn có thể thực hiện các thay đổi để thử nghiệm.
Bạn cũng phải chỉ định traffic_split, tức là tỷ lệ phần trăm lưu lượng truy cập được chuyển đến mỗi nhóm thử nghiệm. Tổng mức phân tách lưu lượng truy cập trên tất cả các nhóm phải là 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( // In standard campaign experiments, creating the treatment arm automatically // generates a draft campaign 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#
private static (MutateExperimentArmResult, MutateExperimentArmResult) CreateExperimentArms(GoogleAdsClient client, long customerId, long baseCampaignId, string experimentResourceName) { // Get the ExperimentArmService. ExperimentArmServiceClient experimentService = client.GetService( Services.V26.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. // In standard campaign experiments, creating the treatment arm automatically // generates a draft campaign 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| # In standard campaign experiments, creating the treatment arm automatically # generates a draft campaign 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 second, it will be the second 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::V26::Services::ExperimentArmService::ExperimentArmOperation ->new({ create => Google::Ads::GoogleAds::V26::Resources::ExperimentArm->new({ # The "control" arm references an already-existing campaign. control => "true", campaigns => [ Google::Ads::GoogleAds::V26::Utils::ResourceNames::campaign( $customer_id, $base_campaign_id ) ], experiment => $experiment, name => "control arm", trafficSplit => 40 })}); push @$operations, Google::Ads::GoogleAds::V26::Services::ExperimentArmService::ExperimentArmOperation ->new({ create => Google::Ads::GoogleAds::V26::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
Một vài điểm chính:
- Chỉ một nhóm được đặt
controlthànhtrue. traffic_splitphải có tổng là 100 trên tất cả các nhóm.- Nhóm đối chứng phải chỉ định đúng một chiến dịch trong trường
campaigns.
3. Sửa đổi chiến dịch thử nghiệm
Khi bạn tạo một nhóm can thiệp (trong đó control là false), API sẽ tự động tạo một chiến dịch dự thảo dựa trên chiến dịch đối chứng và điền sẵn tên tài nguyên của chiến dịch đó vào trường in_design_campaigns của nhóm can thiệp. Bạn có thể coi những chiến dịch đang thiết kế này là chiến dịch thông thường và sửa đổi
chúng bằng những thay đổi mà bạn muốn thử nghiệm. Chiến dịch đối chứng sẽ không bị ảnh hưởng.
Những thay đổi này được hiện thực hoá thành một chiến dịch thực tế, có thể phân phát khi bạn lên lịch
thử nghiệm.
Bạn phải thực hiện ít nhất một thay đổi đối với chiến dịch đang thiết kế thì mới có thể lên lịch cho thử nghiệm.
Để truy xuất in_design_campaigns cho một nhóm can thiệp, bạn có thể truy vấn GoogleAdsService:
SELECT experiment_arm.in_design_campaigns
FROM experiment_arm
WHERE experiment_arm.resource_name = 'TREATMENT_ARM_RESOURCE_NAME'
PARAMETERS include_drafts = true
Lên lịch thử nghiệm
Sau khi tạo thử nghiệm và các nhóm cũng như sửa đổi chiến dịch nháp thử nghiệm, bạn có thể lên lịch thử nghiệm bằng cách sử dụng ExperimentService.ScheduleExperiment. Đây là một thao tác không đồng bộ, giúp hiện thực hoá các chiến dịch đang thiết kế thành chiến dịch thực tế, sẵn sàng phân phát khi start_date của thử nghiệm đến. Hãy xem phần Lỗi không đồng bộ để biết thông tin chi tiết về cách xử lý các thao tác chạy trong thời gian dài.
Báo cáo về thử nghiệm
Sau khi thử nghiệm chạy, bạn có thể truy vấn các chỉ số để so sánh hiệu suất. Hãy xem Hướng dẫn báo cáo để biết thông tin chi tiết.
Áp dụng, quảng bá hoặc kết thúc thử nghiệm
Sau khi cho phép thử nghiệm chạy trong một khoảng thời gian đủ dài, bạn có thể chọn kết thúc,
quảng bá hoặc nâng cấp thử nghiệm bằng cách sử dụng ExperimentService.
- Kết thúc: Nếu bạn muốn dừng thử nghiệm mà không áp dụng các thay đổi, hãy sử dụng
EndExperiment. Chiến dịch thử nghiệm sẽ ngừng phân phát nhưng không bị xoá. Đây là một thao tác đồng bộ. - Quảng bá: Nếu bạn hài lòng với hiệu suất của nhóm can thiệp và muốn kết hợp các thay đổi vào chiến dịch gốc, hãy sử dụng
PromoteExperiment. Thao tác này sẽ sao chép các thay đổi từ nhóm can thiệp sang chiến dịch đối chứng và dừng phân phát nhóm can thiệp. Đây là một thao tác không đồng bộ; hãy xem phần Lỗi không đồng bộ để biết thông tin chi tiết. Lưu ý: Bạn không thể quảng bá thử nghiệm thuộc loạiPMAX_REPLACEMENT_SHOPPING. - Tốt nghiệp: Nếu bạn thích các thay đổi nhưng muốn các thay đổi đó tồn tại tách biệt với chiến dịch ban đầu, hãy sử dụng
GraduateExperiment. Thao tác này sẽ chuyển đổi chiến dịch thử nghiệm thành một chiến dịch độc lập, chuẩn, tiếp tục phân phát bên ngoài bối cảnh của thử nghiệm. Chiến dịch đối chứng không được sửa đổi. Đây là một thao tác đồng bộ.
Yêu cầu theo loại
PMAX_REPLACEMENT_SHOPPING:
- Yêu cầu chính xác hai nhóm (một nhóm đối chứng, một nhóm thử nghiệm).
- Nhóm đối chứng phải chỉ định một chiến dịch Mua sắm trong trường
campaigns. - Đối với nhóm can thiệp, bạn có 2 lựa chọn để thiết lập chiến dịch Tối đa hoá hiệu suất:
- Cách tạo chiến dịch Tối đa hoá hiệu suất mới: Để trống trường
campaignscủa nhóm can thiệp. API tự động tạo một chiến dịch đang thiết kế dựa trên chiến dịch Mua sắm đối chứng, như mô tả trong Bước 3. - Cách sử dụng chiến dịch Tối đa hoá hiệu suất hiện có: Chỉ định tên tài nguyên của chiến dịch Tối đa hoá hiệu suất trong trường
campaignscủa nhóm can thiệp. Nếu chọn phương án này, bạn sẽ không tạo chiến dịch trong giai đoạn thiết kế và có thể bỏ qua Bước 3.
- Cách tạo chiến dịch Tối đa hoá hiệu suất mới: Để trống trường
- Bạn nên loại bỏ số liệu thống kê của 7 ngày đầu tiên khỏi kết quả đánh giá để chiến dịch có thời gian hoàn tất giai đoạn tăng tốc và giai đoạn học.
- Không thể quảng bá.
YOUTUBE_CUSTOM:
- Hỗ trợ tối đa 10 nhánh.
- Để thử nghiệm thành phần, hãy đặt
asset_testing_infotrên nhóm thử nghiệm.