รายงานเกี่ยวกับการทดสอบ

หากต้องการประเมินว่าการเปลี่ยนแปลงแคมเปญและระยะเวลาที่ผู้ใช้เห็นโฆษณาส่งผลต่อประสิทธิภาพอย่างไร ให้ค้นหาแหล่งข้อมูลการรายงานการทดสอบและการวัดผล Lift ใน Google Ads API

Google Ads API รองรับการรายงานการทดสอบ A/B มาตรฐาน 2 วิธี ดังนี้

  • การรายงานการทดสอบโดยตรง: ค้นหาเมตริกจากทรัพยากร experiment ตัวเลือกนี้จะแสดงเมตริกสำหรับกลุ่มควบคุมและกลุ่มทดสอบในการตอบกลับเดียว พร้อมกับข้อมูลการเปรียบเทียบทางสถิติ เช่น การเพิ่มขึ้นและค่า p-value การรายงานการทดสอบโดยตรงเป็นวิธีเดียวในการรายงานการทดสอบภายในแคมเปญ
  • การรายงานแคมเปญ: ค้นหาทรัพยากร campaign เพื่อดูเมตริกโดยใช้ช่อง campaign.experiment_type เพื่อแยกความแตกต่างระหว่างแคมเปญฐานกับแคมเปญการทดสอบ ตัวเลือกนี้ใช้ได้กับการทดสอบที่ใช้แคมเปญควบคุมและแคมเปญทดสอบแยกกันเท่านั้น เช่น การทดสอบที่จัดการโดยระบบ

สําหรับการทดสอบมาตรฐาน คู่มือนี้จะมุ่งเน้นที่การรายงานการทดสอบโดยตรงเป็นหลัก ซึ่งรองรับการทดสอบทุกประเภทที่รายงานได้ สําหรับการศึกษาการวัด Lift โปรดดูคู่มือการรายงาน Lift หรือส่วนสรุปในหน้านี้สําหรับ Brand Lift, Conversion Lift (รวมถึง A/B + Conversion Lift) และ Search Lift

การรายงานการทดสอบโดยตรง

หากต้องการดึงข้อมูลเมตริกประสิทธิภาพและการเปรียบเทียบทางสถิติระหว่างกลุ่มควบคุมและกลุ่มทดสอบในการตอบกลับเดียวใน Google Ads API เวอร์ชันที่รองรับทั้งหมด (v23 ขึ้นไป) ให้ค้นหาทรัพยากร experiment โดยตรง

เมตริกและนัยสำคัญทางสถิติ

สําหรับเมตริกหลัก เช่น การคลิก การแสดงผล ต้นทุน Conversion และมูลค่า Conversion แหล่งข้อมูล experiment จะแสดงทั้งเมตริกกลุ่มทดสอบ (เช่น metrics.clicks) และเมตริกกลุ่มควบคุม (เช่น metrics.control_clicks) ในแถวเดียวกัน

นอกจากนี้ แหล่งข้อมูล experiment ยังมีช่องที่จะช่วยคุณประเมินนัยสำคัญทางสถิติของความแตกต่างระหว่างกลุ่มต่างๆ ดังนี้

  • metrics.*_p_value: ความน่าจะเป็นที่จะเห็นผลลัพธ์ที่แตกต่างอย่างมากจากความแตกต่างที่วัดได้ หากการทดสอบไม่มีผลต่อเมตริกจริงๆ ค่า P-Value ที่ต่ำลงบ่งชี้ถึงนัยสำคัญทางสถิติที่สูงขึ้น
  • metrics.*_point_estimate: เปอร์เซ็นต์ Lift โดยประมาณ (บวกหรือลบ) ในเมตริกที่ระบุสำหรับกลุ่มทดสอบเทียบกับกลุ่มควบคุม ค่านี้จะกำหนดช่วงความเชื่อมั่นที่มีระดับความเชื่อมั่นที่กำหนดไว้สำหรับความแตกต่างโดยประมาณร่วมกับฟิลด์ metrics.*_margin_of_error ปริมาณโดยประมาณคือ (treatment / control) - 1 และค่าประมาณแบบจุดคือจุดกึ่งกลางของช่วงความเชื่อมั่น
  • metrics.*_margin_of_error: รัศมีของช่วงความเชื่อมั่นซึ่งมีศูนย์กลางอยู่ที่ค่า metrics.*_point_estimate API จะคำนวณส่วนต่างนี้สำหรับระดับความเชื่อมั่นที่กำหนดซึ่งขึ้นอยู่กับประเภทการทดสอบ

ระบบรองรับช่องเมตริกหลักต่อไปนี้ในทรัพยากร experiment ซึ่งรวมถึงค่ากลุ่มทดสอบ ค่ากลุ่มควบคุม และช่องสถิติที่ระบุไว้ก่อนหน้านี้

  • clicks
  • impressions
  • cost_micros
  • conversions
  • cost_per_conversion
  • conversion_value
  • conversion_value_per_cost

สําหรับ Conversion โดยเฉพาะ ช่องสถิติจะพร้อมใช้งานผ่านช่อง absolute_change ต่อไปนี้ แทนที่จะเป็นค่าสัมพัทธ์

  • metrics.conversions_absolute_change_p_value: ค่า p-value สำหรับสมมติฐานว่างที่ว่าการทดสอบไม่มีผลต่อการเปลี่ยนแปลงแบบสัมบูรณ์ของ Conversion มีค่าตั้งแต่ 0 ถึง 1
  • metrics.conversions_absolute_change_point_estimate: ค่าประมาณจุดเมื่อประมาณผลกระทบของการทดสอบที่มีต่อการเปลี่ยนแปลงแบบสัมบูรณ์ของ Conversion
  • metrics.conversions_absolute_change_margin_of_error: ส่วนต่างข้อผิดพลาดเมื่อประมาณผลกระทบของการทดสอบที่มีต่อการเปลี่ยนแปลงแบบสัมบูรณ์ของ Conversion

หากต้องการความช่วยเหลือในการสร้างคำค้นหาที่ถูกต้องสำหรับแหล่งข้อมูล experiment ให้ใช้เครื่องมือ Google Ads Query Builder

ตัวอย่างคำค้นหา

คําค้นหา Google Ads Query Language (GAQL) ต่อไปนี้จะดึงข้อมูลเมตริกหลักสําหรับการทดสอบ

SELECT
  experiment.experiment_id,
  experiment.name,
  experiment.type,
  metrics.clicks,
  metrics.control_clicks,
  metrics.clicks_point_estimate,
  metrics.clicks_margin_of_error,
  metrics.clicks_p_value,
  metrics.conversions,
  metrics.control_conversions,
  metrics.conversions_absolute_change_point_estimate,
  metrics.conversions_absolute_change_margin_of_error,
  metrics.conversions_absolute_change_p_value
FROM experiment
WHERE experiment.experiment_id = EXPERIMENT_ID

แทนที่ค่าต่อไปนี้

  • EXPERIMENT_ID: รหัสจำนวนเต็มของการทดสอบ (experiment.experiment_id)

ตีความผลลัพธ์

ใช้ช่องค่า P-Value, ค่าประมาณจุด และส่วนต่างความผิดพลาดเพื่อระบุว่าการทดสอบให้ผลลัพธ์ที่มีนัยสำคัญทางสถิติหรือไม่ ตัวอย่างเช่น หากเมตริก metrics.conversions_absolute_change_p_value น้อยกว่าเกณฑ์ที่คุณเลือก (เช่น 0.05 สำหรับความเชื่อมั่น 95%) และเมตริก metrics.conversions_absolute_change_point_estimate ลบเมตริก metrics.conversions_absolute_change_margin_of_error มากกว่า 0 แสดงว่ากลุ่มทดสอบมีประสิทธิภาพดีกว่ากลุ่มควบคุมอย่างมากในแง่ของ Conversion

ตัวอย่างโค้ดต่อไปนี้แสดงวิธีประเมินผลลัพธ์ตามค่า p-value และค่าประมาณ Lift

Java

private void evaluateExperiment(
    GoogleAdsClient googleAdsClient, long customerId, GoogleAdsRow row) {
  Metrics metrics = row.getMetrics();
  String experimentResourceName = row.getExperiment().getResourceName();

  // 1. Evaluate conversion success as a primary success signal if available.
  // - Point Estimate: Represents the estimated average lift or difference in conversions.
  // - Margin of Error: Outlines the confidence interval bounds. Note that the margin_of_error
  //   provided by the API is calculated for a preset confidence level which is set based on the
  //   experiment type.
  // - Lower Bound: (Point Estimate - Margin of Error). If this value is above 0,
  //   we have statistical significance that performance has improved.
  double convPValue = metrics.getConversionsAbsoluteChangePValue();
  double convLift = metrics.getConversionsAbsoluteChangePointEstimate();
  double convError = metrics.getConversionsAbsoluteChangeMarginOfError();
  double convLowerBound = convLift - convError;

  if (convPValue <= P_VALUE_THRESHOLD) {
    if (convLowerBound > 0) {
      System.out.printf(
          "Significant Success: Conversions increased. Even at the lower bound, the lift is %.2f."
              + " Promoting changes.%n",
          convLowerBound);
      promoteExperiment(googleAdsClient, customerId, experimentResourceName);
      return;
    } else if ((convLift + convError) < 0) {
      System.out.printf(
          "Significant Decline: Even the upper bound (%.2f) is below zero. Ending experiment.%n",
          convLift + convError);
      endExperiment(googleAdsClient, customerId, experimentResourceName);
      return;
    }
  }

  // 2. Fall back to evaluating click metrics if conversions are inconclusive.
  double clickPValue = metrics.getClicksPValue();
  double clickLift = metrics.getClicksPointEstimate();
  double clickError = metrics.getClicksMarginOfError();
  double clickLowerBound = clickLift - clickError;

  if (clickPValue <= P_VALUE_THRESHOLD && clickLowerBound > 0) {
    System.out.printf("Click volume is significantly up (+%.1f%%).%n", clickLift * 100);

    // Graduation is only supported for separate campaign experiments, not
    // intra-campaign experiments where there is no separate treatment campaign.
    ExperimentType experimentType = row.getExperiment().getType();
    if (experimentType != ExperimentType.ADOPT_BROAD_MATCH_KEYWORDS
        && experimentType != ExperimentType.ADOPT_AI_MAX) {
      System.out.println("Graduating treatment campaign for further manual analysis.");
      graduateExperiment(googleAdsClient, customerId, experimentResourceName);
    } else {
      System.out.println(
          "Intra-campaign trial detected: graduation is not supported. Continuing to run the"
              + " experiment to gather more conversion data.");
    }
  } else {
    // 3. Print status if no action was taken.
    System.out.printf(
        "Inconclusive: No significant lift in Conversions (p=%.2f) or Clicks (p=%.2f). Current"
            + " estimated lift: %.2f +/- %.2f. Allowing the experiment to continue running.%n",
        convPValue, clickPValue, convLift, convError);
  }
}

      

C#

private static void EvaluateExperiment(GoogleAdsClient client, long customerId, GoogleAdsRow row)
{
    // This function evaluates performance metrics and immediately takes action
    // to update the experiment's status (promote, end, or graduate) if
    // statistical significance thresholds are met.
    var metrics = row.Metrics;
    string experimentResourceName = row.Experiment.ResourceName;

    bool hasConvMetrics = metrics.HasConversionsAbsoluteChangePValue
        && metrics.HasConversionsAbsoluteChangePointEstimate
        && metrics.HasConversionsAbsoluteChangeMarginOfError;

    bool hasClickMetrics = metrics.HasClicksPValue
        && metrics.HasClicksPointEstimate
        && metrics.HasClicksMarginOfError;

    // 1. Evaluate conversion success as a primary success signal if available.
    // - Point Estimate: Represents the estimated average lift or difference in conversions.
    // - Margin of Error: Outlines the confidence interval bounds. Note that the margin_of_error
    //   provided by the API is calculated for a preset confidence level which is set based on
    //   the experiment type.
    // - Lower Bound: (Point Estimate - Margin of Error). If this value is above 0,
    //   we have statistical significance that performance has improved.
    if (hasConvMetrics)
    {
        double convPValue = metrics.ConversionsAbsoluteChangePValue;
        double convLift = metrics.ConversionsAbsoluteChangePointEstimate;
        double convError = metrics.ConversionsAbsoluteChangeMarginOfError;
        double convLowerBound = convLift - convError;

        if (convPValue <= P_VALUE_THRESHOLD)
        {
            if (convLowerBound > 0)
            {
                Console.WriteLine(
                    $"Significant Success: Conversions increased. Even at the lower" +
                    $" bound, the lift is {convLowerBound:F2}. Promoting changes.");
                PromoteExperiment(client, customerId, experimentResourceName);
                return;
            }
            else if ((convLift + convError) < 0)
            {
                Console.WriteLine(
                    $"Significant Decline: Even the upper bound ({convLift + convError:F2}) " +
                    $"is below zero. Ending experiment.");
                EndExperiment(client, customerId, experimentResourceName);
                return;
            }
        }
    }

    // 2. Evaluate click volume as a secondary signal.
    // This is helpful as an early indicator or for lower-volume accounts.
    if (hasClickMetrics)
    {
        double clickPValue = metrics.ClicksPValue;
        double clickLift = metrics.ClicksPointEstimate;
        double clickError = metrics.ClicksMarginOfError;
        double clickLowerBound = clickLift - clickError;

        if (clickPValue <= P_VALUE_THRESHOLD && clickLowerBound > 0)
        {
            // We have a directional winner: high confidence in more traffic,
            // but not enough data to confirm conversion impact yet.
            Console.WriteLine(
                $"Click volume is significantly up (+{clickLift * 100:F1}%).");

            // Graduation is only supported for separate campaign experiments, not
            // intra-campaign experiments where there is no separate treatment campaign.
            if (row.Experiment.Type != ExperimentType.AdoptBroadMatchKeywords
                && row.Experiment.Type != ExperimentType.AdoptAiMax)
            {
                Console.WriteLine("Graduating treatment campaign for further manual analysis.");
                GraduateExperiment(client, customerId, experimentResourceName);
            }
            else
            {
                Console.WriteLine(
                    "Intra-campaign trial detected: graduation is not supported. " +
                    "Continuing to run the experiment to gather more conversion data.");
            }
            return;
        }
    }

    // 3. Print status if no action was taken.
    if (hasConvMetrics || hasClickMetrics)
    {
        string convStatus = hasConvMetrics
            ? $"Conversions (p={metrics.ConversionsAbsoluteChangePValue:F2}, " +
              $"lift={metrics.ConversionsAbsoluteChangePointEstimate:F2} +/- " +
              $"{metrics.ConversionsAbsoluteChangeMarginOfError:F2})"
            : "Conversions (not populated)";

        string clickStatus = hasClickMetrics
            ? $"Clicks (p={metrics.ClicksPValue:F2}, " +
              $"lift={metrics.ClicksPointEstimate:F2} +/- " +
              $"{metrics.ClicksMarginOfError:F2})"
            : "Clicks (not populated)";

        Console.WriteLine(
            $"Inconclusive: No significant action taken. {convStatus}, {clickStatus}. " +
            "Allowing the experiment to continue running.");
    }
    else
    {
        Console.WriteLine(
            "Conversion and click performance metrics are not yet populated. " +
            "Allowing the experiment to continue running.");
    }
}
      

PHP

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

Python

def evaluate_experiment(
    client: GoogleAdsClient, customer_id: str, row: GoogleAdsRow
) -> None:
    """Evaluates the performance of the experiment and updates it accordingly
    (for example, promotes, ends, or graduates).

    Checks conversion and click metrics against statistical significance thresholds
    to determine the appropriate action to take on the experiment.

    Args:
        client: an initialized GoogleAdsClient instance.
        customer_id: a client customer ID.
        row: a GoogleAdsRow containing the experiment and metrics.
    """
    # This function evaluates performance metrics and immediately takes action
    # to update the experiment's status (promote, end, or graduate) if
    # statistical significance thresholds are met.
    metrics = row.metrics
    experiment_resource_name = row.experiment.resource_name

    has_conv_metrics = (
        "conversions_absolute_change_p_value" in metrics
        and "conversions_absolute_change_point_estimate" in metrics
        and "conversions_absolute_change_margin_of_error" in metrics
    )
    has_click_metrics = (
        "clicks_p_value" in metrics
        and "clicks_point_estimate" in metrics
        and "clicks_margin_of_error" in metrics
    )

    # 1. Evaluate conversion success as a primary success signal if available.
    # - Point Estimate: Represents the estimated average lift or difference in conversions.
    # - Margin of Error: Outlines the confidence interval bounds. Note that the margin_of_error provided by the API is calculated for a preset confidence level which is set based on the experiment type.
    # - Lower Bound: (Point Estimate - Margin of Error). If this value is above 0,
    #   we have statistical significance that performance has improved.
    if has_conv_metrics:
        conv_p_value = metrics.conversions_absolute_change_p_value
        conv_lift = metrics.conversions_absolute_change_point_estimate
        conv_error = metrics.conversions_absolute_change_margin_of_error
        conv_lower_bound = conv_lift - conv_error

        if conv_p_value <= P_VALUE_THRESHOLD:
            if conv_lower_bound > 0:
                print(
                    "Significant Success: Conversions increased. Even at the lower"
                    f" bound, the lift is {conv_lower_bound:.2f}. Promoting"
                    " changes."
                )
                promote_experiment(
                    client, customer_id, experiment_resource_name
                )
                return
            elif (conv_lift + conv_error) < 0:
                print(
                    "Significant Decline: Even the upper bound"
                    f" ({conv_lift + conv_error:.2f}) is below zero. Ending"
                    " experiment."
                )
                end_experiment(client, customer_id, experiment_resource_name)
                return

        # 2. Evaluate click volume as a secondary signal.
        # This is helpful as an early indicator or for lower-volume accounts.
        click_p_value = metrics.clicks_p_value
        click_lift = metrics.clicks_point_estimate
        click_error = metrics.clicks_margin_of_error
        click_lower_bound = click_lift - click_error

        if click_p_value <= P_VALUE_THRESHOLD and click_lower_bound > 0:
            # We have a directional winner: high confidence in more traffic,
            # but not enough data to confirm conversion impact yet.
            print(f"Click volume is significantly up (+{click_lift*100:.1f}%).")

            # Graduation is only supported for separate campaign experiments, not
            # intra-campaign experiments where there is no separate treatment campaign.
            experiment_type_name = row.experiment.type_.name
            if (
                experiment_type_name != "ADOPT_BROAD_MATCH_KEYWORDS"
                and experiment_type_name != "ADOPT_AI_MAX"
            ):
                print(
                    "Graduating treatment campaign for further manual analysis."
                )
                graduate_experiment(
                    client, customer_id, experiment_resource_name
                )
            else:
                print(
                    "Intra-campaign trial detected: graduation is not supported. "
                    "Continuing to run the experiment to gather more conversion data."
                )
            return

    # 3. Print status if no action was taken.
    if has_conv_metrics or has_click_metrics:
        conv_status = (
            f"Conversions (p={metrics.conversions_absolute_change_p_value:.2f}, "
            f"lift={metrics.conversions_absolute_change_point_estimate:.2f} +/- "
            f"{metrics.conversions_absolute_change_margin_of_error:.2f})"
            if has_conv_metrics
            else "Conversions (not populated)"
        )
        click_status = (
            f"Clicks (p={metrics.clicks_p_value:.2f}, "
            f"lift={metrics.clicks_point_estimate:.2f} +/- "
            f"{metrics.clicks_margin_of_error:.2f})"
            if has_click_metrics
            else "Clicks (not populated)"
        )
        print(
            f"Inconclusive: No significant action taken. {conv_status}, {click_status}."
            " Allowing the experiment to continue running."
        )
    else:
        print(
            "Conversion and click performance metrics are not yet populated. "
            "Allowing the experiment to continue running."
        )
      

Ruby

def evaluate_experiment(client, customer_id, row)
  # This function evaluates performance metrics and immediately takes action
  # to update the experiment's status (promote, end, or graduate) if
  # statistical significance thresholds are met.
  metrics = row.metrics
  experiment_resource_name = row.experiment.resource_name

  has_conv_metrics = !metrics.nil? &&
                     metrics.has_conversions_absolute_change_p_value? &&
                     metrics.has_conversions_absolute_change_point_estimate? &&
                     metrics.has_conversions_absolute_change_margin_of_error?
  has_click_metrics = !metrics.nil? &&
                      metrics.has_clicks_p_value? &&
                      metrics.has_clicks_point_estimate? &&
                      metrics.has_clicks_margin_of_error?

  # 1. Evaluate conversion success as a primary success signal if available.
  # - Point Estimate: Represents the estimated average lift or difference in conversions.
  # - Margin of Error: Outlines the confidence interval bounds. Note that the margin_of_error
  #   provided by the API is calculated for a preset confidence level which is set based on the experiment type.
  # - Lower Bound: (Point Estimate - Margin of Error). If this value is above 0,
  #   we have statistical significance that performance has improved.
  if has_conv_metrics
    conv_p_value = metrics.conversions_absolute_change_p_value
    conv_lift = metrics.conversions_absolute_change_point_estimate
    conv_error = metrics.conversions_absolute_change_margin_of_error
    conv_lower_bound = conv_lift - conv_error

    if conv_p_value <= P_VALUE_THRESHOLD
      if conv_lower_bound > 0
        puts sprintf(
          "Significant Success: Conversions increased. Even at the lower " \
          "bound, the lift is %.2f. Promoting changes.",
          conv_lower_bound,
        )
        promote_experiment(client, customer_id, experiment_resource_name)
        return
      elsif (conv_lift + conv_error) < 0
        puts sprintf(
          "Significant Decline: Even the upper bound (%.2f) is below zero. " \
          "Ending experiment.",
          conv_lift + conv_error,
        )
        end_experiment(client, customer_id, experiment_resource_name)
        return
      end
    end
  end

  # 2. Evaluate click volume as a secondary signal.
  # This is helpful as an early indicator or for lower-volume accounts.
  if has_click_metrics
    click_p_value = metrics.clicks_p_value
    click_lift = metrics.clicks_point_estimate
    click_error = metrics.clicks_margin_of_error
    click_lower_bound = click_lift - click_error

    if click_p_value <= P_VALUE_THRESHOLD && click_lower_bound > 0
      # We have a directional winner: high confidence in more traffic,
      # but not enough data to confirm conversion impact yet.
      puts sprintf("Click volume is significantly up (+%.1f%%).", click_lift * 100)

      # Graduation is only supported for separate campaign experiments, not
      # intra-campaign experiments where there is no separate treatment campaign.
      experiment_type = row.experiment.type
      if experiment_type != :ADOPT_BROAD_MATCH_KEYWORDS && experiment_type != :ADOPT_AI_MAX
        puts "Graduating treatment campaign for further manual analysis."
        graduate_experiment(client, customer_id, experiment_resource_name)
      else
        puts "Intra-campaign trial detected: graduation is not supported. " \
             "Continuing to run the experiment to gather more conversion data."
      end
      return
    end
  end

  # 3. Print status if no action was taken.
  if has_conv_metrics || has_click_metrics
    conv_status = if has_conv_metrics
      sprintf(
        "Conversions (p=%.2f, lift=%.2f +/- %.2f)",
        metrics.conversions_absolute_change_p_value,
        metrics.conversions_absolute_change_point_estimate,
        metrics.conversions_absolute_change_margin_of_error,
      )
    else
      "Conversions (not populated)"
    end

    click_status = if has_click_metrics
      sprintf(
        "Clicks (p=%.2f, lift=%.2f +/- %.2f)",
        metrics.clicks_p_value,
        metrics.clicks_point_estimate,
        metrics.clicks_margin_of_error,
      )
    else
      "Clicks (not populated)"
    end

    puts "Inconclusive: No significant action taken. #{conv_status}, #{click_status}. " \
         "Allowing the experiment to continue running."
  else
    puts "Conversion and click performance metrics are not yet populated. " \
         "Allowing the experiment to continue running."
  end
end
      

Perl

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

curl

ประโยชน์เหนือการรายงานแคมเปญ

การรายงานการทดสอบโดยตรงมีข้อดีหลายประการเมื่อเทียบกับการค้นหารายงานแคมเปญแยกกัน ดังนี้

  • เมตริกแบบรวมศูนย์: ดึงข้อมูลเมตริกสําหรับกลุ่มควบคุมและกลุ่มทดสอบในแถวเดียว
  • ข้อมูลความเชื่อมั่นทางสถิติ: แสดงค่า p-value, ค่าประมาณจุด และส่วนต่างความผิดพลาดที่คำนวณแล้ว
  • ประสิทธิภาพ: ไม่จำเป็นต้องรวมหรือเปรียบเทียบผลลัพธ์จากรายงานหลายฉบับด้วยตนเอง
  • การรองรับภายในแคมเปญ: รองรับการเปรียบเทียบระหว่างกลุ่มควบคุมกับกลุ่มทดสอบสำหรับการทดสอบภายในแคมเปญ ซึ่งการแยกการเข้าชมจะเกิดขึ้นภายในแคมเปญเดียว

การรายงานแคมเปญ

ใน Google Ads API เวอร์ชันที่รองรับทั้งหมด (v23 ขึ้นไป) สําหรับการทดสอบที่สร้างแคมเปญทดสอบแยกต่างหาก (เช่น SEARCH_CUSTOM) คุณสามารถค้นหาทรัพยากร campaign และใช้ช่อง campaign.experiment_type เพื่อระบุแคมเปญ BASE (ควบคุม) และ EXPERIMENT (ทดสอบ) ได้ วิธีนี้มีประโยชน์เมื่อคุณต้องการแบ่งกลุ่มเมตริกในระดับที่ละเอียดยิ่งขึ้น (เช่น ตามกลุ่มโฆษณาหรือคีย์เวิร์ด) หรือดูข้อมูลเมตาของแคมเปญที่ไม่มีในแหล่งข้อมูล experiment อย่างไรก็ตาม การรายงานแคมเปญกำหนดให้คุณต้องเปรียบเทียบประสิทธิภาพและคำนวณทางสถิติด้วยตนเอง

คุณไม่สามารถใช้การรายงานระดับแคมเปญเพื่อเปรียบเทียบกลุ่มสำหรับการทดสอบภายในแคมเปญ เนื่องจากมีการแยกการเข้าชมภายในแคมเปญเดียว การค้นหาทรัพยากร campaign สําหรับการทดสอบภายในแคมเปญจะแสดงเฉพาะผลรวมที่รวบรวมไว้

การรายงาน Brand Lift

ใน Google Ads API v25 ขึ้นไป ให้ประเมินว่าแคมเปญโฆษณาส่งผลต่อการรับรู้ถึงแบรนด์อย่างไรโดยการค้นหาทรัพยากรแบบอ่านอย่างเดียว (OUTPUT_ONLY) LiftMeasurementFlight, LiftMeasurementConfig, และทรัพยากรรายละเอียด Brand Lift (LiftMeasurementAgeRange, LiftMeasurementCampaign, LiftMeasurementDevice, LiftMeasurementGender, และ LiftMeasurementVideo) ใน Google Ads API v27 ขึ้นไป คุณยังสามารถเลือกช่อง lift_guidance (lift_guidance.outcome และ lift_guidance.guidance_message) สำหรับการตีความทางสถิติระดับแถวได้ด้วย

ดูเกณฑ์ความสามารถในการรายงานคำตอบแบบสำรวจ การวินิจฉัยคำตอบที่ว่างเปล่า (results: []) การตีความผลลัพธ์ และตัวอย่างการค้นหา GAQL ได้ที่การรายงาน Brand Lift ในคู่มือการรายงาน Lift

การรายงาน Conversion Lift

ใน Google Ads API v25 ขึ้นไป การรายงาน Conversion Lift จะวัดผลกระทบที่เพิ่มขึ้นของโฆษณาต่อ Conversion, มูลค่า Conversion, ต้นทุนต่อ Conversion ที่เพิ่มขึ้น (iCPA) และผลตอบแทนที่เพิ่มขึ้นจากค่าโฆษณา (iROAS) โดยเปรียบเทียบกลุ่มที่เห็นโฆษณากับกลุ่มที่เปลี่ยนแนวทางซึ่งไม่เห็นโฆษณาในภาพรวมการประเมินสะสมรายวัน (segments.conversion_lift_start_date และ segments.conversion_lift_end_date) ในแหล่งข้อมูล LiftMeasurementConfig ใน Google Ads API v26 ขึ้นไป คุณยังสามารถค้นหาการกำหนดค่าและแคมเปญที่ลิงก์ผ่านช่อง campaign.lift_measurement_config และ lift_measurement_config.campaigns ได้ด้วย และใน Google Ads API v27 ขึ้นไป ให้เลือก lift_measurement_config.lift_guidance เพื่อตีความทางสถิติระดับแถว

ดูข้อมูลเกี่ยวกับการศึกษาและการค้นพบ Flight, ช่วงวันที่ของภาพรวมแบบสะสม, ขอบเขตการกระทำที่ถือเป็น Conversion (SELECTED เทียบกับ ALL), รายละเอียดมิติข้อมูล, เกณฑ์ความสามารถในการรายงาน และตัวอย่างการค้นหา GAQL ได้ที่การรายงาน Conversion Lift ในคู่มือการรายงาน Lift

การรายงาน A/B + Conversion Lift

ใน Google Ads API v25 ขึ้นไป การศึกษา A/B + Conversion Lift จะรวมexperimentแบบ 2 กลุ่ม (ค้นพบผ่านทรัพยากร ExperimentArm และช่อง experiment.lift_measurement_config) เข้ากับการวัดผลแบบเปลี่ยนแนวทางในทรัพยากร LiftMeasurementConfig รวมกลุ่ม segments.experiment_arm และเมตริกคะแนนผู้ชนะแบบเบย์ (metrics.*_winner_score) เพื่อประเมินการเพิ่มที่เกิดจากสาเหตุต่อกลุ่มทดสอบและความน่าจะเป็นของผู้ชนะแบบตัวต่อตัว

สําหรับการค้นพบกลุ่มทดสอบ, การค้นหาต่อกลุ่มและแบบรวมกลุ่ม, การตีความคะแนนผู้ชนะ และการค้นหาแบบกลุ่มหลายการศึกษา โปรดดูการรายงาน A/B + Conversion Lift ในคู่มือการรายงาน Lift

การรายงาน Search Lift

ใน Google Ads API v26 ขึ้นไป การรายงาน Search Lift จะวัดปริมาณคำค้นหาทั่วไปที่เพิ่มขึ้นใน Google Search และ YouTube ซึ่งเกิดจากแคมเปญโฆษณา ค้นหาทรัพยากร SearchLiftKeywordBundle เพื่อดูชุดคีย์เวิร์ดที่กำหนดค่าไว้ และค้นหาทรัพยากร LiftMeasurementConfig (โดยใช้ lift_measurement_config.lift_guidance ใน Google Ads API v27 ขึ้นไป) เพื่อดูเมตริกยอดการค้นหาที่เพิ่มขึ้นแบบสัมพัทธ์และแบบปรับมาตรฐาน

ดูกฎการแบ่งกลุ่ม Search Lift, คำจำกัดความของเมตริก และตัวอย่างการค้นหา GAQL ได้ที่การรายงาน Search Lift ในคู่มือการรายงาน Lift

แนวทางปฏิบัติแนะนำ

แนวทางปฏิบัติแนะนำต่อไปนี้ใช้กับการทดสอบ A/B มาตรฐาน (เช่น การทดสอบแคมเปญและการทดสอบภายในแคมเปญ) การศึกษาการวัดผลด้วย Lift (Brand Lift, Conversion Lift และ Search Lift) ใช้การกำหนดค่าเฉพาะการศึกษาและรายงานขอบเขตความเชื่อมั่นแบบด้านเดียว 90% (*_p90_lower_bound และ *_p90_upper_bound ซึ่งรวมกันเป็นช่วงความเชื่อมั่นแบบ 2 ด้าน 80% ที่มี p_value <= 0.10) แทนเกณฑ์ความเชื่อมั่น 95% ดูเกณฑ์และการตีความการศึกษา Lift ได้ในคู่มือการรายงาน Lift

  • เลือกระดับความเชื่อมั่นที่เหมาะสม: การตั้งค่าเกณฑ์ค่า p-value ที่ต่ำลงจะช่วยให้คำแนะนำด้านทิศทางได้เร็วขึ้น โดยเฉพาะอย่างยิ่งเมื่อมีงบประมาณหรือปริมาณ Conversion ต่ำ ระดับความเชื่อมั่น 95% (p_value <= 0.05) เป็นมาตรฐานทางวิชาการและให้ความแม่นยำสูงกว่าในกรอบเวลาที่นานกว่า
  • ทำการทดสอบเป็นเวลานานพอ: ทำการทดสอบเป็นเวลาอย่างน้อย 4 สัปดาห์เพื่อพิจารณาวงจรประสิทธิภาพรายสัปดาห์ ระยะเวลาก่อนที่จะเกิด Conversion และระยะเวลาเรียนรู้
  • ให้เวลาในการเพิ่มประสิทธิภาพ: สําหรับแคมเปญที่ใช้การเสนอราคาอัตโนมัติหรือทดสอบฟีเจอร์ใหม่ ให้ละเว้นข้อมูล 1-2 สัปดาห์แรกเพื่อให้โมเดลการเสนอราคาและระดับการเข้าชมปรับเทียบใหม่ตามการแยกกลุ่มได้
  • ใช้การแยกแบบ 50/50: โดยทั่วไปแล้ว การแยกการเข้าชมแบบ 50/50 เป็นวิธีที่เร็วที่สุดเพื่อให้ได้ผลลัพธ์ที่มีนัยสำคัญทางสถิติ
  • กำหนดเวลาล่วงหน้า: กำหนดวันที่เริ่มต้นการทดสอบล่วงหน้า 3-7 วันเพื่อให้มีเวลาสำหรับกระบวนการตรวจสอบและอนุมัติโฆษณา