آزمایشهای درونپویشی برای آزمایش کردن ویژگی خاصی در یک پویش استفاده میشود. برخلاف آزمایشهای تحت مدیریت سیستم که در آنها ترافیک بین پویشهای کنترل و آزمایش تقسیم میشود، آزمایشهای درونپویشی ترافیک را درون پویش و براساس فعال بودن یا نبودن ویژگی تقسیم میکنند.
این گردش کار برای مقادیر
ExperimentType زیر پشتیبانی میشود:
ADOPT_AI_MAX- تأثیر ویژگیهای «بیشینهسازی هوشوارهای» را بر پویشهای «جستجو» آزمایش میکند.
ADOPT_BROAD_MATCH_KEYWORDS- تأثیر کلیدواژههای مطابقت گسترده را بر پویشهای «شبکه جستجو» آزمایش میکند.
PMAX_TEXT_CUSTOMIZATION_FINAL_URL_EXPANSION- بهطور خاص برای آزمایش ویژگیهای «بیشینهسازی عملکرد» استفاده میشود: سفارشیسازی نوشتار و ازهم باز کردن نشانی وب نهایی. به «هوش مصنوعی 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، ترافیک باید بهطور مساوی (۵۰/۵۰) در پویش تقسیم شود تا ۵۰٪ ترافیک درمعرض ویژگی فعالشده (گروه تحت آزمایش) قرار گیرد و ۵۰٪ دیگر درمعرض آن قرار نگیرد (گروه شاهد).
PMAX_TEXT_CUSTOMIZATION_FINAL_URL_EXPANSION از توزیع ترافیک سفارشی
که مجموع آن ۱۰۰ باشد پشتیبانی میکند.
جاوا
// 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, )
پرل
This example is not yet available in Perl; you can take a look at the other languages.
curl
گزارش آزمایش
چون ترافیک کنترل و آزمایش در یک پویش واحد ترکیب شدهاند، باید از گزارشدهی آزمایش مستقیم برای مقایسه سنجهها بین گروههای کنترل و آزمایش استفاده کنید. گزارشدهی استاندارد در سطح پویش فقط سنجههای انبوهشی را برای کل پویش نشان میدهد و نمیتواند بین دو گروه تمایز قائل شود.
پرسوجوی GAQL زیر آمار کلیک را برای یک ADOPT_AI_MAX
آزمایش درونپویشی در ۳۰ روز گذشته بازیابی میکند:
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استفاده کنید. این کار تغییر آزمایشی را بهعنوان وضعیت دائمی جدید کمپین اعمال میکند. این عملیاتی ناهمگام است؛ برای جزئیات، خطاهای ناهمگام را ببینید. - Graduate (
PMAX_TEXT_CUSTOMIZATION_FINAL_URL_EXPANSION):PromoteExperimentis not supported forPMAX_TEXT_CUSTOMIZATION_FINAL_URL_EXPANSION; instead, useGraduateExperimentto apply the treatment arm's text customization and final URL expansion settings in-place to the existing Performance Max campaign. ورودیCampaignBudgetMappingرا درcampaign_budget_mappingsبا مشخص کردن پویش بازوی درمان (experiment_campaign) و بودجه آن (campaign_budget) اضافه کنید. این یک عملیات همگام است. (GraduateExperimentبرایADOPT_AI_MAXیاADOPT_BROAD_MATCH_KEYWORDSپشتیبانی نمیشود زیرا هیچ پویش درمان جداگانهای برای فارغالتحصیلی وجود ندارد.)