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

การรายงานเกี่ยวกับการทดสอบ A/B มาตรฐานทำได้ 2 วิธีหลักๆ ดังนี้

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

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

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

คุณสามารถค้นหาทรัพยากร experiment โดยตรงเพื่อดึงข้อมูลเมตริกประสิทธิภาพและการเปรียบเทียบทางสถิติระหว่างกลุ่มควบคุมและกลุ่มทดสอบ

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

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

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

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

ระบบรองรับช่องเมตริกหลักต่อไปนี้ในทรัพยากร 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

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

คําค้นหา 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

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

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

ต่อไปนี้คือข้อมูลโค้ด Python ที่แสดงวิธีประเมินผลลัพธ์ตามค่า 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

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

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

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

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

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

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

การรายงาน Brand Lift

คุณสามารถรายงานเกี่ยวกับการศึกษา Brand Lift ใน Google Ads API โดยใช้แหล่งข้อมูลการวัด Brand Lift โดยเฉพาะ

แหล่งข้อมูล Brand Lift และมุมมองรายละเอียด

ค้นหาทรัพยากร LiftMeasurementFlight เพื่อดึงข้อมูลผลการศึกษา Brand Lift ระดับช่วงเวลา รวมถึงช่วงวันที่ของช่วงเวลา (start_date และ end_date) ในเขตเวลาของลูกค้า

หากต้องการวิเคราะห์เมตริก Brand Lift ในมิติข้อมูลกลุ่มต่างๆ ให้ค้นหาทรัพยากรรายละเอียดที่เกี่ยวข้อง ดังนี้

BrandLiftMeasurementType enum จะระบุประเภทการวัดสําหรับการศึกษา เช่น การรับรู้ถึงแบรนด์หรือการจำโฆษณาได้

ตัวอย่างการค้นหา Brand Lift

เนื่องจากข้อมูลเมตาของเที่ยวบินและสถิติ Lift อยู่ในทรัพยากรที่แยกกัน การค้นหารายละเอียดเที่ยวบินและสถิติประสิทธิภาพจึงต้องใช้การค้นหา GAQL แยกกัน

การค้นหารายละเอียดเที่ยวบิน

หากต้องการดึงข้อมูลเมตาสำหรับช่วงเวลาของ Brand Lift เช่น สถานะ ประเภทการวัด และวันที่ที่กำหนดเวลาไว้ ให้ค้นหาทรัพยากร LiftMeasurementFlight ดังนี้

SELECT
  lift_measurement_flight.lift_measurement_config_id,
  lift_measurement_flight.lift_measurement_flight_id,
  lift_measurement_flight.name,
  lift_measurement_flight.status,
  lift_measurement_flight.lift_type,
  lift_measurement_flight.start_date,
  lift_measurement_flight.end_date
FROM lift_measurement_flight
WHERE lift_measurement_flight.lift_measurement_config_id = CONFIG_ID

การค้นหาสถิติ

หากต้องการดึงข้อมูลเมตริก Brand Lift ให้ค้นหาทรัพยากรรายละเอียดที่เหมาะสม (หรือการกำหนดค่าการศึกษาโดยรวมใน LiftMeasurementConfig) ตัวอย่างเช่น การค้นหาต่อไปนี้จะดึงข้อมูลเมตริก Brand Lift ที่แจกแจงตามแคมเปญจาก LiftMeasurementCampaign

SELECT
  lift_measurement_campaign.lift_measurement_config_id,
  lift_measurement_campaign.campaign,
  metrics.absolute_brand_lift,
  metrics.relative_brand_lift
FROM lift_measurement_campaign
WHERE lift_measurement_campaign.lift_measurement_config_id = CONFIG_ID

การรายงาน Conversion Lift

คุณสามารถวัดผลลัพธ์ที่เพิ่มขึ้นของโฆษณาที่มีต่อ Conversion ได้โดยใช้การรายงาน Conversion Lift ใน Google Ads API

การกำหนดค่าและเมตริก Conversion Lift

ค้นหาทรัพยากร LiftMeasurementConfig เพื่อดึงข้อมูลการกำหนดค่าและข้อมูลประสิทธิภาพของการศึกษา Conversion Lift

แหล่งข้อมูลนี้แสดงเมตริก Conversion Lift เพื่อประเมินประสิทธิภาพที่เพิ่มขึ้น ดังนี้

นอกจากนี้ การรายงาน Conversion Lift ยังช่วยให้สามารถแบ่งกลุ่มตามการกระทำที่ถือเป็น Conversion และดึงรายละเอียดแคมเปญที่ลิงก์ รายละเอียดการทดสอบ และเป้าหมาย Conversion ได้ด้วย

ตั้งแต่เวอร์ชัน v26 เป็นต้นไป คุณจะดูการกำหนดค่าการวัดผลด้วย Lift ที่ลิงก์กับแคมเปญได้โดยตรงจากทรัพยากร campaign โดยใช้ Campaign.lift_measurement_config วิธีนี้ช่วยให้ไม่ต้องตรวจสอบเพื่อเปรียบเทียบทรัพยากร LiftMeasurementConfig แยกต่างหาก

SELECT
  campaign.id,
  campaign.lift_measurement_config
FROM campaign
WHERE campaign.id = CAMPAIGN_ID

ฟิลด์ lift_measurement_config ที่แสดงผลจะมีชื่อทรัพยากรในรูปแบบ customers/{customer_id}/liftMeasurementConfigs/{lift_measurement_config_id}

หมายเหตุ: lift_measurement_config มีชื่อทรัพยากรของการกำหนดค่าที่ลิงก์ล่าสุด (ใช้งานอยู่หรือไม่ได้ใช้งาน) หากแคมเปญได้ทำการทดสอบ Lift หลายครั้ง

ตัวอย่างการค้นหา Conversion Lift

คําค้นหา GAQL ต่อไปนี้จะดึงข้อมูลการกําหนดค่า Conversion Lift และเมตริกประสิทธิภาพหลัก โปรดทราบว่า segments.conversion_lift_start_date และ segments.conversion_lift_end_date เป็นช่อง INT64 ที่จัดรูปแบบเป็นจำนวนเต็ม 8 หลักที่ไม่มีเครื่องหมายคำพูดในรูปแบบ YYYYMMDD (เช่น 20260501)

SELECT
  lift_measurement_config.lift_measurement_config_id,
  segments.conversion_lift_start_date,
  segments.conversion_lift_end_date,
  segments.conversion_lift_included_conversion_action_types,
  metrics.conversion_lift_baseline_conversions,
  metrics.conversion_lift_exposed_conversions,
  metrics.incremental_conversions,
  metrics.cost_per_incremental_conversion,
  metrics.relative_conversion_lift,
  metrics.incremental_conversion_value,
  metrics.relative_conversion_value_lift
FROM lift_measurement_config
WHERE segments.conversion_lift_start_date = YYYYMMDD
  AND segments.conversion_lift_end_date = YYYYMMDD
  AND lift_measurement_config.lift_measurement_config_id = CONFIG_ID

การรายงาน Search Lift

คุณสามารถวัดปริมาณคำค้นหาทั่วไปที่เพิ่มขึ้นซึ่งเกิดจากแคมเปญโฆษณาได้โดยใช้การรายงาน Search Lift ใน Google Ads API Search Lift จะวัดความแตกต่างของพฤติกรรมการค้นหาแบรนด์หรือผลิตภัณฑ์ระหว่างผู้ใช้ที่เห็นโฆษณากับกลุ่มควบคุมที่ไม่เห็นโฆษณา

แหล่งข้อมูลและการแบ่งกลุ่ม Search Lift

ค้นหาทรัพยากร SearchLiftKeywordBundle เพื่อดึงรายละเอียดเกี่ยวกับกลุ่มคีย์เวิร์ดที่กำหนดค่าไว้สำหรับการศึกษา Search Lift SearchLiftKeywordBundle เป็นแบบอ่านอย่างเดียวใน API (ทุกช่องเป็น OUTPUT_ONLY) และมีการกำหนดค่าชุดคีย์เวิร์ดใน UI ของ Google Ads หรือโดยตัวแทนของ Google / Global Product Solutions (GPS) ช่องที่ค้นหาได้ใน GAQL คือ resource_name, search_lift_keyword_bundle_id, source (SearchLiftMatchingInfoSource) และ status (SearchLiftKeywordBundleStatus) (ช่อง keywords ที่ซ้ำกันจะเลือกไม่ได้ในการค้นหา GAQL)

ค้นหาทรัพยากร LiftMeasurementConfig เพื่อดึงข้อมูลเมตริก Search Lift และการกำหนดค่าการศึกษาโดยรวม

คุณแบ่งกลุ่มประสิทธิภาพของ Search Lift ได้โดยใช้มิติข้อมูลต่อไปนี้

  • segments.search_lift_keyword_bundle: แบ่งกลุ่มตามชื่อทรัพยากรของกลุ่มคีย์เวิร์ด ใช้ร่วมกับsegments.search_property, segments.date และกลุ่มเป้าหมายตามข้อมูลประชากร (segments.device, segments.age_range และ segments.gender) ได้
  • segments.search_property: แบ่งกลุ่มตามพร็อพเพอร์ตี้การค้นหาที่เกิดการค้นหา ซึ่งกำหนดโดย SearchLiftSearchProperty (เช่น Google Search หรือ YouTube) โปรดทราบว่า segments.search_property ใช้ได้กับ segments.search_lift_keyword_bundle และ segments.date เท่านั้น ระบบไม่รองรับการรวม segments.search_property กับกลุ่มเป้าหมายตามข้อมูลประชากร (segments.device, segments.age_range หรือ segments.gender) และจะตรวจสอบความถูกต้องของคำค้นหา API ไม่สำเร็จ
  • กลุ่มข้อมูลประชากรและวันที่: segments.device, segments.age_range, segments.gender และ segments.date

เมตริก Search Lift

ทรัพยากร LiftMeasurementConfig มีเมตริก Search Lift เพื่อประเมินการเปลี่ยนแปลงพฤติกรรมการค้นหา ดังนี้

  • metrics.relative_search_lift: ความแตกต่างของปริมาณคำค้นหาระหว่างกลุ่มที่เห็นโฆษณากับกลุ่มควบคุม โดยแสดงเป็นเศษส่วนของคำค้นหาในกลุ่มควบคุม
  • metrics.relative_search_lift_p90_lower_bound และ metrics.relative_search_lift_p90_upper_bound: ขอบเขตล่างและขอบเขตบนของช่วงความเชื่อมั่น 90% สำหรับ Search Lift สัมพัทธ์
  • metrics.incremental_searches_p_value: ค่า p-value สำหรับยอดการค้นหาที่เพิ่มขึ้น ซึ่งแสดงถึงความน่าจะเป็นทางสถิติที่การเพิ่มขึ้นของคำค้นหาที่สังเกตได้เกิดขึ้นโดยบังเอิญ
  • metrics.search_lift_cost_micros: ค่าใช้จ่ายทั้งหมด (เป็นไมโคร) ของการแสดงโฆษณาที่แสดงสำหรับส่วนการวัดผล Search Lift นี้
  • metrics.search_lift_impressions: จำนวนการแสดงโฆษณาทั้งหมดที่แสดงสำหรับส่วนการวัดผลด้วย Search Lift นี้

ระบบจะรายงานเมตริกส่วนเพิ่มที่ปรับมาตรฐานแล้วต่อไปนี้ พร้อมกับขอบเขตล่างและขอบเขตบนของช่วงความเชื่อมั่น 90% ที่เกี่ยวข้อง (*_p90_lower_bound และ *_p90_upper_bound) เมื่อ Lift เป็นค่าบวกอย่างมีนัยสำคัญทางสถิติ

ตัวอย่างคำค้นหาสำหรับ Search Lift

คําค้นหา GAQL ต่อไปนี้แสดงวิธีดึงข้อมูลชุดคีย์เวิร์ดและเมตริกประสิทธิภาพของ Search Lift

คำค้นหาของกลุ่มคีย์เวิร์ด

วิธีดึงข้อมูลชุดคีย์เวิร์ดที่กำหนดค่าไว้สำหรับการวัดผลด้วย Search Lift

SELECT
  search_lift_keyword_bundle.resource_name,
  search_lift_keyword_bundle.search_lift_keyword_bundle_id,
  search_lift_keyword_bundle.source,
  search_lift_keyword_bundle.status
FROM search_lift_keyword_bundle

การค้นหาเมตริก

ค่า search_lift_keyword_bundle.resource_name ที่ดึงมาในการค้นหาแพ็กเกจคีย์เวิร์ดจะสอดคล้องกับค่าที่แสดงผลใน segments.search_lift_keyword_bundle ในการค้นหาต่อไปนี้ หากต้องการค้นหา CONFIG_ID สำหรับการศึกษา ให้ค้นหา lift_measurement_config (เช่น SELECT lift_measurement_config.lift_measurement_config_id, lift_measurement_config.name FROM lift_measurement_config)

วิธีดึงข้อมูลเมตริก Search Lift ที่แบ่งกลุ่มตามชุดคีย์เวิร์ดและพร็อพเพอร์ตี้การค้นหา

SELECT
  lift_measurement_config.lift_measurement_config_id,
  segments.search_lift_keyword_bundle,
  segments.search_property,
  metrics.relative_search_lift,
  metrics.relative_search_lift_p90_lower_bound,
  metrics.relative_search_lift_p90_upper_bound,
  metrics.incremental_searches_p_value,
  metrics.search_lift_cost_micros,
  metrics.search_lift_impressions,
  metrics.normalized_incremental_searches,
  metrics.normalized_incremental_searches_p90_lower_bound,
  metrics.normalized_incremental_searches_p90_upper_bound
FROM lift_measurement_config
WHERE lift_measurement_config.lift_measurement_config_id = CONFIG_ID

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

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

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