テストのレポートを作成するには主に次の 2 つの方法があります。
- テストの直接レポート:
experimentリソースに指標をクエリします。このオプションでは、対照群と介入群の指標が 1 つのレスポンスで提供されるほか、上昇値や 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 リソースでは、次の主要な指標フィールドがサポートされています。これには、介入群の値、対照群の値、前述の統計フィールドが含まれます。
clicksimpressionscost_microsconversionscost_per_conversionconversion_valueconversion_value_per_cost
コンバージョンについては、統計フィールドは相対値ではなく、次の absolute_change フィールドから取得できます。
metrics.conversions_absolute_change_p_value: テストがコンバージョンの絶対変化に影響を与えないという帰無仮説の p 値。0 ~ 1 の範囲です。metrics.conversions_absolute_change_point_estimate: コンバージョンの絶対変化に対するテストの効果を推定する際の点推定値。metrics.conversions_absolute_change_margin_of_error: コンバージョンの絶対変化に対するテストの効果を推定する際の誤差。
experiment リソースに対して有効なクエリを作成するには、
Google 広告クエリビルダー ツールをご利用ください。
クエリ例
次の 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 スニペットを次に示します。
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
キャンペーン レポートのメリット
テストの直接レポートには、キャンペーン レポートを個別にクエリするよりも次のようなメリットがあります。
- 指標の一元化: 対照群と介入群の指標を 1 つの行で取得できます。
- 統計的信頼度データ: 計算された p 値、点 推定値、誤差を提供します。
- 効率性: 複数のレポートの結果を手動で結合または比較する必要がなくなります。
- キャンペーン内サポート: トラフィックが 1 つのキャンペーン内で分割されるキャンペーン内テストで、対照群と 介入群を比較する唯一の方法です。
キャンペーン レポート
別の介入群キャンペーン(
SEARCH_CUSTOM など)を作成するテストの場合は、campaign リソースにクエリし、
campaign.experiment_type を使用して BASE(対照群)キャンペーンと EXPERIMENT
(介入群)キャンペーンを識別できます。この方法は、指標をより詳細なレベル(広告グループやキーワードなど)で分割する必要がある場合や、experiment リソースで利用できないキャンペーン メタデータを表示する場合に便利です。ただし、パフォーマンスの比較と統計計算を手動で行う必要があります。
トラフィック分割は 1 つのキャンペーン内で内部的に行われるため、キャンペーン単位のレポートを使用してキャンペーン内テストの群を比較することはできません。キャンペーン内テストの campaign にクエリすると、集計された合計のみが返されます。
ブランド効果測定レポート
Google Ads API では、専用のブランド効果測定リソースを使用して、ブランド効果測定調査のレポートを作成できます。
ブランド効果測定リソースと内訳ビュー
LiftMeasurementFlight
リソースにクエリして、フライト レベルのブランド効果測定調査の結果を取得します。これには、お客様の
タイムゾーンでのフライト
期間(start_date と
end_date)が含まれます。
さまざまなセグメント ディメンションでブランド効果測定の指標を分析するには、対応する内訳リソースにクエリします。
LiftMeasurementCampaign: キャンペーン別の内訳。LiftMeasurementAgeRange: 年齢層別の内訳。LiftMeasurementDevice: デバイス別の内訳。LiftMeasurementGender: 性別別の内訳。LiftMeasurementVideo: 動画アセット別の内訳。
BrandLiftMeasurementType
列挙型は、ブランド認知度や
広告想起など、調査の測定タイプを指定します。
ブランド効果測定のクエリ例
フライト メタデータと上昇値の統計情報は別々のリソースに存在するため、フライトの詳細とパフォーマンス統計情報をクエリするには、別々の 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
リソースにクエリして、コンバージョン リフト測定調査の構成とパフォーマンス データを取得します。
このリソースは、増分パフォーマンスを評価するためのコンバージョン リフト測定の指標を提供します。
metrics.conversion_lift_baseline_conversions: 調査のベースライン コンバージョン数。metrics.conversion_lift_exposed_conversions: 広告表示グループで観測されたコンバージョン数。metrics.incremental_conversions: 広告に起因するコンバージョンの伸び。metrics.cost_per_incremental_conversion: 増分コンバージョン単価。metrics.relative_conversion_lift: コンバージョン数の相対リフト。metrics.conversion_lift_baseline_conversion_value: ベースライン コンバージョン値。metrics.conversion_lift_exposed_conversion_value: 広告表示グループのコンバージョン値。metrics.incremental_conversion_value: 広告に起因するコンバージョン値の伸び。metrics.relative_conversion_value_lift: コンバージョン値の相対リフト。
コンバージョン リフト測定レポートでは、コンバージョン アクションでセグメント化し、リンクされたキャンペーンの詳細、テストの詳細、コンバージョン目標を取得することもできます。
コンバージョン リフト測定のクエリ例
次の GAQL クエリは、コンバージョン リフト測定の構成と主要なパフォーマンス指標を取得します。
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
ベスト プラクティス
- 適切な信頼度を選択する: p 値のしきい値を低く設定すると、特に予算やコンバージョン数が少ない場合に、方向性を示すガイダンスをより早く得ることができます。95% の信頼度(p 値 <= 0.05)は学術的な標準と見なされており、長期間にわたってより正確な結果を得るのに適しています。
- 十分な期間テストを実施する: 週ごとのパフォーマンス サイクル、コンバージョン達成までの所要時間、学習期間を考慮して、少なくとも 4 週間テストを実施します。
- 準備期間を設ける: 自動入札を使用しているキャンペーンや 新機能をテストしているキャンペーンの場合は、最初の 1 ~ 2 週間のデータを無視して、入札 モデルとトラフィック レベルが分割に合わせて再調整されるまでの時間を確保します。
- 50/50 分割を使用する: 通常、50/50 のトラフィック分割は、統計的に有意な結果を 最も早く得る方法です。
- 事前にスケジュールを設定する: 広告の審査と承認のプロセスに時間を確保するため、テストの開始日を 3 ~ 7 日後に設定します。
- 1 つのキャンペーンで実施できるテストは一度に 1 つのみです。