Codexで広告パフォーマンスを多角的に分析する方法|プロンプト設計とコード記述例
結論:Codexを使えば、広告パフォーマンス分析の“めんどう”をかなり自動化できる
本記事の結論はシンプルです。OpenAI Codex(コード生成に特化したAI)をうまく活用すれば、広告パフォーマンスのレポート作成・多角的分析・改善示唆の抽出を、コードを書けない人でも大きく効率化できるということです。
そのために重要なのは、次の3つです。
- どんな切り口で広告データを分析したいかを、自然言語で具体的に指示するプロンプト設計
- Codexに書かせるコードの型(テンプレート)を決めておくこと
- PythonやSQLなど、自社で扱う分析環境に合わせて出力形式を揃えること
この記事では、広告運用者やマーケターの方向けに、Codexで広告パフォーマンスを多角的に分析するための考え方・プロンプト例・コード記述例をまとめて解説します。
Codexとは何か?広告分析に使えるポイント
Codexとは
Codexとは、自然言語からプログラムコードを生成できるAIモデルです。OpenAIのGPT系モデルをベースに、GitHub上の大量のソースコードで学習されており、次のようなことができます。
- 日本語や英語で指示すると、Python / JavaScript / SQLなどのコードを書いてくれる
- 既存のコードを渡して、リファクタリング(改善)やバグ修正を提案してくれる
- APIやライブラリの使い方サンプルコードを自動生成してくれる
広告分析の文脈では、主に次の用途で活用できます。
- 広告プラットフォーム(Google広告・Facebook広告など)からエクスポートしたCSVデータを処理するコードを自動生成
- CVR、CPA、ROASなどの指標計算や集計ロジックを自動化
- キャンペーン別・デバイス別・クリエイティブ別など、多次元での分析コードを簡単に作成
広告パフォーマンス分析におけるCodex活用のメリット
- スピード:思いついた分析切り口を、すぐにコード化して試せる
- 属人性の削減:特定のアナリストだけが書けるスクリプトから、誰でも再利用できるテンプレートへ
- 探索的分析:通常やらない組み合わせ(例:
曜日×デバイス×クリエイティブ)でも、プロンプトを足すだけで試せる
前提整理:広告パフォーマンスを「多角的に」見るとは
広告パフォーマンスを多角的に分析するとは、単一指標・単一軸だけでなく、複数の指標と複数の条件を掛け合わせて評価することです。
よく使う指標の定義
| 指標 | 定義 |
|---|---|
| 表示回数(Impression) | 広告が表示された回数 |
| クリック数(Click) | 広告がクリックされた回数 |
| CTR | クリック率 = クリック数 ÷ 表示回数 |
| CPC | クリック単価 = コスト ÷ クリック数 |
| CV | コンバージョン数(成果数) |
| CVR | コンバージョン率 = CV ÷ クリック数 |
| CPA | 獲得単価 = コスト ÷ CV |
| ROAS | 広告費用対効果 = 売上 ÷ コスト |
多角的に見るための代表的な“切り口”
Codexで自動化しやすい代表的な分析軸は次の通りです。
- キャンペーン / 広告セット / 広告グループ別
- キーワード / 検索クエリ別
- デバイス(PC / SP / タブレット)別
- 曜日・時間帯別
- 地域・エリア別
- クリエイティブ(バナー / テキスト / 動画)別
このような複数軸を組み合わせると、分析コードは一気に複雑になりますが、Codexなら自然言語で「〇〇別に集計して」と指示するだけで、それらのロジックを自動で書いてくれます。
Codexに渡すデータの前提とフォーマット設計
最低限そろえておきたい広告データのカラム
CSVなどでエクスポートする際、少なくとも以下のカラムは含めておくと、Codexによる分析コードの生成がスムーズです。
date(日付)campaign(キャンペーン名)ad_group(広告グループ)ad_name(広告名 / クリエイティブ名)device(PC / mobile など)impressionsclickscostconversionsrevenue(売上、わかる場合)
Codexに“前提”をきちんと伝えるポイント
Codexにプロンプトを書くときは、次のような情報をできるだけ明示します。
- ファイル形式:例)「
ads.csvというCSVファイル」 - 文字コードや区切り文字:例)「UTF-8、カンマ区切り」
- カラム名一覧:例)「columns: date, campaign, ad_group, …」
- 分析環境:例)「Python と pandas を使う」 / 「BigQueryのSQLで書く」
- 出力形式:例)「集計結果をCSVに書き出す」 / 「標準出力にprintする」
これらを最初にセットで伝えることで、一発で動くコードを生成してもらいやすくなります。
Codex用プロンプトの基本構造
広告パフォーマンス分析向けのCodexプロンプトは、次のような構造にすると安定します。
プロンプトのテンプレート
あなたは広告データ分析に詳しいPythonエンジニアです。
以下の条件を満たすPythonコードを書いてください。
【前提】
- UTF-8 の CSV ファイル `ads.csv` を読み込む
- 区切り文字はカンマ
- カラムは date, campaign, ad_group, ad_name, device,
impressions, clicks, cost, conversions, revenue
【やりたいこと】
- キャンペーン別・デバイス別に、
表示回数・クリック数・コスト・CV・売上を集計する
- CTR, CVR, CPC, CPA, ROAS を計算する
- 集計結果を `summary_by_campaign_device.csv` に出力する
【出力条件】
- コメントも日本語で記載する
- 例外処理は最低限で良い
ポイントは、やりたいことを箇条書きで、具体的かつ完結に書くことです。「いい感じに分析して」ではなく、「キャンペーン別・デバイス別に〇〇を集計し、△△も計算する」と明示します。
Pythonで広告データを多角的に分析するコード例(Codex想定)
ここでは、上記のようなプロンプトを与えたときにCodexが生成することを想定した、Pythonコードの一例を示します。
キャンペーン×デバイス別の指標集計コード例
import pandas as pd
# データの読み込み
file_path = 'ads.csv'
df = pd.read_csv(file_path, encoding='utf-8')
# 必要なカラムが存在するか簡易チェック
required_cols = [
'date', 'campaign', 'ad_group', 'ad_name', 'device',
'impressions', 'clicks', 'cost', 'conversions', 'revenue'
]
missing = [c for c in required_cols if c not in df.columns]
if missing:
raise ValueError(f"必要なカラムがありません: {missing}")
# キャンペーン別・デバイス別に集計
group_cols = ['campaign', 'device']
agg_df = df.groupby(group_cols).agg({
'impressions': 'sum',
'clicks': 'sum',
'cost': 'sum',
'conversions': 'sum',
'revenue': 'sum'
}).reset_index()
# 指標の計算
agg_df['ctr'] = agg_df['clicks'] / agg_df['impressions']
agg_df['cvr'] = agg_df['conversions'] / agg_df['clicks']
agg_df['cpc'] = agg_df['cost'] / agg_df['clicks']
agg_df['cpa'] = agg_df['cost'] / agg_df['conversions']
agg_df['roas'] = agg_df['revenue'] / agg_df['cost']
# ゼロ除算の無限大やNaNを扱いやすい値に置き換え
agg_df = agg_df.replace([float('inf'), -float('inf')], pd.NA)
# 結果をCSVに出力
output_path = 'summary_by_campaign_device.csv'
agg_df.to_csv(output_path, index=False, encoding='utf-8')
print(f"集計結果を {output_path} に出力しました")
曜日×時間帯×デバイス別で深掘りするコード例
より多角的な分析として、「曜日×時間帯×デバイス」のような粒度でも集計できます。
import pandas as pd
# データ読み込み
df = pd.read_csv('ads.csv', encoding='utf-8', parse_dates=['date'])
# 曜日と時間帯のカラムを追加
df['weekday'] = df['date'].dt.day_name() # 英語表記(月曜: Monday など)
df['hour'] = df['date'].dt.hour
# 集計軸の指定
group_cols = ['weekday', 'hour', 'device']
agg_df = df.groupby(group_cols).agg({
'impressions': 'sum',
'clicks': 'sum',
'cost': 'sum',
'conversions': 'sum',
}).reset_index()
# 指標計算
agg_df['ctr'] = agg_df['clicks'] / agg_df['impressions']
agg_df['cvr'] = agg_df['conversions'] / agg_df['clicks']
agg_df['cpc'] = agg_df['cost'] / agg_df['clicks']
agg_df['cpa'] = agg_df['cost'] / agg_df['conversions']
# 並び替え(例:曜日→時間帯→デバイスの順)
weekday_order = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
agg_df['weekday'] = pd.Categorical(agg_df['weekday'], categories=weekday_order, ordered=True)
agg_df = agg_df.sort_values(['weekday', 'hour', 'device'])
agg_df.to_csv('summary_by_time_device.csv', index=False, encoding='utf-8')
SQLで広告パフォーマンスを分析するコード例(BigQuery想定)
分析環境がBigQueryなどのDWHの場合も、Codexに「BigQueryのSQLで」と書くだけでSQLを生成させることができます。
キャンペーン×デバイス別の集計SQL例
-- テーブル構造の前提
-- project.dataset.ad_performance
-- カラム: date, campaign, ad_group, ad_name, device,
-- impressions, clicks, cost, conversions, revenue
SELECT
campaign,
device,
SUM(impressions) AS impressions,
SUM(clicks) AS clicks,
SUM(cost) AS cost,
SUM(conversions) AS conversions,
SUM(revenue) AS revenue,
SAFE_DIVIDE(SUM(clicks), SUM(impressions)) AS ctr,
SAFE_DIVIDE(SUM(conversions), SUM(clicks)) AS cvr,
SAFE_DIVIDE(SUM(cost), SUM(clicks)) AS cpc,
SAFE_DIVIDE(SUM(cost), SUM(conversions)) AS cpa,
SAFE_DIVIDE(SUM(revenue), SUM(cost)) AS roas
FROM `project.dataset.ad_performance`
WHERE date BETWEEN '2024-01-01' AND '2024-01-31'
GROUP BY campaign, device
ORDER BY roas DESC;
キーワード×検索クエリ別の深掘りSQL例
SELECT
keyword,
search_query,
SUM(impressions) AS impressions,
SUM(clicks) AS clicks,
SUM(cost) AS cost,
SUM(conversions) AS conversions,
SAFE_DIVIDE(SUM(clicks), SUM(impressions)) AS ctr,
SAFE_DIVIDE(SUM(conversions), SUM(clicks)) AS cvr,
SAFE_DIVIDE(SUM(cost), SUM(conversions)) AS cpa
FROM `project.dataset.search_performance`
WHERE date >= '2024-01-01'
GROUP BY keyword, search_query
HAVING impressions >= 100
ORDER BY cpa ASC;
より“多角的”にするためのプロンプト工夫例
ここからは、単純な集計を超えて、Codexに分析の切り口や示唆出しまでさせるためのプロンプト工夫を紹介します。
例1:パフォーマンスが良い/悪いセグメントを自動抽出させる
あなたは広告アナリストです。以下の条件を満たすPythonコードを書いてください。
【前提】
- `ads.csv` を読み込む(UTF-8, カンマ区切り)
- カラム: date, campaign, ad_group, ad_name, device,
impressions, clicks, cost, conversions, revenue
【やりたいこと】
1. キャンペーン×デバイス別に集計し、CTR, CVR, CPC, CPA, ROAS を計算する
2. 全体平均の CPA, ROAS を算出する
3. 各セグメントの CPA, ROAS を全体平均と比較し、
- CPA が平均より 20% 以上低い(良い)セグメント
- CPA が平均より 20% 以上高い(悪い)セグメント
- ROAS が平均より 20% 以上高い(良い)セグメント
- ROAS が平均より 20% 以上低い(悪い)セグメント
を抽出する
4. 抽出した結果をそれぞれ別の CSV ファイルに出力する
【出力条件】
- コード中に日本語コメントで処理内容を説明する
- pandas を利用する
例2:可視化コードまで一気に書かせる
あなたは広告データの可視化に詳しいPythonエンジニアです。
以下を満たすコードを書いてください。
【前提】
- `ads.csv` を pandas で読み込む
- カラム: date, campaign, device, impressions, clicks, cost, conversions
【やりたいこと】
- 日別×デバイス別にクリック数とCV数を集計する
- 折れ線グラフで、デバイスごとの推移を可視化する
- matplotlib か seaborn を使う
- グラフは `daily_clicks_conversions_by_device.png` というファイル名で保存する
【出力条件】
- 日本語のコメントを入れる
Codexを使うときの注意点と運用のコツ
注意点1:データの前処理ロジックは必ず目視確認する
Codexが書いたコードは便利ですが、常に100%正しいとは限りません。特に、次のような部分は人間が必ずチェックしましょう。
- ゼロ除算(クリック数・CV数が0のときの扱い)
- データ型(日時型、数値型、文字列型)の変換
- フィルタ条件(キャンペーン名の指定、日付範囲など)
注意点2:プロンプトとコード例を“テンプレ化”しておく
毎回ゼロからプロンプトを書くとブレが出るため、自社用のテンプレートを作っておくのがおすすめです。
- 共通の前提部分(カラム名・環境・出力形式)
- よく使う集計パターン(キャンペーン別、デバイス別、時間帯別、キーワード別など)
- よく見る指標(CTR, CVR, CPC, CPA, ROASなど)の一覧
これらをプロンプトにコピペし、欲しい分析だけを追記していく運用だと、再現性のある分析がしやすくなります。
注意点3:一次情報としての“自社データ”を生かす
Codexはあくまでコード生成ツールであり、分析の価値を決めるのはあなたの広告データです。例えば、
- 自社特有のコンバージョン定義(例:資料請求、無料登録、来店予約など)
- 広告アカウントの構造(キャンペーン命名ルールなど)
- LTVやリピート率など、社内でしか持っていない指標
といった一次情報を前提にプロンプトを書き込むほど、自社ビジネスにフィットした分析コードを生成しやすくなります。
よくある質問(FAQ)
Codexを使うのに、プログラミング経験は必須ですか?
最低限の基礎知識はあった方が良いですが、“がっつりエンジニアレベル”である必要はありません。 生成されたコードが何をしているか、大まかに読めるレベルを目指すと安全です。
広告プラットフォームのAPI連携もCodexで書かせられますか?
可能です。 「Google Ads APIをPythonで呼び出して、指定キャンペーンの実績を取得し、CSVに保存するコードを書いて」といった形で具体的に依頼すると、サンプルコードを出してくれます。ただし、APIキーや認証まわりは公式ドキュメントも必ず参照してください。
機密性の高い広告データをそのままCodexに渡しても大丈夫ですか?
運用ポリシーや契約によります。原則として、顧客名やメールアドレス、完全なURLなどの個人情報・機密情報はマスクした形(例:client_a、example.com/landing)で渡すのが安全です。
CodexとChatGPTはどう使い分ければ良いですか?
コード生成・補完に特化するのがCodex、分析レポートの文章化や示唆出しにはChatGPTという使い分けがしやすいです。たとえば、Codexで分析コードを作り、結果をChatGPTに渡して「この結果を、クライアント向けレポートの文章にして」と依頼する運用も有効です。
SQLとPython、どちらで広告分析コードを書かせるのがおすすめですか?
データがDWHにすでに集約されているならSQL、ローカルのCSVやExcelを中心に扱うならPythonが扱いやすい傾向にあります。Codex自体はどちらも書けるので、自社で運用しやすい方を選びましょう。
まとめ:Codexで“分析したいこと”を自然言語で記述する習慣をつけよう
本記事では、Codexで広告パフォーマンスを多角的に分析するためのプロンプトとコード記述例を紹介しました。ポイントをあらためて整理すると、次の通りです。
- Codexは自然言語からPythonやSQLのコードを生成できる、広告分析とも相性の良いAI
- 「どの軸で」「どの指標を」「どう比較するか」をプロンプトで明示することが重要
- キャンペーン別・デバイス別・曜日別・時間帯別・キーワード別など、多角的な切り口を簡単にコード化できる
- 結果の解釈や意思決定は人間の役割だが、集計や可視化の“作業”はCodexに任せられる
- 自社の一次データやルールをプロンプトに組み込むほど、価値の高い分析が可能になる
「どんな分析をしたいのか」を自然言語で正確に書き出す習慣をつけることが、Codex時代の広告アナリストにとっての大きな武器になります。この記事のプロンプト例・コード例をベースに、自社アカウントに合わせてカスタマイズしながら、Codex活用を進めてみてください。
動画で詳しく学びたい方は、こちらのYouTubeも参考にしてください:
https://youtu.be/MDKJA5lqELo?si=bX5t8NNeb_ErYWPN