تُستخدَم التجارب ضمن الحملة لاختبار ميزة معيّنة داخل حملة واحدة. على عكس التجارب التي يديرها النظام ويتم فيها تقسيم الزيارات بين الحملات الضابطة والتجريبية، تقسّم التجارب ضمن الحملة الزيارات داخل الحملة، استنادًا إلى ما إذا كانت الميزة مفعَّلة أم لا.
يتوافق سير العمل هذا مع قيم
ExperimentType التالية:
ADOPT_AI_MAX- تختبر هذه التجربة تأثير ميزات AI Max في "الحملات على شبكة البحث".
ADOPT_BROAD_MATCH_KEYWORDS- تختبر تأثير الكلمات الرئيسية التي تستخدم المطابقة التقريبية في "الحملات على شبكة البحث".
PMAX_TEXT_CUSTOMIZATION_FINAL_URL_EXPANSION- تُستخدَم هذه الميزة تحديدًا لاختبار ميزات "حملات الأداء الأفضل": تخصيص النص وتوسيع عنوان URL النهائي. تتيح هذه الميزة لذكاء Google الاصطناعي إرسال الزيارات إلى الصفحات المقصودة الملائمة وإنشاء مواد عرض نصية لمطابقة طلبات البحث بشكلٍ أفضل.
الإعداد
- حدِّد
Experiment(مع ضبطstatusعلىENABLED)، مع تقديم نوع التجربة، وExperimentArmضابطة، وExperimentArmتجريبية:- بالنسبة إلى
ADOPT_AI_MAXوADOPT_BROAD_MATCH_KEYWORDS، يجب أن تشير كل من المجموعة الضابطة والمجموعة التجريبية إلى الحملة نفسها فيcampaigns. - بالنسبة إلى
PMAX_TEXT_CUSTOMIZATION_FINAL_URL_EXPANSION، تحدّد مجموعة التجربة فقط "حملة الأداء الأفضل" فيcampaigns(يجب تركcampaignsبدون ضبط في المجموعة الضابطة).
- بالنسبة إلى
بالنسبة إلى
ADOPT_AI_MAX، عليك إنشاء تعديل علىCampaignOperationباستخدام قناع حقل لتفعيلai_max_setting.enable_ai_maxوضبطasset_automation_settings.أرسِل طلب
GoogleAdsService.Mutateيتضمّن عمليات تحويل لإنشاء التجربة ومجموعات التجربة، و (بالنسبة إلىADOPT_AI_MAX) لتفعيل ميزة الاختبار في الحملة.
بالنسبة إلى "ADOPT_AI_MAX" و"ADOPT_BROAD_MATCH_KEYWORDS"، يجب تقسيم عدد الزيارات بالتساوي (50/50) ضمن الحملة، بحيث يتم عرض الميزة المفعَّلة على 50% من عدد الزيارات (المجموعة التجريبية) وعدم عرضها على 50% (المجموعة الضابطة).
تتيح ميزة "PMAX_TEXT_CUSTOMIZATION_FINAL_URL_EXPANSION" تقسيم عدد الزيارات بشكل مخصّص
بشرط أن يكون مجموع النسب %100.
جافا
// 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
تقرير عن التجربة
بما أنّ زيارات المجموعة الضابطة والمجموعة التجريبية يتم مزجها ضمن حملة واحدة، عليك استخدام تقارير التجارب المباشرة لمقارنة المقاييس بين المجموعتَين الضابطة والتجريبية. لا تعرض التقارير العادية على مستوى الحملة سوى المقاييس المجمّعة للحملة بأكملها، ولا يمكنها التمييز بين المجموعتَين.
يسترجع طلب البحث التالي في GAQL إحصاءات النقرات ADOPT_AI_MAX
للتجربة ضمن الحملة خلال آخر 30 يومًا:
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'
تطبيق التجربة أو إكمالها أو إنهاؤها
بعد تقييم النتائج، يمكنك إكمال التجربة باستخدام
ExperimentService:
- إنهاء: إذا لم تكن راضيًا عن النتائج، استخدِم
EndExperiment. يتم إيقاف الميزة، وتعود الحملة إلى عرض الإعلانات في كل الزيارات بدون الميزة التجريبية. هذه عملية متزامنة. - الترقية (
ADOPT_AI_MAXوADOPT_BROAD_MATCH_KEYWORDS): إذا كنت راضيًا عن نتائج تجربة ضمن "الحملة على شبكة البحث"، استخدِمPromoteExperiment. يؤدي ذلك إلى تطبيق التغيير التجريبي كحالة دائمة جديدة للحملة. هذه عملية غير متزامنة، لذا يُرجى الاطّلاع على الأخطاء غير المتزامنة لمزيد من التفاصيل. - التطبيق (
PMAX_TEXT_CUSTOMIZATION_FINAL_URL_EXPANSION): لا يمكن استخدامPromoteExperimentمعPMAX_TEXT_CUSTOMIZATION_FINAL_URL_EXPANSION، بل يجب استخدامGraduateExperimentلتطبيق إعدادات "تخصيص النص" و"توسيع عنوان URL النهائي" الخاصة بمجموعة التجربة على "حملة الأداء الأفضل" الحالية. يجب تضمين إدخالCampaignBudgetMappingفيcampaign_budget_mappingsيحدّد حملة مجموعة التجربة (experiment_campaign) وميزانيتها (campaign_budget). هذه عملية متزامنة. (لا يتوفّر الخيار "GraduateExperiment" في "ADOPT_AI_MAX" أو "ADOPT_BROAD_MATCH_KEYWORDS" لعدم توفّر حملة معالجة منفصلة يمكن ترقيتها).