Für GA360 Kunden bietet die von Google bereitgestellte BigQuery Export Funktionalität diverse Möglichkeiten, um zum einen tiefergehende Analysen durchzuführen, die im GA Web-Interface nicht möglich sind, zum anderen hat man auch eine sehr gute Basis, um mit Hilfe der Rohdaten eine automatische Personalisierung und Optimierung der Webseite selbst umzusetzen.

Im Folgenden wird erläutert, wie man mit Hilfe der GA BigQuery Export Daten und ein paar Zeilen Python Code ein einfaches Produkt Empfehlungssystem implementieren kann. Das Empfehlungssystem nutzt hierbei die gesammelten Transaktionsdaten bzw. die Infos über gekaufte Produkte dazu, für ein gegebenes Produkt "ähnliche" Produkte auszugeben. Die Ähnlichkeit der Produkte wird hierbei mit Hilfe der Cosinus-Ähnlichkeit zwischen den Produkt-Kauf-Vektoren berechnet (ein Sparse-Vektor pro Produkt mit n Dimensionen, wobei n, die Anzahl der Nutzer darstellt, die irgendein Produkt erworben haben).

cosine similarity

Als Ausgabe erhält man zu einer gegebenen Produkt-ID die zugeordneten ähnlichen Produkt-IDs sowie jeweils eine Metrik für deren Ähnlichkeit - je größer der Wert, desto ähnlicher sind die Produkte in Bezug auf die Verkäufe. Speichert man die Daten in einer Datenbank (beispielsweise generiert auf Basis der Transaktionen der letzten 60 Tage, täglich aktualisiert), so kann man diese beispielsweise folgendermaßen nutzen:

  • Anzeige von Produktempfehlungen auf Produkt-Detail Seiten
    "Nutzer, die dieses Produkt erworben haben, kauften auch folgende Produkte"
  • Anzeige von Produktempfehlungen für Upselling im Checkout Prozess
    Hierbei kann man die Ähnlichkeiten für alle im Warenkorb befindlichen Produkte kombinieren - "Nutzer die die ausgewählten Produkt erwarben, kauften auch folgende Produkte"

from google.cloud import bigquery
import math
import os

project_id = 'my-project-id' # bigquery project id
output_filename = 'recommendation-data.csv' # output csv filename

 

# get buying userIds for each product from bigquery
print("loading data from bigquery...", end='')

buyingUserIdyByProductId = {}

bigquery_client = bigquery.Client(project='praxis-1216')

query_results = bigquery_client.run_sync_query("""
  SELECT
  hits.product.productSKU as productId,
  GROUP_CONCAT(fullVisitorId,',') AS buyerList
  FROM TABLE_DATE_RANGE([123456.ga_sessions_], DATE_ADD(CURRENT_TIMESTAMP(), -60, 'DAY'),    
  CURRENT_TIMESTAMP())

  WHERE hits.eCommerceAction.action_type = '6'
  GROUP BY productId""")

query_results.run()

page_token = None

while True:
  rows, total_rows, page_token = query_results.fetch_data(max_results=1000,page_token=page_token)

  for row in rows:
    buyingUserIdyByProductId[row[0]] = row[1].split(",")

    if not page_token:
      break

    print('.', end='')

print("done")

 

# Calculate cosine similarity for each product pair and write output csv
print('calculating cosine similarities and writing output file...', end='')

f = open(output_filename, 'w')

for productId in buyingUserIdyByProductId:
  for productId_compare in buyingUserIdyByProductId:
    if productId != productId_compare:
      similarity = 0
      for userId in buyingUserIdyByProductId[productId]:
        if userId in buyingUserIdyByProductId[productId_compare]:
          similarity += 1
      if similarity > 0:
        similarity /= math.sqrt(len(buyingUserIdyByProductId[productId])) * math.sqrt(len(buyingUserIdyByProductId[productId_compare]))
    f.write(productId + "\t" + productId_compare + "\t" + str(similarity)+ "\n")
    print('.', end='')
    f.flush()

f.flush()
f.close()

print("done")


Download Link: item-item-recommender.py