RaNxxx’s blog

データまわりの知識やノウハウを紹介するブログです

文字列のtf-idfについて

tf-idfを紹介する前に、Bag of Words(単語の袋)を先に説明をしたいと思います。

 

Bag of Words(単語の袋)

簡単にいうと、Bag of Words はある文書における単語の出現回数を数えるアルゴリズムのことを指しています。 例をあげましょう。

この例では、名詞、形容詞、動詞だけをカウントしたBag of Wordsです。

しかし、Bag of Wordsの手法でカウントすると、「今日」のようなありふれている単語もカウントされるデメリットがあります。 そこで、より特徴となる単語のみをカウントするのが、tf-idfという手法です。

 

tf-idf

tf-idfは、sk-learn(tf-idfのドキュメント)を使えば、簡単に計算ができます。

同じく先の例でいうと:

それぞれの文章の単語/合計出現回数の処理をしてから、文章をベクトル化するのがtf-idfの特徴です。

GTM(Google Tag Manager)を使って、ClientIDと初回訪問日を実装しましょう

久しぶりのGTM実装紹介です。

さてさて、ClientIDとユーザーの初回訪問日の実装方法は色々ありますが、 初心者に一番分かりやすく、再現可能な方法を紹介しようと思います。

まずは、ClientIDです。

 


 

clientIDの実装方法

こちらの元ネタの出所は、GTMの神様といっていいほどのSimo Ahavaのブログです。 そして、清水誠さんも彼のブログで、Simoの方法について紹介しています。

初心者がいきなり見ると、再現できないかもしれないので、もう少し具体性を持って、紹介をさせてください。

原理に関しては、taskAPIを使って、GAのカスタムディメンションにデータを飛ばす仕組みになっています。 より詳細を知りたい場合は、先ほど貼ったSimoのブログをご覧ください。 具体的なやり方はこちらとなります:

Step1: customTaskというカスタム変数を作ります

GTMを開いて、デフォルト画面の「現在のワークスペース」から、「変数」をクリックし、「新規」という赤いボタンをクリックします。

変数の名前は分かりやすく設定すればいいと思いますが、変数の種類を「カスタムJavaScript」を選び、下記のコードを貼り付けます:

function() {
  // Modify customDimensionIndex to match the index number you want to send the data to
  var customDimensionIndex = 1;
  return function(model) {
    model.set('dimension' + customDimensionIndex, model.get('clientId'));
  }
}

ここでは、1箇所だけ自由変更するところがあります。 データの保存先として、カスタムディメンションの番号を変える必要があります。

ここでは、ディメンション1に保存したいので、var customDimensionIndex を1に指定しています。 ここの番号を変えたい場合は、上記のコードの「=」の後の数値の部分を変えれば大丈夫です。

 

実際の設定画面はこちらです:

ここで保存をして、カスタム変数の作成は終わります。

 

Step2:GAに送信する設定を行います

ほかの方法もありますが、オススメとして、GAのPageviewタグに設定をする方法を紹介します:

GTMで一番最初の設定として、Pageviewを計測するためのタグがあると思います。 そのタグを開いて、「詳細設定」→「設定するフィールド」で、下記のように設定すれば大丈夫です。

注意点として、フィールド名は「customTask」のままで、変更なしでご入力ください。 また、値のところで、とこりのマークをクリックし、Step1で作ったカスタム変数を選ぶと大丈夫です。

 

Step3:Debugしましょう

Debugの方法は、初めてCustom Dimensionを設定する人はきっと不安でしょう。

サイトでマウスの右クリックを押して、「ページのソースを表示」を押します。 そこから、「Network」をクリックして、空欄のところに「collect」を入力し、ページを再度読み込みます。

すると、下の「Name」のところに、「collect?v=」から始まるものが出てきます。

カスタムディメンションにきちんとデータが入っているかどうかを確認するには、この「collect?v=」をクリックし、 その中身を見る必要があります。

「Query String Parameters」に「cd」+先ほど設定したカスタムディメンションの番号のところに、 上の「cid」に入っている数値と同じ数値が入っていれば、データが取れていることが確認できます。

実際のキャプチャはこちらです: ※サイト情報が入っている部分は黒く塗っています。見るべきところは、黄色で表記しています。

 

初回訪問日の実装方法

続きまして、初回訪問日の実装方法です。 今回は、David Vallejoの記事が元ネタとなります。

似たような日本語のコンテンツは、衣袋先生の記事もありますが、 試してみましたが、エラーが出ました…

※詳しい人がいれば、ご説明・ご指摘を頂けると幸いです。涙目

 

Step1:カスタム変数を作成します

ステップはClientIDと全く同じですので、ここでは、キャプチャーなどを略します。

カスタム変数のカスタムJavaScriptに記入するコードはこちらです:

function(){
  var regex = new RegExp("_ga=([^;]+)");
  var value = regex.exec(document.cookie);
  var cookieCreationDate = (value != null) ? new Date(value[1].split('.')[3]*1000) : undefined;

  if(typeof(cookieCreationDate)!=="undefined")
  {

    var year = cookieCreationDate.getFullYear().toString();
    var month = (cookieCreationDate.getMonth()+1).toString();
    var day  = cookieCreationDate.getDate().toString();
    cookieCreationDate = year + (month[1]?month:"0"+month[0]) + (day[1]?day:"0"+day[0]);
  }
  
  return cookieCreationDate;
}

 

Step2:GAに送信する設定を行います

ここでは、ClientIDと少し違いがあります。

同じくGAのPageviewタグを開きますが、今度は、「詳細設定」の「カスタムディメンション」をクリックし、 「インデックス」のところに、データを飛ばしたいカスタムディメンションの番号を入れ、 「ディメンションの値」を先ほど作ったカスタム変数を選択します。

設定が終わったら、保存をして、同じDebugの方法で日付が入っているかどうかを確認することをお忘れなく!

5分で分かる!分散・共分散と相関係数

家で数学やら分散やらを騒いていたら、今日はようやく念願の数学講座を受けました。笑 さて、いつものように、勉強したことを纏めてみようと思います。

数学はとても久しぶりに触れたので、教わったことをググりながら纏めたものになるので、 不適切な説明や間違えがあったら、優しくご指摘ください。\\\٩( 'ω' )و ////

 


 

相関関数

いうまでもなく、「相関」とは、複数のものがお互いに影響を受けてかかりあっていることを意味します。 そして、その「相関関数」は、その受ける影響の度合いを表す数値です。 統計上では、「相関関数」は、「-1から1」の間にあります。

ググっていたときん、tomoshigeさんのhatenaブログにあった図が一番分かりやすかったので、それを下に貼りづけます:

※元のURL:http://tomoshigeさんのhatenaブログ

この図で分かるのは、

  • 相関係数 = 0 の場合:相関がない;数値が非線形の分布をしている
  • 相関係数の絶対値 > 0 の場合:相関がある;数値が1に近ければ近いほど、相関が強く、そして、数値が線形の分布になっている傾向が強い
  • 相関関数 > 0 の場合は、正の相関があり、相関関数 < 0 の場合、負の相関がある

 

相関関数の数学式はこちらです:

私のような文系出身の人が、このブログを読んで、この式を見たら、顔が一瞬にして固まってしまうでしょう。笑 さて、この式を完全理解するために、式に出てきた「共分散」、「標準偏差」を理解しなければいけません。

 

共分散

「分散」とは、データの各要素がどれぐらいばらつきがあるのかを表す指標です。 「分散」を知ると、どちらのデータの各要素が、よりばらつきがあるかを比較することが可能になります。

分散の式は:

 

「共分散」の意味は少し解説しにくく、サイトによって若干変わるところもありますが、一番腑に落ちたのは「2つの変数の関係を表す値」で、そして、その値は、「それぞれの変数の平均値からの偏差の積の平均値」です。

「偏差」とは、「各変数の値から、平均値を引いた値」です。

Toodaさんのブログの例がとても分かりやすかったので、ここで引用させていただきます。(元のURL

例えば、クラスの数学と国語の成績がデータとなります。クラスには、A, B, C, D四人の生徒がいます。 縦軸を国語の成績、横軸を数学の成績とした場合、四人の生徒の成績の分布は下記になります。

そして、数学と国語のそれぞれの平均値を求めます。

数学と国語の「共分散」は、四人の生徒の「数学の偏差 × 国語の偏差」の平均値(影の平均面積)になります。

 

共分散を式に表すと、こうなります:

共分散 > 0 の場合、片方の変数が大きいとき、もう片方の変数も大きい傾向がある、 共分散 < 0 の場合、片方の変数が大きいとき、もう片方の変数が小さい傾向がある、ということを意味します。

 

標準偏差

標準偏差」は、「分散」の平方根です。

統計の世界では、多くの数値が、左右対称のようになっていると信じています。そのことを、「正規分布」と呼びます。 正規分布の図を見れば、分かりやすいと思います:

1つの変数に、平均値があります。 この変数の68%の値が、平均値から1標準偏差の範囲に入っています。

関連式はこちらになります:

 


 

今日の解説は以上になります。

これからも、機械学習の原理を理解できるよう、また、日頃の分析業務をより高いレベルで実行できるよう、数学を頑張って勉強していきたいと思います〜

GitHubの第一歩|基本知識及びGitHubへのファイルプッシュ

初めてGitHubを知ったのは、去年の12月でした。

その時は、ちょうど機械学習(当時は、まだ人工知能という漠然とした概念)に可能性を感じはじめたところでした。 pythonすら理解していなかった私は、何かのきっかけで、GitHubを知りました。

でも、その時はまだ、自分がこれからGitHubを使うようになるとは、夢にでも思いませんでした。笑

さて、早速ですが、最近GitHubの利用に伴って、勉強したことを纏めてみようと思います。 ※ここでは、あくまでも勉強している最中の私がメモとして纏めたもので、理解が足りていないものがあれば、優しくご指摘いただければ幸いです。

 


 

 

Githubとは

GitHubを説明するには、まずGitから説明する必要があります。

「Gitとは」を一言でいうと、プラグラミングコードのバージョン管理システムです。 ※ググったら、正確な表現「プログラムのソースコードなどの変更履歴を記録・追跡するための分散型バージョン管理システムである」が出てきました。

そして、GitHubというのは、GitHubという会社が提供・運用し、個人や法人を問わず利用できるWebサービスです。 似たようなサービスは、BitbucketとGitlabなどがあります。

 

非エンジニア向けに、GitHubのメリットを簡単に説明します:

ファイルの共同編集で、DropboxGoogle Driveがよく使われているように、エンジニアたちも、共同でサービスやプロジェクトの開発において、共同作業が発生します。

そこで、DropboxGoogle Driveを代替するのは、Githubになります。コードを管理することにおいてはGitHubのほうが共同編集に向いています。

なぜならば、GitHubのワークツリーの構造によって(次で説明します)、各エンジニアは、変えたい部分に対して、その部分だけ変更し、アップロードすることができます。

 

Gitの構造

ネットで色々調べたら、図なりで非常に分かりやすい説明があったので、ここでは引用させていただきます。

Gitの構造をいう前に、まず専門用語を理解しなければいけません。

天才的な説明はこちらです:

出所:http://kray.jp/blog/git-why-explanation/

この4つの単語を理解したら、今度はこれらを組み合わせた後の仕組み図を理解しましょう。 一番分かりやすい図はこちらです:

出所:http://noodles-mtb.hatenablog.com/entry/20110920/1316480836

つまり、各ユーザーがローカル環境で、ワークツリーで今の作業しているファイルに対して変更を行います。 そして、変更ができたものを、インデックスに登録して、さらにローカルのリポジトリに記録させます。 最後に、それを中央リポジトリにアップロードして、それから初めて、他のメンバーにも共有することができます。

 

あと3つの言葉を覚える必要があります。

ワークツリーからインデックスに登録する動きを「add」と言います。 インデックスの内容をリポジトリに記録させることを「commit」と言います。 最後に、ローカルリポジトリから中央リポジトリにアップするのは「push」と言います。

 

これで、Gitに関する最低限の知識をマスタしたはずです。

次は、Linuxコマンドを使って、Github上にファイルをpushする方法をご説明いたします。

勉強会メモ|Ngramによる言語モデル

言語モデル

Ngramの説明をする前に、まずは言語モデルについて説明したく思います。

言語モデルとは、単語列が出現する確率を計算するモデルのことです。 例えば、「私は学校に行く」と「私は学校を行く」の2つランダムの単語列がある場合、後者の方は文法の間違いであるため、出現する確率が低いと計算されます。

この確率によって、様々な用途が考えられます。 最も知られているのは、文法チェック・機械翻訳などが思い浮かべます。

 

Ngramとは

Ngramは、言語モデルの手法の1つです。他には最尤法や形態素解析などもあります。

Ngramの定義は、あるテキストの総体を前から順に任意のN個の文字列または単語の組み合わせで分割したものです。 Nは整数で、Hが少なければ少ないほど、汎用性が上がり、必要なデータ量も少ない反面、単語列の順番や繋がりの配慮が薄くなります。一方、Nが多ければ多いほど、汎用性が下がり、必要なデータ量も多くなる反面、データさえ増えれば、正確になるメリットもあります。

 

共起関係と共起頻度

Ngramでは、隣り合った文字列または単語の組み合わせに一定の関係性を持っていると考えています。 その組み合わせを「共起関係」として呼びます。

そして、その「共起関係」は、どの程度現れるかを集計した結果を「共起頻度」と呼びます。

 

※「学校にいく」の例文では、「学校に+いく」と「学校を+いく」の2組の共起関係があります。そのうち、「学校に+いく」の共起頻度が高いです。

 

Ngram確率の推定

様々な推定手法があります。

などが挙げられます。

 

私が教わったのは、その中の最尤推定です。

 

最尤推定の理解を深めるには、その計算式のイメージを頭に入れた方が良いと思います。

色々調べたんですが、初心者にもイメージが湧くように、私が教わった時にfunctionpくんが作ったスライドが、一番分かりやすかったので、それをちょこっと使わせていただきます。笑

学習データは下記のものを与えたとしましょう。

N = 2 、かつ「新宿はどこですか」という文章の出現確率を求める場合、その計算式は以下のものになります:

Pは確率の意味で、括弧の"|"以降の単語列に含まれる単語の数は、N-1になります。

ここで、Nは2であるため、後ろに入る単語の数は1になります。 ※N = 3 の場合は、P = P("は"|"<文頭>新宿") × P("は"|"新宿は") ...etcになります。

エコールの後ろのP = n/m。 m = "|"後ろの単語列は、学習データに出て来た回数;n = "|"の後ろの単語列が学習データに出て来た場合、"|"の前の単語が、"|"の後ろの単語列の直後に出て来る回数。

ここでは、<文頭>は6回あり、<文頭>の直後に「新宿」が出てきたのは、1回のみです。なので、P("新宿"|<文頭>)は、1/6になります。ほかのPも同じく計算をします。

答えはこちらになります:

 

Ngramと形態素解析

Ngramを調べると、形態素解析も一緒に出て来ることが多いです。 その理由は、二つの手法はいずれも検索エンジンにおいて、見出し語の切り出し方法として使われているからです。

しかし、自然言語処理においては、二つは全く別のものとして扱われています。

2つは、組み合わせて使うのがとてもよくて、前後のステップのようなものです。 よくあるのは、形態素解析を先に行い、単語列を分解させ、品詞のタグをつけてから、Ngramで出現する確率を求める流れです。

 

 


 

言語モデルは以上になります。

次回は、Ngramの中における各推定手法、エントロピーjanomeを使って言語モデルの実装、トピックモデルなどについて更新したいと思います。

機械学習|読書メモ MathWorksの「機械学習」資料

前ある機会で、MathWorksの機会学習のトレーニング資料を入手しました。

基礎知識があれば、もう一回この資料を流し読みすると、とてもとても分かりやすくて、知識が再度整理された感じでした。 そのため、「ここは知っといたほうがいいんだろう」と思った知識点を纏めてみようと思いました。

 

※その資料がほしいお方は、個別に連絡ください。 ※サイトにも機械学習のことがたくさん書かれています。興味のあるお方はぜひ、ご一読ください。 http://jp.mathworks.com/help/stats/supervised-learning-machine-learning-workflow-and-algorithms.html

 


 

機会学習の各アルゴリズムについて

k近傍法(KNN)

KNNの実行スピードが遅い理由: KNNは予測に全ての学習用データを利用するため、実行するには、かなりの量のメモリを必要とするから

 

 

モデルの改善

モデルの改善には、2つの異なる方向性が考えられるそうです。

その1つは単純化

もう1つは複雑化:

 

アルゴリズムの選択

4つのことを配慮すべき:

  1. 学習速度
  2. メモリ使用量
  3. 新しいデータに対する予測精度
  4. 透明性または解釈のしやすさ

 

教師ありの一般的な分類アルゴリズム

ロジスティック回帰

原理:

一方のクラスに属するのか、もう一方のクラスに属するのかという二値応答の確率を予測できるモデルによく適合します。 ロジスティック回帰はシンプルなので、ニ項分類の問題に最初に取り組む際によく用いられます。

最適な用途:

・データが1つの線形な境界で明確に区分できる場合 ・より複雑な分類方法を評価するための基準として

 

k近傍法(kNN)

原理:

kNNは、データセット内の最近傍点のクラスに基づいて、対象物をカテゴリー化します。kNNによる予測では、互いに距離が近い対象物同士は類似していると仮定しています。 ユークリッド距離、市街地距離、コサイン距離、チェビシェフ距離などの距離測度を用いて最近傍点を見つけます。

最適な用途:

ベンチマークとなる学習則を確立するために、シンプルなアルゴリズムが必要な場合 ・学習対象のモデルのメモリ使用量があまり問題にならない場合 ・ 学習対象のモデルの予測速度があまり問題にならない場合

 

SVMサポートベクターマシン

原理:

全てのデータポイントをあるクラスと別のクラスとに分ける線形の決定境界(超平面)を特定することによってデータを分類します。 データを線形分離できる場合、SVMに最も適した超平面は、2つのクラスの間のマージンが最大になる超平面です。 データが線形分離できない場合は、損失関数を用いて、超平面の間違った側にあるポイントにペナルティを科します。 SVMでは、カーネル変換を用いて、線形分離できないデータをより高次元に変換することにより、線形の決定境界を見つけることもあります。

最適な用途

・データが完全に2つのクラスに分かれるデータの場合(誤り訂正出力符号と呼ばれる手法を用いてマルチクラス分類に適用することもできます) ・高次元で線形分離できないデータの場合 ・シンプルで解釈がしやすく、正確な分類器が必要な場合

 

ニューラルネットワーク

原理:

人間の脳にヒントを得たニューラルネットワークは、互いに密接に結びついたニューロンのネットワークから成り、このネットワークを介することで、入力データを望ましい出力へと関連づけます。 ニューロン間の結びつきの強さを繰り返し修正することによってネットワークはトレーニングされ、与えられた入力データに対して正しい応答を出力するようになります。

最適な用途:

非線形性の強い系のモデリング ・利用できるデータが増加していく場合で、モデルを絶えずアップデートしたい場合 ・入力データに予期せぬ変化が生じる可能性がある場合 ・モデルの解釈のしやすさが重要な問題ではない場合

 

単純ベイズ分類

原理:

単純ベイズ分類器においては、1つのクラスの中において特定の特徴量がその他の特徴量とは無関係であるものと仮定します。 新しいデータを分類する場合には、幾つかのクラスのうち所属の確率が最も高いクラスへ分類します。

最適な用途:

・データセットは小さいが、多くのパラメータを持つ場合 ・解釈しやすい分類器が必要な場合 ・学習用データには含まれていなかったシナリオにモデルが遭遇する場合(多くの金融および医療アプリケーションが当てはまります)

 

決定木

原理:

決定木は、木に沿って根(始点)から葉のノードまでの決定を辿ることによって、データに対する応答を予測します。決定木は分岐条件によって構成され、その各分岐において、学習によって決定された重みに照らして予測子の値を比較します。 分岐数や重みの値は、学習プロセスにおいて決定します。追加修正(剪定)を行って、モデルを簡素化することもできます。

最適な用途

・解釈が簡単で、短時間で適用できるアルゴリズムが必要な場合 ・メモリ使用量を最小化したい場合 ・高い予測精度が必須でない場合

 

教師ありの一般的な回帰アルゴリズム

線形回帰

原理:

線形回帰は、連続的な応答変数を1つ以上の予測子変数の線形関数として表現するために用いる統計的モデリング手法です。 線形回帰モデルは解釈が簡単で学習させやすいため、新たなデータセットに適用する最初のモデルとしてよく用いられます。

最適な用途:

・解釈が簡単で短時間で適用できるアルゴリズムが必要な場合 ・より複雑な他の回帰モデルを評価するための基準として

非線形回帰

原理:

非線形回帰は、実験データの非線形な関係を表現する上で役立つ統計的モデリング手法です。 非線形回帰は通常パラメトリックで、モデルは非線形方程式で表されると仮定しています。 「非線形」とは、適合する関数がパラメータの非線形関数であることを示しています。

例えば、フィットするパラメータがb0、b1、b2のとき、方程式がy = b0+b1x+b2x2 であれば、 その方程式はフィットパラメータの線形関数、方程式がy = (b0xb1)/(x+b2)であれば非線形関数となります。

最適な用途:

・データが強い非線形傾向を示し、簡単には線形空間に変換できない場合 ・カスタムモデルをデータに適用する場合

GTM(Google Tag Manager)を使って、ページの指定場所までのスクロールを計測しましょう

コンテンツ分析の場合、ユーザーがページのどこまでスクロールして読んだかを知りたいことが多いでしょう。

 

ネットで一番流行っているのは、ページの何%までスクロールしたかの計測方法です。 この計測方法は、ブログや記事などに向いています。 何故ならば、これらのコンテンツページの長さは違うとはいえ、分析では、ユーザーがどこまで読んだかをざっくりと知れば十分だからです。

しかし、公式サイトのTop PageやSEMなどをかけたLanding Pageなどに対して、具体的な場所まで読んだかどうかを知る必要があるので、%の計測方法では、分析するには少し難しいでしょう。

 

そのため、今日は、ページの指定場所までのスクロール計測の方法を紹介したいと思います。

文章の中に出てきたソースコードは、Githubのzukさんのものを参考にし、清水誠さんに今回の目的に合わせて改修していただいたものになります。

 

zukさんのリンク:https://github.com/zuk/jquery.inview 清水誠さんのブログ:http://www.cms-ia.info/ja/

 


 

実装する前に

まずは、ページ構造を簡単に説明します。

現実の中で、このようなページが多いでしょう。

通常は各divにclass名を付与することが多いと思いますが、本当はユニークのidのほうが理想です。 しかし、自社サイトならまだしも、エイジェンシーがクライアントのサイトを分析する場合、ソースコードを変えてくれなんて、弱気になって言えない営業さんがたくさんいるので、ここでは、上記の例を想定して、今日のブログを書かせていただきます。

 

次は、実装にあたっての判定基準も併せて説明します。

divの内容を精読(最後まで読んだ)と判定するには、そのdivがinview(スクリーンに出てくる)するだけでは弱い。理想なのは、次のdivがinviewしたら、その前のdivを精読したと判定したほうが最も正確でしょう。 ただし、実際のところ、ページの空白の長さや、重点的に読んで欲しい箇所が異なるので、必ずしも次のdivのidやclassで判定することはありません。

また、精読すると判定するのであれば、ただ単純にスクロールして、読んでいなければ、意味がないので、ここでさらに時間縛りを入れます。

最後に、綺麗に実装するために、一回発火したら、もう一回同じところにスクロールしても、もう一回発火しないようにコードを書かないといけません。

 

なので、次の部分は、上記の3つの基準に達することを前提に、計測方法をご紹介します。

 

 

STEP1|inviewタグを作成

まずは、下記のように、custom HTML Tagを作成します。

中に書いているコードは、私がGithubにアップしました。 こちらでダウンロードすることが可能です: https://github.com/RaNxxx/GTM_specificscrolled/blob/master/specificscrolled_trackingJScode

 

JSが分かる方は説明要らないと思いますが、私のような、プログラミングを勉強したばかりの初心者もいるかもしれないので、簡単な説明と変える必要の箇所を一応下記に纏めます:

ソースをみると、上のキャプチャーのコードが複数に続いています。 こちらは、計測したい場所の数ごとにあります。

コードの意味は、あるid/class(#youneedtochangeit01で指定している)がスクリーンに3秒(3000)出てきた場合、初めてはdataLayerに、eventの種類('event' : 'scrolled_specific')とeventの詳細('event_specificarea' : '計測したい箇所1')を送り、初めてではない場合は、何も送らないと指示しています。

そのために、自分のサイトに合わせて、キャプチャーで黄色で標記している場所のみ変えれば、思う通りの実装ができるはずです。

このブログの例だと、「会社の特徴」というareaの精読を計測したい場合、"計測したい箇所1"を"会社の特徴"に変え、var o1 = の部分を、var o1 = "#service"; に変える必要があります。 3秒以上に読んでほしい場合は、3000を5000でもなんでも変えれば良いです。

 

STEP2|ページ指定のトリガーを作成

本来は、このJSコードにページ指定の縛りも入れれば、こちらのトリガーを全ページ指定にすればよいです。

ただ、そうした場合、JSの初心者にとっては、あとあとのメンテナンスが面倒くさく、間違えやすいので、ここでは、ページ指定のトリガーの作成をお薦めします。

※将来は、こちらのコードを更に発展させ、ページ指定を入れてもシンプルで、かつ、計測したい箇所ごとに複数書く必要のないコードを書けるようにしたいと思います。

通常はPage Pathにequals / で指定すれば良いです。 私が実装したサイトはサブドメインの計測もしているので、Page Hostnameの縛りも入れました。

 

STEP3|GAに送信するタグとトリガーを作成

こちらは説明するまでもなく、下記のキャプチャーを参考して、作ればできると思います。

タグはこちら:

トリガーはこちら:

 

STEP4|実装検証

最近GTMの実装検証が本当に便利になりました。

なので、ここでは、GTMで検証する方法をご紹介します。

 

まずは、タグが指定の場所で正しく発火したかどうかを確認します。

STEP1のタグ発火に対して、1)指定のページのみ常に発火状態になっている、2)ほかのページでは発火していないことを確認できればよいです。

そして、STEP3のタグは、指定の場所まで指定の秒数が止まったら、タグが発火すれば良いです。

 

STEP1のタグが発火しないことはあまりなく、STEP3のタグが発火しないことになったら、STEP3自体の設定が間違っていなければ、STEP1のJSコードをもう一回チェックしたほうが良いです。

また、実装を検証する時は、ユーザーの気持ちを想像しながら、判定に使うid/classと滞在する時間の長さが適切かどうかも併せて、確認したほうが望ましいです。

 

その次に、GAに送信するデータが正しいかどうかをタグごとに確認します。

ここのAction、Category、Labelは思う通りになっているかどうかを確認すれば良いです。

 

最後は、翌日になって、GAに送信されたデータを確認し、データが取得できていることを確認できれば、全ての設定が終わりです。

THE END

 


 

ざっと書いてしまいましたが、いかがでしょうか?

もちろん、前にも述べたように、この手順の中のJS文が更に改善する余地はあると思います。 それができるようになったら、またこのブログで紹介させてください。

※既にこう書けばよいと分かっているお方がいれば、ご指摘頂ければ嬉しいです!