記事であなたを待っているもの:
お客様のサイトのフィルターを調査するために使用したアプローチの説明と、テクノロジーの詳細な説明。
誰のための記事ですか?
この記事は、ウェブアナリストと、定量データに基づいてユーザーエクスペリエンスを調査するタスクに直面しているすべての人にとって興味深いものになります。
免責事項:
記事に記載されていることはすべて著者(Artyom Kulbasov、AGIMAのWebアナリスト)の意見であり、問題に対する唯一の真の解決策ではありません。 この記事で説明されている技術の多くは、類似物に置き換えることができます。
1.タスクの説明
クライアントからのタスクは次のとおりです。ユーザーの行動の包括的な分析を行い、受信したデータの分析に基づいて、新しいサイトを設計するためのタスクを策定します。 重要なことは、これはユーザーエクスペリエンスのすべての哲学を考慮して行う必要があり、ユーザーを支援しているという至福の気持ちで、うまくやらなければならないということです!
作品の1つは、ユーザーセクション(メンタル)に適合し、ユーザーの行動パターンに基づくフィルターの開発と実装の基盤として機能する可能性がある、ストックセクションのサイトでのフィルターのユーザー使用の分析です。
データの収集と分析では、次のテクノロジーを使用しました。
生態系№1
- jQuery(クイックマークアップ用)
- GTM(サイトの表面に関係なくアトミックに機能する、分離された便利な階層型フロントエンドツリーの一部として)
- Googleユニバーサルアナリティクスの拡張eコマースアブストラクション(このデータスキームはeコマースに適用できますが、ここで抽象的なアプローチを使用し、オンラインで販売していないコンテンツサイトに実装することを禁止しません)
生態系№2
- パンダ(データ分析用)
- Seaborn(データの視覚化用)
- PGA(GUAからデータをダウンロードするための独自のライブラリ、ライブラリの詳細な説明 )
2.必要なデータの収集
GTMの基本的なタスクと機能については説明しません。要点を説明しましょう。
ストックセクションをフィルターでマークアップするとき、拡張電子商取引GUAの抽象化を使用しました。 このサイトは実際にはオンラインストアではないため、ストアのリストを含むページの製品としてストアカードが選択されました。 バスケットに商品を追加するには-ストアのカードをクリックし、製品のカードを表示して-ストアのページに移動します。
製品リスト名フィールドと製品バリアントフィールドの値として、値が次のシリアル化されたオブジェクトの形式でデータを送信します。
最初のオプション -現在のフィルター設定に関する情報。
2番目のオプション -株式に関する追加情報、たとえば、株式が終了する時刻。 将来、 Pandasを使用してシリアル化されたオブジェクトを解析します。
実際、この問題はカスタムGAパラメーターを使用してより簡単に解決できます。 ただし、ご存知のように、標準GAの1つのリソースには20個しかなく、この数では十分ではありません。 200個のユーザーパラメーターを持つGAPでは、同じタスクをはるかに簡単に解決できます。
拡張eコマースの構造がどのように転送されるかの例:
マークアップを実装するためのコードを検討してください。
すべてのコードについて、 mainItemSelectorForClickとmainItemSelectorForViewの 2つのメインセレクターがあり、これらのセレクターにJSイベントがくっついています。このコードでは、これがスクロールです。
スクロールするとき、セレクター「:in-viewport:visible」によって現在画面の範囲内にある株式のみを送信します。 拡張eコマースデータ構造は、グローバルwindow.ec_オブジェクトに入ります。 これにより、タグの値をヒットで置き換えることができます。 次に、値event.ec_を使用して別のタグをこのイベントにバインドするために、 'event': 'scroll'をプッシュします。
最後に、アルゴリズムは、アクションが既に「impressionSent」で表示されており、将来的には拡張eコマースアレイに追加する必要がないことを示すクラスを各アクションに置き換えます。 これは、データの過飽和を回避し、1日あたりのヒット数の制限を大幅に超えないようにするために行われます。
list_set_data()関数は、 data- *属性を$(ドキュメント)に置き換えます。つまり、現在のフィルター値を1つのグローバルオブジェクト(ドキュメント)に保存します。
出力には、他のタグまたはコードからアクセスできる保存されたデータ構造があります。
item_generate_json関数について詳しく見てみましょう。
この関数は、オブジェクトを文字列に変換するJSON.stringify({})関数を使用して、シリアル化されたフィールドを持つ製品オブジェクトを作成します。 一部のオブジェクトフィールド値は、データを使用して初期化されます-* jQuery属性は、他のコードで事前に作成されています。
シリアライズされたオブジェクトを具体的に調べる場合、次のパラメーター:
タイプ -シートのタイプ(この例では、これらは在庫です)。 この記事では、在庫セクションの分析を検討しますが、これはサイトの唯一のセクションではありません。
検索 -このフィールドには、このプロモーションの現在のキーリクエスト、または検索の有無に応じてNULLが含まれます。
ProductResults-ページ上のエンティティの数、この場合は共有の数を計算します。
TypeOfCards-カードのタイプ。この場合、ビジネスにはカードの入金バージョンまたはクレジットがありました
CurrentMenu-このヒットの現在のクランプカテゴリフィルター
BackGroundMenu-このヒットの現在の残余カテゴリフィルターメニュー(これは残ります)
ViewMode-在庫並べ替えのタイプ(ブロックまたはリスト)
...
さらに、 SetPoint-ポイントの獲得、 GetPoint-ポイントのクレジット...
Googleユニバーサルアナリティクスのインターフェースには次のものがあります。
また、独自のデータベースへのストリーミングまたはデータのバッチ処理の場合、シリアル化されたオブジェクトは一見しただけでは場所が狂い、すべてのデータベース標準に適合しないことに注意してください。 ただし、たとえばClickHouseを使用すると、JSONを操作するための関数を介してこの機能を実装できます 。
3.十分なデータが収集されたら、分析に進みます。
PGAスクリプトを使用したデータのアンロード。 このスクリプトを使用すると、毎日データをアップロードできます。これにより、大量のデータでデータサンプリングを除外し、ユーザーの行動に関する正確な数値を取得できます。
コードアルゴリズムを部分的に分析しましょう。
ライブラリを接続します。 ここでは、この記事の上記のすべてのライブラリがインポートされます。
2.サーバー接続設定を使用してGoogle AnalyticsにCore Reporting V3リクエストを生成します(Jupyterノートブックはサーバーの下から起動されたため)。 毎日の生データが自動的にグループ化されることを示すことを忘れないでください。
3.以下のコードは、新しいDataFrameを作成し、json.loadsによって事前にデコードされた元のDataFrameのga:productListName列の値でSeriesを結合します。
つまり、Googleユニバーサルアナリティクスの「ga:productListName」列でJSONとして現在の値の形式を使用する「権利」または「許可」を与える関数を使用し、そこから既に新しい列の新しいDataFrameを取得しました。
4.列をフィルタリングし、余分な部分を削除して、在庫に関連する列から選択します
5.私たちの場合、カテゴリメニューはテキストで構成されており、たとえば「衣料品-1」(数字はこのカテゴリの株式数を示します)なので、このエンティティをカテゴリ、このカテゴリの株式数に分割する必要があります。 共有の数には関心がないため、Series行分割を使用して、リスト/配列を新しいPandas列に既に書き込むことができます。
6.「現在のカテゴリの名前」という値を行として、このカテゴリの共有数をタイプ「int」の数値として新しい列を作成します
7.その後、現在のカテゴリ(「現在のカテゴリ名」)でグループ化を行います。 次に、タイプに応じて、Googleアナリティクスの指標のグループ化された列(商品リストのクリック、クリック率、カウント)を平均または合計します。
また、フィルターdf_fil_ac_g ['ga:productListViews']> 1000]を適用して十分なデータを収集したリストのみを選択し、リストを並べ替えます。
その結果、メトリックとフィルターカテゴリを含む列のリストを取得します。
カテゴリはロシア語で書かれており、一部のライブラリはエンコーディングを誓うため、英語で音訳します。
8.結果は、Seabornを使用したヒットマップによって視覚化されました。その結果、次のようになりました。
X軸- フィルターカテゴリ
y軸上- フィルター付きカードの表示回数
正方形の数字- フィルターカードのCTR
結果は次のように解釈できます。
ほぼ4人に1人がフィルターを標準の「すべてのオファー」から他のフィルターに変更します。
「すべてのオファー」または「すべての特別オファー」というフィルターを持つシェアの大部分は(他のフィルターと比較して、シェアが異なります)、CTRが低くなっています。 おそらく、人々は異なる行動パターンを持っています。 靴、衣料品、またはこれらのカテゴリを1つにまとめるなどの固定された値では、データベース内のすべてではなく、ビジネスとの最初のやり取り中に商品の完全に論理的なグループの一意のプロモーションを見ることに慣れている人の精神モデルを満たす方が良いでしょう。
ただし、この記述は単なる仮説であり、検証する必要があります。 私たちのタスクのコンテキストでは、バトルでスプリットテストを実施するための提案を準備しました。デフォルトでは、各バリアントのサンドイッチストックが交互になります。