Thử nghiệm trong chiến dịch được dùng để thử nghiệm một tính năng cụ thể trong một chiến dịch duy nhất. Không giống như các thử nghiệm do hệ thống quản lý (lưu lượng truy cập được chia giữa chiến dịch đối chứng và chiến dịch thử nghiệm), thử nghiệm trong chiến dịch sẽ chia lưu lượng truy cập trong chiến dịch, dựa trên việc tính năng này có được bật hay không.
Quy trình này được hỗ trợ cho các giá trị ExperimentType sau đây:
ADOPT_AI_MAX- Kiểm tra mức độ tác động của các tính năng Tối đa hoá AI đối với chiến dịch Tìm kiếm.
ADOPT_BROAD_MATCH_KEYWORDS- Thử nghiệm tác động của từ khoá khớp mở rộng đối với chiến dịch Tìm kiếm.
PMAX_TEXT_CUSTOMIZATION_FINAL_URL_EXPANSION- Được dùng riêng cho việc thử nghiệm các tính năng của chiến dịch Tối đa hoá hiệu suất: tuỳ chỉnh văn bản (trước đây gọi là thành phần được tạo tự động) và tính năng mở rộng URL cuối cùng. Cho phép AI của Google gửi lưu lượng truy cập đến các trang đích phù hợp và tạo thành phần văn bản để phù hợp hơn với cụm từ tìm kiếm.
Thiết lập
- Xác định
Experiment, cung cấp loại thử nghiệm,ExperimentArmnhóm đối chứng vàExperimentArmnhóm thử nghiệm. Mỗi nhóm thử nghiệm phải tham chiếu đến cùng một chiến dịch. - Bật tính năng kiểm thử cho thử nghiệm bằng cách sử dụng mặt nạ trường. Điều này không cần thiết cho
ADOPT_BROAD_MATCH_KEYWORDS; thay vào đó, chế độ cài đặt chiến dịch khớp mở rộng sẽ tự động được bật khi bạn tạo thử nghiệm. - Gửi yêu cầu
GoogleAdsService.Mutatebao gồm các thao tác biến đổi để tạo thử nghiệm và nhóm thử nghiệm, đồng thời (nếu có) để bật tính năng thử nghiệm.
Sau khi thiết lập, lưu lượng truy cập sẽ được phân chia trong chiến dịch sao cho 50% lưu lượng truy cập được tiếp xúc với tính năng đã bật (nhóm thử nghiệm) và 50% không được tiếp xúc (nhóm đối chứng).
Java
// Create the experiment resource name using a temporary ID. String experimentResourceName = ResourceNames.experiment(customerId, -1L); // Create the experiment. Experiment experiment = Experiment.newBuilder() .setResourceName(experimentResourceName) .setName("ADOPT_AI_MAX Experiment #" + UUID.randomUUID()) .setType(ExperimentType.ADOPT_AI_MAX) .build(); MutateOperation experimentOperation = MutateOperation.newBuilder() .setExperimentOperation(ExperimentOperation.newBuilder().setCreate(experiment).build()) .build(); // Create the control arm. Both arms in an intra-campaign experiment reference the same base // campaign. ExperimentArm controlArm = ExperimentArm.newBuilder() .setExperiment(experimentResourceName) .setName("Control Arm") .setControl(true) .setTrafficSplit(50) .addCampaigns(ResourceNames.campaign(customerId, campaignId)) .build(); MutateOperation controlArmOperation = MutateOperation.newBuilder() .setExperimentArmOperation( ExperimentArmOperation.newBuilder().setCreate(controlArm).build()) .build(); // Create the treatment arm. ExperimentArm treatmentArm = ExperimentArm.newBuilder() .setExperiment(experimentResourceName) .setName("Treatment Arm") .setControl(false) .setTrafficSplit(50) .addCampaigns(ResourceNames.campaign(customerId, campaignId)) .build(); MutateOperation treatmentArmOperation = MutateOperation.newBuilder() .setExperimentArmOperation( ExperimentArmOperation.newBuilder().setCreate(treatmentArm).build()) .build(); // Create a campaign operation with an update mask to enable AI Max and configure asset // automation settings. // Note: For intra-campaign experiments, these settings are applied to the base campaign but are // only active for the treatment traffic split. Campaign campaign = Campaign.newBuilder() .setResourceName(ResourceNames.campaign(customerId, campaignId)) .setAiMaxSetting(AiMaxSetting.newBuilder().setEnableAiMax(true).build()) .addAssetAutomationSettings( AssetAutomationSetting.newBuilder() .setAssetAutomationType(AssetAutomationType.TEXT_ASSET_AUTOMATION) .setAssetAutomationStatus(AssetAutomationStatus.OPTED_IN) .build()) .addAssetAutomationSettings( AssetAutomationSetting.newBuilder() .setAssetAutomationType( AssetAutomationType.FINAL_URL_EXPANSION_TEXT_ASSET_AUTOMATION) .setAssetAutomationStatus(AssetAutomationStatus.OPTED_IN) .build()) .build(); CampaignOperation campaignOp = CampaignOperation.newBuilder() .setUpdate(campaign) .setUpdateMask(FieldMasks.allSetFieldsOf(campaign)) .build(); MutateOperation campaignMutateOperation = MutateOperation.newBuilder().setCampaignOperation(campaignOp).build(); // Send all mutate operations in a single Mutate request. List<MutateOperation> mutateOperations = ImmutableList.of( experimentOperation, controlArmOperation, treatmentArmOperation, campaignMutateOperation); try (GoogleAdsServiceClient googleAdsServiceClient = googleAdsClient.getLatestVersion().createGoogleAdsServiceClient()) { MutateGoogleAdsRequest request = MutateGoogleAdsRequest.newBuilder() .setCustomerId(Long.toString(customerId)) .addAllMutateOperations(mutateOperations) .build(); MutateGoogleAdsResponse response = googleAdsServiceClient.mutate(request);
C#
// Create the experiment resource name using a temporary ID. string experimentResourceName = ResourceNames.Experiment(customerId, -1); // Create the experiment. MutateOperation experimentOperation = new MutateOperation() { ExperimentOperation = new ExperimentOperation() { Create = new Experiment() { ResourceName = experimentResourceName, Name = $"ADOPT_AI_MAX Experiment #{ExampleUtilities.GetRandomString()}", Type = ExperimentType.AdoptAiMax } } }; // Create the control arm. Both arms in an intra-campaign experiment // reference the same base campaign. MutateOperation controlArmOperation = new MutateOperation() { ExperimentArmOperation = new ExperimentArmOperation() { Create = new ExperimentArm() { Experiment = experimentResourceName, Name = "Control Arm", Control = true, TrafficSplit = 50, Campaigns = { ResourceNames.Campaign(customerId, campaignId) } } } }; // Create the treatment arm. MutateOperation treatmentArmOperation = new MutateOperation() { ExperimentArmOperation = new ExperimentArmOperation() { Create = new ExperimentArm() { Experiment = experimentResourceName, Name = "Treatment Arm", Control = false, TrafficSplit = 50, Campaigns = { ResourceNames.Campaign(customerId, campaignId) } } } }; // Create a campaign operation with an update mask to enable AI Max and // configure asset automation settings. // Note: For intra-campaign experiments, these settings are applied to the // base campaign but are only active for the treatment traffic split. Campaign campaign = new Campaign() { ResourceName = ResourceNames.Campaign(customerId, campaignId), AiMaxSetting = new Campaign.Types.AiMaxSetting { EnableAiMax = true } }; campaign.AssetAutomationSettings.Add(new Campaign.Types.AssetAutomationSetting { AssetAutomationType = AssetAutomationType.TextAssetAutomation, AssetAutomationStatus = AssetAutomationStatus.OptedIn }); campaign.AssetAutomationSettings.Add(new Campaign.Types.AssetAutomationSetting { AssetAutomationType = AssetAutomationType.FinalUrlExpansionTextAssetAutomation, AssetAutomationStatus = AssetAutomationStatus.OptedIn }); MutateOperation campaignOperation = new MutateOperation() { CampaignOperation = new CampaignOperation() { Update = campaign, UpdateMask = FieldMasks.AllSetFieldsOf(campaign) } }; // Send all mutate operations in a single Mutate request. List<MutateOperation> mutateOperations = new List<MutateOperation> { experimentOperation, controlArmOperation, treatmentArmOperation, campaignOperation }; MutateGoogleAdsResponse response = googleAdsService.Mutate( customerId.ToString(), mutateOperations);
PHP
This example is not yet available in PHP; you can take a look at the other languages.
Python
# Create the experiment resource name using a temporary ID. experiment_resource_name = googleads_service.experiment_path( customer_id, "-1" ) # Create the experiment. experiment_operation = client.get_type("MutateOperation") experiment = experiment_operation.experiment_operation.create experiment.resource_name = experiment_resource_name experiment.name = f"ADOPT_AI_MAX Experiment #{uuid4()}" experiment.type_ = client.enums.ExperimentTypeEnum.ADOPT_AI_MAX # Create the control arm. Both arms in an intra-campaign experiment # reference the same base campaign. control_arm_operation = client.get_type("MutateOperation") control_arm = control_arm_operation.experiment_arm_operation.create control_arm.experiment = experiment_resource_name control_arm.name = "Control Arm" control_arm.control = True control_arm.traffic_split = 50 control_arm.campaigns.append( googleads_service.campaign_path(customer_id, campaign_id) ) # Create the treatment arm. treatment_arm_operation = client.get_type("MutateOperation") treatment_arm = treatment_arm_operation.experiment_arm_operation.create treatment_arm.experiment = experiment_resource_name treatment_arm.name = "Treatment Arm" treatment_arm.control = False treatment_arm.traffic_split = 50 treatment_arm.campaigns.append( googleads_service.campaign_path(customer_id, campaign_id) ) # Create a campaign operation with an update mask to enable AI Max and # configure asset automation settings. # Note: For intra-campaign experiments, these settings are applied to the # base campaign but are only active for the treatment traffic split. campaign_operation = client.get_type("MutateOperation") campaign = campaign_operation.campaign_operation.update campaign.resource_name = googleads_service.campaign_path( customer_id, campaign_id ) campaign.ai_max_setting.enable_ai_max = True for asset_automation_type_enum in [ client.enums.AssetAutomationTypeEnum.TEXT_ASSET_AUTOMATION, client.enums.AssetAutomationTypeEnum.FINAL_URL_EXPANSION_TEXT_ASSET_AUTOMATION, ]: asset_automation_setting = client.get_type( "Campaign" ).AssetAutomationSetting() asset_automation_setting.asset_automation_type = ( asset_automation_type_enum ) asset_automation_setting.asset_automation_status = ( client.enums.AssetAutomationStatusEnum.OPTED_IN ) campaign.asset_automation_settings.append(asset_automation_setting) client.copy_from( campaign_operation.campaign_operation.update_mask, protobuf_helpers.field_mask(None, campaign._pb), ) # Send all mutate operations in a single Mutate request. mutate_operations = [ experiment_operation, control_arm_operation, treatment_arm_operation, campaign_operation, ] response = googleads_service.mutate( customer_id=customer_id, mutate_operations=mutate_operations, )
Ruby
This example is not yet available in Ruby; you can take a look at the other languages.
Perl
This example is not yet available in Perl; you can take a look at the other languages.
curl
Báo cáo về thử nghiệm
Vì lưu lượng truy cập của nhóm đối chứng và nhóm thử nghiệm được kết hợp trong một chiến dịch duy nhất, nên bạn phải sử dụng báo cáo thử nghiệm trực tiếp để so sánh các chỉ số giữa nhóm đối chứng và nhóm thử nghiệm. Báo cáo tiêu chuẩn ở cấp chiến dịch chỉ cho thấy các chỉ số tổng hợp cho toàn bộ chiến dịch và không thể phân biệt giữa hai nhóm.
Bạn có thể dùng truy vấn GAQL sau đây để truy xuất số liệu thống kê về lượt nhấp cho một thử nghiệm ADOPT_AI_MAX trong chiến dịch.
SELECT
experiment.resource_name,
experiment.name,
metrics.clicks,
metrics.control_clicks,
metrics.clicks_point_estimate,
metrics.clicks_p_value
FROM experiment
WHERE experiment.type = 'ADOPT_AI_MAX'
Quảng bá hoặc kết thúc thử nghiệm
Sau khi đánh giá kết quả, bạn có thể kết thúc hoặc quảng bá thử nghiệm bằng cách sử dụng biểu tượng ExperimentService.
- Kết thúc: Nếu bạn không hài lòng với kết quả, hãy sử dụng biểu tượng
EndExperiment. Tính năng này sẽ bị tắt và chiến dịch sẽ quay lại phân phát tất cả lưu lượng truy cập mà không có tính năng thử nghiệm. Đây là một thao tác đồng bộ. - Quảng bá: Nếu hài lòng với kết quả, hãy sử dụng
PromoteExperiment. Thao tác này sẽ áp dụng thay đổi thử nghiệm làm trạng thái mới và vĩnh viễn của chiến dịch. Đâ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.
Thao tác chuyển đổi không được hỗ trợ cho thử nghiệm trong chiến dịch vì không có chiến dịch thử nghiệm riêng để chuyển đổi.