リスティング広告運用についての雑感

チョット前に、ちょっとだけ、リスティング管理を経験しました。それで、知識の棚卸しをする意味で、私が思っていることを書きます。 google analyticsのデータの利用についても、織りまぜて書きます。記憶の掃き出しをしておきます。あいまいな部分や誤認識もあると思いますので、そういう前提で読んでください。(GAも、ここ数ヶ月は触ってないので、知識が古ぼけてきてます。サイトも更新してないですね。。。)

リスティング広告(サーチ)の流れ

出稿する側は、キーワードとそれにヒモ付た広告を出す。(管理上、いろんなグルーピング機能があって、それらの上位グループ(広告グループ、キャンペーン)で制御が色々入れられる)。

ユーザーが検索する。 と、検索語にマッチしたキーワードに紐づいた広告が表示される。 ユーザーから見ると、検索語を打ち込む => 広告文を見る => ランディングページ訪問という流れ。

ここで大事だと思った点の一つは、ユーザーは出稿側がシステムに出す出稿キーワードは見ないし知らないという点。(完全一致はそのままなので、広告を出す側のキーワード設定とユーザーの検索語が一致するが、) 。

というのは、リスティング広告の管理をしてると、キーワード単位(マッチタイプ、テスト機能で分化管理、グループ、キャンペーンで統合管理されるが)で考えがちだと思われるのだけど、ユーザーサイドの行動である実際のクエリーを出発点に組み立てる事は大事だと。ユーザーは自分のクエリーをだして、広告文をクリックして、サイトに行く。ユーザーの頭に出稿する側のキーワードは入ってない。部分一致の場合。

ユーザーの行動プロセスを起点に考えると、上記のような流れ。で、その前提でデータを見えるようにしないとイカン。

もちろん、google, yahooの入札システムサイドでも上手く立ちまわる事は大切(CPC, 順位などの管理)だ。 そして、こちらも巨大なブラックボックスで、仮説、検証サイクルが廻る事にはなる。

で、

クエリーデータを得る、マッチタイプで分ける

上記の点を念頭にしたとき、僕としては、以下の2点、A,Bを抑えたときに、作業が楽になった。

A .クエリーデータの取得(Google Analyticsで)
B. adwords側でのクエリーデータのマッチタイプ別の分別管理。(yahooは楽にならなかった、、、)

A. クエリーデータの取得(Google Analyticsで)

1.yahooリスティング

これは、独自に取らないと行けない。また取れてもadwordsのようにリスティング側のデータを教えてくれないので、クエリーデータを取るだけになるが、それでもやる必要がある。

方法としては、一般にはutm_source, utm_medium, utm_camapignを付けてということになっているが、あんまり有効な方法には見えない。この方法だと、クエリーデータはリファラーから取って、cookieのutmzのutmctrに入るはずだけど、utmパラメータを設定すると、リファラー内のキーワード情報は、日本語のまま入ってしまう。で、エンコードしてcookieに入らないと、最終的なデータで文字化けやデータ不取得となることがあるのだ。通常の場合(utmパラメータを使わない)と違う仕様にした理由は分からない。マルチバイトの人が声を上げてないだけかもしれないし、他に理由があるのかもしれないし、僕の勘違いかもしれない。 でも、この辺りのデータ不備で悩んでる人は多いと思う。

で、utm_xxxx を使わないとすると、、、ヤフーリスティング側の仕様を利用する方法が良い。

yahooリスティングからクリックされた時には、ヤフーがパラメータを付けてくれる。それを使う。

クエリー情報、キーワード情報、マッチタイプ情報、キャンペーンID情報、広告グループID情報、広告ID情報 をURLパラメータとして付加してくれてる。これを素直にGAに入れれば良い。

その方法としては2つ。サイト内検索を使う。 or   トラッキングAPIを使う。

サイト内検索は、2つのパラメータ情報を取得できる(独立した?ディメンジョンで) ので、キーワード+クエリー、クエリー+マッチタイプとい形で取得しておく。サイト内検索の設定に、ovraw, ovkey, ovmtcとかを設定すれば良い。サイト内検索でのディメンジョン情報は、ゴール指標と結びついているので、コンバージョン測定もやり易い。問題はcookieに情報が入るわけではないので、再訪問データとのかけ合わせが出来ないけど、これは通常のデータ分析でも難しいので、要らない(僕は)。

トラッキングAPIは、このへんだけど、やったことない。その上、問題があって、URLパラメータの情報は、ヤフーが日本語にして(エンコードせずに)付加してくれてるので、上で書いたデコード問題が発生しそう。ただ、クエリー情報以外の情報(キャンペーンID,広告グループID、広告IDとか)を収納できそうなので、これと、後で、ヤフーリスティング側からのIDの情報とJOINすれば、かっちりとしたデータが取れるとは思う。 集計してそのデータが活かせるかは、分からないけど。

と書いたように、サイト内検索の機能を使うのが手軽で良い。正統的な方法のutm系のパラメータとも共存して測定できるし。 ただ、APIを使う人は、ランディングページのパラメータを取り出して、エクセルなどで処理すれば、こんな方法は要らないかもしれない。

サイト内検索はパラメータによるデータの振り分け機能と考えると、GAの応用の幅が広がる。

あと、GAで実際に集計するプロファイルからは、yahooリスティングのパラメータを除去しておかないと、ランディングページの種類が大量になり、コンテンツ単位の集計は破綻すると思うので、プロファイル設定はキチンと手を入れておく必要。生データ用は、別のプロファイルで残しておく。

ヤフーはこれくらいはさっと思いついてやった。GAに詳しかった?人の立場としては…  ただ、応急処置的だし、javascriptでもっとやりたいとも思ったけど、、、全部自分で管理できないので、それは無理だし、それ以上のデータを持っても、サイトのパフォーマンス上げられる自信もなかった。リスティングの運営は手間暇かかるし、ビジネス的にはリスティングの運営のがお金に響くので、リスティング運用に時間をかけるのが本筋。また、リスティングの情報は質が高い(解釈しやすいし、相場情報になってる)

ヤフーリスティングは、情報が国内に限られるので、adwordsよりノウハウをネットで探すのが難しかしい。ただ、サポートは手厚いので、キチンとサポートを利用できる体制だと運用が楽かも。そういう意味ではある程度、組織だって運営できる所に利点があるのかな。代理店制度とかそのへんはよく分からない。

2. adwords

クエリーデータを起点にデータを取得するの続き。

アドワーズに関しては、自動設定にしておけば、クエリーデータは、アドワーズ側のレポートで見られるし、GAにも送ってくれる。なので、上記のヤフーの計測レベルは既に達成されている。

ただ、GA側のadwordsデータを使うと、もっといろいろ利点があるので書く。

まず、アドワーズのクエリーレポートはデータが来るのが遅い。一緒に提示されるデータで遅い物があるのか、クエリーデータがでるのに、2,3日掛かったような気がする、、、

一方、GAの方は、通常のクリックデータと同じなので、通常?、一時間以内にはデータが乗る。

なので、アカウントのスタート時とか、大規模の修正を掛けたときはGA側でクエリーのデータを追うべきだ。キーワードの除外設定は早ければ早いほど予算を残せるし、有効なクエリーを見つけて、キーワード登録するのが早ければ早いほどコンバージョンが実績で残る。

また、APIを使うのが前提になるけど、adwordsのクエリーディメンジョンに、他のディメンジョンも追加できるし、通常のメトリックスやゴール指標もデータとして乗っかるので、かなり細かく追っていこうと思えば、できる。追っかけて成果を出す解析スキルはないけど、、、、

あと、アドワーズレポートとの違いはまだある。クリック単位ででデータ(ディメンジョン、指標)が見られるけど(正確にはGAのディメンジョンで細分化出来る範囲で)、順位ディメンジョンの他にトップポジション、右ポジションという、広告配置位置のディメンジョンでも指標がだせるので、パフォーマンスの違いが測定できるし、adwordsで順位が一位だが、RHSになってるものもチェックできる。(必要なら広告ランクを増して、TOPに持っていかないとイカン)

* 先週あたり、アドワーズ側でもデータが出るようになったらしい。ただ、それでも、GAの方がデータの粒度を細かくできる。多くのディメンジョンのあるデータキューブ(アナリティクのデータはそう考えると良いはず。多次元データベース)みたいなのに組み込まれるわけだし。だと。 サイト内データ指標ともある程度ひもづくし。できない組み合わせもあったけど。

と、GA側のデータなら、adwordsのデータはかなり細かく、そして迅速に分かるので、有効に使うえる。

あと、GAとは関係ないけど、adwordsの管理の話を少し。

B 部分一致と完全一致は、分別して管理するのが良いはず

リスティングを経験する中で、最初に戸惑ったウチの一つは、部分一致と完全一致の所だったような気がする、、、他にもあっただろうけど、、、

メイン?なキーワードは、完全一致と部分一致の両方で出稿していくことになると思うけど、除外設定の知識も最初はなかったので、設定に悩んだ記憶がある。除外設定をしったあとは、完全一致と部分一致を区別するには、(部分一致+ 完全除外一致) で部分一致の出稿すれば、完全と部分の分離ができると分かって楽になった。

基本的に複数の広告グループで、完全グループと部分グループを別々に作るのが良いと思う。他の人の現場の方法は知らないけど、ここもそう言っててる。http://certifiedknowledge.org/blog/3-strategies-for-organizing-your-match-types/ (キャンペーン単位で分けるのもありかもしれない。 (このサイトは有用な情報が多い。他にも良い記事がある。)

この辺りは、adwordsの話。 ヤフーリスティングは除外設定が、フレーズ一致的な除外に固定されているの、上記のことはできず、入札単価の調整などになる。でも、単価調整方式だとCTRの履歴がどうしても歪みがちで、広告ランクが部分一致側に高く出て、マッチタイプの分別コントロールが非常に難しくなることがあると思う。 いい対策はないかと、ネットで探しても、この辺りで良い情報は見つからなかった。除外もキレイに出来ないし。この辺りの秋に改正されるらしい。

しかし、ヤフーリスティングとadwordsを同時に利用すると、adwordsすごいなあと思う。全体のシステムもすごいのだろうけど、adwordsのような数字でいっぱいなものが、ウェブのインターフェースで運用できるのにも驚いた。ウェブ上で情報をブラウズして操作するシステムで、自分が知る限り最高のモノの一つだと思う。salesforceとかを使うともっとすごいシステム(UI)ってあるのだろうか? うーん、証券システムかなあ、、こっちもすごいかもしれない。バックエンドは知らない。

まとめ

リスティングについて、ほぼゼロベースの知識で望んだ時の経験の記憶の棚卸です。GAのついての知識はあったので、それを活かす形でやった記憶の掃き出しです。 新しいGAのことについて(新しいUIとか間接効果とか)は知らないので、聞かないでください。

そういえば、アドワーズのサーチファネルも、クエリーパスを時々見ると、ある種の感覚的なヒントがつかめると思う。定量的な分析はスキルが不足してる。僕には。

あと、リスティング広告の運用については、無駄なクリックの削減が大きなテーマだと思う。で、その最初の一歩は、出稿キーワードと検索クエリの対応関係をつかむとやりやすいかなと。出稿キーワードの感覚も掴めるし。 GAを使うと、ヤフーリスティングの管理画面よりその辺りが明確に見えてきます。そして、adwordsも、adwordsのレポートデータより、GAのレポートのが便利な点が多いです。

あと、ヤフーリスティングに関しては、要らないサイトを除外できる機能は必須機能だと思う。全体のクリックの2割がヘン?なサイトにクリックされてたとしたら、25%余分な贅肉がついたCPAで、競合と勝負してることになる。それで、運用がジリ貧な循環になり、本来できた運用ができなくなって撤退となる可能性すらあるわけで、単純な知識の差で永続的な差が付きかねない。

また、全然クリックされなくても、品質インデックスに悪影響を与えない可能性も無くもないので、クリックされない外部サイトも早めに除外する方が良いかも(yahooは外部サイトのクリック履歴を組み入れないと宣言してない。adwordsは除外設定自体が無いけど、QSにはカウントしないと宣言してる)

以上です。

あと、アドワーズの全般に向こうのフォーラムに出たベストプラクティスを、メモ書きしたものがあった。リンクを張っておきます。https://sites.google.com/a/abc-analytics.com/adwords/forumno-besutopurakutisuno-matome

リスティング広告は、データがスグに出るし、競合との勝負という点があるので独善的になりにくいし、adwordsに関してはテスト機能+レポート機能も強化されて、思いつきレベルでもいろいろ試せるし(テストでなくても試せるけど、比較はしにくい)。サイトの継続的な改善にはまずはリスティングというのは良い方法だと思った。その後もニーズを探るのもリスティングが良さそうでもある。ヤフーリスティングもGAとうまい具合に統合できるといいなあと思った。

ggplot2でお手軽ヒートマップ

式とグラフの備忘録です。

時間系列の記憶は、人間の記憶の中でも頼りになる方。超整理法のアドバンテージは、ここにあったはず。 で、月間レポートを書く場合に、時間系列のヒートマップだと、人間の記憶とレポートの記録が、上手くつながる気がする。なので、ヒートマップ(時系列)が好き。

ggplot2は、簡単にヒートマップが出せる。

例として、このブログのGoogle Analyticsの4月のデータ。
時間、日付け、訪問数、平均PVの4つが入ったデータフレーム。

R> str(abc)
‘data.frame’:    720 obs. of  4 variables:
$ hour  : int  0 1 2 3 4 5 6 7 8 9 …
$ date  : Date, format: “2011-04-01” “2011-04-01” “2011-04-01” “2011-04-01” …
$ visits: int  1 1 0 0 1 0 1 0 2 3 …
$ apv   : num  1 1 0 0 1 0 1 0 1 1 …

ggplot2を読んで、ggfluctuation。データ型は、テーブル型でもいいし、3カラムのデータフレームでもいい。今回は、まずはapv(average-page-views)を抜いて、3カラムデータフレーム。

library(ggplot2)
ggfluctuation(abc[,-4], type=”colour”)

color-heat-map-google-analytics-data

でも、ggfluctuationのヘルプを見ると、type=colourは traditionalの形だそうだ。

今は、大きさそのものを出す方が良いという認識?

ggfluctuation(abc[,-4])

size-heatmap-google-analytics-data

 

ただ、ggfluctuationは、拡張性?に乏しいような気がする。
geom_pointでcolor, sizeを指定して、4種類のデータ(時間帯、日付、訪問数、平均PV)を示す。

ggplot(abc, aes(hour, date, colour=apv, size=visits) + geom_point()

赤みが付くと、平均PVが高い。大きさは訪問数。
セッションの量と質と、時間帯+日付を示す。

今回は、セッションの質を、平均PVにしたけど、
ECサイトなら売上(セッション辺り)とか、CVRとかを使えば良い。直帰率でもいい。

size-color-heatmap-google-analytics-data

アドバンスセグメントで擬似加重ソート(Excel のTable機能)

Google Analyticsだけに限らないTIPSですが、簡単でそれなりに実用的に使える方法だとおもうので、紹介します。

2010年の秋にGoogle Analyticsの加重並び替えが導入されました。Wikiの方の紹介。新機能として紹介されたに似た感じのものを、アドバンスセグメントでやろうとするものです。

ちょっとズルですが、APIでデータを取得するのが前提です。

APIでのデータの取得は、実は簡単で、

    1. Date Feed Explorerを使う(日本語だと止まるので、IDを直接入れる必要がある。)
    2. http://excellentanalytics.com/ を使う。
    3. //abc-analytics.com/data-feeds-query-explorer-in-windows-applicationを使う。

で出来ます。他にも、色々なツールがあります。

今回は、Cの自作ツールを使ってデータを取得しておきます。

閲覧開始ページ、キーワード、開始数、直帰数を取ります。

WS000033

で、タイトルの話のエクセルの貼り付けます。ここから、本題です。

コピペしたあとは、テーブルにします。

  • テーブル名を英語にします。大事です。
  • 一行目に数字を入れるので、空けておきます。

WS000034

もう少し、下ごしらえが続きます。

  • 直帰数になっているので、直帰率をいれます。
  • 一行目に集計値を出すようにします。
    • ここで、テーブル機能が行きます。

entrancesの集計値は、下図のようにススメます。

(テーブル名が英語だと補完が効いて、マウス無しで^^です)

WS000035 WS000036 WS000037

式は、=SUBTOTAL(9,table1[entrances]) になります。

同じようにbounces(直帰数)も計算します。=subtotal(9,table1[bounces]) ですね。

bounceRate(直帰率)は、この2つを割り算します。

ここで、もう一回、画像。

WS000038

ここから、本当の本題であった、加重ソートを入れます。

前提として、100回以上セッションがあった、キーワード+ページは、そのまま。ソレ以下のものを、全体の平均値と按分する方針です。

B1に 分かれ目の数字、100を入れておいて、TrueBounceRateの列を作りましょう。

WS000039

上の数式を説明します。

entrancesが100以上なら、その列のBounceRateのまま。なので [@BounceRate]

以下なら、全体の平均値(E1)と[@BounceRate]を 全体のEntrances(C1)と列のentrances([@enttances])で按分する。

([@bounces]/$B$1 * [@BounceRate] )   +   (1 – ([@bounces]/$B$1)) * $E$1

Googleの加重ソートは、たぶん似たような感じだと思う。

加重ソートはいろいろ本を読んだけど、理論的背景はよく理解できなかった。

2次元の正規分布の場合に、なんやからすると、上記のような単純な式でもOKという話だったと思うけど、よく理解できなかったので、公開レクチャーしれくれる人がいたらお願いします。@phar

で、ここまでは単に計算しただけど、ここからエクセルのテーブル機能が生きて来る。

ランディングページ単位のキーワードでの加重ソート、ある単語が含まれるキーワードデータの加重ソートとかが簡単にできる。

最初の画面で、

WS000040

landingを/api ディレクトリ以下のものに絞る。

WS000041

その後、TrueBouncecRateを昇順に。(自動で順列にならない、、、フィルターするたびに、並べ替えの必要がある。ここは、イケテナイ。)

WS000042

まあ、それでもそれっぽいソートが出来上がる。landingページを絞った上での、加重ソート。

今回は、ディメンジョンがキーワード、閲覧開始ページという組み合わせだけど、ソレは自分でデータを持ってくるときに好きに選べばいい。

また、加重平均の按分の中心になる平均値(直帰率)も、テーブルでフィルタリングすると、subtotalでそのフィルタリングされたデータの平均値で計算し直されるので、都合が良い。

あまり、データ数が少なくなるとだめだけど、そのデータ全体での平均値を適用して計算しなすのは、フィルタリング前のデータの平均値を持ち出すより適切なはずだ。

まとめ

google analyticsには、加重ソート機能がありますが、似たような事をエクセルでしました。

エクセルのテーブル機能を使うことにより、簡単に特定ディメンジョンの加重並び替え(条件は複数でもOK => アドバンスセグメント)ができることを図示しました。 これは、たぶん、今のレポート画面ではできないことだと思います。 ただし、並び替えのアルゴリズムは違うのでしょう。

冒頭のリンクにも 今回のようなことをやった記録があって(加重ソートが出始めたころに書いたやつ) 、実際の GAでの順番と比較したグラフがありますが、そんなにズレはないと思います。

そんなにってどんだけ? 主観です^^。前やったとき、順位相関とか計算してみたけど、それを用いるのが正しいのかさっぱり分からなかったし、数値も直感的に理解できなかったので、、、単純な加重ソートもGAのソートも、結果としてはそんなに変わらないと思いました。

確か、加重ソートをアドバンスセグメントでという話は、結構要望であったと思うので、擬似ですが、それなりに役に立つ作業工程の紹介だと思います。試してみてください。