Amazon Marketing Streamのデータを取得してみた

　最近Amazon Adsのウェビナーに参加し、**Amazon Marketing Stream**という言葉はよく聞きますね。Amazon Marketing Streamは、どういうものでしょうか。似たような名前**Amazon Marketing Cloud**は以前からずっと知っているけど、両者はどこが違うの？と思われる方がいらっしゃるかもしれません。
　この記事では、Amazon Marketing Streamを紹介して、Amazon Marketing StreamとAmazon Marketing Cloudの違いも説明したうえで、実際にAmazon Marketing Stream APIを叩いて、データを取得してみたいと思います。
### Amazon Marketing Streamとは
　簡単に言いますと、[Amazon Marketing Stream](https://advertising.amazon.com/ja-jp/resources/whats-new/introducing-amazon-marketing-stream-beta)は、2022年6月にAmazon Adsが発表した、ほぼリアルタイムで広告データを取得できる機能となります。同年の10月頃、日本でもリリースされ、Amazon Adsを使う日本国内の広告アカウントも当該機能を使えるようになりました。
　以下の図のように、Amazon Ads管理画面のダッシュボードは、日単位のデータしか見れないのに対して、Amazon Marketing Streamを使うことで、日中の時間単位の広告パフォーマンスの変化を確認することができます。日中の時間単位の広告パフォーマンス、予算消化状況を見ながら、より精確的にキャンペーンの最適化を行うことができます。また、日中のCPM、CPC、CVRなどのトレンド分析もできます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3119752/fc2e9fab-5332-019a-c5d7-16704cce1822.png)

　あくまで抜粋ですが、Amazon Marketing Streamを使うことで、広告コスト、クリック数、インプレッション数、広告経由コンバージョン数、広告経由売上などのようなデータを時間単位で確認できます。また、2023年6月時点で、スポンサープロダクト、スポンサーディスプレイ広告のデータしか開放されていないが、今後スポンサーブランドとAmazon DSPの広告データもローンチする予定です。
　ただ、Amazon Marketing Stream自体は、UIで使える機能ではありません。Amazon Marketing Streamは、あくまで時間単位のデータを提供するだけで、Amazon Adsが提供している[Amazon Ads API](https://advertising.amazon.com/ja-jp/about-api)を使って機能を開発しなければなりません。APIやAWSなどを使って開発スキルを持っているのであれば、自社でもこの機能を実装できます。もし自社で開発リソースがなければ、Amazon Marketing Streamを実装しているサードパーティツールや代理店を利用したほうがよいかもしれません。
### Amazon Marketing StreamとAmazon Marketing Cloudの違い
　近年、Amazon AdsのAmazon Marketing Cloudというサービスも流行っていますね。[Amazon Marketing Cloud](https://advertising.amazon.com/ja-jp/solutions/products/amazon-marketing-cloud)は、ユーザーのプライバシーを守りながら、Amazon Adsのシグナルを使った、クラウドベースのクリーンルームソリューションです。Amazon Marketing Cloudを使えば、SQLクエリでカスタマージャニーを分析したり、独自のオーディエンスを作ったり、蓄積したデータをアップロードして分析したりすることができます。
　また、Amazon Marketing StreamとAmazon Marketing Cloudは、どちらもAmazon Adsキャンペーンの時間単位のパフォーマンスデータを確認できますが、大きな違いとしては、**即時性**があるか否かです。Amazon Marketing Streamは、**ほぼリアルタイム**でデータを取得できるのに対して、Amazon Marketing Cloudは、SQLを実行したうえ、データファイルをダウンロードし、ようやく時間単位のパフォーマンスデータを確認できます。もし配信期間中にキャンペーンの細かい予算や入札の調整をしたいのであれば、Amazon Marketing Streamのデータを使います。
　以下の表では、Amazon Marketing CloudとAmazon Marketing Streamの用途を比較しています。
| Amazon Marketing Stream|Amazon Marketing Cloud | 
|:----------:|:-----------:|
|1時間ごとの集計レポートデータ|イベントレベルの分析| 
|ほぼリアルタイム|ユーザー行動の分析| 
|複数ディメンションの広告データ確認|購買までの経路の計測| 
|キャンペーンの細かい調整に役立つ|オーディエンスの作成|
|プッシュ型で毎回APIを叩く必要がない|SQLクエリによるインサイト分析

### Amazon Marketing Streamのデータ取得

　[Amazon Ads APIレファレンス](https://advertising.amazon.com/API/docs/en-us/guides/amazon-marketing-stream/onboarding)でもこのAPIの使い方を紹介しているが、ここでスクリーンショットを貼り付けながら、データを取得するまでの手順を紹介します。なお、前提としては、既にAmazon Ads APIへのアクセス権限を持っていることです。Amazon Ads APIのアクセス権限申請については、こちらの[ドキュメント](https://advertising.amazon.com/API/docs/en-us/guides/onboarding/overview)から詳細を確認できます。また、AWSも使いますので、AWSアカウントを用意しておいてください。
　以下は、詳細な手順を紹介します。
#### 1. AWS SQSの作成
##### 1-1. [github](https://github.com/amzn/ads-advanced-tools-docs/blob/main/amazon_marketing_stream/Stream_SQS%20_CF_Template.yaml)からCloudFormationのyamlファイルをダウンロードします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3119752/dc7362d0-ec62-8c88-42b3-0f1e96c58903.png)

##### 1-2. AWSリージョンを選択します。
| 広告アカウント地域|AWSリージョン| 
|:----------:|:-----------:|
|NA (北米)|us-east-1| 
|EU (ヨーロッパ)|eu-west-1| 
|FE (アジア)|us-west-2| 

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3119752/9f4b268a-7678-8c83-57e0-95b5a6da5bf4.png)

##### 1-3. CloudFormationを使用してSQSを作成します。
　CloudFormationを検索してクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3119752/952e97a4-414f-d217-0676-45ddf716cc05.png)
　Create stackボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3119752/24c920ee-0006-99b9-c457-1939f3b0c1f3.png)
　先ほどダウンロードしたyamlファイルを選択してNextボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3119752/72a1ef96-639e-f7df-6cbc-5a8dfc5bb0c1.png)
　必要な情報を入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3119752/9ea5cf25-fefe-e9de-c7b8-43b52dd9287c.png)
　その他の設定は、デフォルトのままでサブミットします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3119752/201b859b-2fb0-dd5b-1103-8b47a99dca6f.png)
　SQSを検索します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3119752/31232861-0825-0fbd-d881-7023f128770e.png)
　先ほどCloudFormationを使って作成したSQSキューを確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3119752/37d24dc9-6de4-68a3-f68d-37f286d879ed.png)

#### 2. Amazon Marketing Streamデータセットのサブスクリプション
##### 2-1. [POST /stream/subscriptions](https://advertising.amazon.com/API/docs/en-us/amazon-marketing-stream/openapi#/Stream%20Subscription/CreateStreamSubscription)エンドポイントを呼び出します。
　リクエストボディの例
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3119752/e2e91f4d-ec6a-c942-2953-8036f9630bf0.png)
| 項目|説明| 
|:----------:|:-----------:|
|clientRequestToken|一意の値を使用する、この API を呼び出すたびに、新しい値に変更する必要がある（GUID 推奨）| 
|dataSetId|利用したいデータセットのID| 
|notes|任意| 
|destinationArn|SQSキューのARN| 

 レスポンスボディの例
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3119752/ef54526d-822d-d2f2-4b9a-49789ac25e33.png)
##### 2.2. サブスクリプションの状態を確認します。
　このタイミングで GET /streams/subscriptions を呼び出すと、サブスクリプションの「承認待ち」状態を確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3119752/b1122bab-91e1-5787-971f-d9b351e3ff1c.png)

#### 3. サブスクリプションの承認
##### 3.1. SQSキューのメッセージを確認します。
　Send and receive messages ボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3119752/295447c6-75b8-a373-e0df-d13ca498284b.png)
　Poll for messages ボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3119752/2d453e0c-dcd2-dd07-0c29-66c8716a701f.png)
　Messages に表示されたメッセージ ID をクリックして内容を確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3119752/3bfbab24-66d7-367c-af1a-814747f8b947.png)
　メッセージの中身をメモしておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3119752/595a08c2-dbd8-697b-fb84-5917f1e84e41.png)
##### 3.2. サブスクリプションURLを使用して承認します。
　SubscribeURLにリクエスト(GET)します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3119752/594f14fb-0bdf-5325-54d3-0441c45d7e95.png)
　レスポンスボディの例
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3119752/c8bd25f0-10fd-bb05-fdc0-a0d9703deb63.png)
##### 3.3. サブスクリプションの状態を確認します。
　このタイミングで[GET /streams/subscriptions](https://advertising.amazon.com/API/docs/en-us/amazon-marketing-stream/openapi#/Stream%20Subscription/ListStreamSubscriptions)を呼び出すと、サブスクリプションの「アクティブ」状態を確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3119752/4d96cb58-3f11-7c1b-d665-5dd9f3205865.png)
　以上の内容を成功に設定しますと、広告データは継続的にSQSキューにプッシュされるようになります。
#### 4. データの確認
　実際のデータを確認してみます。sp-trafficデータセットの例。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3119752/f93f78d9-b655-d513-5c19-87e1cf2532d3.png)
　メッセージをクリックすると、メッセージの中身を確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3119752/495a2485-dcfb-ee22-b147-c6862cf5e189.png)
　以上、Amazon Marketing Streamのデータを取得してみました。SQSキューにたまったほぼリアルタイムのデータを利用して、時間単位のパフォーマンスデータを表示するダッシュボードやレポートを作成したり、配信実績に合わせてキャンペーンの細かい調整ができます。また、上記手順はあくまで試しで手動でやってみました。実際に機能として開発する際には、AWSのAPIやSDKを使い、SQSキュー内のデータを取得する必要も出てきます。加えて、LambdaやKinesis Data Firehose、S3、AthenaといったAWSサービスと組み合わせて、全体の処理を自動化させるソリューションを実現したほうがいいです。

### 最後に
　今回は、Amazon Marketing Streamとは何かについて紹介しました。また、実際にAmaozn Ads APIを叩いてみて、時間単位のデータも確認してみました。Amazon Ads管理画面上では、日単位のデータしか確認できない状況ですので、こちらの時間単位のデータを活用して、さらに広告キャンペーンのパフォーマンスを向上できます。ぜひAmazon Marketing Stream機能を使ってみてください。