Introduction

FullStory is a popular analytics tool that, as stated by their headline, “records and reproduces real user experiences on your site helping you support customers, boost conversions, and debug faster.” The issue with it along with many others user replay and analytics tools such as Hotjar, Clicktale, and CrazyEgg is once your site reaches a sufficient scale it becomes nearly impossible to sift through thousands of slightly different user recordings to identify insights.

At Asgard we believe in the “seeing is believing” mantra but want to help you deal with the information overload problem. We’ve set out to figure out, “How can you get the most out of your user recordings with the least amount of time?” Today I wanted to share a Python script you can run on your own FullStory data to group user recordings. Let’s get started.

Exporting data from FullStory

First thing you’ll need to do is export your data. FullStory allows you to do this with the data export pack which can be added through settings. See a guide for setting up data export here: https://www.fullstory.com/resources/data-export-walkthrough/

Intuition behind grouping users

To build intuition around how user grouping works I wanted to use an analogy. Let’s consider shoppers checking out at a supermarket. Let’s observe some examples of what people buy:

Shoppers who purchase eggs, bacon, and bread Others who buy meatballs, spaghetti, and tomato sauce And yet others who buy cereal and milk

If we saw enough examples of what people are buying we might figure out the top patterns as:

Making sandwiches Making pasta Preparing breakfast

Wouldn’t it be great if we could start by knowing what people are doing and only watch examples when necessary? That’s effectively what the script I’ll be sharing lets you do. Group users based on the types of things that they do and then watch examples as necessary to understand the experience.

(If you want to read more about the algorithms involved check out Association rule learning and Apriori Wikipedia pages.)

Running the script to group users

Okay, let’s get to it. First download the JSON data dump from FullStory, which can be found under the “Data Exports” tab:

Once that’s downloaded you can read in the data using pandas:

import pandas as pd df = pd.read_json( 'DataExport.json' )

The next thing we want to do is to group the pages that a user visited:

pages = df.groupby( 'UserId' )[ 'PageUrl' ].apply(list)

We can use the fim package ( pip install fim ) to extract the frequent behavior types using Apriori:

import fim FrequentItemsets = fim.apriori(pages, supp=50)

The supp=50 specifies what is called the “support parameter”. 50 stand for 50% and means that at least 50 out of 100 people would need to have the behavior in common. 5 would mean 5%, or at least 5 out of 100 people would need to have the behavior in common.

We can now transform the dataset into a Pandas dataframe and express the behaviors in terms of percentages:

FrequentItemsets = pd.DataFrame(FrequentItemsets, columns=[ 'itemsets' , 'support' ]) FrequentItemsets[ 'support' ] = FrequentItemsets[ 'support' ] / df[ 'UserId' ].nunique()

And to see the most popular page combinations:

pd.set_option( 'display.max_colwidth' , -1 ) fi.sort_values( by = 'support' , ascending =False)

Here is the script put together.

Real world example

To show a real example I’ll be using data from a company I co-founded, AudioNotch. AudioNotch provides custom sound therapy that helps people with tinnitus (persistent ringing of the ears). How AudioNotch works is it requires users to match the pitch of the ringing that they hear with a computer-generated tone. Then they’re able to create sound therapy using the web app to provide relief to their ringing.

I’m going to set the “support parameter” to 5% which I’ve found strikes a good balance for my dataset:

FrequentItemsets = fim.apriori(pages, supp= 5 )

Note:

If the support is too high then very few behavior types will be found.

If the minimum support is too low then depending on how many users are in your dataset, the algorithm may be intractable.

For the dataset that I’m working with we see the following:

So what does this tell me?

This tells me that the majority of my user base only interacts with the tune page. I’ve empirically observed this as I know that many users use the tune page to generate a quick tone to test their hearing or test speakers. After that I see that about 7% of users then go on to visit the register page.

This information is interesting but we can take it to the next level by actually watching sessions from each group. To do that we could build up a dictionary of users per behavior type. Then for each page group (itemset) we can look up the users that exist in that page group and playback their recordings.

Conclusion

Grouping user behavior types can go a long way reducing the amount of information you have to get through to understand your users. You can identify groups that:

are just getting started

browse your content but don’t convert

fill up their shopping cart and checkout

browse your website but then exit

If you’d like to have this done for you and much more, such as organizing your user groups by conversions, understanding the major behavioral patterns and how to affect them, book a demo with us or contact us here.