Google広告の曜日・時間帯別CPAをPythonで集計

自動入札に任せているのに、曜日や時間帯でCPAがぶれる。そう感じる運用者は多い。Google広告の管理画面は曜日と時間帯を同時に見られず、168コマ(7曜日×24時間)の全体像がつかみにくい。ここではGoogle Ads APIとPythonで168コマを一括取得し、CPAの穴を見つけて入札調整へ落とすまでの手順を、実装でつまずく点も含めて示す。今日から自分のアカウントで再現できる。

自動入札の時代でも曜日・時間帯分析が効く理由

tCPAやコンバージョン最大化を使っていても、曜日・時間帯の分析は無駄にならない。理由は2つある。1つは、自動入札は過去データを学習するため、CVが薄い深夜帯に配信予算が漏れている期間が発生しうること。もう1つは、広告のスケジュール(ad schedule)による入札単価調整が、自動入札と併用できる場面が残っていることだ。

管理画面でも曜日別・時間帯別は見られるが、両者の掛け合わせは1画面に出ない。0-7時の日曜だけCPAが2倍、といったコマ単位の異常は、168コマを一枚の表にして初めて見える。APIで取れば、この掛け合わせを一度に抜き出せる。

Google Ads APIで168コマを一括取得するGAQL

Google Ads APIは、UI と違って1つのクエリに複数のセグメントを指定できる。曜日(segments.day_of_week)と時間帯(segments.hour)を同時に指定すれば、campaign リソースから168コマ分の行が返る。セグメントの仕様は公式のフィールド一覧(developers.google.com/google-ads/api/fields/v22/segments)で確認できる。

この記事で一番のアセットが次のGAQLだ。ブックマークして、campaign を ad_group に変えるなど自分の粒度に書き換えて使ってほしい。SELECT campaign.name, segments.day_of_week, segments.hour, metrics.cost_micros, metrics.conversions, metrics.clicks FROM campaign WHERE segments.date DURING LAST_30_DAYS

これを GoogleAdsService の search で投げれば、直近30日を曜日×時間帯で割った明細が返る。Pythonクライアントの導入でつまずいた人は、先にGoogle広告APIをPythonで動かす手順と初回の壁で認証まわりを片付けておくと早い。

実装でつまずいた3点と解決策

実際に自分のアカウントで動かすと、数字を出す前に3か所で止まった。ここが一次情報になる。

  • cost_micros は円ではない。返る値はマイクロ単位で、円建てアカウントなら100万で割って円にする。1500000 なら1.5円ではなく1500円だ。÷1,000,000 を忘れるとCPAが100万倍にぶれ、判断を丸ごと誤る。
  • day_of_week は数値でなく文字列。MONDAY〜SUNDAY の列挙値で返る。曜日順に並べたいなら、月曜=0 のような対応表を自分で持ってソートする。文字列のまま辞書順に並べると FRIDAY が先頭に来る。
  • segments.hour はアカウントのタイムゾーン基準。UTCではない。日本の口座なら日本時間の0-23で返るが、レポート基盤を海外のBIと突き合わせる時はここでズレる。時差を足し引きする前に、どの基準の時刻かを必ず確認する。

この3点は公式ドキュメントに散っていて、まとめて書かれていない。返ってきた値をそのまま信じず、既知の1日の総額とAPI合計を突き合わせて検算するのが安全だ。手順の完全版(実際のPythonコードとエラー対処)はnoteの実践ガイドにまとめている。

集計から入札調整へ落とす手順

168コマは細かすぎて判断できない。時間帯を4つに束ねると傾向が出る。深夜0-7時、朝7-12時、日中12-19時、夜19-24時の4区分だ。この区分ごとに曜日を並べ、コマ別のCPAとCV数を出す。

判断はシンプルにする。母数(クリックやCV)が薄いコマは動かさない。十分な母数があってCPAが目標を大きく超えるコマだけ、広告のスケジュールで入札単価調整を下げる。逆にCPAが目標を大きく下回り、表示機会(インプレッションシェア)に余地があるコマは上げる。設定手順はGoogleの公式ヘルプ(support.google.com/google-ads/answer/6372644)にある。調整率は-90%から+900%まで指定できる。

ブックマークして毎月なぞれるよう、判断チェックリストを置く。(1)4区分×曜日でCPAとCV数を出す(2)CVが月5件未満のコマは判断保留(3)CPAが目標比1.5倍超かつ母数十分のコマを抽出(4)そのコマだけ入札調整を段階的に下げる(5)2週間後に再取得して効果を検算する。日予算そのものの再配分を考えるなら広告の日予算を自動計算するPython実装と組み合わせると精度が上がる。

集計した結果を社内やクライアントへ共有する資料に落とすなら、以下のツールが使える。

AIスライド作成ツール「イルシル」を試してみる

まとめ

曜日・時間帯分析は、自動入札の時代でも「予算が漏れているコマ」を見つける有効な手段だ。Google Ads APIなら168コマを一度に取得でき、cost_micros・day_of_week・タイムゾーンの3点さえ押さえれば再現は難しくない。まずは今月の30日分をGAQLで抜き、4区分で眺めるところから始めたい。

実務でそのまま使いたい人へ

本記事の手法の完全版(実際のコード・テンプレート・つまずき対処つき)は、運営者のnote(note.com/ryo_ai_hack)で公開している。実データに基づく実践ガイドをまとめて読める。

DMM 生成AI CAMP

コメント