Informes sobre experimentos

Estas son las dos formas principales de generar informes sobre experimentos:

  • Informes directos de experimentos: Consulta el recurso experiment para obtener métricas. Esta opción proporciona métricas para los grupos de control y de tratamiento en una sola respuesta, junto con datos de comparación estadística, como el aumento y los valores p. Esta es la única forma de generar informes sobre experimentos dentro de la campaña.
  • Informes de campañas: Consulta el recurso campaign para obtener métricas, usando campaign.experiment_type para distinguir entre las campañas base y las experimentales. Esta opción solo está disponible para los experimentos que usan campañas de control y de tratamiento independientes, como los experimentos administrados por el sistema.

Esta guía se centra principalmente en los informes directos de experimentos, que son compatibles con todos los tipos de experimentos que admiten informes.

Informes directos de experimentos

Puedes consultar el recurso experiment directamente para recuperar las métricas de rendimiento y las comparaciones estadísticas entre tus grupos de control y de tratamiento.

Métricas e importancia estadística

Para las métricas principales, como los clics, las impresiones, el costo, las conversiones y el valor de conversión, el recurso experiment proporciona métricas de tratamiento (por ejemplo, metrics.clicks) y métricas de control (por ejemplo, metrics.control_clicks) en la misma fila.

También proporciona campos para ayudarte a evaluar la importancia estadística de cualquier diferencia entre los grupos:

  • metrics.*_p_value: Es la probabilidad de que se produzcan los resultados observados si el experimento no tuviera un efecto real en la métrica. Un valor p más bajo indica una mayor importancia estadística.
  • metrics.*_point_estimate: Es la efectividad porcentual estimada (positiva o negativa) en la métrica determinada para el grupo de tratamiento en comparación con el grupo de control. Junto con margin_of_error, describen un intervalo de confianza con un nivel de confianza prescrito para la diferencia que se estima. La cantidad que se estima es (tratamiento / control - 1). La estimación puntual es el centro del intervalo de confianza.
  • metrics.*_margin_of_error: Es el radio del intervalo de confianza, que se centra en point_estimate. Se calcula para un nivel de confianza prescrito, que depende del tipo de experimento.

Los siguientes campos de métricas principales son compatibles con el recurso experiment, incluido un valor del grupo de tratamiento, un valor del grupo de control y los campos de estadísticas que se mencionaron anteriormente:

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

En el caso de las conversiones, específicamente, los campos estadísticos están disponibles a través de los siguientes campos absolute_change, en lugar de como valores relativos:

Para obtener ayuda para crear consultas válidas al recurso experiment, usa la herramienta Compilador de consultas de Google Ads.

Consulta de ejemplo

La siguiente consulta GAQL recupera las métricas clave de un experimento:

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

Interpreta los resultados

Puedes usar los campos de valor p, estimación puntual y margen de error para determinar si tu experimento arrojó resultados estadísticamente significativos. Por ejemplo, si conversions_absolute_change_p_value está por debajo del umbral elegido (por ejemplo, 0.05 para una confianza del 95%) y conversions_absolute_change_point_estimate - conversions_absolute_change_margin_of_error es mayor que cero, indica que el grupo de tratamiento tiene un rendimiento significativamente mejor que el grupo de control en términos de conversiones.

A continuación, se muestra un fragmento de Python que demuestra cómo evaluar los resultados en función de las estimaciones de valor p y aumento:

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

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

Perl

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

curl

Beneficios en comparación con los informes de campañas

Los informes directos de experimentos ofrecen varias ventajas en comparación con la consulta de informes de campañas por separado:

  1. Métricas centralizadas: Recupera métricas para el control y el tratamiento en una sola fila.
  2. Datos de confianza estadística: Proporciona valores p, estimaciones puntuales y márgenes de error calculados.
  3. Eficiencia: Elimina la necesidad de unir o comparar manualmente los resultados de varios informes.
  4. Compatibilidad dentro de la campaña: Es la única forma de comparar el control con el tratamiento para los experimentos dentro de la campaña, en los que el tráfico se divide dentro de una sola campaña.

Informes de campañas

Para los experimentos que crean campañas de tratamiento independientes (por ejemplo, SEARCH_CUSTOM), puedes consultar el recurso campaign y usar campaign.experiment_type para identificar las campañas BASE (control) y EXPERIMENT (tratamiento). Este enfoque es útil si necesitas segmentar las métricas a un nivel más detallado (por ejemplo, por grupo de anuncios o palabra clave) o ver metadatos de la campaña que no están disponibles en el recurso experiment. Sin embargo, requiere que realices comparaciones de rendimiento y cálculos estadísticos de forma manual.

No puedes usar los informes a nivel de la campaña para comparar los grupos de experimentos dentro de la campaña, ya que la división del tráfico se realiza internamente dentro de una sola campaña. La consulta de campaign para un experimento dentro de la campaña solo muestra totales agregados.

Informes de Brand Lift

Puedes generar informes sobre los estudios de Brand Lift en la API de Google Ads con recursos de medición de Brand Lift dedicados.

Recursos de Brand Lift y vistas de desglose

Consulta el LiftMeasurementFlight recurso para recuperar los resultados del estudio de Brand Lift a nivel del vuelo, incluidos los períodos de las fechas del vuelo (start_date y end_date) en la zona horaria del cliente.

Para analizar las métricas de Brand Lift en diferentes dimensiones de segmentos, consulta los recursos de desglose correspondientes:

La BrandLiftMeasurementType enumeración especifica el tipo de medición para el estudio, como el reconocimiento de la marca o el recuerdo del anuncio.

Consultas de Brand Lift de ejemplo

Debido a que los metadatos del vuelo y las estadísticas de efectividad residen en recursos independientes, la consulta de los detalles del vuelo y las estadísticas de rendimiento requiere consultas GAQL independientes.

Consulta de detalles del vuelo

Para recuperar los metadatos de un vuelo de Brand Lift, como su estado, el tipo de medición y las fechas programadas, consulta el LiftMeasurementFlight recurso:

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

Consulta de estadísticas

Para recuperar las métricas de Brand Lift, consulta el recurso de desglose adecuado (o la configuración de estudio general en LiftMeasurementConfig). Por ejemplo, la siguiente consulta recupera las métricas de Brand Lift desglosadas por campaña de 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

Informes de Efectividad de conversiones

Puedes medir el impacto incremental de tus anuncios en las conversiones con los informes de Efectividad de conversiones en la API de Google Ads.

Configuración y métricas de Efectividad de conversiones

Consulta el LiftMeasurementConfig recurso para recuperar las configuraciones del estudio de Efectividad de conversiones y los datos de rendimiento.

El recurso proporciona métricas de Efectividad de conversiones para evaluar el rendimiento incremental:

Los informes de Efectividad de conversiones también permiten segmentar por acciones de conversión y recuperar detalles de las campañas vinculadas, detalles de los experimentos y objetivos de conversión.

Consulta de Efectividad de conversiones de ejemplo

La siguiente consulta GAQL recupera las configuraciones de Efectividad de conversiones y las métricas de rendimiento clave:

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 = START_DATE
  AND segments.conversion_lift_end_date = END_DATE
  AND lift_measurement_config.lift_measurement_config_id = CONFIG_ID

Prácticas recomendadas

  • Selecciona un nivel de confianza adecuado: Establecer un umbral de valor p más bajo puede proporcionar orientación direccional más rápido, en especial con presupuestos o volúmenes de conversiones más bajos. Una confianza del 95% (valor p <= 0.05) se considera el estándar académico y puede ser mejor para obtener resultados más precisos en un período más largo.
  • Ejecuta experimentos durante el tiempo suficiente: Ejecuta experimentos durante, al menos, 4 semanas para tener en cuenta los ciclos de rendimiento semanales, las demoras en las conversiones y los períodos de aprendizaje.
  • Da tiempo para el aumento: En el caso de las campañas que usan ofertas automáticas o prueban funciones nuevas, ignora las primeras 1 o 2 semanas de datos para dar tiempo a que los modelos de ofertas y los niveles de tráfico se vuelvan a calibrar según la división.
  • Usa divisiones de 50/50: Por lo general, una división del tráfico de 50/50 es la forma más rápida de obtener resultados estadísticamente significativos.
  • Programa con anticipación: Establece la fecha de inicio de tu experimento entre 3 y 7 días en el futuro para dar tiempo a los procesos de revisión y aprobación de anuncios.
  • Solo puedes ejecutar un experimento por campaña en un momento determinado.