Les tests intracampagne permettent de tester une fonctionnalité spécifique dans une seule campagne. Contrairement aux tests gérés par le système, où le trafic est réparti entre les campagnes de contrôle et de traitement, les tests intracampagne répartissent le trafic au sein de la campagne, selon que la fonctionnalité est activée ou non.
Ce workflow est compatible avec les valeurs ExperimentType suivantes :
ADOPT_AI_MAX- Teste l'impact des fonctionnalités AI Max sur les campagnes sur le Réseau de Recherche.
ADOPT_BROAD_MATCH_KEYWORDS- Teste l'impact des mots clés en requête large sur les campagnes sur le Réseau de Recherche.
PMAX_TEXT_CUSTOMIZATION_FINAL_URL_EXPANSION- Utilisé spécifiquement pour tester les fonctionnalités Performance Max : adaptation du texte et extension d'URL finale. Permet à l'IA de Google de rediriger le trafic vers les pages de destination appropriées et de générer des composants Texte correspondant mieux aux requêtes de recherche.
Configuration
- Définissez
Experiment(avecstatusdéfini surENABLED), en fournissant un type de test, unExperimentArmde contrôle et unExperimentArmde traitement :- Pour
ADOPT_AI_MAXetADOPT_BROAD_MATCH_KEYWORDS, le groupe de contrôle et le groupe de traitement doivent tous deux faire référence à la même campagne danscampaigns. - Pour
PMAX_TEXT_CUSTOMIZATION_FINAL_URL_EXPANSION, seul le groupe de traitement spécifie la campagne Performance Max danscampaigns(laissezcampaignsnon défini dans le groupe de contrôle).
- Pour
Pour
ADOPT_AI_MAX, créez une mise à jourCampaignOperationavec un masque de champ pour activerai_max_setting.enable_ai_maxet configurerasset_automation_settings.Envoyez une requête
GoogleAdsService.Mutateincluant des opérations de mutation pour créer le test et les bras de test, et (pourADOPT_AI_MAX) pour activer la fonctionnalité de test dans la campagne.
Pour ADOPT_AI_MAX et ADOPT_BROAD_MATCH_KEYWORDS, le trafic doit être réparti de manière égale (50/50) dans la campagne. Ainsi, 50% du trafic est exposé à la fonctionnalité activée (groupe de traitement) et 50% ne l'est pas (groupe de contrôle).
PMAX_TEXT_CUSTOMIZATION_FINAL_URL_EXPANSION est compatible avec les répartitions de trafic personnalisées dont la somme est égale à 100.
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
Rapport sur le test
Étant donné que le trafic de contrôle et de traitement est mélangé dans une même campagne, vous devez utiliser les rapports directs sur les tests pour comparer les métriques entre les groupes de contrôle et de traitement. Les rapports standards au niveau de la campagne n'affichent que des métriques agrégées pour l'ensemble de la campagne et ne peuvent pas faire la distinction entre les deux groupes.
La requête GAQL suivante récupère les statistiques sur les clics pour un test ADOPT_AI_MAX intracampagne au cours des 30 derniers jours :
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'
Promouvoir, faire évoluer ou terminer le test
Après avoir évalué les résultats, vous pouvez terminer le test à l'aide de ExperimentService :
- Fin : si vous n'êtes pas satisfait des résultats, utilisez
EndExperiment. La fonctionnalité est désactivée et la campagne revient à la diffusion de tout le trafic sans la fonctionnalité expérimentale. Il s'agit d'une opération synchrone. - Promouvoir (
ADOPT_AI_MAXetADOPT_BROAD_MATCH_KEYWORDS) : si vous êtes satisfait des résultats d'un test intra-campagne sur le Réseau de Recherche, utilisezPromoteExperiment. Cela applique la modification expérimentale comme nouvel état permanent de la campagne. Il s'agit d'une opération asynchrone. Pour en savoir plus, consultez Erreurs asynchrones. - Terminer (
PMAX_TEXT_CUSTOMIZATION_FINAL_URL_EXPANSION) :PromoteExperimentn'est pas compatible avecPMAX_TEXT_CUSTOMIZATION_FINAL_URL_EXPANSION. Utilisez plutôtGraduateExperimentpour appliquer les paramètres de personnalisation du texte et d'extension de l'URL finale du bras de traitement directement à la campagne Performance Max existante. Incluez une entréeCampaignBudgetMappingdanscampaign_budget_mappingsspécifiant la campagne du bras de traitement (experiment_campaign) et son budget (campaign_budget). Il s'agit d'une opération synchrone. (GraduateExperimentn'est pas compatible avecADOPT_AI_MAXniADOPT_BROAD_MATCH_KEYWORDS, car il n'existe pas de campagne de traitement distincte à faire évoluer.)