আন্তঃ-অভিযান পরীক্ষা

একটি একক ক্যাম্পেইনের মধ্যে কোনো নির্দিষ্ট ফিচার পরীক্ষা করার জন্য ইন্ট্রা-ক্যাম্পেইন এক্সপেরিমেন্ট ব্যবহার করা হয়। সিস্টেম-পরিচালিত এক্সপেরিমেন্টের বিপরীতে, যেখানে ট্র্যাফিক কন্ট্রোল এবং ট্রিটমেন্ট ক্যাম্পেইনের মধ্যে ভাগ করা হয়, ইন্ট্রা-ক্যাম্পেইন এক্সপেরিমেন্টে ফিচারটি সক্রিয় আছে কি নেই তার উপর ভিত্তি করে ক্যাম্পেইনের মধ্যেই ট্র্যাফিক ভাগ করা হয়।

এই ওয়ার্কফ্লোটি নিম্নলিখিত ExperimentType মানগুলির জন্য সমর্থিত:

  • ADOPT_AI_MAX
  • ADOPT_BROAD_MATCH_KEYWORDS

সেটআপ

  1. একটি পরীক্ষার ধরণ, একটি কন্ট্রোল ExperimentArm এবং একটি ট্রিটমেন্ট ExperimentArm উল্লেখ করে Experiment সংজ্ঞায়িত করুন। প্রতিটি আর্ম একই ক্যাম্পেইনকে নির্দেশ করবে।
  2. একটি ফিল্ড মাস্ক ব্যবহার করে এক্সপেরিমেন্টের জন্য টেস্ট ফিচারটি সক্রিয় করুন। ADOPT_BROAD_MATCH_KEYWORDS জন্য এটি প্রয়োজনীয় নয় ; পরিবর্তে, এক্সপেরিমেন্ট তৈরির সময় ব্রড ম্যাচ ক্যাম্পেইন সেটিংটি স্বয়ংক্রিয়ভাবে সক্রিয় হয়ে যাবে।
  3. এক্সপেরিমেন্ট ও এক্সপেরিমেন্ট আর্ম তৈরি করতে এবং (প্রযোজ্য ক্ষেত্রে) টেস্ট ফিচারটি সক্রিয় করতে মিউটেট অপারেশনসহ একটি GoogleAdsService.Mutate রিকোয়েস্ট পাঠান।

একবার সেট আপ করা হয়ে গেলে, ক্যাম্পেইনের মধ্যে ট্র্যাফিক এমনভাবে বিভক্ত করা হয় যে, ৫০% ট্র্যাফিক সক্রিয় ফিচারটির সংস্পর্শে আসে (ট্রিটমেন্ট গ্রুপ) এবং বাকি ৫০% আসে না (কন্ট্রোল গ্রুপ)।

জাভা

// 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);
      

সি#

// 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);
      

পিএইচপি

This example is not yet available in PHP; you can take a look at the other languages.
    

পাইথন

# 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,
)
      

রুবি

This example is not yet available in Ruby; you can take a look at the other languages.
    

পার্ল

This example is not yet available in Perl; you can take a look at the other languages.
    

কার্ল

পরীক্ষাটির উপর প্রতিবেদন

যেহেতু একটি একক ক্যাম্পেইনের মধ্যে কন্ট্রোল এবং ট্রিটমেন্ট ট্র্যাফিক মিশ্রিত থাকে, তাই কন্ট্রোল এবং ট্রিটমেন্ট গ্রুপের মধ্যে মেট্রিক তুলনা করার জন্য আপনাকে অবশ্যই সরাসরি এক্সপেরিমেন্ট রিপোর্টিং ব্যবহার করতে হবে। স্ট্যান্ডার্ড ক্যাম্পেইন-স্তরের রিপোর্টিং শুধুমাত্র পুরো ক্যাম্পেইনের জন্য সমষ্টিগত মেট্রিক দেখায় এবং দুটি গ্রুপের মধ্যে পার্থক্য করতে পারে না।

ADOPT_AI_MAX ইন্ট্রা-ক্যাম্পেইন এক্সপেরিমেন্টের ক্লিক পরিসংখ্যান পুনরুদ্ধার করতে নিম্নলিখিত GAQL কোয়েরিটি ব্যবহার করা যেতে পারে।

SELECT
  experiment.resource_name,
  experiment.name,
  metrics.clicks,
  metrics.control_clicks,
  metrics.clicks_point_estimate,
  metrics.clicks_p_value
FROM experiment
WHERE experiment.type = 'ADOPT_AI_MAX'

পরীক্ষাটি এগিয়ে নিন বা শেষ করুন

ফলাফল মূল্যায়ন করার পর, আপনি ExperimentService ব্যবহার করে পরীক্ষাটি শেষ করতে বা এগিয়ে নিতে পারেন।

  • সমাপ্তি : আপনি যদি ফলাফলে সন্তুষ্ট না হন, তাহলে EndExperiment ব্যবহার করুন। ফিচারটি নিষ্ক্রিয় হয়ে যাবে এবং ক্যাম্পেইনটি পরীক্ষামূলক ফিচারটি ছাড়াই সমস্ত ট্র্যাফিক পরিবেশন করার পূর্বাবস্থায় ফিরে যাবে। এটি একটি সিঙ্ক্রোনাস অপারেশন।
  • প্রমোট : আপনি যদি ফলাফলে সন্তুষ্ট হন, তাহলে PromoteExperiment ব্যবহার করুন। এটি পরীক্ষামূলক পরিবর্তনটিকে ক্যাম্পেইনের নতুন স্থায়ী অবস্থা হিসেবে প্রয়োগ করে। এটি একটি অ্যাসিঙ্ক্রোনাস অপারেশন; বিস্তারিত জানতে অ্যাসিঙ্ক্রোনাস ত্রুটিসমূহ দেখুন।

আন্তঃ-ক্যাম্পেইন পরীক্ষার জন্য গ্র্যাজুয়েট অপারেশন সমর্থিত নয়, কারণ গ্র্যাজুয়েটের জন্য কোনো পৃথক ট্রিটমেন্ট ক্যাম্পেইন নেই।