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 er bei kampagneninternen Tests 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- Testet die Auswirkungen von AI Max-Funktionen auf Suchkampagnen.
ADOPT_BROAD_MATCH_KEYWORDS- Testet die Auswirkungen von weitgehend passenden Keywords auf Suchkampagnen.
PMAX_TEXT_CUSTOMIZATION_FINAL_URL_EXPANSION- Wird speziell zum Testen von Performance Max-Kampagnen-Funktionen verwendet: Textanpassung und Erweiterung der finalen URL. Ermöglicht es Google AI, Traffic an relevante Landingpages weiterzuleiten und Text-Assets zu generieren, die besser zu Suchanfragen passen.
Einrichtung
- Definieren Sie
Experiment(mitstatusaufENABLEDfestgelegt) und geben Sie einen Testtyp, eine KontrollgruppeExperimentArmund eine TestgruppeExperimentArman:- Sowohl die Kontroll- als auch die Testgruppe müssen für
ADOPT_AI_MAXundADOPT_BROAD_MATCH_KEYWORDSauf dieselbe Kampagne incampaignsverweisen. - Bei
PMAX_TEXT_CUSTOMIZATION_FINAL_URL_EXPANSIONwird die Performance Max-Kampagne nur in der Testgruppe incampaignsangegeben. Lassen Siecampaignsin der Kontrollgruppe leer.
- Sowohl die Kontroll- als auch die Testgruppe müssen für
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, die Mutate-Vorgänge zum Erstellen des Tests und der Testgruppen enthält und (fürADOPT_AI_MAX) die Testfunktion für die Kampagne aktiviert.
Bei ADOPT_AI_MAX und ADOPT_BROAD_MATCH_KEYWORDS muss der Traffic in der Kampagne gleichmäßig (50/50) aufgeteilt werden, sodass 50% des Traffics der aktivierten Funktion (der Testgruppe) und 50% nicht (der Kontrollgruppe) ausgesetzt sind.
PMAX_TEXT_CUSTOMIZATION_FINAL_URL_EXPANSION unterstützt benutzerdefinierte Traffic-Aufteilungen, deren Summe 100 ergibt.
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
Bericht zum Test
Da der Traffic von Kontroll- und Testgruppe in einer einzelnen Kampagne kombiniert wird, müssen Sie direkte Testberichte verwenden, um Messwerte zwischen den beiden Gruppen zu vergleichen. In Standardberichten auf Kampagnenebene werden nur zusammengefasste 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-Kampagnentest 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 bewerben, abschließen oder beenden
Nachdem Sie die Ergebnisse ausgewertet haben, können Sie den Test mit ExperimentService abschließen:
- Beenden: 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. - Bewerben (
ADOPT_AI_MAXundADOPT_BROAD_MATCH_KEYWORDS): Wenn Sie mit den Ergebnissen eines Suchkampagnen-Tests zufrieden sind, verwenden SiePromoteExperiment. Dadurch wird die Teständerung als neuer permanenter Status der Kampagne übernommen. Dies ist ein asynchroner Vorgang. Weitere Informationen finden Sie unter Asynchrone Fehler. - Abschluss (
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_mappingseinen Eintrag fürCampaignBudgetMappingein, in dem die Kampagne (experiment_campaign) und das Budget (campaign_budget) der Testgruppe angegeben werden. Dies ist ein synchroner Vorgang.GraduateExperimentwird fürADOPT_AI_MAXoderADOPT_BROAD_MATCH_KEYWORDSnicht unterstützt, da es keine separate Testkampagne gibt, die abgeschlossen werden kann.