よくある質問

レポート API は安全ですか?

BigQuery に保存されているすべてのデータは、保存中も転送中も暗号化されます。これにより、データは、Google のサーバーに保存されるとき、およびそうしたサーバーとクライアント間で送信されるときに、強力な暗号化により保護されることになります。

さらに、BigQuery には、ユーザーの役割と権限に基づいてデータへのアクセスを制限できるアクセス制御も組み込まれています。これにより、誰がお客様のデータにアクセスできるのか、そして、そのデータに対してどのようなアクションを実行できるのかを正確に指定できます。

BigQuery は、OAuth 2.0 や API キーなどの標準メカニズムを介した認証と権限もサポートしています。

Google のインフラストラクチャは、サービス拒否攻撃、データ侵害、不正アクセスなどの一般的な脅威から保護するように設計されています。これは、ファイアウォール、侵入検知システム、定期的なセキュリティ監査など、さまざまなセキュリティ対策を用いて行われます。BigQuery API はセキュリティを念頭に設計されており、お客様のデータが常に保護されるようさまざまな対策を採用しています。

データはどのくらいの頻度で更新されますか。

毎日更新されます。更新は UTC+0 の午前 0 時に始まり、最大更新時間は 12 時間です。このアップデートは、前日の午前 0 時 (UTC+0) までに受信したすべてのデータを対象とします。

データはどこまでさかのぼりますか。

特定の組織に対して承認されたすべての履歴データが利用可能になります。

Direct Access ユーザーの場合、どのように接続すればよいですか。

すでに GCP に組み込まれているため、シームレスに行えます。ログインして、UI または API を介して関連テーブルのクエリを試みるだけで完了です。

Insights IAM UI

GCP API ユーザーではない場合、どのように接続すればよいですか。

CitrusAd は、認証メカニズムに組み込むことができる関連する資格情報を JSON で提供します。

BigQuery UI ではなく Reporting API のみを使用してクエリをデバッグできますか。

はい、問題が発生した場合は BigQuery API がコードを返し、エラーメッセージも表示されます。

GCP API 以外のユーザーに対して割り当てが設定されている場合、クエリのコストがどれくらいかかるかを見積もることはできますか。
はい、API には、クエリが実行された場合にスキャンされるバイト推定値を取得するメカニズムがあります。この推定値にクエリを呼び出す頻度を掛け合わせると、割り当てにどの程度近づくかを把握できます。

詳細については、GCP のドキュメントをご覧ください。

ドライランクエリ | BigQuery | Google Cloud

割り当て制限を超えた場合はどうなりますか。

割り当てを理解するには、CitrusAd との契約を参照してください。特に定義されていない場合、デフォルトで月あたり 10 TB のクエリデータスキャンが設定されます。

契約には、1 日あたりの API 呼び出しの最大数が含まれている場合もあります。特に定義されていない場合、デフォルトで 1 日あたり 100 回の API 呼び出しが設定されます。

割り当て (データスキャンまたは呼び出し数) を超過した場合は、使用事例を把握するために当社からご連絡いたします。契約によっては、超過料金がかかる場合があります。

契約条件 (またはデフォルトの制限) を超えて重大な悪用があった場合、当社はアクセスを一時停止する権利を留保します。

Reporting API の使用例を教えてください。

以下は、一般的な方法を使用した例です。

Python 用 Google SDK

この例では次のことを行えます。

  1. BigQuery に接続する
  2. クエリを実行する
  3. 結果をcsvにスプールする
import google.cloud.bigquery as bq
import pandas as pd
bq_client = bq.Client.from_service_account_json("<REPLACE>.json")
job_config = bq.QueryJobConfig(allow_large_results=True)
query_job = bq_client.query(
    'SELECT count(1) FROM insight-platform-external-iam.<REPLACE>_insight_reporting.campaign 
    LIMIT 1000', job_config=job_config)
df = query_job.to_dataframe(create_bqstorage_client=False)
df.to_csv(r"C:\Users\<REPLACE>\<REPLACE>.csv", index=False)
print("Run Complete")

クエリを実行する前に、スキャンされたバイト数などを推定するために、他の方法も利用できます。

BigQuery のドキュメントをご覧ください。

BigQuery API | Google Cloud

GCP にない場合は、環境変数を介して JSON 認証情報ファイルを参照できます。

Python 用の汎用 API

import csv
import requests
from google.oauth2 import service_account

PROJECT_ID = "insight-platform-external-iam"
DATASET = "<YOUR DATASET HERE>"
END_POINT = f"https://bigquery.googleapis.com/bigquery/v2/projects/{PROJECT_ID}/queries"
QUERY = f"""
SELECT supplier_id, campaign_id, sum(ad_spend) as ad_spend, sum(clicks) as clicks
FROM `{PROJECT_ID}.{DATASET}.realised_ad_agg` 
WHERE ingressed_at BETWEEN '2022-09-01' and '2022-12-31'
group by 1,2
"""

def get_token():
    # With service account
    credentials = service_account.Credentials.from_service_account_file('./secrets/service-account.json')
    scoped_credentials = credentials.with_scopes(['https://www.googleapis.com/auth/cloud-platform'])

    # Do token request
    def req( method, url, headers, body, **kwargs):
        resp = requests.post(url, headers=headers, data=body)
        return type('obj', (object,), {'data' : resp.text, 'status': 200})

    scoped_credentials.refresh(req)
    return scoped_credentials.token

def run_job(token):
    resp = requests.post(
            END_POINT,
            json={
                "query": QUERY,
                "useLegacySql": False
            },
            headers={
                "Content-Type": "application/json",
                "Authorization": f"Bearer {token}"
            }
    )
    return resp.json()['jobReference']['jobId']

def get_query_results(job_id, token):
    status_endpoint = f'{END_POINT}/{job_id}?location=australia-southeast1'
    completed = False
    while not completed:
        response = requests.get(status_endpoint, headers={
                "Content-Type": "application/json",
                "Authorization": f"Bearer {token}"
            })
        completed = response.json()['jobComplete']
    
    data = response.json()
    rows = data['rows']
    columns = [c['name'] for c in data['schema']['fields']]
    
    return rows, columns

def extract():
    token = get_token()
    job_id = run_job(token)
    rows, columns = get_query_results(job_id, token)

    with open('results.csv', 'w', newline='') as f:
        writer = csv.writer(f)
        writer.writerow(columns)

        for row in rows:
            writer.writerow([i['v'] for i in row['f']])

extract()

Google Cloud ではなく AWS などを使用している場合でも、API を認証して使用できますか。

はい、使用できます。サービスアカウントの認証情報が提供されるので、アプリケーションで参照できます。ここに一例を紹介します。

# TODO(developer): Set key_path to the path to the service account key 
#                  file.
# key_path = "path/to/service_account.json"
 
credentials = service_account.Credentials.from_service_account_file(
    key_path, scopes=["https://www.googleapis.com/auth/cloud-platform"],
)
 
token = credentials.token
 
# use the token to do the API calls
# ...
# headers: Bearer ${token}
# ...

共有されている各データセットの場所を確認するにはどうすればよいですか。

この API 呼び出しにより、各データセットがどの場所にあるかがわかります。

GET https://bigquery.googleapis.com/bigquery/v2/projects/insight-platform-external-iam/datasets

{
  "kind": "bigquery#datasetList",
  "etag": "RLU1Ww9C5FdhlcIuRHjW0A==",
  "datasets": [
    {
      "kind": "bigquery#dataset",
      "id": "insight-platform-external-iam:acme_insight_reporting",
      "datasetReference": {
        "datasetId": "acme_insight_reporting",
        "projectId": "insight-platform-external-iam"
      },
      "location": "australia-southeast1"
    },
    {
      "kind": "bigquery#dataset",
      "id": "insight-platform-external-iam:acme_acme_analytics",
      "datasetReference": {
        "datasetId": "acme_acme_analytics",
        "projectId": "insight-platform-external-iam"
      },
      "location": "us-central1"
    }
  ]
}

ベストプラクティスのヒントはありますか。

一般的に、データのヘビーユーザーの場合は、特に未集約データ (リクエスト、実現済み広告、注文、拡張アトリビューションなど) にアクセスできるのであれば、テーブルを独自のデータウェアハウスにコピー (ステージング) してから、そのコピーに必要なビジネスロジックのクエリを実装するのがベストです。

ライトユーザーの場合は、特定の結果を得るためにテーブルに直接クエリを実行することも選択可能です。

円滑に機能させるには、許可された割り当てを下回るようにすることが重要です。

また、各クエリは最大 1 GB をダウンロードできます。ダウンロードできない場合は、エラーメッセージが届きます。非常に大規模なダウンロードが必要な場合は、代わりに小さなクエリを多数、実行します (例: 1 日またはサプライヤーごとのデータのサブセット)。

適切な SQL ステートメントの作成についてサポートが必要な場合はどうすればよいですか。

試行したクエリを指定してチケットを発行していただければ、確認をお手伝いします。コメントがあれば返信させていただきます。

Pandas パッケージを使用するためのヒントはありますか。

Pandas は、最も人気のある分析ツールの 1 つです。これを機能させるには、ディペンデンシーの pandas-gbq と pydata-google-auth をインストールする必要があります。

以下のスニペットは、BigQuery テーブルからデータを読み込む方法の実例です。

import pandas as pd
from google.oauth2 import service_account

credentials = service_account.Credentials.from_service_account_file('path/to/the/credential/file')

query = 'select * from project.dataset.table'

dat = pd.read_gbq(
    query,
    project_id='project_id',
    credentials=credentials
)

Pandas 関数の詳細については、こちらをご覧ください。

PySpark パッケージを使用するためのヒントはありますか。

動作する PySpark 環境があると仮定した場合、お手元の PySpark のバージョンに適した BigQuery コネクタ用の正しい jar ファイルを用意する必要があります。たとえば、PySpark 3.2. *の場合、Spark-3.2-bigquery-0.30.0.jar が必要です。jarファイルのリスト、実用的なコードスニペットとパラメータについては、こちらをご覧ください。

以下のコードスニペットでは、クエリを実行する方法例を示しています。

from pyspark.sql import SparkSession

spark = SparkSession.builder.appName('BigNumeric').config('spark.jars', 'spark-3.2-bigquery-0.30.0.jar').getOrCreate()

spark.conf.set('credentialsFile', 'path/to/the/credential/file'')

spark.conf.set('viewsEnabled, 'true')
spark.conf.set('materializationProject', 'yourMaterializationProject')
spark.conf.set('materializationDataset', 'yourMaterializationDataset')

query = 'select * from project.dataset.table'

df = spark.read.format('bigquery').option('query', query).load()

df.show()

重要: パラメータ viewsEnabled は true でなければなりません。

ビュー内のデータは一時テーブルに実体化されてから、bigquery.tables.create 権限が必要な PySpark により読み取られます。したがって、ユーザーが書き込みアクセス権を持つ materializationProject および materializionDataset を提供する必要があります。

クエリでフィルタを要求するエラーが発生しています。

パーティションテーブルの場合、フィルターは必須であり、フィルターがないと、次のようなエラーメッセージが表示されます。

パーティションの削除に使用できる列 ‘partitioned_column' に対するフィルターなしでは、テーブル ‘dataset_id.table_id' に対してクエリを実行できません

以下の例のようにターゲット範囲をカバーする適切なフィルターを追加するだけで、エラーを解決できます。

-- this query returns all records available since yesterday
select
  * 
from
  dataset_id.table_id
where
  ingressed_at >= date_sub(current_date, interver 1 day)

テーブルがどの列に対してパーティション化されているかを確認するには (上の例の ingressed_at など)、指定されたテーブルの説明を参照してください。

アクセスをリクエストするにはどうすればよいですか。

プロセス

チケットを発行し、資格基準に書面で同意する必要があります。

当社は潜在的な候補者と協力して、必要なアクセスレベルとセキュリティ設定を特定し、どの割り当てとコストを適用するのか決定します。

適格基準

候補者がレポート API アクセスの資格があるとみなされるには、次の基準を満たす必要があります。

全般

  1. 候補者は、その他の方法ですでにメンバーであるか、一般的なアクセス権を持っている、CitrusAd 名前空間およびチームのデータへのアクセスのみを要求できます。候補者は、次のいずれかのシナリオから、どれに申請するかを指定する必要があります (また、既存のアクセスの証拠を提供する必要があります)。
    1. 環境レベル (CitrusAd プラットフォームの実装全体が候補者専用です)。
    2. 名前空間レベル (候補者には、個々の名前空間または名前空間のリスト内の小売業者とサプライヤーの両方を含むすべてのチームを表示する権限があります)。
    3. 特定の小売業者チーム ID またはグループレベル。
    4. 特定のサプライヤーチーム ID またはグループレベル。
      1. さらに、インテグレーターは、特定のサプライヤーチーム ID またはグループレベルに加え、小売業者が個別に同意すれば、完全な小売業者製品カタログにアクセスできます。
  2. トランザクションファクトデータは、一般基準 1a または 1b 対象の候補者にのみ提供できます。
  3. トランザクションファクトデータを利用する資格を持たない候補者は、事前に集約されたファクトデータのみにアクセスできます。データは 1 日ごとにサマリーが集約されます (集約のタイムゾーンは UTC+0)。
  4. 一般基準 1d のみの対象候補者は、広告リクエストデータを受け取ることはできません (提供されるのは実現済み広告データとなります)。製品データは、サプライヤーによって実現済み広告で宣伝されている特定の製品に対して提供されます。ただし、小売業者による個別の同意で、小売業者製品カタログを受け取ることのできるインテグレーターは除きます。
  5. ディメンションデータでは、該当するレコードの最新バージョンが含まれることのみ保証されています。過去の変更の追跡は、候補者が必要に応じて実行することになります。
  6. データは毎日更新され、前回完了した UTC+0 日までのデータは、遅くとも 12:00 UTC+0 までには更新されます。
  7. アクセスは本質的に読み取り専用であることをご理解ください。この API は、いかなる目的であれ、データウェアハウス内にオブジェクトを作成するために使用するものではありません。
  8. 他のデータソースとのブレンドは、候補者自身の環境で行う必要があります。
  9. 候補者には、Google BigQuery API にアクセスするのに利用できる SDK (または同等のもの) が必要です。
  10. 候補者には SQL に関する十分な知識が必要です。
  11. 候補者は CitrusAd の概念に精通している必要がありますが、そうでない場合は、カスタマーサポートマネージャーまたはテクニカルアカウントマネージャーを通じて、標準的な製品トレーニングを受けられるよう手配します。
  12. 提供されたドキュメントに基づいて、候補者は独自のソリューションを開発することが求められます。SQL がドキュメントに従って期待どおりに動作しないといった問題が見つかった場合は、通常のサポートチャネルを通じてお問合せください。その場合、以下の情報を提供する必要があります。
    1. 接続に使用しているアカウント。
    2. 呼び出しの行われている正確な SQL。
    3. 発生中のエラーメッセージの詳細な説明。
  13. 候補者が小売業者の場合、広告ライフサイクルの全体像を把握できるように、インプレッション/クリック/注文数を CitrusAd プラットフォームに提供する必要があります。
  14. CitrusAd は随時、スキーマを変更する権利を留保します。これらの変更には通常、既存のテーブルやビューへの新しい列の追加が含まれており、下位互換性があります。候補者は、ワイルドカードなどを使用するのではなく、SQL を構造化して列に名前を付ける必要があります。変更に列やテーブルの廃止が含まれる場合、CitrusAd は、変更を実装する少なくとも 12 週間前に変更を通知します。通知は、プラットフォームユーザーへの標準のリリース通知を通じて行われます。

候補者が既存の Google Cloud Platform (GCP) ユーザーであることは必須ではありません。ただし、候補者が GCP ユーザーであるか非 GCP ユーザーであるかによって、さらなる基準が存在します。

非 GCP 候補者

別段の合意がない限り、CitrusAd は環境内の単一のサービスアカウントの認証情報を候補者に提供します。

別段の合意がない限り、以下のデフォルト条件が適用されます。

  1. 1 日あたり最大 100 回の API 呼び出し。
  2. 月あたりのデータスキャン量は 10 TB 未満とします (API には、実行前にクエリスキャンサイズを推定する方法があります。Google のドキュメント「ドライランクエリ | BigQuery | Google Cloud」を参照してください)。
  3. 非 GCP 候補者基準 1 および/または 2 を超えた場合、CitrusAd は独自の裁量でアクセスを一時停止する権利を留保します。
  4. 個々の API 呼び出しで一度に 1GB を超えるデータはダウンロードできません。

GCP 候補者

別段の合意がない限り、候補者は、必要なアクセス権を割り当てることができるように、最大 5 つの GCP アカウントの詳細を CitrusAd に提供します。

アカウントには BigQuery ジョブユーザーロール (roles/bigquery.jobUser) が割り当てられていなくてはなりません。

次の制限が適用されます。

  1. 1 日あたり最大 100 回の API 呼び出し。
  2. GCP 候補基準 1 を超えた場合、CitrusAd は独自の裁量でアクセスを一時停止する権利を留保します。
  3. 個々の API 呼び出しで 1GB を超えるデータをダウンロードすることはできません。

用語集

環境

CitrusAd プラットフォームが実装される物理環境の名前。それぞれが 1 つ以上の名前空間をホストします。

名前空間

CitrusAd ソリューションの実装の一部であるすべてのエンティティの論理グループ。これには、チームとチームが所有するすべてのオブジェクトが含まれます。通常、名前空間は、小売業者 (チーム) と複数のサプライヤー (チーム)、各チームのユーザーおよびその他の (小売業者はカタログを所有し、サプライヤーはキャンペーンを構成するなどの) 関連構成から成ります。チーム (およびチームが所有するもの) は、単一の名前空間にのみ属します (チームが複数の名前空間にまたがって存在することはできません)。

ユーザー

CitrusAdシステムにおけるユーザーの一意な識別子です。1 つの電子メールに複数の userId が含まれる場合があります。各 userId は、名前空間ごとにユニークです。各ユーザーは、ファーストネーム、ラストネーム、Eメール、idを持つことになります。ユーザーは、CitrusAd プラットフォーム内の複数のチームのメンバーになり、複数のチームにアクセスできます。

チーム

CitrusAd システム内のチーム。サプライヤー (広告主) または小売業者にすることができます。通常、サプライヤーチームはキャンペーンを作成し、小売業者はキャンペーンを確認し、管理機能を実行します。CitrusAd システムのユーザーは、複数のチームのメンバーになることも、1 つのチームのみのメンバーになることもできます。チームには通常、ユーザー、キャンペーン、ウォレットが関連付けられます。

サプライヤー

CitrusAd システム内のサプライヤーチーム。サプライヤーは通常、ブランドの親会社、または個々のブランドごとの一連のチームです。通常、サプライヤーはキャンペーンの維持、ウォレット残高の管理などを行います。

販売店

CitrusAd システム内の小売業者チーム。ほとんどの名前空間には、小売業者チームが 1 つだけあります。小売業者は通常、製品カタログを管理し、キャンペーンなどをレビューします。

キャンペーン

特定の製品を選択するためのプレースメントおよびターゲティング戦略で設定された 1 つの固有のキャンペーン。たとえば、CitrusAd システムのキャンペーンでは、最大入札額 0.60 ドル (約 84 円) で検索語「チョコレート」と「チョコレート」をターゲットにして製品 A と B を宣伝することができます。1 つのチームが複数のキャンペーンを行うのが一般的です。

カタログ

CitrusAd システム内の独自の小売店の製品カタログ。小売業者は、単一の名前空間内の 1 つの製品カタログのみを CitrusAd と同期するのが一般的です。カタログには、小売業者のカタログ内のすべての製品、その名前、ブランド、カテゴリ、および CitrusAd システムに取り込まれるその他の関連属性のリストが含まれます。

商品

CitrusAd システムの単一の一意の製品。製品には、製品カタログ内で同期された一意の製品コードがあり、カテゴリ、タクソノミー、ブランドなどの属性が存在する場合があります。

ウォレット

CitrusAd システムのウォレットには、(実現済み広告の支払いなど) 支払いを目的とした広告主の資金が保管されます。各ウォレットには単一の通貨コードがあり、同じ通貨コードのカタログに対してのみ使用できます。ウォレットはチームが所有します。チームはいくつでもウォレットを所有できます。ウォレットはアーカイブできます。ウォレットをアーカイブすると、プラットフォーム内でのみ表示/非表示されます。アーカイブされたウォレットでもクレジットを使用できます。

台帳

CitrusAd システム内でトランザクションが発生したイベントの台帳。これは、スポンサー付き製品やバナー広告のインプレッションやクリックなどの (引き落としが発生する) 広告イベントで最も一般的です。サプライヤーによる補充や残高の調整 (クレジット) の場合もあります。各イベントには、スポンサープロダクト、バナー広告、トップアップなどの「理由」が付されます。

リクエスト

広告についての CitrusAd システムに対するリクエスト。リクエストでは、小売業者はプレースメントだけでなく、顧客の sessionId やリクエスト関連のフィルターなどのコンテキストも指定します。リクエストに応じて、CitrusAd は関連する AdType (カテゴリや検索用語など) の広告を小売業者に送り返し、顧客に表示します。

(実現済み) 広告

顧客に配信するために小売業者に送り返される単一の広告イベント。これは、広告が少なくともインプレッションされたという確認 (広告が実際に使用された、すなわち実現済みだという明示的な確認) を小売業者が送り返すときに実現済み広告となります。CitrusAd システムでは、すべての広告に、その単体の一意のイベントに関連する一意の実現済み広告 ID が割り当てられます。

カテゴリ

カテゴリとは、「ベーカリー」や「乳製品」など、Web サイトのタクソノミーの一部として小売業者のサイトにあるページです。通常、小売業者はカテゴリページで広告をリクエストし、CitrusAd へのリクエストでこの関連属性を指定します。CitrusAd にそのカテゴリに対してアクティブで有効なキャンペーンがある場合、広告が返されます。

searchTerm

顧客が小売業者の Web サイトに入力した検索用語。この検索用語は CitrusAd に送信され、関連する広告がリクエストされます。CitrusAd に検索用語に対するアクティブで有効なキャンペーンがある場合、広告が返されます。

注文

CitrusAd と同期された小売業者のシステム内の一意の注文。1 つの注文に複数の orderItems を含めることができる (顧客のカートに複数の商品を入れることができるのと同じです)。顧客の注文が完了すると、これらは CitrusAd のアトリビューションを強化するために CitrusAd に送信されます。広告費用対効果 (ROAS) やその他の重要な KPI を小売業者や広告主に提供できます。

アトリビューション

アトリビューションは、顧客に配信される広告を送信されたオーダーに割り当てる CitrusAd システムで実行されるプロセスです。一般的なカスタマージャーニーは、広告を見て (インプレッション)、それをクリックし (クリック)、カートに追加して、その商品を購入します (コンバージョン) 。注文は、顧客がクリックした固有の広告に「紐づけ」られます。CitrusAd システムで注文に紐づけされるには、広告とのやり取りがあり (統合に従って表示またはクリックされる) 必要があり、その後、顧客が広告に関連する商品を購入しなくてはなりません。CitrusAd は通常、注文を広告に紐づけするために「sessionId」を使用します。小売業者は広告プロセスのすべての関連タッチポイントで「sessionId」を指定します。これにより、CitrusAd は、1 人の顧客に配信された 1 つの広告が特定の注文につながったことを識別できるようになります。

日付

集計される場合、全データは UTC+0 タイムゾーンにキャストされます。

上限

CitrusAd プラットフォームの実装では、多くの場合、小売業者が現実的に想像されるよりも多くの広告をリクエストする必要があります。分析の観点から見ると、これは特定のメトリクスが実際にどう実行されているかという点で不正確な印象を与える可能性があります。
たとえば、20 件の広告 (AdType=Product) のリクエストが行われ、プラットフォームがそれに応じて 2 件の広告を配信した場合、そのリクエストの「フィルレート」は 10% (20 件中 2 件) になります。ただし、実際には 4 つの広告のみが使用される可能性が高いと理解されている場合、50% (4 つ中 2 つ) が埋まったと解釈することが望ましいでしょう。
したがって、レポート内に上限を設けることになります。
上限は小売業者ごとに設定し、1 つの上限を製品広告に、もう 1 つをバナー広告に使用できます (通常、製品広告リクエストではバナーよりもはるかに多くの広告がリクエストされ、使用されるため)。
例に戻ると、小売業者の製品上限が 4 の場合、リクエストメトリクスは以下のように報告されます。
NumAdRequests = 1
NumAdsRequested = 20
CappedNumAdsRequested = 4
NumAdsServed = 2
CappedNumAdsServed = 2
なお、広告が 5 件配信された場合 (つまり配信広告が上限そのものを超えている場合)、最後の 2 件は、次のように報告されます。
NumAdsServed = 5
CappedNumAdsServed = 4 (上限まで切り捨て)
上限は必須ではありません。指定がない場合、上限ありの結果と上限なしの結果は同じになります。

拡張アトリビューション

CitrusAd プラットフォームは、「アトリビューション」セクションで説明されているようにアトリビューションを実行します (上記を参照)。
レポートサブシステムでは、小売業者に応じて他のアトリビューションシナリオを検出し、フラグを立てることもできます (拡張アトリビューション)。

シナリオは以下のとおりです。

  • インプレッションビュースルーアトリビューション
    • 注文は、同じセッション ID で同じ製品に対して表示された広告に紐づけられました (つまり、クリックではなくインプレッショでした)。
  • ハロー効果クリックアトリビューション
    • 同じセッション ID の同じハロー効果レベルに属する製品広告のクリックに紐づけられた注文。最も一般的なハロー効果レベルはブランドです (つまり、広告の製品が注文の製品とは異なるけれども、同じブランドに属している)。実装に応じて、他のハロー効果タイプも可能です。たとえば、ハロー効果がより具体的で、共通のブランドに加えて、共通のカテゴリを持つ製品に対する広告と注文が要求される場合などです。カタログ内の製品ごとに設定された小売業者タクソノミーは、ハロー効果のこうした追加の詳細レベルを定義するために使用されます。

バージョン: f34ea10