Mit kampagneninternen Tests wird eine bestimmte Funktion innerhalb einer einzelnen Kampagne getestet. Im Gegensatz zu systemverwalteten Tests, bei denen der Traffic zwischen Kontroll- und Testkampagnen aufgeteilt wird, wird der Traffic bei Tests innerhalb einer Kampagne innerhalb der Kampagne aufgeteilt, je nachdem, ob die Funktion aktiviert ist oder nicht.
Dieser Workflow wird für die folgenden ExperimentType-Werte unterstützt:
ADOPT_AI_MAX- Damit wird die Auswirkung von AI Max-Funktionen auf Suchkampagnen getestet.
ADOPT_BROAD_MATCH_KEYWORDS- Damit wird die Auswirkung von weitgehend passenden Keywords auf Suchkampagnen getestet.
PMAX_TEXT_CUSTOMIZATION_FINAL_URL_EXPANSION- Wird speziell zum Testen von Performance Max-Kampagnen-Funktionen verwendet: Textanpassung und Erweiterung der finalen URL. Google AI kann Traffic an relevante Landingpages weiterleiten und Text-Assets generieren, die besser zu Suchanfragen passen.
Einrichtung
- Definieren Sie die
Experiment(mitstatusaufENABLEDfestgelegt) und geben Sie einen Testtyp, eine Kontroll-ExperimentArmund eine Test-ExperimentArman:- Bei
ADOPT_AI_MAXundADOPT_BROAD_MATCH_KEYWORDSmüssen sowohl die Kontroll- als auch die Testgruppe auf dieselbe Kampagne incampaignsverweisen. - Bei
PMAX_TEXT_CUSTOMIZATION_FINAL_URL_EXPANSIONwird die Performance Max-Kampagne incampaignsnur für die Testgruppe angegeben.campaignsbleibt für die Kontrollgruppe leer.
- Bei
Erstellen Sie für
ADOPT_AI_MAXeinCampaignOperation-Update mit einer Feldmaske, umai_max_setting.enable_ai_maxzu aktivieren undasset_automation_settingszu konfigurieren.Senden Sie eine
GoogleAdsService.Mutate-Anfrage mit Mutate-Vorgängen, um den Test und die Testverzweigungen zu erstellen und (fürADOPT_AI_MAX) die Testfunktion für die Kampagne zu aktivieren.
Bei ADOPT_AI_MAX und ADOPT_BROAD_MATCH_KEYWORDS muss der Traffic innerhalb der Kampagne gleichmäßig (50/50) aufgeteilt werden, sodass 50% des Traffics dem aktivierten Feature ausgesetzt sind (die Testgruppe) und 50% nicht (die Kontrollgruppe).
PMAX_TEXT_CUSTOMIZATION_FINAL_URL_EXPANSION unterstützt benutzerdefinierte Aufteilungen des Traffics, die zusammen 100 ergeben.
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
Bericht zum Test erstellen
Da der Traffic der Kontroll- und der Testgruppe in einer einzigen Kampagne gemischt wird, müssen Sie die Testberichte verwenden, um die Messwerte der Kontroll- und der Testgruppe zu vergleichen. In Standardberichten auf Kampagnenebene werden nur aggregierte Messwerte für die gesamte Kampagne angezeigt. Es kann nicht zwischen den beiden Gruppen unterschieden werden.
Mit der folgenden GAQL-Abfrage werden Klickstatistiken für einen ADOPT_AI_MAX-kampagneninternen Test der letzten 30 Tage abgerufen:
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'
Test übernehmen, beenden oder als eigenständige Kampagne weiterführen
Nachdem Sie die Ergebnisse ausgewertet haben, können Sie den Test mit ExperimentService abschließen:
- Ende: Wenn Sie mit den Ergebnissen nicht zufrieden sind, verwenden Sie
EndExperiment. Die Funktion wird deaktiviert und die Kampagne wird wieder für den gesamten Traffic ohne die experimentelle Funktion ausgeliefert. Dies ist ein synchroner Vorgang. - Hochstufen (
ADOPT_AI_MAXundADOPT_BROAD_MATCH_KEYWORDS): Wenn Sie mit den Ergebnissen eines kampagneninternen Suchtests zufrieden sind, verwenden SiePromoteExperiment. Dadurch wird die zu testende Änderung als neuer dauerhafter Status der Kampagne übernommen. Dies ist ein asynchroner Vorgang. Weitere Informationen finden Sie unter Asynchrone Fehler. - Graduate (
PMAX_TEXT_CUSTOMIZATION_FINAL_URL_EXPANSION):PromoteExperimentwird fürPMAX_TEXT_CUSTOMIZATION_FINAL_URL_EXPANSIONnicht unterstützt. Verwenden Sie stattdessenGraduateExperiment, um die Einstellungen für die Textanpassung und die Erweiterung der finalen URL der Testgruppe direkt auf die vorhandene Performance Max-Kampagne anzuwenden. Fügen Sie incampaign_budget_mappingseinenCampaignBudgetMapping-Eintrag ein, in dem die Kampagne der Testgruppe (experiment_campaign) und ihr Budget (campaign_budget) angegeben sind. Dies ist ein synchroner Vorgang. (GraduateExperimentwird fürADOPT_AI_MAXoderADOPT_BROAD_MATCH_KEYWORDSnicht unterstützt, da es keine separate Behandlungskampagne gibt, die abgeschlossen werden kann.)