広告会社で新しい案件の企画を始めるときに、過去のクリエイティブのABテストの記録から似た訴求の勝ち負けを探し、訴求の仮説の根拠として示す
新しい案件のオリエンを受けたプランナーが、商材と狙いを書いたメモを入れると、過去のクリエイティブのABテストから似た訴求を探し、勝った案と負けた案を組で並べます。訴求の仮説を、記憶ではなく記録から立てられるようにします。
- 生成AI
- ChatGPT/Claude/Gemini
- AIサービス
- Azure AI/Google Vertex AI/OpenSearch
- 対象業界
- EC/不動産/小売/広告
- 対象部門
- マーケティング
- 対象業務
- 情報検索
- 主な課題
- 判断に時間がかかる/属人化している/情報が見つからない
- AIで行う処理
- 検索(RAG)
- 主な効果
- 判断支援/属人化解消/検索時間短縮
- 導入難易度
- ★★★☆☆
- 実装レベル
- 本格構成
- 費用感
- RAG・個別開発(大)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- オリエンの資料を読み、商材・ターゲット・広告主の狙いをメモにまとめる
- 同じ業種や似た商材を担当したことのある人を思い出し、チャットで「前にこういう訴求を試したことはあるか」と聞く
- 返ってきた案件名を頼りに共有フォルダを開き、運用チームのレポートからテストの結果を探す
- 見つかったテストについて、比べた案のコピーやバナーを制作管理表から探して見比べる
- 「価格訴求は2勝1敗、不安の解消は1勝」のように手でまとめ、企画メモに書く
- 他の広告主の記録を使うときは、広告主名を伏せるかどうかを自分で判断して書き直す
- 企画会議で仮説を出し、ディレクターと詰める
- 人オリエンの資料を読み、商材・ターゲット・狙い・試したい方向を企画メモの欄に書く
- 自動企画メモの登録をきっかけに、検索の画面が担当チームと広告主の区分を確かめる
- 自動企画メモの文章を埋め込みに変え、商材の語を取り出す
- 自動OpenSearch でキーワードとベクトルのハイブリッド検索を行い、閲覧の区分で絞った候補を返す
- 自動候補の案をテストの組ごとにまとめ、同じテストで比べた相手の案と勝ち負けの帯を添える
- 自動生成AIが、組ごとに「何と何を比べ、どちらが勝ったか」と、企画メモに近いと判断した理由を書く
- 人プランナーが組を見比べ、使う組と使わない組を選ぶ
- 人選んだ組を根拠に、訴求の仮説を企画メモに書く
- 自動選ばれた組と選ばれなかった組を記録し、検索の重み付けの見直しに使う
各工程の詳しい説明を読む
- オリエンの資料を読み、商材・ターゲット・広告主の狙いをメモにまとめる
- 同じ業種や似た商材を担当したことのある人を思い出し、チャットで「前にこういう訴求を試したことはあるか」と聞く
- 返ってきた案件名を頼りに共有フォルダを開き、運用チームのレポートからテストの結果を探す
- 見つかったテストについて、比べた案のコピーやバナーを制作管理表から探して見比べる
- 「価格訴求は2勝1敗、不安の解消は1勝」のように手でまとめ、企画メモに書く
- 他の広告主の記録を使うときは、広告主名を伏せるかどうかを自分で判断して書き直す
- 企画会議で仮説を出し、ディレクターと詰める
(a)聞く相手を知っている人しか、記録にたどり着けない。 2番目は社内の人脈で決まります。若手のプランナーは、同じ訴求を3年前に試して負けていたことを、企画会議で指摘されて初めて知ります。
(b)記録はあるのに、訴求の型で探せない。 運用レポートには「案A:見出し『初回無料でお試し』」と書かれていても、それが「お試しの手軽さ」の訴求だという列はありません。探すたびに、文面を読んで頭の中で分類しています。
(c)勝ち負けを単独の数字で語ってしまう。 レポートからCTRの高い案だけを拾うと、媒体も時期も違う数字を並べて「価格訴求が強い」と結論づけます。 同じテストの中で何と比べて勝ったかが抜け落ちると、仮説の根拠になりません。
(d)他の広告主の記録の扱いが、人によって違う。 6番目は担当者任せで、丁寧な人は使わず、急いでいる人は数字をそのまま貼ります。
- 【人】 オリエンの資料を読み、商材・ターゲット・狙い・試したい方向を企画メモの欄に書く
- 【自動】 企画メモの登録をきっかけに、検索の画面が担当チームと広告主の区分を確かめる
- 【自動】 企画メモの文章を埋め込みに変え、商材の語を取り出す
- 【自動】 OpenSearch でキーワードとベクトルのハイブリッド検索を行い、閲覧の区分で絞った候補を返す
- 【自動】 候補の案をテストの組ごとにまとめ、同じテストで比べた相手の案と勝ち負けの帯を添える
- 【自動】 生成AIが、組ごとに「何と何を比べ、どちらが勝ったか」と、企画メモに近いと判断した理由を書く
- 【人】 プランナーが組を見比べ、使う組と使わない組を選ぶ
- 【人】 選んだ組を根拠に、訴求の仮説を企画メモに書く
- 【自動】 選ばれた組と選ばれなかった組を記録し、検索の重み付けの見直しに使う
7番目が、この設計の分かれ目です。 検索が返すのは候補であって結論ではありません。「この商材にも当てはまるか」の判断は、プランナーに残します。
5番目を機械の処理にしているのも、意図してのことです。 勝ち負けの帯はプログラムが計算した値です。生成AIに数字を読ませると、差が小さすぎて言えないテストまで勝ちにされます。
02今回想定するシステム構成
【取り込み】運用チームの配信レポート(テストの組・案・実績) ▼【トリガー】テストの終了(毎週の締め) AWS Lambda ── 案の文面・構成を制作管理表から取り出し、勝ち負けの帯を計算 ▼ Claude API ── 案ごとに訴求の型と要約を下書き ▼【人】運用担当とプランナーが確定 Amazon Titan Text Embeddings V2(Amazon Bedrock)── 訴求の要約を埋め込み ▼ Amazon OpenSearch Service(テストの索引。閲覧の区分ごとに2つ) ├─ 社内版:同じ広告主のチームだけが見る。実数あり └─ 共有版:広告主名・商品名を伏せ、勝ち負けの帯だけ 【検索】企画メモ(商材・ターゲット・狙い) ▼ AWS Lambda ── 閲覧の区分の判定、埋め込み、商材の語の取り出し Amazon OpenSearch Service ── hybrid クエリ(match + k-NN、filter) │ 検索パイプライン:normalization-processor(min_max、重み付き平均) ▼ AWS Lambda ── テストの組ごとにまとめる Claude API ── 組ごとの比較の説明と、近いと判断した理由 ▼ プランナーが選ぶ → 企画メモへ
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| 検索基盤 | Amazon OpenSearch Service(hybrid クエリと normalization-processor) | Azure AI Search、Vertex AI Search(Agent Search) |
| 埋め込み | Amazon Titan Text Embeddings V2(Amazon Bedrock) | Cohere Embed v4(Amazon Bedrock) |
| 生成AI | Claude API(訴求の型の下書きと、組ごとの比較の説明) | OpenAI API、Gemini API |
| 連携 | AWS Lambda(取り込み、勝ち負けの帯の計算、検索の呼び出し) | AWS Step Functions |
| 保管 | Amazon S3(取り込んだレポートの写しと検索の記録) | 既存の共有フォルダ |
配信レポートと制作管理表は読むだけです。 新しく作るのは、テストの組を1行で表す台帳の形式と、訴求の型の分類表の2つです。取り込みの部分は、レポートの形式に合わせた個別の実装になります。
検索の中心は、OpenSearch のハイブリッド検索です。 公式ドキュメントでは、ハイブリッド検索はキーワード検索とセマンティック検索を組み合わせて関連性を上げるもので、検索時に動く検索パイプラインで文書の点数を正規化して合わせるとされています(2.11で導入)。hybrid クエリの queries には最大5つの句を入れられ、filter ですべての句に同じ絞り込みをかけられます。
点数をそろえる理由も、公式ドキュメントに書かれています。 BM25 と k-NN は関連性の点数を別の尺度で計算するため、合わせる前に同じ尺度へ正規化するのが有益とされています。normalization-processor は2.10で導入され、正規化は min_max(既定)・l2・z_score、合わせ方は arithmetic_mean(既定)・geometric_mean・harmonic_mean から選べます。句ごとの重みは weights で指定し、合計は1.0にします。
日本語のキーワード検索には、形態素解析のプラグインを使います。 Amazon OpenSearch Service の対応プラグインの一覧には、Sudachi Analysis(日本語に推奨) と Kuromoji があります。
埋め込みは、Amazon Titan Text Embeddings V2 を想定します。 入力は最大8,192トークンまたは50,000文字、出力は1,024次元(既定)・512・256から選べます。対応言語の一覧に日本語はありますが、英語以外は「プレビュー」と書かれています。 訴求の要約の検索精度は、第8章の試しで必ず確かめます。キーワード検索を並べて走らせるのは、埋め込みの精度が足りない場面を言葉の一致で補うためでもあります。
03どうやって実装するのか
処理の起点を決める
取り込みと検索で、きっかけが2つあります。
取り込みは、テストの終了です。 運用チームが毎週の締めでテストの勝ち負けを決めた時点で、その組を索引に入れます。終わっていないテストは入れません。 途中の数字で勝ち負けを付けると、最後にひっくり返った組が「勝ち」として残ります。
検索は、企画メモの登録です。 プランナーが企画メモの欄を埋めて登録すると動きます。オリエンの資料を丸ごと入れる形にはしません。 資料には広告主の売上や販売計画が書かれており、それを検索の入力に使うと、検索の記録にまで広告主の秘密が残ります。検索に使うのは、プランナーが書いた商材・ターゲット・狙い・試したい方向の4欄だけです。
同じ企画メモで、方向を変えて何度も探すことを前提にします。1回の検索で答えを出させる設計にはしません。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| テストの組 | テストID、広告主、業種、商材の区分、媒体、配信の期間、比べた案の数 | 配信レポート |
| 案ごとの実績 | 表示回数、クリック数、コンバージョン数、費用 | 配信レポート |
| 案の中身 | コピーの文面、バナーの文字要素、動画の構成(冒頭・展開・締めの文字の書き起こし) | 制作管理表 |
| 訴求の型 | 案ごとの型(分類表から1〜2個)と、訴求の要約(2文) | Claude API の下書きを人が確定 |
| 閲覧の区分 | 広告主ごとの担当チーム、競合関係にある広告主の組 | 営業管理の台帳 |
| 企画メモ | 商材、ターゲット、狙い、試したい方向 | プランナーの入力 |
質を決めるのは、訴求の型と閲覧の区分の2つです。 訴求の型が無ければ、意味で探す対象は文面そのものになり、「初回無料」と「返金保証」が同じ不安の解消の訴求だと分かるかは埋め込み次第になります。 閲覧の区分が無ければ、どの記録を誰に見せてよいかを検索のたびに人が判断することになります。
訴求の型の分類表は、10個前後に絞ります。 価格・お得、機能・性能、不安の解消、権威・実績、限定・期間、共感・物語、手軽さ・すぐ使える、口コミ・利用者の声、比較・乗り換え、その他。細かく分けすぎると、1つの型に入るテストが数件になり、勝ち負けの組として並べる意味が薄れます。
データの取得方法を決める
取り込みは、配信レポートからテストの組を1行、案を1件として取り出します。テストの組と案は親子の関係で、検索で返すのは案、並べるのは組です。
| 取るもの | どこから | 何に使うか |
|---|---|---|
| テストID と比べた案の一覧 | 配信レポートのテストの欄 | 組としてまとめるための鍵 |
| 案ごとの表示・クリック・コンバージョン | 配信レポートの実績の欄 | 勝ち負けの帯の計算 |
| コピー・バナーの文字・動画の構成 | 制作管理表の納品物の欄 | キーワード検索の対象と、訴求の型の下書きの材料 |
| 担当チームと競合の組 | 営業管理の台帳 | 社内版と共有版のどちらで検索するか |
勝ち負けの帯は、取り込みのときに Lambda が計算します。 同じテストの案どうしで、コンバージョン率(コンバージョンが少ない媒体ではクリック率)の差を見て、「勝ち」「負け」「差なし」の3つを付けます。差が小さいもの、表示回数が社内で決めた下限に届かないものは「差なし」です。この判定に統計のどの方法を使うかは、運用チームの社内の基準に合わせます。 ここで大事なのは方法の選び方ではなく、同じ基準を全テストに当てることです。
共有版の索引には、実数を入れません。 入れるのは、勝ち負けの帯と、差の大きさの帯(大・中・小)だけです。広告主名と商品名は伏せ、業種と商材の区分(「月額制の学習サービス」など)だけを残します。 伏せ方は取り込みのときに機械で行い、検索のときに伏せる設計にはしません。検索のときに伏せる設計だと、1か所の伏せ忘れで実数が出ます。
AIへ渡す前に整形する
- テストの完了の確認 … 勝ち負けが決まったテストだけを取り込みます。途中で止めたテストは「中止」として別に残します
- 案の中身の書き起こし … バナーは文字要素を、動画は冒頭・展開・締めの3つに分けた構成を文字にします。画像そのものは索引に入れません
- 訴求の型の下書きと確定 … Claude API に型と要約を下書きさせ、運用担当が確定します。確定していない案は検索の対象に入れません
- 勝ち負けの帯の計算 … 同じテストの案どうしで比べ、「勝ち」「負け」「差なし」を付けます
- 共有版への変換 … 広告主名・商品名・ブランド名の一覧を使って伏せ字にし、実数を帯に置き換えます
- 埋め込み … 訴求の要約と、案の文面を1つの文章にまとめて埋め込みます。文書側の埋め込みと検索側の埋め込みに同じモデルを使います
- 企画メモの整形 … 検索のときは、4欄のうち空欄があっても止めず、書かれた欄だけで探します
3番目を人の確定にしているのは、訴求の型が検索の軸そのものだからです。 型の付け間違いは、そのまま「似た訴求」の取り違えになります。1テストあたりの確定は1〜2分で、運用担当が締めの作業のついでに行える量にします。
5番目で使う伏せ字の一覧は、営業管理の台帳から作り、受注の手続きのたびに商品名を足します。
AIに処理させる
生成AIの仕事は、取り込みと検索で1つずつです。 検索そのもの(どの案が近いか)は OpenSearch が点数で決め、生成AIは点数を付けません。
| 段階 | させること | させないこと |
|---|---|---|
| 取り込み | 案の文面・構成から訴求の型(分類表から1〜2個)と要約を下書きする | 勝ち負けの判定、成果の評価 |
| 検索 | 組ごとに「何と何を比べ、どちらが勝ったか」を文面から説明し、企画メモに近いと判断した理由を書く | 組の並べ替え、勝ち負けの付け直し、どの訴求で行くべきかの結論 |
検索の側で生成AIが読むのは、OpenSearch が返した上位の組だけです。 上位20件の案を組ごとにまとめると、多くの場合8〜12組になります。それぞれの組について、比べた案の文面、訴求の型、勝ち負けの帯を渡します。
| させないこと | 理由 |
|---|---|
| 「この訴求で行くべき」という結論 | 商材・時期・予算が違う。結論はプランナーが出す |
| 勝ち負けの付け直し | 帯はプログラムが同じ基準で計算した値。文面の印象で変えさせない |
| 実数の推測 | 共有版には実数が無い。「CTRは1%前後か」のように補わせない |
| 伏せた広告主の推測 | 業種と文面から広告主名を当てさせない |
| 型ごとの勝ち数の集計 | 件数はプログラムが数える。文章の中で数えさせない |
4行目がいちばん起きやすい失敗です。 共有版の文面に特徴的な言い回しが残っていると、生成AIは「おそらく大手の〇〇社の案件」と書きます。伏せ字にした意味が、説明文の1行で消えます。 指示で禁じたうえで、出力に広告主名の一覧の語が含まれていないかを Lambda で確かめます。
指示内容を固定する
検索の側の指示です。 取り込みの側(訴求の型の下書き)は、分類表を渡して型と要約を返させるだけの短いものです。
あなたは広告会社のストラテジックプランナーの調べものを手伝う立場です。
新しい企画のメモと、検索で見つかった過去のABテストの組を渡します。
組ごとに、何と何を比べてどちらが勝ったかを説明してください。
【企画メモ】
商材:{product}
ターゲット:{target}
狙い:{goal}
試したい方向:{direction}
【検索で見つかったテストの組】{test_groups}
(組ごとに test_id、媒体、業種、商材の区分、案の一覧が入っています。
案ごとに variant_id、訴求の型、文面または構成、結果の帯があります)
【書くこと】
1. 組ごとに、比べた案の訴求の違いを1〜2文で書く
2. 結果の帯をそのまま写す(win / lose / no_diff)
3. 企画メモのどの欄と、どこが近いと判断したかを書く
4. 企画メモと条件が違う点(媒体、ターゲット、商材の価格帯など)を書く
【厳守事項】
- 結果の帯を書き換えないでください。文面の印象で勝ち負けを判断しないでください。
- no_diff の組を「やや勝ち」「傾向がある」と書かないでください。
- 表示回数・クリック率・コンバージョン率などの数値を書かないでください。
渡していない数値を推測で補わないでください。
- 広告主名・商品名・ブランド名を推測しないでください。
伏せ字の部分は伏せ字のまま扱ってください。
- どの訴求で行くべきか、どの案が良いかの結論を書かないでください。
- 訴求の型ごとの勝ち数を数えないでください。
- 渡した組の順番を変えないでください。
- 企画メモと近いと言えない組は、near を false にし、理由を書いてください。
無理に近い点を探さないでください。
- 文面に書かれていないことは「不明」としてください。
「no_diff を傾向と書かない」を独立させているのには理由があります。 差なしの組を渡すと、生成AIは文面を読んで「わずかに価格訴求が上回った」と書きがちです。差が無いという結果は、それ自体が企画の材料です。 「価格を前に出しても変わらなかった」は、価格以外の訴求を試す理由になります。
「近いと言えない組は near を false に」も明記します。 何も言わないと、検索が返した組のすべてに近い理由をこじつけます。プランナーが捨てる組を素早く見分けられることも、調べものの時間を減らす要素です。
出力形式を固定する
次の形のJSONで受け取ります。 Claude API の構造化出力(output_config.format に JSON スキーマを渡す方式)を使います。
{
"memo_id": "",
"index_scope": "internal | shared",
"groups": [
{
"test_id": "",
"media": "",
"category": "",
"variants": [
{ "variant_id": "", "appeal_type": "", "result_band": "win | lose | no_diff" }
],
"contrast": "",
"near": true,
"near_reason": "",
"differences": ""
}
]
}
1つ目の理由は、組を壊さずに返せることです。 自由文で受けると「価格訴求の案が勝った」という1文になり、何と比べて勝ったかが抜け落ちます。 variants に比べた案をすべて並べることで、負けた案の文面も一緒に画面に出せます。
2つ目は、result_band を検算できることです。 生成AIが写した帯を、Lambda が索引の値と突き合わせます。1つでも違えば、その組の説明を捨てて帯だけを表示します。 指示で禁じるだけでなく、後段で必ず確かめます。
3つ目は、near で絞り込めることです。 画面では near が true の組を上に、false の組を折りたたんで下に出します。
型ごとの勝ち数は、JSONではなく Lambda が数えます。 画面の上部に次の表を出します。
| 訴求の型 | 勝ち | 負け | 差なし |
|---|---|---|---|
| 不安の解消 | 4 | 1 | 2 |
| 価格・お得 | 2 | 3 | 3 |
| 手軽さ・すぐ使える | 1 | 0 | 1 |
この表は、検索で返った組の中だけの数です。 全テストの集計ではありません。画面にもそう書きます。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 配信レポート | 毎週の締めの後に Lambda が読む | テストの組と案ごとの実績 |
| 制作管理表 | Lambda が読む | 案の文面・構成 |
| Amazon Bedrock | API呼び出し | 訴求の要約と企画メモの埋め込み |
| Amazon OpenSearch Service | 索引への登録と hybrid クエリ | 社内版・共有版の2つの索引 |
| Claude API | API呼び出し | 訴求の型の下書き、組ごとの説明 |
| 企画メモ | 画面から書き戻し | プランナーが選んだ組のIDと説明 |
検索のリクエストは次の形です。 match の句と knn の句を hybrid に並べ、filter で業種と閲覧の区分を絞ります。
GET /creative-tests-shared/_search?search_pipeline=appeal-hybrid
{
"size": 20,
"query": {
"hybrid": {
"queries": [
{ "match": { "copy_text": { "query": "{product_terms}" } } },
{ "knn": { "appeal_vector": { "vector": [0.01, 0.02], "k": 50 } } }
],
"filter": {
"bool": { "must": [
{ "terms": { "category_group": ["{category}"] } },
{ "term": { "status": "confirmed" } }
] }
}
}
}
}
検索パイプラインは、キーワードの句に0.3、ベクトルの句に0.7の重みを付けて始めます。 公式ドキュメントの例と同じ配分で、min_max で正規化して arithmetic_mean で合わせます。この重みは出発点で、第8章の試しと運用の記録を見て動かします。
社内版の索引を使うのは、企画メモの広告主と、検索した人の担当チームが一致したときだけです。 判定は Lambda が営業管理の台帳を引いて行い、画面からはどちらの索引を使うかを選べないようにします。
人が確認する
人が確認するのは、取り込みの段階と検索の段階の2か所です。
- 訴求の型の確定(取り込み) … 運用担当が、生成AIの下書きした型と要約を確かめます。型を直したら、直した理由を1行残します
- 組の取捨(検索) … プランナーが、返ってきた組から使うものを選びます。負けた案の文面も必ず読みます
- 条件の違いの確認 …
differencesに書かれた媒体・ターゲット・価格帯の違いを見て、その組を根拠にしてよいかを判断します - 共有版の記録を広告主に見せる前の確認 … 企画書に過去の組を載せるときは、伏せ字のまま載せ、ディレクターが確かめます
2番目で「負けた案も読む」を求めるのは、勝った案だけを見ると訴求の差が分からないからです。 「初回無料」が勝ったとき、負けた案が「月額980円」なのか「30日返金保証」なのかで、学べることがまったく違います。
目標は、1件20分です。 内訳は、組を見比べて取捨するのに15分、企画メモに書き込むのに5分です。それより長くかかる月は、検索が近くない組を多く返しているか、訴求の型の付け方がばらついています。
例外に対処する
| 起きること | 対応 |
|---|---|
| 検索で組が1つも返らない | 業種の絞り込みを外して再検索する。それでも無ければ「前例なし」と表示する |
返った組がすべて near: false | 企画メモの書き方を変えて再検索するよう促す。無理に近い組を出さない |
| 生成AIが写した帯が索引と違う | その組の説明を捨て、帯と文面だけを出す |
| 説明文に広告主名の一覧の語が含まれる | その説明を捨てて記録に残し、伏せ字の一覧を見直す |
| 訴求の型が確定していない案が多い | 検索の対象外のまま。運用担当への確定の依頼を毎週まとめて出す |
| テストが途中で中止された | 「中止」として別に残し、勝ち負けの集計に入れない |
| 1つのテストで比べた案が5案以上 | 勝ち負けの帯は最良の案との比較で付ける。組の表示は上位3案までにする |
| 埋め込みの呼び出しが失敗する | キーワードの句だけで検索し、画面に「意味での検索が使えない状態」と出す |
| 競合関係の台帳に無い広告主 | 共有版だけで検索する。 社内版は使わない |
上から2行目までを「正常な結果」として扱うのが大事です。 前例が無いことは、企画にとっては新しい訴求を試す理由になります。検索が何かを返さなければならない設計にすると、遠い組を近いと言い張る説明が生まれます。
最後の行は、判定に迷ったら狭いほうに倒すという原則です。 台帳の整備漏れで、競合の担当チームに実数が出る経路を作らないためです。
記録を残す
- 企画メモの4欄と、検索した人・日時・使った索引(社内版/共有版)
- OpenSearch が返した案と点数、使った検索パイプラインの重み
- 生成AIに渡した組と、返ってきたJSON
- プランナーが選んだ組と、選ばなかった組
- 訴求の型を人が直した記録と、その理由
- 説明を捨てた記録(帯の不一致、広告主名の検出)
4つ目が、検索を良くする材料になります。 選ばれた組と選ばれなかった組の対は、そのまま重みの見直しに使う評価用のデータになります。
最後の行は、伏せ字の一覧の穴を見つけるために残します。 同じ広告主の語で説明が捨てられ続けているなら、取り込みの段階の伏せ字が足りていません。
04実装レベルの3段階
最小構成は、分類表が使えるかを確かめるための段階です。 30組では多くの企画で近い組が見つかりません。 半自動化で、1件60分が35分程度になります。 人に聞いて回る時間は消えますが、キーワード検索だけでは「お金の心配」と「返金保証」がつながらず、言葉を変えて探し直す時間が残ります。 本格構成で20分になり、この段階が本記事の想定です。 段階を飛ばさないでください。 半自動化の過程で、勝ち負けの帯の基準と伏せ字の一覧が固まります。これが固まる前にベクトル検索を足しても、組の質は上がりません。
05工数削減シミュレーション
導入後 120件 × 20分 ÷ 60 = 40 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 運用型広告のクリエイティブを多数の広告主のために作り、案ごとのABテストを日常的に回している広告会社。テストの結果が運用担当のレポートに散らばり、企画の段階で「前に同じ訴求を試したか」を人に聞いて回っている場合。コピー・バナーの文字要素・動画の構成を文字で記録でき、テストの組(どの案とどの案を比べたか)が分かる場合。
- ABテストをほとんど行っておらず、案ごとの成果しか残っていない場合(比べる相手が無いので勝ち負けが言えません)。広告主が数社で、担当者が全テストを覚えていられる場合。他の広告主の記録を社内で参照してよいかの取り決めが無い場合(先に決めます)。新しいコピーをAIに作らせたい場合(本記事は過去の記録を探して並べるところまでです)。
07最小構成で試す方法
- 過去のABテストから30組を選ぶ(同じ業種で勝ち負けが分かれた組と、差なしの組を両方入れる)
- 30組の案の文面と勝ち負けを1つのスプレッドシートにまとめ、訴求の型の列を手で埋める
- 最近の企画のうち3件について、当時プランナーが根拠にした過去のテストを聞き取る
- 手元のAIサービスにスプレッドシートを渡し、「この企画メモに近い訴求のテストを選び、何と何を比べてどちらが勝ったかを組ごとに説明してください。勝ち負けは表の値をそのまま使い、数値と広告主名は書かないでください」と指示する
- 出てきた組を、当時の根拠と突き合わせる
30組は必ずやってください。 OpenSearch を組む前に、訴求の型の分類表が使えるかを確かめます。
| 出てきた内容 | 判断 |
|---|---|
| 当時の根拠と同じ組が出た | 索引と検索パイプラインの構築に進む |
| 差なしの組を「やや勝ち」と書いた | 指示の書き方で直る。構成は有効 |
| 訴求の型が人によって違い、組が並ばない | 分類表の見直しが先。 AIの問題ではない |
3行目が出ることは珍しくありません。 「不安の解消」と「手軽さ」の境目は人によって違います。そろえないまま索引を作ると、意味で探す軸がぶれます。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 案1本の数字で勝ち負けを語る | 組を単位にする。 索引も画面も、テストの組でまとめる |
| 差なしの組が「やや勝ち」と書かれる | 帯は Lambda が計算し、生成AIの写しを検算する |
| 訴求の型の境目が人によって違う | 分類表に定義と例を書き、30組を2人で分類して一致を見る |
| 日本語のキーワード検索が効かない | Sudachi Analysis などの形態素解析を索引に設定する |
| 埋め込みの日本語の精度が足りない | キーワードの句と並べて走らせる。 重みは記録を見て動かす |
| 検索のときに伏せ字にして、1か所漏れる | 取り込みのときに伏せる。 共有版には実数も名前も入れない |
| 説明文が伏せた広告主を推測する | 指示で禁じ、広告主名の一覧の語を Lambda で検出する |
| 途中のテストを取り込んでしまう | 勝ち負けが決まったテストだけを入れる |
| オリエンの資料を丸ごと検索に入れる | 企画メモの4欄だけにする。 記録に広告主の秘密を残さない |
| 生成AIに「どの訴求で行くべきか」を書かせる | 結論は書かせない。組を並べるところまでにする |
上の2行が、この構成の失敗のほとんどです。 どちらも「勝った」という1語が、何と比べた結果なのかを失うところから始まります。
下から2行目も早く効いてきます。 オリエンの資料には発売前の商品の情報が多く、検索の記録に残った時点で見られる範囲が広がります。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 広告主ごとのクリエイティブの文面と構成、配信の実績(表示・クリック・コンバージョン・費用)、そして企画メモに書かれる発売前の商品やキャンペーンの方向性です。
- 他の広告主の実数を、競合の担当チームに出さない … 共有版の索引には勝ち負けと差の帯だけを入れ、広告主名・商品名・ブランド名を取り込みのときに伏せます。 広告主との契約で、成果のデータを社内でどこまで使えるかが決まっている場合は、その範囲を先に確かめてください
- どちらの索引で検索するかを、人に選ばせない … 社内版を使うかは、営業管理の台帳から Lambda が判定します。判定できない場合は共有版に倒します
- 企画メモに秘密を書かない運用にする … 発売前の商品名は伏せた呼び名で書くよう、企画メモの欄に注記します。検索の記録は、索引よりも広い範囲の人が見る可能性があります
- 生成AIに渡す範囲を、上位の組だけに限る … 索引全体や台帳そのものは渡しません
- 結論をAIに出させない … 広告主に示す企画書に、AIが書いた説明をそのまま載せません
誤りが起きた場合のリスクは、他の広告主の実数が競合の担当に見えることと、差の無い結果を根拠に企画が立つことの2つです。 前者は伏せる場所を検索のときに置くと起き、後者は帯を生成AIに読ませると起きます。
10まず何から始めるか
1週目:訴求の型の分類表を作る
10個前後の訴求の型と、それぞれの定義と例を書きます。過去の30組を2人で別々に分類し、一致しなかった案から定義を直します。
2週目:勝ち負けの帯の基準を決める
「差なし」とする条件(表示回数の下限、差の大きさ)を運用チームと決めます。あわせて、営業管理の台帳に競合関係にある広告主の組の列を足します。
3週目:30組で試す
スプレッドシートの30組を手元のAIサービスに渡し、最近の企画3件について近い組を選ばせます。当時プランナーが根拠にした組と突き合わせ、差なしの組を勝ちと書いていないかを最優先で見ます。
4週目:台帳と伏せ字の一覧を作る
過去1年分のテストを台帳の形式にそろえ、訴求の型を確定します。広告主名・商品名・ブランド名の伏せ字の一覧を作り、共有版の形に変換できるかを確かめます。
2か月目: OpenSearch に社内版と共有版の索引を作り、キーワード検索で探せるようにします(半自動化)。3か月目以降: 埋め込みを加えてハイブリッド検索にし、組ごとの説明を足します。選ばれた組と選ばれなかった組の記録で検索の重みを一度見直した時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
| ハイブリッド検索がキーワード検索とセマンティック検索を組み合わせ、検索パイプラインで点数を正規化して合わせること。2.11で導入されたこと。正規化の normalization processor(点数に基づく)と、順位に基づく score ranker processor(RRF)があること | OpenSearch Documentation: Hybrid search | 2026-10-13 |
normalization-processor が2.10で導入されたこと。BM25 と k-NN が別の尺度で点数を計算するため正規化が有益とされること。正規化が min_max(既定)・l2・z_score、合わせ方が arithmetic_mean(既定)・geometric_mean・harmonic_mean であること。weights の値が0.0〜1.0で合計1.0であること。重み0.3と0.7の検索パイプラインの例 | OpenSearch Documentation: Normalization processor | 2026-10-13 |
hybrid クエリの queries が最大5句であること。filter がすべての句に適用されること | OpenSearch Documentation: Hybrid query | 2026-10-13 |
| Amazon OpenSearch Service の対応プラグインに Sudachi Analysis(日本語に推奨)、Kuromoji、Neural Search があること | Amazon OpenSearch Service: Plugins by engine version | 2026-10-13 |
| Amazon Titan Text Embeddings V2 の入力が最大8,192トークンまたは50,000文字、出力が1,024(既定)・512・256次元であること。言語が英語(100以上の言語はプレビュー)とされ、対応言語の一覧に日本語があること | Amazon Bedrock: Amazon Titan Text Embeddings | 2026-10-13 |
Claude API の構造化出力が output_config.format に JSON スキーマを渡す方式であること | Claude API Docs: Structured outputs | 2026-10-13 |
他の広告主の記録を社内でどこまで使えるかは、広告主との契約と自社の取り決めで決めてください。 本記事は公開されている製品の仕様で確認できた範囲だけを扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-1336)についてのご相談はこちらから。
