Kampanya içi denemeler, tek bir kampanya içindeki belirli bir özelliği test etmek için kullanılır. Trafiğin kontrol ve deney kampanyaları arasında bölündüğü sistem tarafından yönetilen denemelerin aksine, kampanya içi denemeler trafiği, özelliğin etkin olup olmamasına bağlı olarak kampanya içinde böler.
Bu iş akışı, aşağıdaki ExperimentType değerleri için desteklenir:
ADOPT_AI_MAX- Maksimum Yapay Zeka özelliklerinin Arama Ağı kampanyaları üzerindeki etkisini test eder.
ADOPT_BROAD_MATCH_KEYWORDS- Geniş eşlemeli anahtar kelimelerin Arama Ağı kampanyaları üzerindeki etkisini test eder.
PMAX_TEXT_CUSTOMIZATION_FINAL_URL_EXPANSION- Özellikle Maksimum Performans özelliklerini test etmek için kullanılır: metin özelleştirme ve nihai URL genişletmesi. Google AI'ın alakalı açılış sayfalarına trafik göndermesine ve arama sorgularıyla daha iyi eşleşecek metin öğeleri oluşturmasına olanak tanır.
Kurulum
- Deneme türü, kontrol
ExperimentArmve deneyExperimentArmsağlayarakExperiment(status,ENABLEDolarak ayarlanmış şekilde) tanımlayın:ADOPT_AI_MAXveADOPT_BROAD_MATCH_KEYWORDSiçin hem kontrol kolu hem de deney kolu,campaignsiçinde aynı kampanyaya referans vermelidir.PMAX_TEXT_CUSTOMIZATION_FINAL_URL_EXPANSIONiçin yalnızca deney kolu,campaignsiçinde Maksimum Performans kampanyasını belirtir (kontrol kolundacampaignsayarlanmamış olarak bırakın).
ADOPT_AI_MAXiçinai_max_setting.enable_ai_maxözelliğini etkinleştirmek veasset_automation_settingsayarını yapılandırmak üzere alan maskesi içeren birCampaignOperationgüncellemesi oluşturun.Denemeyi ve deneme kollarını oluşturmak için mutasyon işlemleri içeren bir
GoogleAdsService.Mutateisteği gönderin ve (ADOPT_AI_MAXiçin) kampanyada test özelliğini etkinleştirin.
ADOPT_AI_MAX ve ADOPT_BROAD_MATCH_KEYWORDS için trafik, kampanyada eşit olarak (%50/%50) bölünmelidir. Böylece trafiğin %50'si etkinleştirilen özelliğe (deney grubu) maruz kalır ve %50'si kalmaz (kontrol grubu).
PMAX_TEXT_CUSTOMIZATION_FINAL_URL_EXPANSION, toplamı 100 olan özel trafik yüklerini destekler.
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
# Create the experiment resource name using a temporary ID. experiment_resource_name = client.path.experiment(customer_id, "-1") # Create the experiment. experiment_operation = client.operation.mutate do |m| m.experiment_operation = client.operation.create_resource.experiment do |e| e.resource_name = experiment_resource_name e.name = "ADOPT_AI_MAX Experiment #{(Time.new.to_f * 1000).to_i}" e.type = :ADOPT_AI_MAX end end # Create the control arm. Both arms in an intra-campaign experiment # reference the same base campaign. campaign_resource_name = client.path.campaign(customer_id, campaign_id) control_arm_operation = client.operation.mutate do |m| m.experiment_arm_operation = client.operation.create_resource.experiment_arm do |arm| arm.experiment = experiment_resource_name arm.name = "Control Arm" arm.control = true arm.traffic_split = 50 arm.campaigns << campaign_resource_name end end # Create the treatment arm. treatment_arm_operation = client.operation.mutate do |m| m.experiment_arm_operation = client.operation.create_resource.experiment_arm do |arm| arm.experiment = experiment_resource_name arm.name = "Treatment Arm" arm.control = false arm.traffic_split = 50 arm.campaigns << campaign_resource_name end end # 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.operation.mutate do |m| m.campaign_operation = client.operation.update_resource.campaign(campaign_resource_name) do |c| c.ai_max_setting = client.resource.ai_max_setting do |aims| aims.enable_ai_max = true end [:TEXT_ASSET_AUTOMATION, :FINAL_URL_EXPANSION_TEXT_ASSET_AUTOMATION].each do |type| c.asset_automation_settings << client.resource.asset_automation_setting do |setting| setting.asset_automation_type = type setting.asset_automation_status = :OPTED_IN end end end end # Send all mutate operations in a single Mutate request. mutate_operations = [ experiment_operation, control_arm_operation, treatment_arm_operation, campaign_operation, ] response = client.service.google_ads.mutate( customer_id: customer_id, mutate_operations: mutate_operations, )
Perl
This example is not yet available in Perl; you can take a look at the other languages.
curl
Deneme hakkında rapor oluşturma
Kontrol ve deney trafiği tek bir kampanyada karıştırıldığından, kontrol ve deney grupları arasındaki metrikleri karşılaştırmak için doğrudan deneme raporlamasını kullanmanız gerekir. Standart kampanya düzeyinde raporlama, yalnızca tüm kampanya için toplu metrikleri gösterir ve iki grup arasında ayrım yapamaz.
Aşağıdaki GAQL sorgusu, son 30 gün içindeki bir ADOPT_AI_MAX
kampanya içi denemenin tıklama istatistiklerini alır:
SELECT
experiment.resource_name,
experiment.name,
metrics.clicks,
metrics.control_clicks,
metrics.clicks_point_estimate,
metrics.clicks_p_value
FROM experiment
WHERE segments.date DURING LAST_30_DAYS
AND experiment.type = 'ADOPT_AI_MAX'
Denemeyi uygulama, mezun etme veya sonlandırma
Sonuçları değerlendirdikten sonra ExperimentService kullanarak denemeyi tamamlayabilirsiniz:
- Sonlandır: Sonuçlardan memnun değilseniz
EndExperimentseçeneğini kullanın. Özellik devre dışı bırakılır ve kampanya, deneysel özellik olmadan tüm trafiğe reklam sunmaya geri döner. Bu, eşzamanlı bir işlemdir. - Yükselt (
ADOPT_AI_MAXveADOPT_BROAD_MATCH_KEYWORDS): Bir Arama Ağı kampanya içi denemesinin sonuçlarından memnunsanızPromoteExperimentseçeneğini kullanın. Bu işlem, deneme amaçlı değişikliği kampanyanın yeni kalıcı durumu olarak uygular. Bu, eşzamansız bir işlemdir. Ayrıntılar için Eşzamansız hatalar bölümüne bakın. - Graduate (
PMAX_TEXT_CUSTOMIZATION_FINAL_URL_EXPANSION):PromoteExperiment,PMAX_TEXT_CUSTOMIZATION_FINAL_URL_EXPANSIONiçin desteklenmez. Bunun yerine, deney kolunun metin özelleştirme ve nihai URL genişletmesi ayarlarını mevcut Maksimum Performans kampanyasına yerinde uygulamak içinGraduateExperimentkullanın.campaign_budget_mappingsiçinde deney kolunun kampanyasını (experiment_campaign) ve bütçesini (campaign_budget) belirten birCampaignBudgetMappinggirişi ekleyin. Bu, eşzamanlı bir işlemdir. (GraduateExperiment,ADOPT_AI_MAXveyaADOPT_BROAD_MATCH_KEYWORDSiçin desteklenmez çünkü mezun edilecek ayrı bir tedavi kampanyası yoktur.)