실험 보고서

표준 A/B 실험에 대해 보고하는 방법에는 크게 두 가지가 있습니다.

  • 직접 실험 보고: experiment 리소스에서 측정항목을 쿼리합니다. 이 옵션은 상승도 및 p-값과 같은 통계 비교 데이터와 함께 단일 응답으로 대조 부문과 실험 부문의 측정항목을 제공합니다. 이는 캠페인 내 실험을 보고하는 유일한 방법입니다.
  • 캠페인 보고: campaign 리소스에서 측정항목을 쿼리하고 campaign.experiment_type를 사용하여 기본 캠페인과 실험 캠페인을 구분합니다. 이 옵션은 시스템 관리 실험과 같이 별도의 통제 캠페인과 실험 캠페인을 사용하는 실험에만 사용할 수 있습니다.

표준 실험의 경우 이 가이드에서는 주로 보고를 지원하는 모든 실험 유형과 호환되는 직접 실험 보고에 중점을 둡니다. 광고효과 측정 연구의 경우 전용 광고효과 측정 리소스를 사용하여 브랜드 광고효과, 전환 상승도, 검색 광고효과를 보고할 수도 있습니다.

직접 실험 보고

experiment 리소스를 직접 쿼리하여 실적 측정항목과 대조 부문과 실험 부문 간의 통계 비교를 검색할 수 있습니다.

측정항목 및 통계적 유의성

클릭수, 노출수, 비용, 전환수, 전환 가치와 같은 핵심 측정항목의 경우 experiment 리소스는 동일한 행에 실험군 측정항목 (예: metrics.clicks)과 대조군 측정항목 (예: metrics.control_clicks)을 모두 제공합니다.

또한 부문 간 차이의 통계적 유의성을 평가하는 데 도움이 되는 필드도 제공합니다.

  • metrics.*_p_value: 실험이 측정항목에 실제 영향을 미치지 않은 경우 관찰된 결과가 발생할 확률입니다. p-값이 작을수록 통계적 유의성이 높습니다.
  • metrics.*_point_estimate: 대조 부문과 비교하여 실험 부문의 지정된 측정항목에서 예상되는 상승률 (양수 또는 음수)입니다. 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

특히 전환의 경우 통계 필드는 상대 값이 아닌 다음 absolute_change 필드를 통해 사용할 수 있습니다.

experiment 리소스에 대한 유효한 쿼리를 구성하는 데 도움이 필요하면 Google Ads 쿼리 빌더 도구를 사용하세요.

예시 검색어

다음 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-값, 점 추정치, 오차 범위 필드를 사용하여 실험에서 통계적으로 유의미한 결과가 도출되었는지 확인할 수 있습니다. 예를 들어 conversions_absolute_change_p_value가 선택한 기준점 (예: 95% 신뢰도의 경우 0.05)보다 낮고 conversions_absolute_change_point_estimate - conversions_absolute_change_margin_of_error가 0보다 크면 실험 부문이 전환 측면에서 대조 부문보다 실적이 훨씬 더 우수합니다.

다음은 p-값 및 리프트 추정치를 기반으로 결과를 평가하는 방법을 보여주는 Python 스니펫입니다.

자바

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값, 점 추정치, 오차 범위를 제공합니다.
  3. 효율성: 여러 보고서의 결과를 수동으로 조인하거나 비교할 필요가 없습니다.
  4. 캠페인 내 지원: 단일 캠페인 내에서 트래픽이 분할되는 캠페인 내 실험에서 대조군과 실험군을 비교하는 유일한 방법입니다.

캠페인 보고서

별도의 실험 캠페인을 만드는 실험 (예: SEARCH_CUSTOM)의 경우 campaign 리소스를 쿼리하고 campaign.experiment_type를 사용하여 BASE (통제) 및 EXPERIMENT(실험) 캠페인을 식별할 수 있습니다. 이 접근 방식은 측정항목을 더 세분화된 수준 (예: 광고 그룹 또는 키워드별)으로 분류하거나 experiment 리소스에서 사용할 수 없는 캠페인 메타데이터를 확인해야 하는 경우에 유용합니다. 하지만 성능 비교와 통계 계산을 수동으로 수행해야 합니다.

트래픽 분할이 단일 캠페인 내에서 내부적으로 발생하므로 캠페인 수준 보고서를 사용하여 캠페인 내 실험의 부문을 비교할 수 없습니다. 캠페인 내 실험에 대해 campaign를 쿼리하면 집계된 총계만 반환됩니다.

브랜드 광고효과 보고

전용 브랜드 광고효과 측정 리소스를 사용하여 Google Ads API에서 브랜드 광고효과 연구를 보고할 수 있습니다.

브랜드 광고효과 리소스 및 분류 보기

LiftMeasurementFlight 리소스를 쿼리하여 고객의 시간대에 있는 게재 기간(start_date 및 end_date)을 포함한 게재 수준 브랜드 광고효과 연구 결과를 가져옵니다.

여러 세그먼트 측정기준에서 브랜드 광고효과 측정항목을 분석하려면 해당 분류 리소스를 쿼리하세요.

BrandLiftMeasurementType enum은 브랜드 인지도 또는 광고 회상과 같은 연구의 측정 유형을 지정합니다.

브랜드 광고효과 검색어 예시

광고 게재 기간 메타데이터와 광고효과 통계는 별도의 리소스에 있으므로 광고 게재 기간 세부정보와 실적 통계를 쿼리하려면 별도의 GAQL 쿼리가 필요합니다.

항공편 세부정보 쿼리

상태, 측정 유형, 예약된 날짜와 같은 브랜드 광고효과 플라이트의 메타데이터를 가져오려면 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

통계 쿼리

브랜드 광고 효과 측정항목을 가져오려면 적절한 분류 리소스 (또는 LiftMeasurementConfig의 전체 학습 구성)를 쿼리합니다. 예를 들어 다음 쿼리는 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

전환 상승도 보고

Google Ads API의 전환 상승도 보고를 사용하여 광고가 전환에 미치는 증분 효과를 측정할 수 있습니다.

전환 상승도 구성 및 측정항목

LiftMeasurementConfig 리소스를 쿼리하여 전환 상승도 학습 구성 및 실적 데이터를 가져옵니다.

이 리소스는 전환 상승도 측정항목을 제공하여 증분 실적을 평가합니다.

전환 상승도 보고를 사용하면 전환 액션별로 분류하고 연결된 캠페인 세부정보, 실험 세부정보, 전환 목표를 가져올 수도 있습니다.

v26부터는 Campaign.lift_measurement_config를 사용하여 campaign 리소스에서 직접 캠페인에 연결된 광고효과 측정 구성을 검색할 수 있습니다. 이렇게 하면 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에는 가장 최근에 연결된 구성 (활성 또는 비활성)의 리소스 이름이 포함됩니다.

전환 상승도 쿼리 예시

다음 GAQL 쿼리는 전환 상승도 구성 및 핵심 실적 측정항목을 검색합니다. segments.conversion_lift_start_date 및 segments.conversion_lift_end_date는 YYYYMMDD 형식 (예: 20260501)의 따옴표가 없는 8자리 정수로 형식이 지정된 INT64 필드입니다.

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

검색 광고효과 보고

Google Ads API의 검색 광고효과 보고를 사용하여 광고 캠페인으로 인한 자연 검색어 수의 증가를 측정할 수 있습니다. 검색 광고효과는 광고에 노출된 사용자와 노출되지 않은 대조 그룹 간의 브랜드 또는 제품 검색 행동 차이를 수치화합니다.

검색 광고효과 리소스 및 분류

SearchLiftKeywordBundle 리소스를 쿼리하여 검색 광고효과 조사에 구성된 키워드 번들에 관한 세부정보를 가져옵니다. SearchLiftKeywordBundle는 API에서 읽기 전용이며 (모든 필드가 OUTPUT_ONLY임), 키워드 번들은 Google Ads UI에서 또는 Google 담당자 / 글로벌 제품 솔루션 (GPS)에 의해 구성됩니다. GAQL에서 쿼리할 수 있는 필드는 resource_name, search_lift_keyword_bundle_id, source(SearchLiftMatchingInfoSource), status(SearchLiftKeywordBundleStatus)입니다. 반복되는 keywords 필드는 GAQL 쿼리에서 선택할 수 없습니다.

LiftMeasurementConfig 리소스를 쿼리하여 검색 광고효과 측정항목과 전체 학습 구성을 가져옵니다.

다음 측정기준을 사용하여 검색 광고효과 실적을 분류할 수 있습니다.

  • segments.search_lift_keyword_bundle: 키워드 번들 리소스 이름으로 분류합니다. segments.search_property, segments.date, 인구통계 세그먼트(segments.device, segments.age_range, segments.gender)와 호환됩니다.
  • segments.search_property: 검색이 발생한 검색 속성 (SearchLiftSearchProperty로 정의됨, 예: Google 검색 또는 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

검색 광고효과 측정항목

LiftMeasurementConfig 리소스는 검색 행동 변화를 평가하는 검색 광고효과 측정항목을 제공합니다.

광고효과가 통계적으로 양수인 경우 다음 정규화된 증분 측정항목과 해당 90% 신뢰 구간 하한 및 상한 (*_p90_lower_bound 및 *_p90_upper_bound)이 보고됩니다.

검색 광고효과 검색어 예시

다음 GAQL 쿼리는 검색 광고효과 키워드 번들과 실적 측정항목을 가져오는 방법을 보여줍니다.

키워드 번들 쿼리

검색 광고효과 측정을 위해 구성된 키워드 번들을 가져오려면 다음 단계를 따르세요.

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).

키워드 번들 및 검색 속성별로 분류된 검색 광고효과 측정항목을 가져오려면 다음 단계를 따르세요.

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 실험 (예: 캠페인 및 캠페인 내 실험)에 적용됩니다. 광고효과 측정 연구 (브랜드 광고효과, 전환 상승도, 검색 광고효과)는 연구별 구성을 사용하며 95% 신뢰도 기준점이 아닌 90% 신뢰 구간 (*_p90_lower_bound 및 *_p90_upper_bound)을 보고합니다.

  • 적절한 신뢰도 수준 선택: p-값 기준점을 낮게 설정하면 특히 예산이나 전환수가 적은 경우 방향성 가이드를 더 빠르게 제공할 수 있습니다. 95% 신뢰도 (p-값 <= 0.05)는 학술적 표준으로 간주되며 더 긴 기간 동안 더 정확한 결과를 얻는 데 더 적합할 수 있습니다.
  • 충분한 기간 동안 실험 실행: 주간 실적 주기, 전환 지연, 학습 기간을 고려하여 최소 4주 동안 실험을 실행합니다.
  • 적응 기간 부여: 자동 입찰을 사용하거나 새로운 기능을 테스트하는 캠페인의 경우 입찰 모델과 트래픽 수준이 분할에 맞게 재조정될 수 있도록 처음 1~2주 동안의 데이터는 무시합니다.
  • 50/50 분할 사용: 일반적으로 50/50 트래픽 분할이 통계적으로 유의미한 결과를 얻는 가장 빠른 방법입니다.
  • 미리 예약: 광고 검토 및 승인 절차에 걸릴 시간을 고려하여 실험 시작일을 3~7일 후로 설정합니다.